Orfeo Toolbox  3.16
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes
itk::fem::Element Class Reference

Abstract base element class. More...

#include <itkFEMElementBase.h>

+ Inheritance diagram for itk::fem::Element:
+ Collaboration diagram for itk::fem::Element:

List of all members.

Classes

class  Node
 Class that stores information required to define a node. More...

Public Types

enum  { InvalidDegreeOfFreedomID = 0xffffffff }
enum  { gaussMaxOrder = 10 }
typedef FEMPArray< ElementArrayType
typedef Self Baseclass
typedef const SelfConstPointer
typedef unsigned int DegreeOfFreedomIDType
typedef double Float
typedef LoadType::Pointer LoadPointer
typedef FEMLightObject LoadType
typedef vnl_matrix< FloatMatrixType
typedef Node::ConstPointer NodeIDType
typedef SelfPointer
typedef Element Self
typedef FEMLightObject Superclass
typedef vnl_vector< FloatVectorType

Public Member Functions

virtual int ClassID () const =0
virtual Baseclass::Pointer Clone () const =0
DegreeOfFreedomIDType GetDegreeOfFreedom (unsigned int local_dof) const
virtual Float GetElementDeformationEnergy (MatrixType &LocalSolution) const
virtual VectorType GetGlobalFromLocalCoordinates (const VectorType &pt) const
virtual void GetIntegrationPointAndWeight (unsigned int i, VectorType &pt, Float &w, unsigned int order=0) const =0
virtual void GetLandmarkContributionMatrix (float eta, MatrixType &Le) const
virtual void GetLoadVector (LoadPointer l, VectorType &Fe) const =0
virtual bool GetLocalFromGlobalCoordinates (const VectorType &globalPt, VectorType &localPt) const =0
virtual void GetMassMatrix (MatrixType &Me) const
virtual Material::ConstPointer GetMaterial (void) const
virtual void GetMaterialMatrix (MatrixType &D) const =0
virtual NodeIDType GetNode (unsigned int n) const =0
virtual const VectorTypeGetNodeCoordinates (unsigned int n) const =0
virtual unsigned int GetNumberOfDegreesOfFreedom (void) const
virtual unsigned int GetNumberOfDegreesOfFreedomPerNode (void) const =0
virtual unsigned int GetNumberOfIntegrationPoints (unsigned int order=0) const =0
virtual unsigned int GetNumberOfNodes (void) const =0
virtual unsigned int GetNumberOfSpatialDimensions () const =0
virtual void GetStiffnessMatrix (MatrixType &Ke) const
virtual void GetStrainDisplacementMatrix (MatrixType &B, const MatrixType &shapeDgl) const =0
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 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 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 void Read (std::istream &f, void *info)
virtual void SetMaterial (Material::ConstPointer)
virtual void SetNode (unsigned int n, NodeIDType node)=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 VectorType ShapeFunctions (const VectorType &pt) const =0
virtual void Write (std::ostream &f) const

Static Public Member Functions

static FEMLightObject::Pointer CreateFromStream (std::istream &f, void *info)
static void SkipWhiteSpace (std::istream &f)

Public Attributes

int GN

Static Public Attributes

static const Float gaussPoint [gaussMaxOrder+1][gaussMaxOrder]
static const Float gaussWeight [gaussMaxOrder+1][gaussMaxOrder]
static const std::string whitespaces = " \t\n\r"

Detailed Description

Abstract base element class.

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 73 of file itkFEMElementBase.h.


Member Typedef Documentation

Array class that holds special pointers to the Element objects

Definition at line 86 of file itkFEMElementBase.h.

Store the base class typedef for easy access from derived classes. FEM_CLASS macro also expects this for the FEMOF...

Definition at line 62 of file itkFEMLightObject.h.

Const pointer or SmartPointer to an object.

