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

hp2D/divdiv.hh
Go to the documentation of this file.
00001 /* discretization of div * div for Maxwell equations in frequency domain
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   // forward declaration
00020   template<typename F, typename G>
00021   class BilinearForm;
00022 
00023 } // namespace vectorial
00024 
00025 namespace concepts {
00026 
00027   // forward declaration
00028   template<typename F>
00029   class Formula;
00030 }
00031 
00032 namespace hp2D {
00033   // forward declarations
00034   template<class F>
00035   class Quad;
00036 
00037   using concepts::Real;
00038 
00039   // **************************************************************** DivDiv **
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 } // namespace hp2D
00136 
00137 #endif // divdiv2D_hh

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