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

hp2D/bf_partialderiv.hh
Go to the documentation of this file.
00001 
00006 #ifndef hp2dbf_partialderiv_hh
00007 #define hp2dbf_partialderiv_hh
00008 
00009 #include <memory>
00010 #include "operator/bilinearForm.hh"
00011 #include "basics/typedefs.hh"
00012 #include "geometry/sharedJacobian.hh"
00013 #include "hp2D/bilinearFormHelper.hh"
00014 #include "arrayElementFormula.hh"
00015 
00016 
00017 namespace concepts {
00018   // forward declarations
00019   template<class F>
00020   class Array;
00021 
00022   template<class F, int dim>
00023   class Point;
00024 
00025   template<class F>
00026   class Element;
00027 
00028   template<class F>
00029   class ElementMatrix;
00030 
00031   template<typename F, typename G>
00032   class ElementFormula;
00033 }
00034 
00035 namespace vectorial {
00036   // forward declarations
00037   template<class F, class G>
00038   class BilinearForm;
00039 }
00040 
00041 namespace hp2D {
00042   // forward declarations
00043   template<class F>
00044   class Quad;
00045 
00046   class InfiniteLaguerreQuad;
00047 
00048   using concepts::Real;
00049 
00050 
00051   // ********************************************************* partDerivType **
00052 
00059   enum partDerivType { NO_DERIV = 0, X_DERIV = 1, Y_DERIV = 2};
00060 
00061   // ********************************************** BilinearFormOnePartDeriv **
00062 
00084   template<class F = Real>
00085   class BilinearFormOnePartDeriv : public concepts::BilinearForm<F>,
00086                                    public BilinearFormHelper_0_1_Part<F>
00087   {
00088   public:
00094     BilinearFormOnePartDeriv(const enum partDerivType i,
00095                              const concepts::ElementFormulaContainer<F> 
00096                              frm = concepts::ElementFormulaContainer<F>());
00097 
00098     virtual ~BilinearFormOnePartDeriv() {}
00099 
00100     virtual BilinearFormOnePartDeriv<F>* clone() const { 
00101       return new BilinearFormOnePartDeriv<F>(i_, this->frm_);
00102     }
00103 
00104     virtual void operator()(const concepts::Element<Real>& elmX,
00105                             const concepts::Element<Real>& elmY, 
00106                             concepts::ElementMatrix<F>& em); 
00107 
00108   protected:
00109     virtual std::ostream& info(std::ostream& os) const;
00110   private:
00112     const enum partDerivType i_;
00113 
00115     concepts::ElementMatrix<Real> stiff1D_, mass1D_;
00116 
00118     bool operator()(const hp2D::Quad<Real>* elmX, 
00119                     const hp2D::Quad<Real>* elmY, 
00120                     concepts::ElementMatrix<F>& em);
00121 
00122     bool operator()(const InfiniteLaguerreQuad* elmX,
00123                     const InfiniteLaguerreQuad* elmY, 
00124                     concepts::ElementMatrix<F>& em);
00125   };
00126 
00127   // ********************************************** BilinearFormTwoPartDeriv **
00128 
00150   template<class F = Real>
00151   class BilinearFormTwoPartDeriv : public concepts::BilinearForm<F>,
00152                                    public BilinearFormHelper_1_1<F>
00153   {
00154   public:
00161     BilinearFormTwoPartDeriv(const enum partDerivType i,
00162                              const enum partDerivType j,
00163                              const concepts::ElementFormulaContainer<F> 
00164                              frm = concepts::ElementFormulaContainer<F>());
00165 
00166     virtual ~BilinearFormTwoPartDeriv() {}
00167 
00168     virtual BilinearFormTwoPartDeriv<F>* clone() const { 
00169       return new BilinearFormTwoPartDeriv<F>(i_, j_, this->frm_);
00170     }
00171 
00172     virtual void operator()(const concepts::Element<Real>& elmX,
00173                             const concepts::Element<Real>& elmY, 
00174                             concepts::ElementMatrix<F>& em); 
00175 
00176   protected:
00177     virtual std::ostream& info(std::ostream& os) const;
00178   private:
00180     const enum partDerivType i_, j_;
00181 
00183     bool operator()(const Quad<Real>* elmX, 
00184                     const Quad<Real>* elmY, 
00185                     concepts::ElementMatrix<F>& em);
00186   };
00187 
00188 } // namespace hp2D
00189 
00190 #endif // hp2dbf_partialderiv_hh

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