00001 // element for linear FEM in 3D 00002 00003 #ifndef element3DLin_hh 00004 #define element3DLin_hh 00005 00006 #include "element.hh" 00007 #include "geometry/cell3D.hh" 00008 00009 namespace concepts { 00010 // forward declaration 00011 template<typename F> 00012 class ElementGraphics; 00013 } 00014 00015 namespace linearFEM { 00016 // forward declaration 00017 class TetrahedronGraphics; 00018 00019 // *********************************************************** Tetrahedron ** 00020 00024 class Tetrahedron : public Element { 00025 public: 00030 Tetrahedron(const concepts::Tetrahedron3d& cell, uint idx[]) : 00031 Element(4, idx), cell_(cell) {} 00037 Tetrahedron(const concepts::Tetrahedron3d& cell, 00038 concepts::TColumn<Real>* T0, 00039 concepts::TColumn<Real>* T1 = 0) : 00040 Element(T0, T1), cell_(cell) {} 00041 virtual const concepts::Tetrahedron& support() const 00042 { return cell_.connector(); } 00043 virtual const concepts::Tetrahedron3d& cell() const { return cell_; } 00044 virtual const concepts::ElementGraphics<Real>* graphics() const; 00045 protected: 00046 virtual std::ostream& info(std::ostream& os) const; 00047 private: 00049 const concepts::Tetrahedron3d& cell_; 00051 static std::auto_ptr<TetrahedronGraphics> graphics_; 00052 }; 00053 00054 } // namespace linearFEM 00055 00056 #endif // element3DLin_hh