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.
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