Reimplemented from itk::fem::FEMLightObject.

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 >, itk::fem::ElementStd< 4, 2 >, 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 >, itk::fem::Element3DStrain< Element3DC0LinearTetrahedron >, itk::fem::Element3DC0LinearTetrahedron, itk::fem::Element2DC0LinearTriangularMembrane, itk::fem::Element2DC0LinearTriangularStrain, itk::fem::Element2DC0LinearTriangularStress, itk::fem::Element2DC0QuadraticTriangularStrain, itk::fem::Element2DC0QuadraticTriangularStress, itk::fem::Element2DC1Beam, itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearLineStress, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0LinearQuadrilateralMembrane, itk::fem::Element2DC0LinearQuadrilateralStrain, itk::fem::Element2DC0LinearQuadrilateralStress, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0QuadraticTriangular, itk::fem::Element3DC0LinearHexahedron, itk::fem::Element3DC0LinearHexahedronMembrane, itk::fem::Element3DC0LinearHexahedronStrain, itk::fem::Element3DC0LinearTetrahedronMembrane, and itk::fem::Element3DC0LinearTetrahedronStrain.

Definition at line 75 of file itkFEMElementBase.h.

typedef double itk::fem::Element::Float

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 109 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 497 of file itkFEMElementBase.h.

Pointer or SmartPointer to an object.

Reimplemented from itk::fem::FEMLightObject.

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 >, itk::fem::ElementStd< 4, 2 >, 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 >, itk::fem::Element3DStrain< Element3DC0LinearTetrahedron >, itk::fem::Element3DC0LinearTetrahedron, itk::fem::Element2DC0LinearTriangularMembrane, itk::fem::Element2DC0LinearTriangularStrain, itk::fem::Element2DC0LinearTriangularStress, itk::fem::Element2DC0QuadraticTriangularStrain, itk::fem::Element2DC0QuadraticTriangularStress, itk::fem::Element2DC1Beam, itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearLineStress, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0LinearQuadrilateralMembrane, itk::fem::Element2DC0LinearQuadrilateralStrain, itk::fem::Element2DC0LinearQuadrilateralStress, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0QuadraticTriangular, itk::fem::Element3DC0LinearHexahedron, itk::fem::Element3DC0LinearHexahedronMembrane, itk::fem::Element3DC0LinearHexahedronStrain, itk::fem::Element3DC0LinearTetrahedronMembrane, and itk::fem::Element3DC0LinearTetrahedronStrain.

Definition at line 75 of file itkFEMElementBase.h.

Standard Self typedef.

Reimplemented from itk::fem::FEMLightObject.

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 >, itk::fem::ElementStd< 4, 2 >, 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 >, itk::fem::Element3DStrain< Element3DC0LinearTetrahedron >, itk::fem::Element3DC0LinearTetrahedron, itk::fem::Element2DC0LinearTriangularMembrane, itk::fem::Element2DC0LinearTriangularStrain, itk::fem::Element2DC0LinearTriangularStress, itk::fem::Element2DC0QuadraticTriangularStrain, itk::fem::Element2DC0QuadraticTriangularStress, itk::fem::Element2DC1Beam, itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearLineStress, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0LinearQuadrilateralMembrane, itk::fem::Element2DC0LinearQuadrilateralStrain, itk::fem::Element2DC0LinearQuadrilateralStress, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0QuadraticTriangular, itk::fem::Element3DC0LinearHexahedron, itk::fem::Element3DC0LinearHexahedronMembrane, itk::fem::Element3DC0LinearHexahedronStrain, itk::fem::Element3DC0LinearTetrahedronMembrane, and itk::fem::Element3DC0LinearTetrahedronStrain.

Definition at line 75 of file itkFEMElementBase.h.

Standard Superclass typedef.

