00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __itkFEMElement3DMembrane_h
00019 #define __itkFEMElement3DMembrane_h
00020
00021 #include "itkFEMElementBase.h"
00022 #include "itkFEMMaterialLinearElasticity.h"
00023
00024 namespace itk {
00025 namespace fem {
00026
00027
00028
00029
00044 template<class TBaseClass=Element>
00045 class Element3DMembrane : public TBaseClass
00046 {
00047 FEM_ABSTRACT_CLASS(Element3DMembrane,TBaseClass)
00048 public:
00049
00050
00051 typedef typename Superclass::Float Float;
00052 typedef typename Superclass::MatrixType MatrixType;
00053 typedef typename Superclass::VectorType VectorType;
00054
00058 virtual void Read( std::istream&, void* info );
00059
00063 virtual void Write( std::ostream& f ) const;
00064
00068 Element3DMembrane();
00069
00070
00071
00072
00074
00075
00076
00077
00081 virtual void GetStrainDisplacementMatrix(MatrixType& B, const MatrixType& shapeDgl) const;
00082
00086 virtual void GetMaterialMatrix(MatrixType& D) const;
00087
00091 void GetMassMatrix(MatrixType& Me) const;
00092
00093
00097 virtual unsigned int GetNumberOfDegreesOfFreedomPerNode( void ) const
00098 { return 3; }
00099
00100
00101
00102 public:
00103
00107 MaterialLinearElasticity::ConstPointer m_mat;
00108 virtual Material::ConstPointer GetMaterial(void) const { return m_mat; }
00109 virtual void SetMaterial(Material::ConstPointer mat_ ) { m_mat=dynamic_cast<const MaterialLinearElasticity*>(&*mat_); }
00110
00111 };
00112
00113
00114
00115
00116 #ifdef _MSC_VER
00117
00118
00119
00120
00121 static void Dummy( void );
00122 #endif // #ifdef _MSC_VER
00123
00124 }}
00125
00126 #ifndef ITK_MANUAL_INSTANTIATION
00127 #include "itkFEMElement3DMembrane.txx"
00128 #endif
00129
00130 #endif // #ifndef __itkFEMElement3DMembrane_h