SOFA v21.12


What’s new in SOFA v21.12

Breaking changes

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

Work within the SOFA-NG and Topology projects implied to:

  • Disable the method createTopologyHandler with a TopologyHandler* as parameter #2393
  • Move all TopologyData from SofaBaseTopology to Sofa.Core #2423
  • Refactor the TopologyContainer #2387

Cleaning and simplifying the code base implied to:

  • Factorize access to the mstate #2438
  • Replace boost’s program_options with cxxopts #2263
  • Dispatch *Matrix from BTDLinearSolver, and BlockDiagonalMatrix #2334
  • Dispatch EigenMatrix and EigenVector from Eigen2Solver #2339

Constant efforts are also conducted to improve the user experience:

  • Collision response names are clarified #2522
  • MeshObjLoader is renamed to MeshOBJLoader for homogeneity #2428

Find all the breaking pull-requests introduced since the last release on GitHub.


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


Introduction of callbacks for topology changes

For several month, Erik Pernod conducted the implementation of modernized pipeline for topology change in SOFA. This work namely includes the following contributions:

  • Remove unnecessary code in BaseTopologyData #2082
  • Register TopologyHandler directly in each TopologyContainer #2085
  • Remove method registerTopologicalData() from TopologyData #2086
  • Add callback mechanism in TopologyHandler to handle TopologyChanges #2087
  • Merge TopologySubsetData and TopologySparseData #2114
  • Remove method applyTestCreateFunction in TopologyDataHandler #2171
  • Remove several TopologyDataHandler and headers inclusion in components #2162

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

Plugin: Follou Haptics

This plugin provides an integration of Follou AB’s devices inside SOFA. Meaning C++ classes to interface and communicate with the devices from SOFA. Read more about the Follou Haptics plugin!

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: SofaBenchmark

This SOFA application to benchmark simulation code using Google benchmark. Read more about the Benchmark project!

Do not hesitate to test and enrich it!

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!

Additional improvements

Specific efforts have been put in the user experience:

  • Improve the graph readability in runSofa #2356
  • You will now be warned if components are missing to solve a specific response #2523
  • Messages are clarified when a linear solver is missing #2221
  • Messages are clarified when a template parameter is not compatible with current context #2262

Along with other improvements:

  • MeshGmshLoader now handles recent MSH formats #2155
  • Multiple selection of timers is possible in the profiler #2141
  • A performance optimization is added on the HexahedronFEMForceField when assembling by bloc #2240
  • In the PluginManager, it is possible to check if a plugin is init at the load stage #2425
  • An example is available on how to create heterogeneous tetrahedral FEM elasticity#2289

SOFA v21.12 contributors

495 posts on forum
283 merged pull-requests
1411 clones of the repository
13 contributors on GitHub

Back to Top