Reimplemented from itk::fem::FEMLightObject.

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 >, itk::fem::ElementStd< 4, 2 >, 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 >, itk::fem::Element3DStrain< Element3DC0LinearTetrahedron >, itk::fem::Element3DC0LinearTetrahedron, itk::fem::Element2DC0LinearTriangularMembrane, itk::fem::Element2DC0LinearTriangularStrain, itk::fem::Element2DC0LinearTriangularStress, itk::fem::Element2DC0QuadraticTriangularStrain, itk::fem::Element2DC0QuadraticTriangularStress, itk::fem::Element2DC1Beam, itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearLineStress, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0LinearQuadrilateralMembrane, itk::fem::Element2DC0LinearQuadrilateralStrain, itk::fem::Element2DC0LinearQuadrilateralStress, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0QuadraticTriangular, itk::fem::Element3DC0LinearHexahedron, itk::fem::Element3DC0LinearHexahedronMembrane, itk::fem::Element3DC0LinearHexahedronStrain, itk::fem::Element3DC0LinearTetrahedronMembrane, and itk::fem::Element3DC0LinearTetrahedronStrain.

Definition at line 75 of file itkFEMElementBase.h.


Member Enumeration Documentation

anonymous enum

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.

Enumerator:
InvalidDegreeOfFreedomID 

Definition at line 122 of file itkFEMElementBase.h.

anonymous enum

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.

See also:
gaussPoint
Enumerator:
gaussMaxOrder 

Definition at line 465 of file itkFEMElementBase.h.


Member Function Documentation

virtual int itk::fem::FEMLightObject::ClassID ( ) const
pure virtualinherited
virtual Baseclass::Pointer itk::fem::FEMLightObject::Clone ( ) const
pure virtualinherited
FEMLightObject::Pointer itk::fem::FEMLightObject::CreateFromStream ( std::istream &  f,
void *  info 
)
staticinherited

Read object of any derived type from stream.

This static function creates an object of a class, which is derived from FEMLightObject. The class of object is first determined from the stream, then the object of that class is constructed using the FEMObjectFactory. Finally the data for this object is read from the stream, by calling the Read() member function.

Read and create object of any derived class from stream

 Catch possible exceptions while 
 reading object's data from stream
 Return a pointer to a newly created object if all was OK
 Technically everithing should be fine here (a!=0), but we
 check again, just in case.
 Something went wrong.
 Reset the stream position to where it was before reading the object.

Definition at line 77 of file itkFEMLightObject.cxx.

References itk::fem::FEMObjectFactory< FEMLightObject >::ClassName2ID(), itk::fem::FEMObjectFactory< FEMLightObject >::Create(), itk::fem::FEMLightObject::Read(), itk::fem::FEMLightObject::SkipWhiteSpace(), and itk::fem::FEMLightObject::whitespaces.

Referenced by itk::fem::Solver::Read().

DegreeOfFreedomIDType itk::fem::Element::GetDegreeOfFreedom ( unsigned int  local_dof) const
inline
Element::Float itk::fem::Element::GetElementDeformationEnergy ( MatrixType LocalSolution) const
virtual

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.

Definition at line 268 of file itkFEMElementBase.cxx.

References GetStiffnessMatrix().

Element::VectorType itk::fem::Element::GetGlobalFromLocalCoordinates ( const VectorType pt) const
virtual

Transforms the given local element coordinates into global.

Parameters:
ptPoint in local element coordinates.

Definition at line 488 of file itkFEMElementBase.cxx.

References GetNodeCoordinates(), GetNumberOfNodes(), GetNumberOfSpatialDimensions(), and ShapeFunctions().

Referenced by itk::fem::LoadImplementationGenericBodyLoad::Implementation().

virtual void itk::fem::Element::GetIntegrationPointAndWeight ( unsigned int  i,
VectorType pt,
Float w,
unsigned int  order = 0 
) const
pure virtual

Methods related to numeric integration 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.

Note:
This function must be implemented in derived element classes, and is expected to provide valid integration points for up to gaussMaxOrder-th order of integration.
Parameters:
iIntegration point number 0<=i<GetNumberOfIntegrationPoints()
ptReference to object of class VectorType that will hold the integration point.
wReference to Float variable that will hold the weight.
orderOrder of integration.
See also:
GetNumberOfIntegrationPoints()

Implemented in itk::fem::Element2DC1Beam, itk::fem::Element3DC0LinearTetrahedron, itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0QuadraticTriangular, and itk::fem::Element3DC0LinearHexahedron.

