Go to the documentation of this file.00001
00002
00003
00004 #ifndef divdiv3D_hh
00005 #define divdiv3D_hh
00006
00007 #include "basics/typedefs.hh"
00008 #include "basics/vectorsMatrices.hh"
00009 #include "basics/cloneable.hh"
00010 #include "toolbox/array.hh"
00011 #include "formula/formula.hh"
00012 #include "operator/bilinearForm.hh"
00013 #include "hp3D/singularSet.hh"
00014 #include "hp3D/shortestDist.hh"
00015 #include "vectorial/vectorizable.hh"
00016 #include "maxwell.hh"
00017
00018 namespace vectorial {
00019 template<typename F, typename G>
00020 class BilinearForm;
00021 }
00022
00023 namespace hp3D {
00024
00025 class Hexahedron;
00026
00027 using concepts::Real;
00028
00029
00030
00043 template<class Weight = TrivialWeight>
00044 class DivDiv : public concepts::BilinearForm<Real>,
00045 public vectorial::Vectorizable {
00046 public:
00053 DivDiv(SingularSet& singularities, const uint i = 0, const uint j = 0,
00054 const concepts::Formula<Real>* frm = 0);
00068 DivDiv(concepts::Array<Real>& jacobian,
00069 concepts::Array<concepts::MapReal3d>& jacobianInv,
00070 const Hexahedron** oldElm, SingularSet& singularities,
00071 const uint i = 0, const uint j = 0,
00072 const concepts::Formula<Real>* frm = 0);
00073 virtual ~DivDiv();
00074 virtual DivDiv* clone() const;
00075
00076 virtual void operator()(const concepts::Element<Real>& elmX,
00077 const concepts::Element<Real>& elmY,
00078 concepts::ElementMatrix<Real>& em);
00079 void operator()(const Hexahedron& elmX, const Hexahedron& elmY,
00080 concepts::ElementMatrix<Real>& em);
00081
00082 virtual void data(concepts::Cloneable* d);
00083 virtual MaxwellSharedData* data() const;
00084
00093 static void setup(vectorial::BilinearForm<Real,Real>& bf,
00094 hp3D::SingularSet& singularities,
00095 const concepts::Formula<Real>* frm = 0);
00096 protected:
00097 virtual std::ostream& info(std::ostream& os) const;
00098 private:
00100 uint i_, j_;
00101
00103 SingularSet& singularities_;
00105 Weight weight_;
00106
00108 std::auto_ptr<const concepts::Formula<Real> > frm_;
00109
00111 concepts::Array<concepts::MapReal3d> coeffMatrix_;
00112
00114
00115 concepts::Array<Real>* jacobian_;
00116 concepts::Array<concepts::MapReal3d>* jacobianInv_;
00117 const Hexahedron** oldElm_;
00118 MaxwellSharedData* sharedData_;
00120 };
00121
00122 }
00123
00124 #endif // divdiv3D_hh