ITK FEM Modifications: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
(Created page with "This page describes the changes being made to the ITK FEM framework. The current repository for this work is hosted here *git@github.com:kiranhs/ITKv4FEM-Kiran.git ==Solver== ...")
 
No edit summary
 
Line 1: Line 1:
This page describes the changes being made to the ITK FEM framework. The current repository for this work is hosted here
This page describes the changes being made to the ITK FEM framework. The current repository for this work is hosted on [https://github.com/kiranhs/ITKv4FEM-Kiran github]
*git@github.com:kiranhs/ITKv4FEM-Kiran.git
 





Latest revision as of 14:01, 18 March 2011

This page describes the changes being made to the ITK FEM framework. The current repository for this work is hosted on github


Solver

  • Derive from ProcessObject and template over dimension
    • template <unsigned int VDimension = 3> class ITK_EXPORT Solver1 : public ProcessObject
  • Remove all I/O from Solver
  • Use SetInput() and GetOutput() methods to set the FE problem and to get the deformed mesh
  • Update() method will execute the Solver
  • Retain the following methods
    • SetLinearSystemWrapper()
    • GetLinearSystemWrapper()
    • GetElementAtPoint()
    • GetDeformationEnergy()
    • SetTimeStep()
    • GetSolution()

FEMObject

A new object type was added, itk::fem::FEMObject, that is used to define the FEM problem. The class derives from DataObject and is templated over dimension.

  • template <unsigned int VDimension = 3> class ITK_EXPORT FEMObject : public DataObject
  • Class Methods
    • GetNumberOfDegreesOfFreedom()
    • GetNumberOfMultiFreedomConstraints()
    • GetNumberOfNodes
    • GetNumberOfElements
    • GetNumberOfLoads(void)
    • GetNumberOfMaterials(void)
    • AddNextElement(Element::Pointer e)
    • InsertElement(Element::Pointer e, ElementIdentifier index)
    • AddNextNode(Node::Pointer e)
    • InsertNode(Node::Pointer e, NodeIdentifier index)
    • AddNextMaterial(Material::Pointer mat)
    • InsertMaterial(Material::Pointer e, MaterialIdentifier index)
    • AddNextLoad(Load::Pointer ld)
    • InsertLoad(Load::Pointer ld, LoadIdentifier index)
    • GetElement(ElementIdentifier index)
    • GetElementWithGlobalNumber(int globalNumber)
    • GetNode(NodeIdentifier index)
    • GetNodeWithGlobalNumber(int globalNumber)
    • GetMaterial(MaterialIdentifier index)
    • GetMaterialWithGlobalNumber(int globalNumber)
    • GetLoad(LoadIdentifier index)
    • GetLoadWithGlobalNumber(int globalNumber)
    • RenumberNodeContainer()
    • FinalizeMesh()

FEMSpatialObject

This class provides a spatial object wrapper around the FEMObject. This class facilities the I/O which is now supported by the MetaIO library.

Using FEM Framework

 const unsigned int Dimension = 3;
 typedef itk::SpatialObject<Dimension>         SpatialObjectType;
 typedef SpatialObjectType::Pointer            SpatialObjectPointer;

 // Read the FEM Problem
 typedef itk::SpatialObjectReader<Dimension>    SpatialObjectReaderType;
 typedef SpatialObjectReaderType::Pointer            SpatialObjectReaderPointer;
 SpatialObjectReaderPointer SpatialReader = SpatialObjectReaderType::New();
 SpatialReader->SetFileName( argv[1] );
 SpatialReader->Update();

 typedef itk::FEMObjectSpatialObject<Dimension>    FEMObjectSpatialObjectType;
 typedef FEMObjectSpatialObjectType::Pointer       FEMObjectSpatialObjectPointer;
 FEMObjectSpatialObjectType::Pointer femSO = 
      dynamic_cast<FEMObjectSpatialObjectType*>((*(children->begin())).GetPointer());
 femSO->GetFEMObject()->FinalizeMesh();

 
 // Solve FEM Problem
 typedef itk::fem::Solver1<Dimension>    Solver3DType;
 Solver3DType::Pointer solver = Solver3DType::New();
 solver->SetInput( femSO->GetFEMObject() );
 solver->Update( );
 

 // Write the solution - (i.e. deformed mesh)
 FEMObjectSpatialObjectType::Pointer femSODef = FEMObjectSpatialObjectType::New();
 femSODef->SetFEMObject(solver->GetOutput());

 typedef itk::SpatialObjectWriter<Dimension>  SpatialObjectWriterType;
 typedef SpatialObjectWriterType::Pointer     SpatialObjectWriterPointer;
 SpatialObjectWriterPointer SpatialWriter = SpatialObjectWriterType::New();
 SpatialWriter->SetInput(femSODef);
 SpatialWriter->SetFileName( argv[2] );
 SpatialWriter->Update();

Ongoing Work

  • Remove old FEM Factory infrastructure
  • Finalize how to handle Image derived loads
  • Update FEM Registration
  • Merge with Modular ITK
  • Further code cleanup and testing