Main Page   Groups   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Concepts

itk::fem::Element Class Reference

Abstract base element class. More...

#include <itkFEMElementBase.h>

Inheritance diagram for itk::fem::Element:

Inheritance graph
[legend]
Collaboration diagram for itk::fem::Element:

Collaboration graph
[legend]
List of all members.

Public Types

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

Public Methods

virtual void GetStiffnessMatrix (MatrixType &Ke) const
virtual Float GetElementDeformationEnergy (MatrixType &LocalSolution) const
virtual void GetMassMatrix (MatrixType &Me) 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 VectorTypeGetNodeCoordinates (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

Public Attributes

enum InvalidDegreeOfFreedomID = 0xffffffff }

Static Public Attributes

const Float gaussPoint [gaussMaxOrder+1][gaussMaxOrder]
const Float gaussWeight [gaussMaxOrder+1][gaussMaxOrder]

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


Member Typedef Documentation

typedef FEMPArray<Element> itk::fem::Element::ArrayType
 

Array class that holds special pointers to the Element objects

Definition at line 90 of file itkFEMElementBase.h.

typedef const Self* itk::fem::Element::ConstPointer
 

Const pointer or SmartPointer to an object.

Reimplemented from itk::fem::FEMLightObject.

Reimplemented in itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearLineStress, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0LinearQuadrilateralMembrane, itk::fem::Element2DC0LinearQuadrilateralStress, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0LinearTriangularMembrane, itk::fem::Element2DC0LinearTriangularStress, itk::fem::Element2DC0QuadraticTriangular, itk::fem::Element2DC0QuadraticTriangularStress, itk::fem::Element2DC1Beam, itk::fem::Element3DC0LinearHexahedron, itk::fem::Element3DC0LinearHexahedronMembrane, itk::fem::Element3DC0LinearHexahedronStrain, itk::fem::Element3DC0LinearTetrahedron, itk::fem::Element3DC0LinearTetrahedronMembrane, itk::fem::Element3DC0LinearTetrahedronStrain, itk::fem::Element1DStress< Element2DC0LinearLine >, itk::fem::Element2DMembrane< Element2DC0LinearQuadrilateral >, itk::fem::Element2DMembrane< 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::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 79 of file itkFEMElementBase.h.

typedef unsigned int itk::fem::Element::DegreeOfFreedomIDType
 

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.

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

Floating point type used in all Element classes.

Reimplemented in itk::fem::Element1DStress< Element2DC0LinearLine >, itk::fem::Element2DMembrane< Element2DC0LinearQuadrilateral >, itk::fem::Element2DMembrane< 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::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 85 of file itkFEMElementBase.h.

Referenced by SetMaterial().

typedef LoadType::Pointer itk::fem::Element::LoadPointer
 

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.

typedef FEMLightObject itk::fem::Element::LoadType
 

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.

typedef vnl_matrix<Float> itk::fem::Element::MatrixType
 

Class used to store the element stiffness matrix

Reimplemented in itk::fem::Element1DStress< Element2DC0LinearLine >, itk::fem::Element2DMembrane< Element2DC0LinearQuadrilateral >, itk::fem::Element2DMembrane< 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::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 95 of file itkFEMElementBase.h.

typedef Node::ConstPointer itk::fem::Element::NodeIDType
 

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

typedef Self* itk::fem::Element::Pointer
 

Pointer or SmartPointer to an object.

Reimplemented from itk::fem::FEMLightObject.

Reimplemented in itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearLineStress, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0LinearQuadrilateralMembrane, itk::fem::Element2DC0LinearQuadrilateralStress, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0LinearTriangularMembrane, itk::fem::Element2DC0LinearTriangularStress, itk::fem::Element2DC0QuadraticTriangular, itk::fem::Element2DC0QuadraticTriangularStress, itk::fem::Element2DC1Beam, itk::fem::Element3DC0LinearHexahedron, itk::fem::Element3DC0LinearHexahedronMembrane, itk::fem::Element3DC0LinearHexahedronStrain, itk::fem::Element3DC0LinearTetrahedron, itk::fem::Element3DC0LinearTetrahedronMembrane, itk::fem::Element3DC0LinearTetrahedronStrain, itk::fem::Element1DStress< Element2DC0LinearLine >, itk::fem::Element2DMembrane< Element2DC0LinearQuadrilateral >, itk::fem::Element2DMembrane< 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::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 79 of file itkFEMElementBase.h.

typedef Element itk::fem::Element::Self
 

Standard Self typedef.

Reimplemented from itk::fem::FEMLightObject.

Reimplemented in itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearLineStress, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0LinearQuadrilateralMembrane, itk::fem::Element2DC0LinearQuadrilateralStress, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0LinearTriangularMembrane, itk::fem::Element2DC0LinearTriangularStress, itk::fem::Element2DC0QuadraticTriangular, itk::fem::Element2DC0QuadraticTriangularStress, itk::fem::Element2DC1Beam, itk::fem::Element3DC0LinearHexahedron, itk::fem::Element3DC0LinearHexahedronMembrane, itk::fem::Element3DC0LinearHexahedronStrain, itk::fem::Element3DC0LinearTetrahedron, itk::fem::Element3DC0LinearTetrahedronMembrane, itk::fem::Element3DC0LinearTetrahedronStrain, itk::fem::Element1DStress< Element2DC0LinearLine >, itk::fem::Element2DMembrane< Element2DC0LinearQuadrilateral >, itk::fem::Element2DMembrane< 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::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 79 of file itkFEMElementBase.h.