Referenced by GetLandmarkContributionMatrix(), GetMassMatrix(), GetStiffnessMatrix(), itk::fem::ImageMetricLoadImplementation< TLoadClass >::Implementation(), and itk::fem::LoadImplementationGenericBodyLoad::Implementation().

void itk::fem::Element::GetLandmarkContributionMatrix ( float  eta,
MatrixType Le 
) const
virtual

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.

Definition at line 229 of file itkFEMElementBase.cxx.

References GetIntegrationPointAndWeight(), GetNumberOfDegreesOfFreedom(), GetNumberOfDegreesOfFreedomPerNode(), GetNumberOfIntegrationPoints(), GetNumberOfNodes(), and ShapeFunctions().

Referenced by itk::fem::SolverCrankNicolson::AssembleKandM(), and itk::fem::Solver::AssembleLandmarkContribution().

virtual void itk::fem::Element::GetLoadVector ( LoadPointer  l,
VectorType Fe 
) const
pure virtual

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.

Note:
Each derived class must implement its own version of this function. This is automated by calling the LOAD_FUNCTION() macro within the class declaration (in the public: block).

For example on how to define specific element load, see funtion LoadImplementationPoint_Bar2D.

Note:
: Before a load can be applied to an element, the function that implements a load must be registered with the VisitorDispactcher class.
Parameters:
lPointer to a load object.
FeReference to vector object that will store nodal forces.
See also:
VisitorDispatcher

Referenced by itk::fem::Solver::AssembleF().

virtual bool itk::fem::Element::GetLocalFromGlobalCoordinates ( const VectorType globalPt,
VectorType localPt 
) const
pure virtual

Transforms the given global element coordinates into local. Returns false if the point is outside.

Parameters:
globalPtReference to vector containing a point in global (world) coordinates.
localPtReference to the vector that will store the local coordinate.

Implemented in itk::fem::Element2DC1Beam, itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0QuadraticTriangular, itk::fem::Element3DC0LinearTetrahedron, itk::fem::Element2DC0LinearQuadrilateral, and itk::fem::Element3DC0LinearHexahedron.

Referenced by itk::fem::FEMRegistrationFilter< TMovingImage, TFixedImage >::InterpolateVectorField().

void itk::fem::Element::GetMassMatrix ( MatrixType Me) const
virtual
virtual Material::ConstPointer itk::fem::Element::GetMaterial ( void  ) const
inlinevirtual

Return 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.

Note:
Derived Element classes don't have to use a material class, but since the majority of the final Element classes uses Material classes to specify phhysical constants that the element depends on, we provide this virtual function that enables easy access to this pointer from the base class. If the derived class does not override this function, the returned pointer is 0 by default, signaling that there is no Material object.
See also:
SetMaterial

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 404 of file itkFEMElementBase.h.

virtual void itk::fem::Element::GetMaterialMatrix ( MatrixType D) const
pure virtual
virtual NodeIDType itk::fem::Element::GetNode ( unsigned int  n) const
pure virtual
virtual const VectorType& itk::fem::Element::GetNodeCoordinates ( unsigned int  n) const
pure virtual
virtual unsigned int itk::fem::Element::GetNumberOfDegreesOfFreedom ( void  ) const
inlinevirtual
virtual unsigned int itk::fem::Element::GetNumberOfDegreesOfFreedomPerNode ( void  ) const
pure virtual
virtual unsigned int itk::fem::Element::GetNumberOfIntegrationPoints ( unsigned int  order = 0) const
pure virtual

Returns total number of integration points, for given order of Gauss-Legendre numerical integration rule.

Note:
This function must be implemented in derived element classes, and is expected to provide valid number of integration points for up to gaussMaxOrder-th order of integration.
See also:
GetIntegrationPointAndWeight()

Implemented in itk::fem::Element2DC1Beam, itk::fem::Element3DC0LinearTetrahedron, itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0QuadraticTriangular, and itk::fem::Element3DC0LinearHexahedron.

