SOFA v22.06


What’s new in SOFA v22.06

Breaking changes

SOFA is currently changing a lot (for the good!). Architecture refactoring and introduction of new features have consequences in the API. Major breaking contributions are detailed below:


Due to the numerous changes in the code base,
make sure to browse all the breaking ones!


Work within the SOFA-NG project implied to refactor all SOFA architecture:

  • Old modules are now deprecated, new modules were created, components were moved to the new modules following a better dispatch.
  • Deprecated modules are still usable for now but will be permanently removed at v23.06.

A documentation on transition is available to help you understand the changes and update your code.

Cleaning and simplifying the code base implied to:

  • Update data name in SparseLDLSolver #2904
  • Add a helper class for consistent component naming #2631
  • Move TriangleOctree utility class to Helper #2805
  • BoxStiffSpringForceField is now a pack of components #2621
  • Some cleaning in TriangularFEMForceFieldOptim #2567
  • Create a TriangleFEMUtils class to factorise [Triangle,Triangular]FEMForceField code #2287
  • Remove unused _assembling data #2901
  • Fix duplicate Data Points in PointSetTopologyContainer #2993

Find all the breaking pull-requests introduced in this release.

Matrix access with SofaMatrix

Recent developments from Alexandre Bilger focus on the matrix assembly in SOFA. In this context, a plugin “SofaMatrix” has been added to export the global system matrix. The exporter allows to write the file under several formats.

Since #2782, it is possible to export the compliance matrix of a constraint solver as well.

See the Matrix Assembly GitHub project and the associated pull-requests for more information.

New features for linear solvers

Complementary of matrix-related work, a lot of improvements have been done around linear solvers.
This namely includes the following contributions:

  • A new asynchronous LDL solver called AsyncSparseLDLSolver, to be used with a preconditioned CG (ShewchukPCGLinearSolver) and a WarpPreconditioner. See #2661
  • SparseLDLSolver, SparseLUSolver and SparseCholeskySolver now support fill reducing permutation. See and #2788
  • Eigen-based version of DirectSparseSolver, SimplicialLDLT, SimplicialLLT, SparseLU and SparseQT have been implmemented. See #2926

Improvement of the SofaCUDA plugin

A lot of efforts have been put in SofaCUDA thanks to Erik Pernod: new algorithms, refresh of old ones, improvements and bugfixes.
Among those changes, the CUDA implementation of HexahedronFEMForceField has been restored. Thanks to this component, a simulation of a beam with 3645 Hexahedra goes from 42 fps on CPU to 180 fps with CUDA.
More changes related to SofaCUDA:

See all SofaCUDA-related pull-requests for more details.

Load images without CImgPlugin

Thanks to the integration of STB library in the core of SOFA, it is now possible to load images without having to use the plugin CImgPlugin. STB is open source, very light and header-only.
See pull-request #2551 for all details.

Reduce AdvancedTimer overhead

A simple but pretty useful change in the code of AdvancedTimer allowed to greatly improve its performances.
See pull-request #2645 for all details.

Plugin: Caribou

The Caribou project is aimed at multiphysics computation. It brings a plugin that complements SOFA multiphysics framework. It also provides generic C++ utilities, and SOFA components such as solvers and forcefields.
Read more about the Caribou plugin!

Plugin: BeamAdapter

The plugin implements the Kirchhoff rod theory modeling any 1D flexible structure, like catheters or guidewires. Moreover, an adaptive formulation is proposed to model the insertion of such medical devices.
Discover more about the BeamAdapter plugin which is finally open-source!

SOFA v22.06 contributors

780 posts on GitHub Discussions
356 merged pull-requests
1304 clones of the repository
17 contributors on GitHub

Back to Top