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

hp1D/bilinearForm.hh
Go to the documentation of this file.
00001 /* Bilinear forms for hp 1D FEM
00002  */
00003 
00004 #ifndef bilinearform1D_hh
00005 #define bilinearform1D_hh
00006 
00007 #include "basics/typedefs.hh"
00008 #include "basics/vectorsMatricesForward.hh"
00009 #include "operator/bilinearForm.hh"
00010 #include "formula.hh"
00011 
00012 namespace concepts {
00013   // forward declarations
00014   template<class F>
00015   class Element;
00016 
00017   template<class F>
00018   class ElementMatrix;
00019 
00020   template<class F>
00021   class Array;
00022 }
00023 
00024 namespace hp1D {
00025 
00026   using concepts::Real;
00027 
00028   // *************************************************************** Laplace **
00029 
00034   template<class F = Real>
00035   class Laplace : public concepts::BilinearForm<F,Real>,
00036                   public BilinearFormHelper<1,1,F> {
00037   public:
00041     Laplace(const concepts::ElementFormulaContainer<F> 
00042             frm = concepts::ElementFormulaContainer<F>()) 
00043       : BilinearFormHelper<1,1,F>(frm)
00044     { }
00045     virtual ~Laplace();
00046 
00047     void operator()(const concepts::Element<Real>& elmX,
00048                     const concepts::Element<Real>& elmY, 
00049                     concepts::ElementMatrix<F>& em);
00050     virtual Laplace<F>* clone() const { return new Laplace<F>(this->frm_); }
00051   protected:
00052     virtual std::ostream& info(std::ostream& os) const;
00053   };
00054 
00055   // ************************************************************** Identity **
00056 
00060   template<class F = Real>
00061   class Identity : public concepts::BilinearForm<F,Real>,
00062                    public BilinearFormHelper<0,0,F> {
00063   public:
00065     Identity(const concepts::ElementFormulaContainer<F> 
00066              frm = concepts::ElementFormulaContainer<F>());
00067     virtual ~Identity();
00068 
00069     void operator()(const concepts::Element<Real>& elmX,
00070                     const concepts::Element<Real>& elmY, 
00071                     concepts::ElementMatrix<F>& em);
00072     virtual Identity<F>* clone() const;
00073   protected:
00074     virtual std::ostream& info(std::ostream& os) const;
00075   private:
00076   };
00077 
00078   // ****************************************************** IdentityParallel **
00079 
00090   template<class F = Real>
00091   class IdentityParallel : public concepts::BilinearForm<F,Real>,
00092                            public BilinearFormHelper<0,0,F> {
00093   public:
00101     IdentityParallel(const concepts::ElementFormulaContainer<F> 
00102                      frm = concepts::ElementFormulaContainer<F>(),
00103                      const concepts::Real3d
00104                      shiftX = concepts::Real3d(),
00105                      const concepts::Real3d
00106                      shiftY = concepts::Real3d(),
00107                      const bool negShift = false
00108                     );
00109     virtual ~IdentityParallel();
00110 
00111     void operator()(const concepts::Element<Real>& elmX,
00112                     const concepts::Element<Real>& elmY, 
00113                     concepts::ElementMatrix<F>& em);
00114     virtual IdentityParallel<F>* clone() const;
00115   protected:
00116     virtual std::ostream& info(std::ostream& os) const;
00117   private:
00118     const concepts::Point<Real,3> shiftX_;
00119     const concepts::Point<Real,3> shiftY_;
00120     const bool negShift_;
00121   };
00122   
00123 } // namespace hp1D
00124 
00125 #endif // bilinearform1D_hh

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