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

hp1D/function.hh
Go to the documentation of this file.
00001 /* Functions on space with hp elements in 1D
00002  */
00003 
00004 #ifndef hpFunction1d_hh
00005 #define hpFunction1d_hh
00006 
00007 #include "basics/typedefs.hh"
00008 #include "toolbox/array.hh"
00009 #include "space/function.hh"
00010 #include "element.hh"
00011 
00012 namespace hp1D {
00013 
00014   using concepts::Real;
00015 
00016   // ***************************************************************** Value **
00017 
00022   template<typename F = Real,
00023            typename G = typename concepts::Realtype<F>::type>
00024   class Value : public concepts::ElementFunction<F, G> {
00025   public:
00027     virtual uint n() const { return 1; }
00028 
00029     virtual void operator() (const concepts::Element<G>& elm,
00030                              const concepts::Array<F>& coeff,
00031                              concepts::Array<F>& val, const uint *i) const;
00032     virtual void operator() (const concepts::Element<G>& elm, const uint* j,
00033                              concepts::Array<F>& val, const uint* i) const;
00034     virtual void operator() (const concepts::Element<G>& elm,
00035                              const concepts::Array<F>& coeff,
00036                              concepts::Array<F>& val, const Real p, 
00037                              const Real t = 0.0) const;
00038     virtual void operator() (const concepts::Element<G>& elm,
00039                              const concepts::Array<F>& coeff,
00040                              concepts::Array<F>& val, const concepts::Real2d& p,
00041                              const Real t = 0.0) const;
00042     virtual void operator() (const concepts::Element<G>& elm,
00043                              const concepts::Array<F>& coeff,
00044                              concepts::Array<F>& val, const concepts::Real3d& p,
00045                              const Real t = 0.0) const;
00046 
00047     virtual Value<F,G>* clone() const { 
00048       return new Value();
00049     }
00050   protected:
00051     virtual std::ostream& info(std::ostream& os) const;
00052   private:
00053     bool compute_(const hp1D::Element<G>* elm,
00054                   const concepts::Array<F>& coeff,
00055                   F& val, const uint i) const;
00056     bool compute_(const hp1D::Element<G>* elm, const uint j,
00057                   F& val, const uint i) const;
00058     bool compute_(const hp1D::Element<G>* elm,
00059                   const concepts::Array<F>& coeff,
00060                   F& val, const Real p, const Real t = 0.0) const;
00061   };
00062 
00063   // ****************************************************************** Grad **
00064 
00069   template<typename F = Real,
00070            typename G = typename concepts::Realtype<F>::type>
00071   class Grad : public concepts::ElementFunction<F, G> {
00072   public:
00074     virtual uint n() const { return 1; }
00075 
00076     virtual void operator() (const concepts::Element<G>& elm,
00077                              const concepts::Array<F>& coeff,
00078                              concepts::Array<F>& val, const uint *i) const;
00079     virtual void operator() (const concepts::Element<G>& elm, const uint* j,
00080                              concepts::Array<F>& val, const uint* i) const;
00081     virtual void operator() (const concepts::Element<G>& elm,
00082                              const concepts::Array<F>& coeff,
00083                              concepts::Array<F>& val, const Real p, 
00084                              const Real t = 0.0) const;
00085     virtual void operator() (const concepts::Element<G>& elm,
00086                              const concepts::Array<F>& coeff,
00087                              concepts::Array<F>& val, const concepts::Real2d& p,
00088                              const Real t = 0.0) const;
00089     virtual void operator() (const concepts::Element<G>& elm,
00090                              const concepts::Array<F>& coeff,
00091                              concepts::Array<F>& val, const concepts::Real3d& p,
00092                              const Real t = 0.0) const;
00093 
00094     virtual Grad<F,G>* clone() const { 
00095       return new Grad();
00096     }
00097   protected:
00098     virtual std::ostream& info(std::ostream& os) const;
00099   private:
00100     bool compute_(const hp1D::Element<G>* elm,
00101                   const concepts::Array<F>& coeff,
00102                   F& val, const uint i) const;
00103     bool compute_(const hp1D::Element<G>* elm, const uint j,
00104                   F& val, const uint i) const;
00105     bool compute_(const hp1D::Element<G>* elm,
00106                   const concepts::Array<F>& coeff,
00107                   F& val, const Real p, const Real t = 0.0) const;
00108   };
00109 
00110 } // namespace hp1D
00111 
00112 #endif // hpFunction1d_hh

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