Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)

formula/piecewiseFormula.hh
Go to the documentation of this file.
00001 /* piecewise formula class
00002 */
00003 
00004 #ifndef piecewiseformula_hh
00005 #define piecewiseformula_hh
00006 
00007 #include "elementFormula.hh"
00008 
00009 
00010 namespace concepts {
00011 
00012 
00013   // ************************************************** PiecewiseFormulaBase **
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 } // namespace concepts
00101 
00102 #endif // piecewiseformula_hh

Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)