Features

download
SOFA is an open-source framework for interactive mechanical simulation, with emphasis on biomechanics and robotics.

Software architecture

LGPL OpenCore

Relying on a C++ implementation, SOFA offers efficient algorithms and methods to solve continuum mechanics problems. Its interactive capability makes it a great tool for off- and on-line medical applications. The SOFA core has a LGPL license, which is permissive and non-contaminating.

The SOFA framework relies on an open-core structure for maximum flexibility. Libraries are the central elements of SOFA, defining all core mechanisms of the engines, while modules include the implementations of algorithms and models.

SOFA is available on the three platforms: Windows, MacOS and Linux, following a CI & CD.

Plugins

Around the open core, several public and private plugins implemented by the community are available. These additional packages can be activated at will to build your own configuration of SOFA.

Core features

The SOFA engine offers state-of-the-art constitutive laws and algorithms to efficiently compute soft and rigid body dynamics. Linear and non-linear elastic models as well explicit/implicit integration schemes and traditional linear solvers.

The SOFA engine provides many algorithms and physiological models. Here is a short list of the available codes in SOFA. First, SOFA includes different integration schemes and linear system solvers:

FEM mechanical laws linear elasticity (small, co-rotational, large), St Venant Kirchhoff, Neo-Hookean, Mooney-Rivlin, Ogden, Veronda-Westman, Costa, Boyce-Arruda
Other models rigid bodies, mass spring and some basic SPH
Integration schemes Euler explicit, Euler implicit, Newmark implicit, variational symplectic integrator, RK2, RK4, static solver
Linear solvers conjugate gradient, MinRes and direct solvers (BTD, LU, LDL)

Core concepts

Scene graph

A SOFA simulation is described as a Direct Acyclic Graph (DAG), i.e. a generalized hierarchy. This graph is composed of nodes containing the components defining the mechanical properties and the numerical tools associated to each object. A mechanism of visitor uses this graph structure at each simulation step. Defining a SOFA simulation therefore comes down to defining this scene graph.

Multi-model representation

The SOFA architecture relies on a multi-model representation which allows to use different representations (e.g. mechanical, collision and rendering) of the same object. Those different representations are connected together through a mechanism called the “Mappings”. With this features, SOFA allows users to define where accuracy is needed while reaching the best performances possible.

Relying on the Finite Element Methods (FEM), SOFA expects a space discretization (mesh) of the simulated objects as input. Usual topologies are available in SOFA (points, edges, triangles, quads, tetrahedra, hexahedra). Loaders allow to use various file formats (obj, stl, msh, vtk, etc.) which can be directly uploaded in the simulation. SOFA topology containers also support topological changes. Finally, a collision pipeline is available in SOFA. Various collision primitives (points, edges, triangles, spheres, boxes), various detection methods (BVH, discrete intersection, distance maps) and various collision response methods are available (penalty method, LCP-based constraints).

Plugins: additional features

Interactions

With its emphasis to real-time simulation, SOFA makes possible to couple simulation and optimization method/AI, to include user interactions in the simulation (cutting, suturing, etc.), using possibly haptics.

Parallelization

SOFA flexibility also resides in the fact that the scene graph describes the simulation while allowing a possible parallel scheduling. Both GPU and multithreading parallelization approaches are available.

Python

All SOFA simulations can be succinctly described by a python script, thus making the prototyping, the benchmarking and the integration in your pipelines easier.
 

Browse more plugins

Community

Since 2006, SOFA has been developed by an international team of core-developers and contributors. If SOFA is a useful tool in your everyday work, you can make a difference for the open-source project in many different ways: add SOFA in your project proposal, contribute, participate to our events, cite us and communicate on social media!

Today, the SOFA Consortium

Exactly ten years after the first commit in SOFA, Inria founded the SOFA Consortium in December 2015. This Consortium now:

  • represents the identity of SOFA,
  • organizes and develops the community,
  • distributes and makes SOFA more stable.

Being closer to the SOFA community is a crucial mission of this Consortium. The Consortium will now help you in using SOFA, contributing to SOFA, finding the right contact for your need and even advertise your work based on SOFA. So do not hesitate to contact us for any question !

SOFA, you said ?

You might wonder where does the name SOFA come from ! As detailed above, the whole story started at CIMIT in Boston. The laboratory of CIMIT was at that time a large open space. But, a small spot was dedicated to brainstorming with a white board and … a sofa. A name was found: SOFA standing for Simulation Open Framework Architecture !

Back to Top