Go to the documentation of this file.00001
00002
00003
00004 #ifndef piecewiseformula_hh
00005 #define piecewiseformula_hh
00006
00007 #include "elementFormula.hh"
00008
00009
00010 namespace concepts {
00011
00012
00013
00014
00036 template<typename F>
00037 class PiecewiseFormulaBase :
00038 public ElementFormula<F, typename concepts::Realtype<F>::type> {
00039 public:
00040 typedef typename concepts::Realtype<F>::type G;
00041
00043 PiecewiseFormulaBase(const F dflt_value = (F)0);
00044 virtual ~PiecewiseFormulaBase();
00045 virtual PiecewiseFormulaBase<F>* clone() const = 0;
00046
00047 virtual F operator()(const ElementWithCell<G>& elm, const Real p,
00048 const Real t = 0.0) const
00049 {
00050 return operator()(elm.cell().connector(), elm.elemMap(p), t);
00051 }
00052 virtual F operator()(const ElementWithCell<G>& elm, const Real2d& p,
00053 const Real t = 0.0) const
00054 {
00055 return operator()(elm.cell().connector(), elm.elemMap(p), t);
00056 }
00057
00058 virtual F operator()(const ElementWithCell<G>& elm, const Real3d& p,
00059 const Real t = 0.0) const
00060 {
00061 return operator()(elm.cell().connector(), elm.elemMap(p), t);
00062 }
00063
00069 virtual F operator()(const Connector& cntr, const Real p,
00070 const Real t = 0.0) const = 0;
00071 virtual F operator()(const Connector& cntr, const Real2d& p,
00072 const Real t = 0.0) const = 0;
00073 virtual F operator()(const Connector& cntr, const Real3d& p,
00074 const Real t = 0.0) const = 0;
00076 inline virtual const F& dflt_value() const { return dflt_value_;}
00078 inline virtual F& dflt_value() { return dflt_value_;}
00079 protected:
00080 virtual std::ostream& info(std::ostream& os) const;
00081 private:
00083 F dflt_value_;
00084 };
00085
00086 template<typename F>
00087 PiecewiseFormulaBase<F>::PiecewiseFormulaBase(const F dflt_value) :
00088 dflt_value_(dflt_value) {
00089 }
00090
00091 template<typename F>
00092 PiecewiseFormulaBase<F>::~PiecewiseFormulaBase() {}
00093
00094 template<typename F>
00095 std::ostream& PiecewiseFormulaBase<F>::info(std::ostream& os) const {
00096 os << "PiecewiseFormulaBase(default value = " << dflt_value() << ")";
00097 return os;
00098 }
00099
00100 }
00101
00102 #endif // piecewiseformula_hh