New MatrixAssembly API
The former system assembly was presenting limitations, namely the absence of access to system matrices (M, B, K) for users, a complexified API, no indirect approach for the constraint resolution among others. A refactoring therefore started to overcome these limitations and this new matrix assembly API has been introduced in this release.
Read more about the new SOFA matrix assembly API online and see the python examples.
In #3548 and #3552, new tools were introduced to write multithreaded code more efficiently. As an example, a function
sofa::simulation::parallelForEachRange() proposes a function applied to a range in parallel. Two ForceFields now rely on these new tools:
Examples easier to find!
Now, the examples/Component/ folder has been refactored in order to follow the recent SOFA module architecture. Using the same structure for the namespaces, the code and the examples makes it easier for users to:
- find an example
- find the associated RequiredPlugin
- deduce the #include when developing in SOFA
Better user experience
New changes will ease the design of your simulations:
- [all] Give reason when component cannot be created #3682
- [Core] Display flags spelling suggestion #3575
- [SceneChecking] Add check when setting contactStiffness uselessly #3843
- [Simulation] Suggest required plugin in the syntax of the scene loader #3799
New methods and data
For the collision detection, two interesting changes occured: one in the PenalityContactForceField allowing to account for its implicit contribution and the possibility to now access constraint forces in the same way in the LCPConstraintSolver and the GenericConstraintSolver. Note as well this post assisting on how to access the contact forces when using constraint resolution based on Lagrange multipliers.
- [Collision.Response.Contact] Implement addKToMatrix for PenalityContactForceField #3626
- [Constraint] Add data to access constraint forces in LCPCS #3796