Go to the documentation of this file.00001
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
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
00034 template<class F>
00035 class Quad;
00036
00037 using concepts::Real;
00038
00039
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
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
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 }
00172
00173 #endif // hp2dEdgeLinearform_hh