Referenced by GetLandmarkContributionMatrix(), GetMassMatrix(), GetStiffnessMatrix(), itk::fem::ImageMetricLoadImplementation< TLoadClass >::Implementation(), and itk::fem::LoadImplementationGenericBodyLoad::Implementation().

virtual unsigned int itk::fem::Element::GetNumberOfNodes ( void  ) const
pure virtual
virtual unsigned int itk::fem::Element::GetNumberOfSpatialDimensions ( ) const
pure virtual

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 >.

Referenced by GetGlobalFromLocalCoordinates(), and Jacobian().

void itk::fem::Element::GetStiffnessMatrix ( MatrixType Ke) const
virtual

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.

Parameters:
KeReference to the resulting stiffnes matrix.
Note:
This is a very generic implementation of the stiffness matrix that is suitable for any problem/element definition. A specifc element may override this implementation with its own simple one.

Physics of a problem.

Reimplemented in itk::fem::Element1DStress< Element2DC0LinearLine >, and itk::fem::Element2DC1Beam.

Definition at line 155 of file itkFEMElementBase.cxx.

References GetIntegrationPointAndWeight(), GetMaterialMatrix(), GetNumberOfIntegrationPoints(), GetStrainDisplacementMatrix(), Jacobian(), JacobianDeterminant(), ShapeFunctionDerivatives(), and ShapeFunctionGlobalDerivatives().

Referenced by itk::fem::SolverHyperbolic::AssembleElementMatrix(), itk::fem::Solver::AssembleElementMatrix(), and GetElementDeformationEnergy().

virtual void itk::fem::Element::GetStrainDisplacementMatrix ( MatrixType B,
const MatrixType shapeDgl 
) const
pure virtual
Element::VectorType itk::fem::Element::GetStrainsAtPoint ( const VectorType pt,
const Solution sol,
unsigned int  index 
) const
virtual
Element::VectorType itk::fem::Element::GetStressesAtPoint ( const VectorType pt,
const VectorType e,
const Solution sol,
unsigned int  index 
) const
virtual

Definition at line 213 of file itkFEMElementBase.cxx.

References GetMaterialMatrix().

Element::VectorType itk::fem::Element::InterpolateSolution ( const VectorType pt,
const Solution sol,
unsigned int  solutionIndex = 0 
) const
virtual

Return interpolated value of all unknown functions at given local point.

Parameters:
ptPoint in local element coordinates.
solReference to the master solution object. This object is created by the Solver object when the whole FEM problem is solved and contains the values of unknown functions at nodes (degrees of freedom).
solutionIndexWe allow more than one solution vector to be stored - this selects which to use in interpolation.

Definition at line 327 of file itkFEMElementBase.cxx.

References GetDegreeOfFreedom(), GetNode(), GetNumberOfDegreesOfFreedomPerNode(), GetNumberOfNodes(), itk::fem::Solution::GetSolutionValue(), and ShapeFunctions().

Referenced by GetStrainsAtPoint(), and itk::fem::LoadImplementationGenericLandmarkLoad::Implementation().

Element::Float itk::fem::Element::InterpolateSolutionN ( const VectorType pt,
const Solution sol,
unsigned int  f,
unsigned int  solutionIndex = 0 
) const
virtual

Return interpolated value of f-th unknown function at given local point.

Parameters:
ptPoint in local element coordinates.
solReference to the master solution object. This object is created by the Solver object when the whole FEM problem is solved and contains the values of unknown functions at nodes (degrees of freedom).
fNumber of unknown function to interpolate. Must be 0 <= f < GetNumberOfDegreesOfFreedomPerNode().
solutionIndexWe allow more than one solution vector to be stored - this selects which to use in interpolation.

Definition at line 355 of file itkFEMElementBase.cxx.

References GetDegreeOfFreedom(), GetNode(), GetNumberOfNodes(), itk::fem::Solution::GetSolutionValue(), and ShapeFunctions().

void itk::fem::Element::Jacobian ( const VectorType pt,
MatrixType J,
const MatrixType pshapeD = 0 
) const
virtual

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.

