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

formula/vectorFormula.hh
Go to the documentation of this file.
00001 
00004 #ifndef vectorformula_hh
00005 #define vectorformula_hh
00006 
00007 #include <vector>
00008 #include "toolbox/sharedPointer.hh"
00009 #include "elementFormula.hh"
00010 
00011 namespace concepts {
00012 
00013 
00014   // ********************************************************* VectorFormula **
00015 
00020   template<typename F, int dim>
00021   class VectorFormula : public Formula< Point<F, dim> >
00022   {
00023   public:
00024     typedef Point<F, dim> value_type;
00025     typedef RCP<const concepts::Formula<F> > EntryFormulaRCP;
00026 
00027     VectorFormula<F,dim>() : formulas_() 
00028     {
00029       for(int i=0; i < dim; ++i)
00030         formulas_.push_back(EntryFormulaRCP());
00031     }
00032 
00037     VectorFormula<F,dim>(const std::vector< EntryFormulaRCP >& formulas) 
00038      : formulas_(formulas)
00039     { 
00040       conceptsAssert(formulas_.size() == dim, concepts::Assertion());
00041     }
00042 
00047     Point<F, dim> operator() (const Real p, const Real t = 0.0) const
00048     {
00049       Point<F, dim> ret;
00050       for (int i=0; i < dim; ++i) {
00051         ret[i] = formulas_[i] ? (*formulas_[i])(p, t) : F(0);
00052       }
00053       return ret;
00054     }
00055 
00056     Point<F, dim> operator() (const Real2d& p, const Real t = 0.0) const
00057     {
00058       Point<F, dim> ret;
00059       for (int i=0; i < dim; ++i) {
00060         ret[i] = formulas_[i] ? (*formulas_[i])(p, t) : F(0);
00061       }
00062       return ret;
00063     }
00064 
00065     Point<F, dim> operator() (const Real3d& p, const Real t = 0.0) const
00066     {
00067       Point<F, dim> ret;
00068       for (int i=0; i < dim; ++i) {
00069         ret[i] = formulas_[i] ? (*formulas_[i])(p, t) : F(0);
00070       }
00071       return ret;
00072     }
00073 
00075     virtual VectorFormula<F,dim>* clone() const
00076     {
00077       return new VectorFormula<F, dim>(*this);
00078     }
00079 
00080 #if 0
00081     VectorFormula<F,dim>( const VectorFormula<F,dim>& other) 
00082       : formulas_(other.formulas_)
00083     { }
00084 #endif
00085 
00086     virtual ~VectorFormula() { }
00087 
00088     const std::vector< EntryFormulaRCP >& getFormulas() 
00089     {
00090       return formulas_;
00091     }
00092 
00093     EntryFormulaRCP& operator[](int i)
00094     {
00095       conceptsAssert(i < dim, concepts::Assertion());
00096 
00097       return formulas_[i];
00098     }
00099 
00100   protected:
00101     std::vector< EntryFormulaRCP > formulas_;
00102 
00103     virtual std::ostream& info(std::ostream& os) const {
00104       os << "VectorFormula([";
00105       for (int i=0; i < dim; ++i) {
00106         if (formulas_[i])
00107           os << *formulas_[i];
00108         else
00109           os << "0";
00110         if (i < dim - 1)
00111           os << ", ";
00112       }
00113       return os << "])";
00114     }
00115   };
00116 
00117 
00118 } // namespace concepts
00119 
00120 
00121 #endif // vectorformula_hh

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