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

hp2D/rotrot.hh
Go to the documentation of this file.
00001 /* discretization of rot * rot for Maxwell equations in frequency domain
00002  */
00003 
00004 #ifndef rotrot2D_hh
00005 #define rotrot2D_hh
00006 
00007 #include "basics/typedefs.hh"
00008 #include "basics/vectorsMatrices.hh"
00009 #include "toolbox/array.hh"
00010 #include "operator/bilinearForm.hh"
00011 #include "toolbox/resourceMonitor.hh"
00012 #include "vectorial/vectorizable.hh"
00013 #include "maxwell.hh"
00014 
00015 namespace vectorial {
00016   template<typename F, typename G>
00017   class BilinearForm;
00018 } // namespace vectorial
00019 
00020 namespace hp2D {
00021   // forward declarations
00022   template<class F>
00023   class Quad;
00024 
00025   using concepts::Real;
00026 
00027   // **************************************************************** RotRot **
00028 
00039   class RotRot : public concepts::BilinearForm<Real>,
00040      public vectorial::Vectorizable {
00041   public:
00043     RotRot(const uint i = 0, const uint j = 0) :
00044       i_(i), j_(j), coeffMatrix_(0), jacobian_(0),
00045       jacobianInv_(0), oldElm_(0), sharedData_(0) {}
00047     RotRot(concepts::Array<Real>& jacobian,
00048      concepts::Array<concepts::MapReal2d>& jacobianInv,
00049      const Quad<Real>** oldElm, const uint i = 0, const uint j = 0) :
00050       i_(i), j_(j), coeffMatrix_(0), jacobian_(&jacobian),
00051       jacobianInv_(&jacobianInv), oldElm_(oldElm), sharedData_(0) {}
00052 
00053     virtual ~RotRot();
00054     virtual RotRot* clone() const;
00055 
00056     virtual void operator()(const concepts::Element<Real>& elmX,
00057           const concepts::Element<Real>& elmY, 
00058           concepts::ElementMatrix<Real>& em); 
00059     void operator()(const Quad<Real>& elmX, const Quad<Real>& elmY, 
00060         concepts::ElementMatrix<Real>& em);
00061 
00062     virtual void data(concepts::Cloneable* d);
00063     virtual MaxwellSharedData* data() const;
00064 
00070     static void setup(vectorial::BilinearForm<Real,Real>& bf);
00071   protected:
00072     virtual std::ostream& info(std::ostream& os) const;
00073   private:
00075     uint i_, j_;
00076 
00078     concepts::Array<concepts::MapReal2d> coeffMatrix_;
00079 
00081 
00082     concepts::Array<Real>* jacobian_;
00083     concepts::Array<concepts::MapReal2d>* jacobianInv_;
00084     const Quad<Real>** oldElm_;
00085     MaxwellSharedData* sharedData_;
00087   };
00088 
00089 } // namespace hp2D
00090 
00091 #endif // rotrot2D_hh

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