Parameters:
ptPoint in local coordinates
Jreferece to matrix object, which will contain the jacobian
pshapeDA pointer to derivatives of shape functions at point pt. If this pointer is 0, derivatives will be computed as necessary.

Geometry of a problem.

Reimplemented in itk::fem::Element2DC0LinearLine.

Definition at line 376 of file itkFEMElementBase.cxx.

References GetNodeCoordinates(), GetNumberOfSpatialDimensions(), and ShapeFunctionDerivatives().

Referenced by GetMassMatrix(), GetStiffnessMatrix(), GetStrainsAtPoint(), JacobianDeterminant(), JacobianInverse(), and ShapeFunctionGlobalDerivatives().

Element::Float itk::fem::Element::JacobianDeterminant ( const VectorType pt,
const MatrixType pJ = 0 
) const
virtual

Compute the determinant of the Jacobian matrix at a given point with respect to the local coordinate system.

Parameters:
ptPoint in local element coordinates.
pJOptional pointer to Jacobian matrix computed at point pt. If this is set to 0, the Jacobian will be computed as necessary.

Reimplemented in itk::fem::Element2DC1Beam, itk::fem::Element2DC0QuadraticTriangular, and itk::fem::Element2DC0LinearTriangular.

Definition at line 409 of file itkFEMElementBase.cxx.

References Jacobian().

Referenced by GetMassMatrix(), GetStiffnessMatrix(), itk::fem::ImageMetricLoadImplementation< TLoadClass >::Implementation(), and itk::fem::LoadImplementationGenericBodyLoad::Implementation().

void itk::fem::Element::JacobianInverse ( const VectorType pt,
MatrixType invJ,
const MatrixType pJ = 0 
) const
virtual

Compute the inverse of the Jacobian matrix at a given point with respect to the local coordinate system.

Parameters:
ptPoint in local element coordinates.
invJReference to the object of MatrixType that will store the computed inverse if Jacobian.
pJOptional pointer to Jacobian matrix computed at point pt. If this is set to 0, the Jacobian will be computed as necessary.

Reimplemented in itk::fem::Element2DC0QuadraticTriangular, and itk::fem::Element2DC0LinearTriangular.

Definition at line 432 of file itkFEMElementBase.cxx.

References Jacobian().

Referenced by ShapeFunctionGlobalDerivatives().

void itk::fem::FEMLightObject::Read ( std::istream &  f,
void *  info 
)
virtualinherited

Read an object data from input stream. Call this member to initialize the data members in the current object by reading data from provided input stream. Derived classes should first call the the parent's read function, to initialize the data from parent. Note that you must manually create the object of desired type using the FEMObjectFactory before you can call read function (this is pretty obvious). In this class only the global number is read from file. Derived classes may require some additional info in order to perform the reading. Pack this info in an object and pass a pointer to it in the info parameter. If you need runtime typechecking, use a polymorphic class and dynamic_cast operator inside the implementation of Read.

Here we just read the global number from the stream. This should be the first function called when reading object data.

Read and set the global object number

Reimplemented in itk::fem::Element::Node, itk::fem::LoadLandmark, 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 >, itk::fem::ElementStd< 4, 2 >, itk::fem::LoadBCMFC, itk::fem::LoadGravConst, itk::fem::LoadBC, itk::fem::Element2DC1Beam, itk::fem::LoadElement, 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 >, itk::fem::Element3DStrain< Element3DC0LinearTetrahedron >, itk::fem::LoadTest< TClass >, itk::fem::LoadNode, itk::fem::LoadEdge, and itk::fem::MaterialLinearElasticity.

Definition at line 33 of file itkFEMLightObject.cxx.

References itk::fem::FEMLightObject::GN, and itk::fem::FEMLightObject::SkipWhiteSpace().

Referenced by itk::fem::FEMLightObject::CreateFromStream(), itk::fem::MaterialLinearElasticity::Read(), itk::fem::LoadNode::Read(), itk::fem::LoadElement::Read(), itk::fem::LoadBC::Read(), itk::fem::LoadBCMFC::Read(), and itk::fem::Element::Node::Read().

