19 #ifndef __itkFEMSolver_h
20 #define __itkFEMSolver_h
68 template <
unsigned int VDimension = 3>
85 itkStaticConstMacro(FEMDimension,
unsigned int, VDimension);
86 itkStaticConstMacro(MaxDimensions,
unsigned int, 3);
139 virtual Float GetTimeStep(
void)
const;
146 virtual void SetTimeStep(
Float dt);
149 Float GetSolution(
unsigned int i,
unsigned int which = 0);
153 using Superclass::SetInput;
173 Float GetDeformationEnergy(
unsigned int SolutionIndex = 0);
215 void InitializeInterpolationGrid(
const InterpolationGridSizeType & size,
const InterpolationGridPointType & bb1,
216 const InterpolationGridPointType & bb2);
227 for(
unsigned int i = 0; i < FEMDimension; i++ )
229 bb2[i] = size[i] - 1.0;
231 InitializeInterpolationGrid(size, bb1, bb2);
237 void InitializeInterpolationGrid(
const InterpolationGridRegionType & region,
238 const InterpolationGridPointType & origin,
239 const InterpolationGridSpacingType & spacing,
240 const InterpolationGridDirectionType & direction);
254 return m_InterpolationGrid.GetPointer();
261 using Superclass::MakeOutput;
284 void PrintSelf(std::ostream& os,
Indent indent)
const;
312 virtual void InitializeMatrixForAssembly(
unsigned int N);
319 virtual void FinalizeMatrixAfterAssembly(
void)
355 void ApplyBC(
int dim = 0,
unsigned int matrix = 0);
364 void AssembleF(
int dim = 0);
369 void DecomposeK(
void);
374 virtual void RunSolver(
void);
380 void UpdateDisplacements(
void);
385 void FillInterpolationGrid(
void);
391 virtual void InitializeLinearSystemWrapper(
void);
423 void operator=(
const Self &);
437 #ifndef ITK_MANUAL_INSTANTIATION
438 #include "itkFEMSolver.hxx"
441 #endif // #ifndef __itkFEMSolver_h