typedef FEMLightObject itk::fem::Element::Superclass
 

Standard Superclass typedef.

Reimplemented from itk::fem::FEMLightObject.

Reimplemented in itk::fem::Element2DC0LinearLine, itk::fem::Element2DC0LinearLineStress, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0LinearQuadrilateralMembrane, itk::fem::Element2DC0LinearQuadrilateralStress, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0LinearTriangularMembrane, itk::fem::Element2DC0LinearTriangularStress, itk::fem::Element2DC0QuadraticTriangular, itk::fem::Element2DC0QuadraticTriangularStress, itk::fem::Element2DC1Beam, itk::fem::Element3DC0LinearHexahedron, itk::fem::Element3DC0LinearHexahedronMembrane, itk::fem::Element3DC0LinearHexahedronStrain, itk::fem::Element3DC0LinearTetrahedron, itk::fem::Element3DC0LinearTetrahedronMembrane, itk::fem::Element3DC0LinearTetrahedronStrain, itk::fem::Element1DStress< Element2DC0LinearLine >, itk::fem::Element2DMembrane< Element2DC0LinearQuadrilateral >, itk::fem::Element2DMembrane< 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::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 79 of file itkFEMElementBase.h.

typedef vnl_vector<Float> itk::fem::Element::VectorType
 

Class to store the element load vector

Reimplemented in itk::fem::Element1DStress< Element2DC0LinearLine >, itk::fem::Element2DMembrane< Element2DC0LinearQuadrilateral >, itk::fem::Element2DMembrane< 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::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 100 of file itkFEMElementBase.h.


Member Enumeration Documentation

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
Enumeration values:
gaussMaxOrder 

Definition at line 464 of file itkFEMElementBase.h.


Member Function Documentation

DegreeOfFreedomIDType itk::fem::Element::GetDegreeOfFreedom unsigned int    local_dof const [inline]
 

Convenient way to access IDs of degrees of freedom that are stored in node objects.

Parameters:
local_dof  Local number of degree of freedom within an element.

Definition at line 377 of file itkFEMElementBase.h.

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

virtual VectorType itk::fem::Element::GetGlobalFromLocalCoordinates const VectorType   pt const [virtual]
 

Transforms the given local element coordinates into global.

Parameters:
pt  Point in local element coordinates.

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

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:
i  Integration point number 0<=i<GetNumberOfIntegrationPoints()
pt  Reference to object of class VectorType that will hold the integration point.
w  Reference to Float variable that will hold the weight.
order  Order of integration.
See also:
GetNumberOfIntegrationPoints()

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

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:
l  Pointer to a load object.
Fe  Reference to vector object that will store nodal forces.
See also:
VisitorDispatcher

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:
globalPt  Reference to vector containing a point in global (world) coordinates.
localPt  Reference to the vector that will store the local coordinate.

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

virtual void itk::fem::Element::GetMassMatrix MatrixType   Me const [virtual]
 

Compute and return element mass matrix (Me) in global coordinate system.

b T int N(x) (rho c) N(x) dx a

where (rho c) is constant (element density), which is here assumed to be equal to one. If this is not the case, this function must be overriden in a derived class. Implementation is similar to GetStiffnessMatrix.

Reimplemented in itk::fem::Element2DC0LinearLineStress, itk::fem::Element2DC1Beam, itk::fem::Element2DMembrane< Element2DC0LinearQuadrilateral >, itk::fem::Element2DMembrane< Element2DC0LinearTriangular >, itk::fem::Element2DStress< Element2DC0QuadraticTriangular >, itk::fem::Element2DStress< Element2DC0LinearQuadrilateral >, itk::fem::Element2DStress< Element2DC0LinearTriangular >, itk::fem::Element3DMembrane< Element3DC0LinearHexahedron >, and itk::fem::Element3DMembrane< Element3DC0LinearTetrahedron >.

virtual Material::ConstPointer itk::fem::Element::GetMaterial void    const [inline, virtual]
 

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

virtual void itk::fem::Element::GetMaterialMatrix MatrixType   D const [pure virtual]
 

Compute the element material matrix.

Parameters:
D  Reference to a matrix object

Implemented in itk::fem::Element2DC1Beam, itk::fem::Element1DStress< Element2DC0LinearLine >, itk::fem::Element2DMembrane< Element2DC0LinearQuadrilateral >, itk::fem::Element2DMembrane< 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 >.

virtual NodeIDType itk::fem::Element::GetNode unsigned int    n const [pure virtual]
 

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

virtual const VectorType& itk::fem::Element::GetNodeCoordinates unsigned int    n const [pure virtual]
 