virtual void itk::fem::Element::SetMaterial ( Material::ConstPointer  )
inlinevirtual
virtual void itk::fem::Element::SetNode ( unsigned int  n,
NodeIDType  node 
)
pure virtual
virtual void itk::fem::Element::ShapeFunctionDerivatives ( const VectorType pt,
MatrixType shapeD 
) const
pure virtual

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.

Parameters:
ptPoint in local element coordinates.
shapeDReference to a matrix object, which will be filled with values of shape function derivatives.
See also:
ShapeFunctionGlobalDerivatives

Implemented in itk::fem::Element2DC1Beam, itk::fem::Element3DC0LinearTetrahedron, itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0QuadraticTriangular, and itk::fem::Element3DC0LinearHexahedron.

Referenced by GetMassMatrix(), GetStiffnessMatrix(), GetStrainsAtPoint(), Jacobian(), and ShapeFunctionGlobalDerivatives().

void itk::fem::Element::ShapeFunctionGlobalDerivatives ( const VectorType pt,
MatrixType shapeDgl,
const MatrixType pJ = 0,
const MatrixType pshapeD = 0 
) const
virtual

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.

Parameters:
ptPoint in local element coordinates.
shapeDglReference to a matrix object, which will be filled with values of shape function derivatives w.r.t. global (world) element coordinates.
pJOptional pointer to Jacobian matrix computed at point pt. If this is set to 0, the Jacobian will be computed as necessary.
pshapeDA pointer to derivatives of shape functions at point pt. If this pointer is 0, derivatives will be computed as necessary.
See also:
ShapeFunctionDerivatives

Definition at line 453 of file itkFEMElementBase.cxx.

References Jacobian(), JacobianInverse(), and ShapeFunctionDerivatives().

Referenced by GetStiffnessMatrix(), and GetStrainsAtPoint().

virtual VectorType itk::fem::Element::ShapeFunctions ( const VectorType pt) const
pure virtual
void itk::fem::FEMLightObject::SkipWhiteSpace ( std::istream &  f)
staticinherited
void itk::fem::FEMLightObject::Write ( std::ostream &  f) const
virtualinherited

Write an object to the output stream. Call this member to write the data members in the current object to the output stream. Here we also need to know which derived class we actually are, so that we can write the class name. The class name is obtained by calling the virtual ClassID() member function and passing the result to the FEMObjectFactory.

Implementations of Write member funtion in derived classes should first call the parent's implementation of Write and finaly write whatever they need.

Here we just write the class name and GN. This should be the first function called when writing object data, so every derived class should first call the parent's write function. The Write function in base (this one) class knows which class is being written by calling the virtual ClassID() function and can write the class name properly.

Reimplemented in itk::fem::Element::Node, itk::fem::LoadLandmark, 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 >, itk::fem::ElementStd< 4, 2 >, itk::fem::LoadBCMFC, itk::fem::LoadGravConst, itk::fem::LoadBC, 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 >, itk::fem::Element3DStrain< Element3DC0LinearTetrahedron >, itk::fem::LoadElement, itk::fem::LoadTest< TClass >, itk::fem::LoadNode, itk::fem::LoadEdge, and itk::fem::MaterialLinearElasticity.

Definition at line 57 of file itkFEMLightObject.cxx.

References itk::fem::FEMLightObject::ClassID(), and itk::fem::FEMLightObject::GN.

Referenced by itk::fem::MaterialLinearElasticity::Write(), itk::fem::LoadNode::Write(), itk::fem::LoadElement::Write(), itk::fem::LoadBC::Write(), itk::fem::LoadBCMFC::Write(), and itk::fem::Element::Node::Write().


Member Data Documentation

