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

hp2Dedge/linearForm.hh
Go to the documentation of this file.
00001 /* Linear forms for hp 2D edgeFEM
00002  */
00003 
00004 #ifndef hp2dEdgeLinearform_hh
00005 #define hp2dEdgeLinearform_hh
00006 
00007 #include <memory>
00008 #include "basics/typedefs.hh"
00009 #include "formula/boundary.hh"
00010 #include "formula/elementFormulaContainer.hh"
00011 #include "function/linearForm.hh"
00012 #include "hp2D/formula.hh"
00013 #include "hp2Dedge/quad.hh"
00014 
00015 namespace concepts {
00016   // forward declarations
00017   template<class F>
00018   class Formula;
00019 
00020   class BoundaryConditions;
00021 
00022   template<class F>
00023   class Element;
00024 
00025   template<class F>
00026   class ElementMatrix;
00027 
00028   template<class F>
00029   class Array;
00030 }
00031 
00032 namespace hp2Dedge {
00033   // forward declarations
00034   template<class F>
00035   class Quad;
00036 
00037   using concepts::Real;
00038 
00039   // *************************************************************** Neumann **
00040 
00053   class Neumann : public concepts::Neumann<Real> {
00054   public:
00059     Neumann(const concepts::BoundaryConditions* bc);
00067     virtual void operator()(const concepts::Element<Real>& elm,
00068                             concepts::ElementMatrix<Real>& em);
00069 
00070     virtual void operator()(const Quad<Real>& elm,
00071                             concepts::ElementMatrix<Real>& em);
00072   private:
00075     virtual void part(const Edge<Real>& edge, const concepts::Boundary bd,
00076                       concepts::ElementMatrix<Real>& em);
00077   }; 
00078 
00079   // ***************************************************************** Riesz **
00080 
00092   class Riesz : public concepts::LinearForm<Real> {
00093   public:
00100     Riesz(const concepts::ElementFormulaContainer<Real> frm1,
00101           const concepts::ElementFormulaContainer<Real> frm2,
00102           const concepts::BoundaryConditions* bc = 0);
00103     Riesz(const concepts::ElementFormulaContainer<concepts::Real2d> frm,
00104           const concepts::BoundaryConditions* bc = 0);
00105     virtual ~Riesz();
00106 
00114     void operator()(const concepts::Element<Real>& elm,
00115                     concepts::ElementMatrix<Real>& em);
00116     void operator()(const Quad<Real>& elm, concepts::ElementMatrix<Real>& em);
00117   protected:
00118     virtual std::ostream& info(std::ostream& os) const;
00119   private:
00121     concepts::ElementFormulaContainer<concepts::Real2d> frm_;
00123     concepts::Array<Real> tmp_;
00125     Neumann neumann_;
00126   };
00127 
00128   // ************************************************************* EdgeRiesz **
00129 
00145   class EdgeRiesz : public concepts::LinearForm<Real> {
00146   public:
00151     EdgeRiesz(const concepts::Boundary& bd); 
00152     virtual ~EdgeRiesz();
00153 
00161     void operator()(const concepts::Element<Real>& elm,
00162                     concepts::ElementMatrix<Real>& em);
00163     void operator()(const Edge<Real>& elm, concepts::ElementMatrix<Real>& em);
00164   protected:
00165     virtual std::ostream& info(std::ostream& os) const;
00166   private:
00168     const concepts::Boundary bd_;
00169   };
00170 
00171 } // namespace hp2Dedge
00172 
00173 #endif // hp2dEdgeLinearform_hh

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