00001 /* compute mass matrix on boundary of the domain only (-> trace) 00002 */ 00003 00004 #ifndef traceMass_hh 00005 #define traceMass_hh 00006 00007 #include "operator/bilinearForm.hh" 00008 #include "basics/typedefs.hh" 00009 #include "basics/vectorsMatricesForward.hh" 00010 #include "geometry/connector.hh" 00011 00012 // forward declarations 00013 namespace concepts { 00014 template<class F> 00015 class Element; 00016 00017 template<class F> 00018 class ElementMatrix; 00019 } 00020 00021 namespace hp3D { 00022 class Hexahedron; 00023 } 00024 00025 using concepts::Real; 00026 00027 // *************************************************************** TraceMass ** 00028 00032 class TraceMass : public concepts::BilinearForm<Real> { 00033 public: 00035 TraceMass(concepts::Attribute attrib) : attrib_(attrib) {} 00036 virtual ~TraceMass(); 00037 00038 virtual void operator()(const concepts::Element<Real>& elmX, 00039 const concepts::Element<Real>& elmY, 00040 concepts::ElementMatrix<Real>& em); 00041 void operator()(const hp3D::Hexahedron& elmX, const hp3D::Hexahedron& elmY, 00042 concepts::ElementMatrix<Real>& em); 00043 virtual TraceMass* clone() const { return new TraceMass(attrib_); } 00044 protected: 00045 virtual std::ostream& info(std::ostream& os) const; 00046 private: 00048 concepts::Array<Real> jacobian_; 00049 00050 const concepts::Attribute attrib_; 00051 }; 00052 00053 #endif // traceMass_hh