#include <itkFEMSolver.h>
Inheritance diagram for itk::fem::Solver:
Public Types | |
typedef Element::Float | Float |
typedef Element::ArrayType | ElementArray |
typedef Node::ArrayType | NodeArray |
typedef Load::ArrayType | LoadArray |
typedef Material::ArrayType | MaterialArray |
typedef Element::VectorType | VectorType |
typedef itk::Image< Element::ConstPointer, MaxGridDimensions > | InterpolationGridType |
Public Methods | |
itkStaticConstMacro (MaxGridDimensions, unsigned int, 3) | |
void | InitializeInterpolationGrid (const VectorType &size, const VectorType &bb1, const VectorType &bb2) |
const InterpolationGridType * | GetInterpolationGrid (void) const |
const Element * | GetElementAtPoint (const VectorType &pt) const |
void | Read (std::istream &f) |
void | Write (std::ostream &f) |
virtual void | Clear (void) |
void | GenerateGFN (void) |
void | AssembleK (void) |
virtual void | InitializeMatrixForAssembly (unsigned int N) |
virtual void | AssembleElementMatrix (Element::Pointer e) |
void | ApplyBC (int dim=0, unsigned int matrix=0) |
void | AssembleF (int dim=0) |
void | DecomposeK (void) |
virtual void | Solve (void) |
void | UpdateDisplacements (void) |
Float | GetSolution (unsigned int i, unsigned int which=0) |
unsigned int | GetNumberOfDegreesOfFreedom (void) |
Float | GetDeformationEnergy (unsigned int SolutionIndex=0) |
Solver () | |
virtual | ~Solver () |
void | SetLinearSystemWrapper (LinearSystemWrapper::Pointer ls) |
LinearSystemWrapper::Pointer | GetLinearSystemWrapper () |
virtual void | InitializeLinearSystemWrapper (void) |
virtual Float | GetTimeStep (void) const |
virtual void | SetTimeStep (Float dt) |
void | InitializeInterpolationGrid (const VectorType &size) |
virtual void | FinalizeMatrixAfterAssembly (void) |
Public Attributes | |
ElementArray | el |
NodeArray | node |
LoadArray | load |
MaterialArray | mat |
Protected Attributes | |
unsigned int | NGFN |
unsigned int | NMFC |
LinearSystemWrapper::Pointer | m_ls |
This is the main class used for solving the FEM problems. It also stores all the objects that define the specific FEM problem. Normally there is one Solver object for each FEM problem.
Definition at line 41 of file itkFEMSolver.h.
|
Array that holds pointers to all elements. since we want to be able to manipulate the array we have to use special pointers Definition at line 54 of file itkFEMSolver.h. |
|
Local float type Definition at line 48 of file itkFEMSolver.h. Referenced by itk::fem::SolverHyperbolic::GetTimeStep(), itk::fem::SolverCrankNicolson::GSMax(), itk::fem::SolverHyperbolic::SetTimeStep(), and itk::fem::SolverCrankNicolson::~SolverCrankNicolson(). |
|
Type used to store interpolation grid Definition at line 95 of file itkFEMSolver.h. |
|
Array that holds special pointers to all external loads Definition at line 66 of file itkFEMSolver.h. |
|
Array that holds pointers to the materials Definition at line 72 of file itkFEMSolver.h. |
|
Array that holds special pointers to the nodes Definition at line 60 of file itkFEMSolver.h. |
|
VectorType from the Element base class Definition at line 78 of file itkFEMSolver.h. Referenced by InitializeInterpolationGrid(). |
|
Default constructor sets Solver to use VNL linear system .
|
|
Virtual destructor Definition at line 267 of file itkFEMSolver.h. |
|
Apply the boundary conditions to the system.
Referenced by FinalizeMatrixAfterAssembly(). |
|
Copy the element stiffness matrix into the correct position in the master stiffess matrix. Since more complex Solver classes may need to assemble many matrices and may also do some funky stuff to them, this function is virtual and can be overriden in a derived solver class. Reimplemented in itk::fem::SolverHyperbolic. |
|
Assemble the master force vector.
|
|
Assemble the master stiffness matrix (also apply the MFCs to K) |
|
Cleans all data members, and initializes the solver to initial state. |
|
Decompose matrix using svd, qr, whatever ... |
|
This function is called after the assebly has been completed. In this class it is only used to apply the BCs. You may however use it to perform other stuff in derived solver classes. Reimplemented in itk::fem::SolverHyperbolic. Definition at line 189 of file itkFEMSolver.h. References ApplyBC(). |
|
Assign a global freedom numbers to each DOF in a system. This must be done before any other solve function can be called. |
|
Get the total deformation energy using the chosen solution |
|
Returns the pointer to the element which contains global point pt.
|
|
Returns pointer to interpolation grid, which is an itk::Image of pointers to Element objects. Normally you would use physical coordinates to get specific points (pointers to elements) from the image. You can then use the Elemenet::InterpolateSolution member function on the returned element to obtain the solution at this point.
Definition at line 132 of file itkFEMSolver.h. |
|
Gets the LinearSystemWrapper object.
Definition at line 290 of file itkFEMSolver.h. |
|
Definition at line 249 of file itkFEMSolver.h. References NGFN. |
|
Definition at line 244 of file itkFEMSolver.h. References m_ls. |
|
Returns the time step used for dynamic problems. Reimplemented in itk::fem::SolverHyperbolic. Definition at line 301 of file itkFEMSolver.h. |
|
Same as InitializeInterpolationGrid(size, {0,0...}, size); Definition at line 116 of file itkFEMSolver.h. References InitializeInterpolationGrid(), and VectorType. |
|
Initialize the interpolation grid. The interpolation grid is used to find elements that containg specific points in a mesh. The interpolation grid stores pointers to elements for each point on a grid thereby providing a fast way (lookup table) to perform interpolation of results.
Referenced by InitializeInterpolationGrid(). |
|
Performs any initialization needed for LinearSystemWrapper object i.e. sets the maximum number of matrices and vectors. Reimplemented in itk::fem::SolverHyperbolic. |
|
This function is called before assembling the matrices. You can override it in a derived class to account for special needs.
Reimplemented in itk::fem::SolverHyperbolic. |
|
Since the itk::Image is templated over the number of dimensions, we have to know this at compile time. Solver class, however, can handle elements in any number of dimensions. In order to be able to use the Image, we choose the maximum number of space dimension that this function will be able to handle. Any unused dimensions are filled with zero. For example: If a 2D node coordinates are {1.0,3.0} then the corresponding phisycal point in an image is {1.0,3.0,0.0}; |
|
Reads the whole system (nodes, materials and elements) from input stream |
|
Sets the LinearSystemWrapper object that will be used when solving the master equation. If this function is not called, a default VNL linear system representation will be used (class LinearSystemWrapperVNL).
|
|
Sets the time step used for dynamic problems.
Reimplemented in itk::fem::SolverHyperbolic. Definition at line 308 of file itkFEMSolver.h. |
|
Solve for the displacement vector u. May be overriden in derived classes. Reimplemented in itk::fem::SolverCrankNicolson, and itk::fem::SolverHyperbolic. |
|
Copy solution vector u to the corresponding nodal values, which are stored in node objects). This is standard post processing of the solution |
|
Writes everything (nodes, materials and elements) to output stream |
|
Definition at line 55 of file itkFEMSolver.h. |
|
Definition at line 67 of file itkFEMSolver.h. |
|
Pointer to LinearSystemWrapper object. Definition at line 324 of file itkFEMSolver.h. Referenced by GetSolution(), itk::fem::SolverCrankNicolson::GSMax(), and SetTimeStep(). |
|
Definition at line 73 of file itkFEMSolver.h. |
|
Number of global degrees of freedom in a system Definition at line 315 of file itkFEMSolver.h. Referenced by GetNumberOfDegreesOfFreedom(), and SetTimeStep(). |
|
Number of multi freedom constraints in a system. This member is set in a AssembleK function. Definition at line 321 of file itkFEMSolver.h. Referenced by SetTimeStep(). |
|
Definition at line 61 of file itkFEMSolver.h. |