Go to the documentation of this file.00001
00002
00003
00004 #ifndef divdiv2D_hh
00005 #define divdiv2D_hh
00006
00007 #include "basics/typedefs.hh"
00008 #include "basics/vectorsMatrices.hh"
00009 #include "toolbox/array.hh"
00010 #include "toolbox/resourceMonitor.hh"
00011 #include "operator/bilinearForm.hh"
00012 #include "hp2D/singularSet.hh"
00013 #include "hp2D/shortestDist.hh"
00014 #include "vectorial/vectorizable.hh"
00015 #include "maxwell.hh"
00016
00017 namespace vectorial {
00018
00019
00020 template<typename F, typename G>
00021 class BilinearForm;
00022
00023 }
00024
00025 namespace concepts {
00026
00027
00028 template<typename F>
00029 class Formula;
00030 }
00031
00032 namespace hp2D {
00033
00034 template<class F>
00035 class Quad;
00036
00037 using concepts::Real;
00038
00039
00040
00056 template<typename Weight = TrivialWeight>
00057 class DivDiv : public concepts::BilinearForm<Real>,
00058 public vectorial::Vectorizable {
00059 public:
00066 DivDiv(SingularSet& singularities, const uint i = 0, const uint j = 0,
00067 const concepts::Formula<Real>* frm = 0);
00081 DivDiv(concepts::Array<Real>& jacobian,
00082 concepts::Array<concepts::MapReal2d>& jacobianInv,
00083 const Quad<Real>** oldElm, SingularSet& singularities,
00084 const uint i = 0, const uint j = 0,
00085 const concepts::Formula<Real>* frm = 0);
00086 virtual ~DivDiv();
00087 virtual DivDiv* clone() const;
00088
00089 virtual void operator()(const concepts::Element<Real>& elmX,
00090 const concepts::Element<Real>& elmY,
00091 concepts::ElementMatrix<Real>& em);
00092 void operator()(const Quad<Real>& elmX, const Quad<Real>& elmY,
00093 concepts::ElementMatrix<Real>& em);
00094
00095 virtual void data(concepts::Cloneable* d);
00096 virtual MaxwellSharedData* data() const;
00097
00106 static void setup(vectorial::BilinearForm<Real,Real>& bf,
00107 hp2D::SingularSet& singularities,
00108 const concepts::Formula<Real>* frm = 0);
00109 protected:
00110 virtual std::ostream& info(std::ostream& os) const;
00111 private:
00113 uint i_, j_;
00114
00116 SingularSet& singularities_;
00118 Weight weight_;
00119
00121 std::auto_ptr<const concepts::Formula<Real> > frm_;
00122
00124 concepts::Array<concepts::MapReal2d> coeffMatrix_;
00125
00127
00128 concepts::Array<Real>* jacobian_;
00129 concepts::Array<concepts::MapReal2d>* jacobianInv_;
00130 const Quad<Real>** oldElm_;
00131 MaxwellSharedData* sharedData_;
00133 };
00134
00135 }
00136
00137 #endif // divdiv2D_hh