00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00036 #ifndef INTREPID_ORTHOGONALBASES_HPP
00037 #define INTREPID_ORTHGONALBASES_HPP
00038
00039 #include "Intrepid_ConfigDefs.hpp"
00040 #include "Intrepid_Types.hpp"
00041 #include "Intrepid_Utils.hpp"
00042 #include "Teuchos_Array.hpp"
00043 #include "Teuchos_RCP.hpp"
00044 #include "Teuchos_BLAS.hpp"
00045 #include "Teuchos_oblackholestream.hpp"
00046 #include "Teuchos_TestForException.hpp"
00047
00048 namespace Intrepid {
00049
00067 class OrthogonalBases {
00068 public:
00069 OrthogonalBases() {;}
00070 ~OrthogonalBases() {;}
00071
00084 template<class Scalar, class ScalarArray1, class ScalarArray2>
00085 static void tabulateTriangle( const ScalarArray1& z ,
00086 const int n ,
00087 ScalarArray2 & poly_val );
00088
00101 template<class Scalar, class ScalarArray1, class ScalarArray2>
00102 static void tabulateTetrahedron( const ScalarArray1& z ,
00103 const int n ,
00104 ScalarArray2 & poly_val );
00105
00106 private:
00113 template<class Scalar>
00114 static void jrc( const Scalar &alpha , const Scalar &beta , const int &n ,
00115 Scalar &an , Scalar &bn, Scalar &cn );
00116
00119 static inline int idxtri(int p, int q)
00120 {
00121 return (p+q)*(p+q+1)/2+q;
00122 }
00123
00126 static inline int idxtet(int p, int q, int r)
00127 {
00128 return (p+q+r)*(p+q+r+1)*(p+q+r+2)/6+(q+r)*(q+r+1)/2+r;
00129 }
00130
00131
00132 };
00133 }
00134
00135 #include "Intrepid_OrthogonalBasesDef.hpp"
00136
00137 #endif
00138
00139
00140
00141
00142
00143