00001 00029 #ifndef BASISFUNCTIONS 00030 #define BASISFUNCTIONS 00031 00032 #include "Shape.h" 00033 #include "Quadrature.h" 00034 #include "ElementGeometry.h" 00035 00036 00037 00057 class BasisFunctions 00058 { 00059 public: 00060 inline BasisFunctions() {} 00061 inline virtual ~BasisFunctions(){} 00062 inline BasisFunctions(const BasisFunctions &) {} 00063 virtual BasisFunctions * clone() const = 0; 00064 00070 virtual const std::vector<double> & getShapes() const = 0; 00071 00079 virtual const std::vector<double> & getDShapes() const = 0; 00080 00082 virtual const std::vector<double> & getIntegrationWeights() const = 0; 00083 00088 virtual const std::vector<double> & getQuadraturePointCoordinates() const = 0; 00089 00091 virtual size_t getBasisDimension() const = 0; 00092 00094 virtual size_t getNumberOfDerivativesPerFunction() const = 0; 00095 00097 virtual size_t getSpatialDimensions() const = 0; 00098 }; 00099 00100 00101 00102 00116 class EmptyBasisFunctions: public BasisFunctions 00117 { 00118 public: 00119 inline EmptyBasisFunctions() {} 00120 inline virtual ~EmptyBasisFunctions(){} 00121 inline EmptyBasisFunctions(const EmptyBasisFunctions &) {} 00122 virtual EmptyBasisFunctions * clone() const { return new EmptyBasisFunctions(*this); } 00123 00124 const std::vector<double> & getShapes() const { return ZeroSizeVector; } 00125 const std::vector<double> & getDShapes() const { return ZeroSizeVector; } 00126 const std::vector<double> & getIntegrationWeights() const { return ZeroSizeVector; } 00127 const std::vector<double> & getQuadraturePointCoordinates() const { return ZeroSizeVector; } 00128 size_t getBasisDimension() const { return 0; } 00129 size_t getNumberOfDerivativesPerFunction() const { return 0; } 00130 size_t getSpatialDimensions() const { return 0; } 00131 00132 private: 00133 static std::vector<double> ZeroSizeVector; 00134 }; 00135 00136 #endif