00001 #ifndef QUADRATUREFAMILYBASE_H 00002 #define QUADRATUREFAMILYBASE_H 00003 00004 #include "SundanceDefs.h" 00005 #include "QuadraturePoints.h" 00006 #include "CellType.h" 00007 #include "XMLObject.h" 00008 #include <string> 00009 00010 00011 namespace Sundance 00012 { 00013 00014 using namespace TSF; 00015 using std::string; 00016 00017 using std::ostream; 00018 00019 class QuadratureFamily; 00020 00021 /** \ingroup LowLevelFE 00022 * Base class for geometry-independent quadrature rules. 00023 */ 00024 class QuadratureFamilyBase 00025 { 00026 public: 00027 /** */ 00028 QuadratureFamilyBase(const string& typeName, int polyOrder); 00029 /** */ 00030 virtual ~QuadratureFamilyBase(){;} 00031 00032 /** produce quadrature points for a specified cell type */ 00033 QuadraturePoints buildQuadraturePoints(CellTopologyCode cellType) const ; 00034 00035 /** return the polynomial order of the rule */ 00036 virtual int polyOrder() const {return polyOrder_;} 00037 00038 /** return the name of the derived type */ 00039 virtual const string& typeName() const = 0 ; 00040 00041 /** write as an XML object */ 00042 virtual XMLObject toXML() const ; 00043 00044 /** get a hash code */ 00045 virtual int hashCode() const {return hashCode_;} 00046 protected: 00047 /** compute a rule for the reference point cell */ 00048 virtual QuadraturePoints getPointRule() const ; 00049 00050 /** compute a rule for the reference line cell */ 00051 virtual QuadraturePoints getLineRule() const ; 00052 00053 /** compute a rule for the reference triangle cell */ 00054 virtual QuadraturePoints getTriangleRule() const ; 00055 00056 /** compute a rule for the reference quad cell */ 00057 virtual QuadraturePoints getQuadRule() const ; 00058 00059 /** compute a rule for the reference tet cell */ 00060 virtual QuadraturePoints getTetRule() const ; 00061 00062 /** compute a rule for the reference hex cell */ 00063 virtual QuadraturePoints getBrickRule() const ; 00064 00065 /* maximum-order polynomial that can 00066 * be integrated exactly by this rule */ 00067 int polyOrder_; 00068 00069 /* a hash code */ 00070 int hashCode_; 00071 }; 00072 00073 } 00074 #endif 00075 00076