#include <itkFEMElementBase.h>
Inheritance diagram for itk::fem::Element:
Public Types | |
typedef Element | Self |
typedef FEMLightObject | Superclass |
typedef Self * | Pointer |
typedef const Self * | ConstPointer |
typedef double | Float |
typedef FEMPArray< Element > | ArrayType |
typedef vnl_matrix< Float > | MatrixType |
typedef vnl_vector< Float > | VectorType |
typedef unsigned int | DegreeOfFreedomIDType |
typedef Node::ConstPointer | NodeIDType |
enum | { InvalidDegreeOfFreedomID = 0xffffffff } |
enum | { gaussMaxOrder = 10 } |
typedef FEMLightObject | LoadType |
typedef LoadType::Pointer | LoadPointer |
Public Member Functions | |
virtual VectorType | GetStrainsAtPoint (const VectorType &pt, const Solution &sol, unsigned int index) const |
virtual VectorType | GetStressesAtPoint (const VectorType &pt, const VectorType &e, const Solution &sol, unsigned int index) const |
virtual void | GetStiffnessMatrix (MatrixType &Ke) const |
virtual Float | GetElementDeformationEnergy (MatrixType &LocalSolution) const |
virtual void | GetMassMatrix (MatrixType &Me) const |
virtual void | GetLandmarkContributionMatrix (float eta, MatrixType &Le) const |
virtual void | GetLoadVector (LoadPointer l, VectorType &Fe) const=0 |
virtual void | GetStrainDisplacementMatrix (MatrixType &B, const MatrixType &shapeDgl) const=0 |
virtual void | GetMaterialMatrix (MatrixType &D) const=0 |
virtual VectorType | InterpolateSolution (const VectorType &pt, const Solution &sol, unsigned int solutionIndex=0) const |
virtual Float | InterpolateSolutionN (const VectorType &pt, const Solution &sol, unsigned int f, unsigned int solutionIndex=0) const |
virtual Material::ConstPointer | GetMaterial (void) const |
virtual void | SetMaterial (Material::ConstPointer) |
virtual void | GetIntegrationPointAndWeight (unsigned int i, VectorType &pt, Float &w, unsigned int order=0) const=0 |
virtual unsigned int | GetNumberOfIntegrationPoints (unsigned int order=0) const=0 |
virtual unsigned int | GetNumberOfNodes (void) const=0 |
virtual NodeIDType | GetNode (unsigned int n) const=0 |
virtual void | SetNode (unsigned int n, NodeIDType node)=0 |
virtual const VectorType & | GetNodeCoordinates (unsigned int n) const=0 |
virtual VectorType | GetGlobalFromLocalCoordinates (const VectorType &pt) const |
virtual bool | GetLocalFromGlobalCoordinates (const VectorType &globalPt, VectorType &localPt) const=0 |
virtual unsigned int | GetNumberOfSpatialDimensions () const=0 |
virtual VectorType | ShapeFunctions (const VectorType &pt) const=0 |
virtual void | ShapeFunctionDerivatives (const VectorType &pt, MatrixType &shapeD) const=0 |
virtual void | ShapeFunctionGlobalDerivatives (const VectorType &pt, MatrixType &shapeDgl, const MatrixType *pJ=0, const MatrixType *pshapeD=0) const |
virtual void | Jacobian (const VectorType &pt, MatrixType &J, const MatrixType *pshapeD=0) const |
virtual Float | JacobianDeterminant (const VectorType &pt, const MatrixType *pJ=0) const |
virtual void | JacobianInverse (const VectorType &pt, MatrixType &invJ, const MatrixType *pJ=0) const |
virtual unsigned int | GetNumberOfDegreesOfFreedom (void) const |
virtual unsigned int | GetNumberOfDegreesOfFreedomPerNode (void) const=0 |
DegreeOfFreedomIDType | GetDegreeOfFreedom (unsigned int local_dof) const |
Static Public Attributes | |
const Float | gaussPoint [gaussMaxOrder+1][gaussMaxOrder] |
const Float | gaussWeight [gaussMaxOrder+1][gaussMaxOrder] |
Derive this class to create new finite element classes. All derived classes must define:
and optionally (if required):
The storage of element parameters (geometry...) can't be implemented here, since we don't know yet, how much memory each element needs. Instead each derived class should take care of the memory management (declare appropriate data members) for the element parameters and provide access to these parameters (like nodes, materials...).
Definition at line 77 of file itkFEMElementBase.h.
|
Array class that holds special pointers to the Element objects Definition at line 90 of file itkFEMElementBase.h. Referenced by itk::fem::ImageMetricLoad< TMoving, TFixed >::GetSolution(), and itk::fem::FiniteDifferenceFunctionLoad< MovingImageType, FixedImageType >::GetSolution(). |
|
|
Type that stores global ID's of degrees of freedom. Reimplemented in itk::fem::ElementStd< 3, 2 >, itk::fem::ElementStd< 2, 2 >, itk::fem::ElementStd< 8, 3 >, itk::fem::ElementStd< 6, 2 >, itk::fem::ElementStd< 4, 3 >, and itk::fem::ElementStd< 4, 2 >. Definition at line 120 of file itkFEMElementBase.h. Referenced by itk::fem::Element::Node::GetDegreeOfFreedom(). |
|
|
Easy and consistent access to LoadElement and LoadElement::Pointer type. This is a pointer to FEMLightObject to avoid cyclic references between LoadElement and Element classes. As a consequence whenever you need to use a pointer to LoadElement class within the element's declaration or definition, ALWAYS use this typedef instead. When calling the GetLoadVector(...) function from outside, you should ALWAYS first convert the argument to Element::LoadPointer. See code of function Solver::AssembleF(...) for more info. Reimplemented in itk::fem::ElementStd< 3, 2 >, itk::fem::ElementStd< 2, 2 >, itk::fem::ElementStd< 8, 3 >, itk::fem::ElementStd< 6, 2 >, itk::fem::ElementStd< 4, 3 >, and itk::fem::ElementStd< 4, 2 >. Definition at line 114 of file itkFEMElementBase.h. Referenced by itk::fem::LoadImplementationGenericLandmarkLoad::HandleLoad(), itk::fem::LoadImplementationTest< TLoadClass >::impl(), and itk::fem::ImageMetricLoadImplementation< TLoadClass >::ImplementImageMetricLoad(). |
|
Easy and consistent access to LoadElement and LoadElement::Pointer type. This is a pointer to FEMLightObject to avoid cyclic references between LoadElement and Element classes. As a consequence whenever you need to use a pointer to LoadElement class within the element's declaration or definition, ALWAYS use this typedef instead. When calling the GetLoadVector(...) function from outside, you should ALWAYS first convert the argument to Element::LoadPointer. See code of function Solver::AssembleF(...) for more info. Reimplemented in itk::fem::ElementStd< 3, 2 >, itk::fem::ElementStd< 2, 2 >, itk::fem::ElementStd< 8, 3 >, itk::fem::ElementStd< 6, 2 >, itk::fem::ElementStd< 4, 3 >, and itk::fem::ElementStd< 4, 2 >. Definition at line 113 of file itkFEMElementBase.h. |
|
|
Type that is used to store IDs of a node. It is a pointer to Node objects. Reimplemented in itk::fem::ElementStd< 3, 2 >, itk::fem::ElementStd< 2, 2 >, itk::fem::ElementStd< 8, 3 >, itk::fem::ElementStd< 6, 2 >, itk::fem::ElementStd< 4, 3 >, and itk::fem::ElementStd< 4, 2 >. Definition at line 513 of file itkFEMElementBase.h. |
|
|
|
|
|
Constant that represents an invalid DegreeOfFreedomID object. If a degree of freedom is assigned this value, this means that that no specific value was (yet) assigned to this DOF. Definition at line 127 of file itkFEMElementBase.h. |
|
Maximum supported order of 1D Gauss-Legendre integration. Integration points are defined for orders from 1 to gaussMaxOrder. Number of integration points is equal to the order of integration rule.
Definition at line 481 of file itkFEMElementBase.h. |
|
Convenient way to access IDs of degrees of freedom that are stored in node objects.
Definition at line 394 of file itkFEMElementBase.h. |
|
Compute the physical energy, U, of the deformation (e.g. stress / strain ). T U = u Ke u The matrix LocalSolution contains the solution to use in the energy computation. Usually, this is the solution at the nodes. |
|
Transforms the given local element coordinates into global.
|
|
Computes the vector representing the i-th integration point in local element coordinates for a Gauss-Legendre numerical integration over the element domain. It also computes the weight at this integration point. Optionally you can also specify the order of integration. If order is not specified, it defaults to 0, which means that the derived element should use the optimal integration order specific for that element.
Implemented in itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0QuadraticTriangular, itk::fem::Element2DC1Beam, itk::fem::Element3DC0LinearHexahedron, and itk::fem::Element3DC0LinearTetrahedron. |
|
Compute and return landmark contribution to element stiffness matrix (Le) in global coordinate system. b T int (1/eta)^2 N(x) N(x) dx a where (eta ) is the landmark weight. Implementation is similar to GetMassMatrix. |
|
Compute and return the element load vector for a given external load. The class of load object determines the type of load acting on the elemnent. Basically this is the contribution of this element on the right side of the master matrix equation, due to the specified load. Returned vector includes only nodal forces that correspond to the given Load object. Visitor design pattern is used in the loads implementation. This function only selects and calls the proper function based on the given class of load object. The code that performs the actual conversion to the corresponding nodal loads is defined elswhere.
|
|
Transforms the given global element coordinates into local. Returns false if the point is outside.
Implemented in itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0QuadraticTriangular, itk::fem::Element2DC1Beam, itk::fem::Element3DC0LinearHexahedron, and itk::fem::Element3DC0LinearTetrahedron. |
|
|
|
|
Returns the ID (pointer) of n-th node in an element. Implemented in itk::fem::ElementStd< 3, 2 >, itk::fem::ElementStd< 2, 2 >, itk::fem::ElementStd< 8, 3 >, itk::fem::ElementStd< 6, 2 >, itk::fem::ElementStd< 4, 3 >, and itk::fem::ElementStd< 4, 2 >. |
|
Return a vector of global coordinates of n-th node in an element.
Implemented in itk::fem::ElementStd< 3, 2 >, itk::fem::ElementStd< 2, 2 >, itk::fem::ElementStd< 8, 3 >, itk::fem::ElementStd< 6, 2 >, itk::fem::ElementStd< 4, 3 >, and itk::fem::ElementStd< 4, 2 >. |
|
Return the total number of degrees of freedom defined in a derived element class. By default this is equal to number of points in a cell multiplied by number of degrees of freedom at each point. Definition at line 658 of file itkFEMElementBase.h. |
|
Return the number of degrees of freedom at each node. This is also equal to number of unknowns that we want to solve for at each point within an element.
Implemented in itk::fem::Element2DC1Beam, itk::fem::Element1DStress< Element2DC0LinearLine >, itk::fem::Element2DMembrane< Element2DC0LinearQuadrilateral >, itk::fem::Element2DMembrane< Element2DC0LinearTriangular >, itk::fem::Element2DStrain< Element2DC0QuadraticTriangular >, itk::fem::Element2DStrain< Element2DC0LinearQuadrilateral >, itk::fem::Element2DStrain< Element2DC0LinearTriangular >, itk::fem::Element2DStress< Element2DC0QuadraticTriangular >, itk::fem::Element2DStress< Element2DC0LinearQuadrilateral >, itk::fem::Element2DStress< Element2DC0LinearTriangular >, itk::fem::Element3DMembrane< Element3DC0LinearHexahedron >, itk::fem::Element3DMembrane< Element3DC0LinearTetrahedron >, itk::fem::Element3DStrain< Element3DC0LinearHexahedron >, and itk::fem::Element3DStrain< Element3DC0LinearTetrahedron >. |
|
Returns total number of integration points, for given order of Gauss-Legendre numerical integration rule.
Implemented in itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0QuadraticTriangular, itk::fem::Element2DC1Beam, itk::fem::Element3DC0LinearHexahedron, and itk::fem::Element3DC0LinearTetrahedron. |
|
Return the total number of nodes in an elememnt. Implemented in itk::fem::ElementStd< 3, 2 >, itk::fem::ElementStd< 2, 2 >, itk::fem::ElementStd< 8, 3 >, itk::fem::ElementStd< 6, 2 >, itk::fem::ElementStd< 4, 3 >, and itk::fem::ElementStd< 4, 2 >. |
|
Returns the number of dimensions of space in which the element is defined. e.g. 2 for 2D elements, 3 for 3D... This is also equal to the size vector containing nodal coordinates. Implemented in itk::fem::ElementStd< 3, 2 >, itk::fem::ElementStd< 2, 2 >, itk::fem::ElementStd< 8, 3 >, itk::fem::ElementStd< 6, 2 >, itk::fem::ElementStd< 4, 3 >, and itk::fem::ElementStd< 4, 2 >. |
|
Compute and return element stiffnes matrix (Ke) in global coordinate system. The base class provides a general implementation which only computes b T int B(x) D B(x) dx a using the Gaussian numeric integration method. The function calls GetIntegrationPointAndWeight() / GetNumberOfIntegrationPoints() to obtain the integration points. It also calls the GetStrainDisplacementMatrix() and GetMaterialMatrix() member functions.
Reimplemented in itk::fem::Element2DC1Beam, and itk::fem::Element1DStress< Element2DC0LinearLine >. |
|
Compute the strain displacement matrix at local point.
Implemented in itk::fem::Element2DC1Beam, itk::fem::Element1DStress< Element2DC0LinearLine >, itk::fem::Element2DMembrane< Element2DC0LinearQuadrilateral >, itk::fem::Element2DMembrane< Element2DC0LinearTriangular >, itk::fem::Element2DStrain< Element2DC0QuadraticTriangular >, itk::fem::Element2DStrain< Element2DC0LinearQuadrilateral >, itk::fem::Element2DStrain< Element2DC0LinearTriangular >, itk::fem::Element2DStress< Element2DC0QuadraticTriangular >, itk::fem::Element2DStress< Element2DC0LinearQuadrilateral >, itk::fem::Element2DStress< Element2DC0LinearTriangular >, itk::fem::Element3DMembrane< Element3DC0LinearHexahedron >, itk::fem::Element3DMembrane< Element3DC0LinearTetrahedron >, itk::fem::Element3DStrain< Element3DC0LinearHexahedron >, and itk::fem::Element3DStrain< Element3DC0LinearTetrahedron >. |
|
|
|
|
|
Return interpolated value of all unknown functions at given local point.
|
|
Return interpolated value of f-th unknown function at given local point.
|
|
Compute the Jacobian matrix of the transformation from local to global coordinates at a given local point. A column in this matrix corresponds to a global coordinate, while a row corresponds to different local coordinates. E.g. element at row 2, col 3 contains derivative of the third global coordinate with respect to local coordinate number 2. In order to compute the Jacobian, we normally need the shape function derivatives. If they are known, you should pass a pointer to an object of MatrixType that contains the shape function derivatives. If they are not known, pass null pointer and they will be computed automatically.
Reimplemented in itk::fem::Element2DC0LinearLine. |
|
Compute the determinant of the Jacobian matrix at a given point with respect to the local coordinate system.
Reimplemented in itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0QuadraticTriangular, and itk::fem::Element2DC1Beam. |
|
Compute the inverse of the Jacobian matrix at a given point with respect to the local coordinate system.
Reimplemented in itk::fem::Element2DC0LinearTriangular, and itk::fem::Element2DC0QuadraticTriangular. |
|
Set the pointer to the Material object used by the element. All derived classes, which use objects of Material class should override this method to provide access to the material from the base class.
Reimplemented in itk::fem::Element2DC1Beam, itk::fem::Element1DStress< Element2DC0LinearLine >, itk::fem::Element2DMembrane< Element2DC0LinearQuadrilateral >, itk::fem::Element2DMembrane< Element2DC0LinearTriangular >, itk::fem::Element2DStrain< Element2DC0QuadraticTriangular >, itk::fem::Element2DStrain< Element2DC0LinearQuadrilateral >, itk::fem::Element2DStrain< Element2DC0LinearTriangular >, itk::fem::Element2DStress< Element2DC0QuadraticTriangular >, itk::fem::Element2DStress< Element2DC0LinearQuadrilateral >, itk::fem::Element2DStress< Element2DC0LinearTriangular >, itk::fem::Element3DMembrane< Element3DC0LinearHexahedron >, itk::fem::Element3DMembrane< Element3DC0LinearTetrahedron >, itk::fem::Element3DStrain< Element3DC0LinearHexahedron >, and itk::fem::Element3DStrain< Element3DC0LinearTetrahedron >. Definition at line 427 of file itkFEMElementBase.h. References Float, gaussMaxOrder, and VectorType. |
|
Sets the pointe of n-th node in an element to node. Implemented in itk::fem::ElementStd< 3, 2 >, itk::fem::ElementStd< 2, 2 >, itk::fem::ElementStd< 8, 3 >, itk::fem::ElementStd< 6, 2 >, itk::fem::ElementStd< 4, 3 >, and itk::fem::ElementStd< 4, 2 >. |
|
Compute the matrix of values of the shape functions derivatives with respect to local coordinates of this element at a given point. A column in this matrix corresponds to a specific shape function, while a row corresponds to different local coordinates. E.g. element at row 2, col 3 contains derivative of shape function number 3 with respect to local coordinate number 2.
Implemented in itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0QuadraticTriangular, itk::fem::Element2DC1Beam, itk::fem::Element3DC0LinearHexahedron, and itk::fem::Element3DC0LinearTetrahedron. |
|
Compute matrix of shape function derivatives with respect to global coordinates. A column in this matrix corresponds to a specific shape function, while a row corresponds to different global coordinates.
|
|
Returns a vector containing the values of all shape functions that define the geometry of a finite element at a given local point within an element.
Implemented in itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0QuadraticTriangular, itk::fem::Element2DC1Beam, itk::fem::Element3DC0LinearHexahedron, and itk::fem::Element3DC0LinearTetrahedron. |
|
Points for 1D Gauss-Legendre integration from -1 to 1. First index is order of integration, second index is the number of integration point. Example: gaussPoint[4][2] returns third point of the 4th order integration rule. Subarray gaussPoint[0][...] does not provide useful information. It is there only to keep order index correct.
Definition at line 494 of file itkFEMElementBase.h. |
|
Weights for Gauss-Legendre integration.
Definition at line 501 of file itkFEMElementBase.h. |