00001 /* element formula class 00002 */ 00003 00004 #ifndef elementformula_hh 00005 #define elementformula_hh 00006 00007 #include "basics/cloneable.hh" 00008 #include "basics/outputOperator.hh" 00009 #include "basics/typedefs.hh" 00010 #include "toolbox/sharedPointer.hh" 00011 #include "space/element.hh" 00012 00013 namespace concepts { 00014 00015 00016 // ******************************************************** ElementFormula ** 00017 00028 template<typename F, typename G = typename Realtype<F>::type> 00029 class ElementFormula : public Cloneable, public OutputOperator { 00030 public: 00031 typedef F value_type; 00032 00038 virtual F operator() (const ElementWithCell<G>& elm, const Real p, 00039 const Real t = 0.0) const = 0; 00040 virtual F operator() (const ElementWithCell<G>& elm, const Real2d& p, 00041 const Real t = 0.0) const = 0; 00042 virtual F operator() (const ElementWithCell<G>& elm, const Real3d& p, 00043 const Real t = 0.0) const = 0; 00045 virtual ElementFormula<F,G>* clone() const = 0; 00046 00047 virtual ~ElementFormula() { } 00048 00049 #if 0 00050 bool operator==(const ElementFormula& other) { 00051 return id == other.id; 00052 } 00053 private: 00054 int id; 00055 static int CUR_ID; 00056 #endif 00057 }; 00058 00059 } // namespace concepts 00060 00061 #endif // elementformula_hh 00062