Go to the documentation of this file.00001
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
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
00034 template<class F>
00035 class Quad;
00036
00037 template<class F>
00038 class Edge;
00039
00040 using concepts::Real;
00041
00042
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
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
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
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 }
00150
00151 #endif // hp2dEdgeBilinearform_hh