const Element::Float itk::fem::Element::gaussPoint
static
Initial value:
{
{ 0.0 },
{ 0.000000000000000 },
{ 0.577350269189626,-0.577350269189626 },
{ 0.774596669241483, 0.000000000000000,-0.774596669241483 },
{ 0.861136311594053, 0.339981043584856,-0.339981043584856,-0.861136311594053 },
{ 0.906179845938664, 0.538469310105683, 0.000000000000000,-0.538469310105683,-0.906179845938664},
{ 0.932469514203152, 0.661209386466264, 0.238619186083197,-0.238619186083197,-0.661209386466264,-0.932469514203152 },
{ 0.949107912342759, 0.741531185599394, 0.405845151377397, 0.000000000000000,-0.405845151377397,-0.741531185599394,-0.949107912342759 },
{ 0.960289856497536, 0.796666477413627, 0.525532409916329, 0.183434642495650,-0.183434642495650,-0.525532409916329,-0.796666477413627,-0.960289856497536 },
{ 0.968160239507626, 0.836031107326636, 0.613371432700590, 0.324253423403809, 0.000000000000000,-0.324253423403809,-0.613371432700590,-0.836031107326636,-0.968160239507626 },
{ 0.973906528517172, 0.865063366688985, 0.679409568299024, 0.433395394129247, 0.148874338981631,-0.148874338981631,-0.433395394129247,-0.679409568299024,-0.865063366688985,-0.973906528517172 }
}

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.

See also:
gaussWeight

Definition at line 478 of file itkFEMElementBase.h.

const Element::Float itk::fem::Element::gaussWeight
static
Initial value:
{
{ 0.0 },
{ 2.000000000000000 },
{ 1.000000000000000, 1.000000000000000 },
{ 0.555555555555555, 0.888888888888889, 0.555555555555555 },
{ 0.347854845137454, 0.652145154862546, 0.652145154862546, 0.347854845137454 },
{ 0.236926885056189, 0.478628670499366, 0.568888888888889, 0.478628670499366, 0.236926885056189 },
{ 0.171324492379170, 0.360761573048139, 0.467913934572691, 0.467913934572691, 0.360761573048139, 0.171324492379170 },
{ 0.129484966168869, 0.279705391489277, 0.381830050505119, 0.417959183673469, 0.381830050505119, 0.279705391489277, 0.129484966168869 },
{ 0.101228536290376, 0.222381034453374, 0.313706645877887, 0.362683783378362, 0.362683783378362, 0.313706645877887, 0.222381034453374, 0.101228536290376 },
{ 0.081274388361575, 0.180648160694858, 0.260610696402935, 0.312347077040003, 0.330239355001260, 0.312347077040003, 0.260610696402935, 0.180648160694858, 0.081274388361575 },
{ 0.066671344308688, 0.149451349150581, 0.219086362515982, 0.269266719309996, 0.295524224714753, 0.295524224714753, 0.269266719309996, 0.219086362515982, 0.149451349150581, 0.066671344308688 }
}

Weights for Gauss-Legendre integration.

See also:
gaussPoint

Definition at line 485 of file itkFEMElementBase.h.

int itk::fem::FEMLightObject::GN
inherited

Global number of an object (ID of an object) In general the ID's are required to be unique only within a specific type of derived classes (Elements, Nodes, ...) If the GN is not required, it can be ignored. (normally you need the GN when writing or reading objects to/from stream.

Definition at line 163 of file itkFEMLightObject.h.

Referenced by itk::fem::FEMLightObject::FEMLightObject(), itk::fem::Generate2DRectilinearMesh(), itk::fem::Generate3DRectilinearMesh(), itk::fem::FEMLightObject::Read(), itk::fem::LoadNode::Write(), itk::fem::LoadBC::Write(), and itk::fem::FEMLightObject::Write().

const std::string itk::fem::FEMLightObject::whitespaces = " \t\n\r"
staticinherited

Const string of all whitespace characters. This string is used by SkipWhiteSpace function.

Definition at line 133 of file itkFEMLightObject.h.

Referenced by itk::fem::FEMLightObject::CreateFromStream(), and itk::fem::MaterialLinearElasticity::Read().


The documentation for this class was generated from the following files:

Generated at Sun Feb 3 2013 02:53:41 for Orfeo Toolbox with doxygen 1.8.1.1