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

hp3D/divdiv.hh
Go to the documentation of this file.
00001 /* discretization of div * div for Maxwell equations in frequency domain
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 } // namespace vectorial
00022 
00023 namespace hp3D {
00024   // forward declarations
00025   class Hexahedron;
00026 
00027   using concepts::Real;
00028 
00029   // **************************************************************** DivDiv **
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 } // namespace hp3D
00123 
00124 #endif // divdiv3D_hh

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