00001 00029 #ifndef QUADRATURE 00030 #define QUADRATURE 00031 #include <algorithm> 00032 00078 class Quadrature 00079 { 00080 public: 00089 Quadrature(const double * const xqdat, 00090 const double * const wqdat, 00091 const size_t NC, 00092 const size_t NQ); 00102 Quadrature(const double * const xqdatmap, 00103 const double * const xqdatshape, 00104 const double * const wqdat, 00105 const size_t NCmap, 00106 const size_t NCshape, 00107 const size_t NQ); 00108 inline virtual ~Quadrature() { 00109 if(xqmap!=xqshape) { 00110 delete[] xqshape; xqshape = NULL; 00111 } 00112 delete[] xqmap; xqmap = NULL; 00113 delete[] wq; wq = NULL; 00114 } 00115 00116 Quadrature(const Quadrature &); 00117 Quadrature * clone() const; 00118 00119 // Accessors/Mutators 00120 inline size_t getNumQuadraturePoints() const { return numQuadraturePoints; } 00121 00123 inline size_t getNumCoordinates() const { return numMapCoordinates; } 00124 00126 inline size_t getNumShapeCoordinates() const { return numShapeCoordinates; } 00127 00129 inline const double * getQuadraturePoint(size_t q) const 00130 { return xqmap+q*numMapCoordinates; } 00131 00133 inline const double * getQuadraturePointShape(size_t q) const { return xqshape+q*numShapeCoordinates; } 00134 00136 inline const double getQuadratureWeights(size_t q) const { return wq[q]; } 00137 00138 private: 00139 double * xqmap; 00140 double * xqshape; 00141 double * wq; 00142 size_t numMapCoordinates; 00143 size_t numShapeCoordinates; 00144 size_t numQuadraturePoints; 00145 }; 00146 00147 00148 00153 class SpecificQuadratures {}; 00154 00159 class Triangle_1: public SpecificQuadratures 00160 { 00161 public: 00163 static const Quadrature * const Bulk; 00164 00166 static const Quadrature * const FaceOne; 00168 static const Quadrature * const FaceTwo; 00170 static const Quadrature * const FaceThree; 00171 00172 private: 00173 static const double BulkCoordinates[]; 00174 static const double BulkWeights[]; 00175 static const double FaceMapCoordinates[]; 00176 static const double FaceOneShapeCoordinates[]; 00177 static const double FaceOneWeights[]; 00178 static const double FaceTwoShapeCoordinates[]; 00179 static const double FaceTwoWeights[]; 00180 static const double FaceThreeShapeCoordinates[]; 00181 static const double FaceThreeWeights[]; 00182 }; 00183 00184 00185 00186 00191 class Line_1: public SpecificQuadratures 00192 { 00193 public: 00195 static const Quadrature * const Bulk; 00196 00197 private: 00198 static const double BulkCoordinates[]; 00199 static const double BulkWeights[]; 00200 }; 00201 00202 00203 00204 00224 class Tet_1: public SpecificQuadratures 00225 { 00226 public: 00228 static const Quadrature * const Bulk; 00229 00231 static const Quadrature * const FaceOne; 00233 static const Quadrature * const FaceTwo; 00235 static const Quadrature * const FaceThree; 00237 static const Quadrature * const FaceFour; 00238 00239 private: 00240 static const double BulkCoordinates[]; 00241 static const double BulkWeights[]; 00242 static const double FaceMapCoordinates[]; 00243 static const double FaceOneShapeCoordinates[]; 00244 static const double FaceOneWeights[]; 00245 static const double FaceTwoShapeCoordinates[]; 00246 static const double FaceTwoWeights[]; 00247 static const double FaceThreeShapeCoordinates[]; 00248 static const double FaceThreeWeights[]; 00249 static const double FaceFourShapeCoordinates[]; 00250 static const double FaceFourWeights[]; 00251 }; 00252 00253 00254 #endif