00001 /* Abscissas & weights for quadrature rules 00002 */ 00003 00004 #ifndef abscWght_hh 00005 #define abscWght_hh 00006 00007 #include "bemInt/exceptns.hh" 00008 #include "geometry/topology.hh" 00009 00010 namespace bem { 00011 00012 using concepts::Real; 00013 00014 extern const Real int_1_PI4; 00015 00016 // ***************************************************************** match ** 00017 00024 uint match(const concepts::Triangle& triX, const concepts::Triangle& triY); 00025 00026 // ****************************************************** GaussAbscWghtSym ** 00027 00031 class GaussAbscWghtSym { 00032 static const Real* const abswght_[8]; 00033 public: 00034 inline const Real* const operator[](uint i) const; 00035 }; 00036 00037 inline const Real* const GaussAbscWghtSym::operator[](uint i) const { 00038 if (i >= 8) throw conceptsException(NoOfIntegrationPointsToHigh()); 00039 return abswght_[i]; 00040 } 00041 00042 // ********************************************************* GaussAbscWght ** 00043 00047 class GaussAbscWght { 00048 static const Real* const abswght_[25]; 00049 public: 00050 inline const Real* const operator[](uint i) const; 00051 }; 00052 00053 inline const Real* const GaussAbscWght::operator[](uint i) const { 00054 if (i >= 25) throw conceptsException(NoOfIntegrationPointsToHigh()); 00055 return abswght_[i]; 00056 } 00057 00058 // ******************************************************** Stroud defines ** 00059 00060 #define MaxStroudAbsc 7 00061 00062 // ******************************************************** StroudAbscWght ** 00063 00068 class StroudAbscWght { 00069 static const Real* const abswght_[MaxStroudAbsc]; 00070 public: 00071 inline const Real* const operator[](uint i) const; 00072 }; 00073 00074 inline const Real* const StroudAbscWght::operator[](uint i) const { 00075 if (i >= MaxStroudAbsc) 00076 throw conceptsException(NoOfIntegrationPointsToHigh()); 00077 return abswght_[i]; 00078 } 00079 00080 // **************************************************** StroudLinTrialWght ** 00081 00084 class StroudLinTrialWght { 00085 static const Real* const abswght_[MaxStroudAbsc]; 00086 public: 00087 inline const Real* const operator[](uint i) const; 00088 }; 00089 00090 inline const Real* const StroudLinTrialWght::operator[](uint i) const { 00091 if (i >= MaxStroudAbsc) 00092 throw conceptsException(NoOfIntegrationPointsToHigh()); 00093 return abswght_[i]; 00094 } 00095 00096 } // namespace bem 00097 00098 #endif // abscWght_hh