ITK
4.1.0
Insight Segmentation and Registration Toolkit
|
00001 /*========================================================================= 00002 * 00003 * Copyright Insight Software Consortium 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); 00006 * you may not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0.txt 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, 00013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 * 00017 *=========================================================================*/ 00018 00019 #ifndef __itkFEMElement3DMembrane_h 00020 #define __itkFEMElement3DMembrane_h 00021 00022 #include "itkFEMElementBase.h" 00023 #include "itkFEMMaterialLinearElasticity.h" 00024 00025 namespace itk 00026 { 00027 namespace fem 00028 { 00049 template <class TBaseClass = Element> 00050 class Element3DMembrane : public TBaseClass 00051 { 00052 public: 00053 00055 typedef Element3DMembrane Self; 00056 typedef TBaseClass Superclass; 00057 typedef SmartPointer<Self> Pointer; 00058 typedef SmartPointer<const Self> ConstPointer; 00059 00061 itkTypeMacro(Element3DMembrane, TBaseClass); 00062 00063 // Repeat the required typedefs and enums from parent class 00064 typedef typename Superclass::Float Float; 00065 typedef typename Superclass::MatrixType MatrixType; 00066 typedef typename Superclass::VectorType VectorType; 00067 00071 Element3DMembrane(); 00072 00073 // //////////////////////////////////////////////////////////////////////// 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 00096 virtual unsigned int GetNumberOfDegreesOfFreedomPerNode(void) const 00097 { 00098 return 3; 00099 } 00100 00104 virtual Material::ConstPointer GetMaterial(void) const 00105 { 00106 return dynamic_cast<const Material *>(m_mat); 00107 } 00108 00109 virtual void SetMaterial(Material::ConstPointer mat_) 00110 { 00111 m_mat = 00112 dynamic_cast<const MaterialLinearElasticity *>( mat_.GetPointer() ); 00113 } 00114 00115 protected: 00116 00117 virtual void PrintSelf(std::ostream& os, Indent indent) const; 00118 00122 const MaterialLinearElasticity *m_mat; 00123 00124 }; // class Element3DMembrane 00125 00126 } 00127 } // end namespace itk::fem 00128 00129 #ifndef ITK_MANUAL_INSTANTIATION 00130 #include "itkFEMElement3DMembrane.hxx" 00131 #endif 00132 00133 #endif // #ifndef __itkFEMElement3DMembrane_h 00134