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

hp2Dedge/bilinearForm.hh
Go to the documentation of this file.
00001 /* Bilinear forms for hp 2D edgeFEM
00002  */
00003 
00004 #ifndef hp2dEdgeBilinearform_hh
00005 #define hp2dEdgeBilinearform_hh
00006 
00007 #include <memory>
00008 #include "operator/bilinearForm.hh"
00009 #include "basics/typedefs.hh"
00010 #include "basics/vectorsMatricesForward.hh"
00011 #include "formula/elementFormula.hh"
00012 #include "formula/boundary.hh"
00013 #include "geometry/sharedJacobian.hh"
00014 #include "hp2D/formula.hh"
00015 #include "hp2D/bilinearFormHelper.hh"
00016 
00017 namespace concepts {
00018   // forward declarations
00019   template<class F>
00020   class Element;
00021 
00022   template<class F>
00023   class ElementMatrix;
00024 
00025   template<class F>
00026   class Array;
00027 
00028   template<class F>
00029   class RCP;
00030 }
00031 
00032 namespace hp2Dedge {
00033   // forward declarations
00034   template<class F>
00035   class Quad;
00036 
00037   template<class F>
00038   class Edge;
00039 
00040   using concepts::Real;
00041 
00042   // ************************************************************** RotRot **
00043 
00049   class RotRot : public concepts::BilinearForm<Real>, 
00050                  public hp2D::BilinearFormHelper_2_2<Real> {
00051   public:
00053     RotRot(const concepts::ElementFormulaContainer<Real> 
00054            frm = concepts::ElementFormulaContainer<Real>());
00055     virtual ~RotRot() {}
00056     virtual RotRot* clone() const { return new RotRot(frm_); }
00057     void operator()(const concepts::Element<Real>& elmX,
00058                     const concepts::Element<Real>& elmY, 
00059                     concepts::ElementMatrix<Real>& em); 
00060     void operator()(const Quad<Real>& elmX, const Quad<Real>& elmY,
00061                     concepts::ElementMatrix<Real>& em);
00062   protected:
00063     virtual std::ostream& info(std::ostream& os) const;
00064   };
00065 
00066   // ************************************************************** Identity **
00067 
00072   class Identity : public concepts::BilinearForm<Real>, 
00073                    public hp2D::BilinearFormHelper_1_1<Real> {
00074   public:
00076     Identity(const concepts::ElementFormulaContainer<Real> 
00077              frm = concepts::ElementFormulaContainer<Real>());
00078     virtual ~Identity() {}
00079     virtual Identity* clone() const { return new Identity(frm_); }
00080     void operator()(const concepts::Element<Real>& elmX,
00081         const concepts::Element<Real>& elmY, 
00082         concepts::ElementMatrix<Real>& em); 
00083     void operator()(const Quad<Real>& elmX, const Quad<Real>& elmY,
00084         concepts::ElementMatrix<Real>& em);
00085   protected:
00086     virtual std::ostream& info(std::ostream& os) const;
00087   };
00088 
00089   // *************************************************************** Graduv **
00090 
00097   class Graduv : public concepts::BilinearForm<Real>, 
00098                  public hp2D::BilinearFormHelper_1_1<Real> {
00099   public:
00100     Graduv(const concepts::ElementFormulaContainer<Real> 
00101            frm = concepts::ElementFormulaContainer<Real>());
00102     virtual ~Graduv() {}
00103     void operator()(const concepts::Element<Real>& elmX,
00104                     const concepts::Element<Real>& elmY, 
00105                     concepts::ElementMatrix<Real>& em); 
00106     void operator()(const hp2D::Quad<Real>& elmX, const Quad<Real>& elmY,
00107                     concepts::ElementMatrix<Real>& em);
00108     virtual Graduv* clone() const { return new Graduv(); }
00109   protected:
00110     virtual std::ostream& info(std::ostream& os) const;
00111   private:
00113     concepts::Array<Real> factor_;
00114     concepts::Array<concepts::MapReal2d> jacobianInv_;
00115   };
00116 
00117   // ********************************************************** EdgeIdentity **
00118 
00129   class EdgeIdentity : public concepts::BilinearForm<Real> {
00130   public:
00139     void operator()(const concepts::Element<Real>& elmX,
00140                     const concepts::Element<Real>& elmY, 
00141                     concepts::ElementMatrix<Real>& em);
00142     void operator()(const Edge<Real>& elmX, const Edge<Real>& elmY, 
00143                     concepts::ElementMatrix<Real>& em);
00144     virtual EdgeIdentity* clone() const { return new EdgeIdentity(); }
00145   protected:
00146     virtual std::ostream& info(std::ostream& os) const;
00147   }; 
00148 
00149 } // namespace hp2Dedge
00150 
00151 #endif // hp2dEdgeBilinearform_hh

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