Return a vector of global coordinates of n-th node in an element.

Parameters:
n  Local number of node. Must be 0 <= n < this->GetNumberOfNodes().

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

virtual unsigned int itk::fem::Element::GetNumberOfDegreesOfFreedom void    const [inline, virtual]
 

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

virtual unsigned int itk::fem::Element::GetNumberOfDegreesOfFreedomPerNode void    const [pure virtual]
 

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.

Note:
This function must be overriden in all derived classes.

Implemented in itk::fem::Element2DC1Beam, itk::fem::Element1DStress< Element2DC0LinearLine >, itk::fem::Element2DMembrane< Element2DC0LinearQuadrilateral >, itk::fem::Element2DMembrane< 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 >.

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::Element2DC0LinearLine, itk::fem::Element2DC0LinearQuadrilateral, itk::fem::Element2DC0LinearTriangular, itk::fem::Element2DC0QuadraticTriangular, itk::fem::Element2DC1Beam, itk::fem::Element3DC0LinearHexahedron, and itk::fem::Element3DC0LinearTetrahedron.

virtual unsigned int itk::fem::Element::GetNumberOfNodes void    const [pure virtual]
 

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

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

virtual 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:
Ke  Reference 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.

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

virtual void itk::fem::Element::GetStrainDisplacementMatrix MatrixType   B,
const MatrixType   shapeDgl
const [pure virtual]
 

Compute the strain displacement matrix at local point.

Parameters:
B  Reference to a matrix object that will contain the result
shapeDgl  Matrix that contains derivatives of shape functions w.r.t. global coordinates.

Implemented in itk::fem::Element2DC1Beam, itk::fem::Element1DStress< Element2DC0LinearLine >, itk::fem::Element2DMembrane< Element2DC0LinearQuadrilateral >, itk::fem::Element2DMembrane< 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 >.

virtual 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:
pt  Point in local element coordinates.
sol  Reference 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).
solutionIndex  We allow more than one solution vector to be stored - this selects which to use in interpolation.

virtual 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:
pt  Point in local element coordinates.
sol  Reference 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).
f  Number of unknown function to interpolate. Must be 0 <= f < GetNumberOfDegreesOfFreedomPerNode().
solutionIndex  We allow more than one solution vector to be stored - this selects which to use in interpolation.

virtual 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:
pt  Point in local coordinates
J  referece to matrix object, which will contain the jacobian
pshapeD  A pointer to derivatives of shape functions at point pt. If this pointer is 0, derivatives will be computed as necessary.

Reimplemented in itk::fem::Element2DC0LinearLine.

virtual 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:
pt  Point in local element coordinates.
pJ  Optional 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::Element2DC0LinearTriangular, itk::fem::Element2DC0QuadraticTriangular, and itk::fem::Element2DC1Beam.

virtual 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:
pt  Point in local element coordinates.
invJ  Reference to the object of MatrixType that will store the computed inverse if Jacobian.
pJ  Optional 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::Element2DC0LinearTriangular, and itk::fem::Element2DC0QuadraticTriangular.

virtual void itk::fem::Element::SetMaterial Material::ConstPointer    [inline, virtual]
 

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.

See also:
GetMaterial

Reimplemented in itk::fem::Element2DC1Beam, itk::fem::Element1DStress< Element2DC0LinearLine >, itk::fem::Element2DMembrane< Element2DC0LinearQuadrilateral >, itk::fem::Element2DMembrane< 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 410 of file itkFEMElementBase.h.

References Float, and gaussMaxOrder.

virtual void itk::fem::Element::SetNode unsigned int    n,
NodeIDType    node
[pure virtual]
 

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

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:
pt  Point in local element coordinates.
shapeD  Reference to a matrix object, which will be filled with values of shape function derivatives.
See also:
ShapeFunctionGlobalDerivatives

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

virtual 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:
pt  Point in local element coordinates.
shapeDgl  Reference to a matrix object, which will be filled with values of shape function derivatives w.r.t. global (world) element coordinates.
pJ  Optional pointer to Jacobian matrix computed at point pt. If this is set to 0, the Jacobian will be computed as necessary.
pshapeD  A pointer to derivatives of shape functions at point pt. If this pointer is 0, derivatives will be computed as necessary.
See also:
ShapeFunctionDerivatives

virtual VectorType itk::fem::Element::ShapeFunctions const VectorType   pt const [pure virtual]
 

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.

Parameters:
pt  Point in local element coordinates.

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


Member Data Documentation

const Float itk::fem::Element::gaussPoint[gaussMaxOrder+1][gaussMaxOrder] [static]
 

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

const Float itk::fem::Element::gaussWeight[gaussMaxOrder+1][gaussMaxOrder] [static]
 

Weights for Gauss-Legendre integration.

See also:
gaussPoint

Definition at line 484 of file itkFEMElementBase.h.

enum itk::fem::Element::InvalidDegreeOfFreedomID = 0xffffffff }
 

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.

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


The documentation for this class was generated from the following file:
Generated at Fri May 21 01:49:49 2004 for ITK by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2000