00001 /* Linear forms for hp 3D FEM 00002 */ 00003 00004 #ifndef hp3dlinearform_hh 00005 #define hp3dlinearform_hh 00006 00007 #include <memory> 00008 #include "function/linearForm.hh" 00009 #include "basics/typedefs.hh" 00010 00011 namespace concepts { 00012 // forward declarations 00013 template<class F> 00014 class Formula; 00015 00016 class BoundaryConditions; 00017 00018 template<class F> 00019 class Element; 00020 00021 template<class F> 00022 class ElementMatrix; 00023 00024 template<class F> 00025 class Array; 00026 } 00027 00028 namespace hp3D { 00029 // forward declarations 00030 class Hexahedron; 00031 00032 using concepts::Real; 00033 00034 // ***************************************************************** Riesz ** 00035 00043 class Riesz : public concepts::LinearForm<Real> { 00044 public: 00049 Riesz(const concepts::Formula<Real>& frm, 00050 concepts::BoundaryConditions* bc = 0); 00051 virtual ~Riesz(); 00052 00059 void operator()(const concepts::Element<Real>& elm, 00060 concepts::ElementMatrix<Real>& em); 00061 void operator()(const Hexahedron& elm, concepts::ElementMatrix<Real>& em); 00062 protected: 00063 virtual std::ostream& info(std::ostream& os) const; 00064 private: 00066 std::auto_ptr<const concepts::Formula<Real> > frm_; 00067 00069 concepts::Array<Real> jacobian_; 00070 00073 concepts::BoundaryConditions* bc_; 00074 }; 00075 00076 } // namespace hp3D 00077 00078 #endif // hp3dlinearform_hh