Skip to content

Lexicography

Library

Libraries are the central elements of SOFA. They define all SOFA framework mechanisms in Sofa/framework.

Libraries do not contain Components. Libraries are not externalizable. They are all within SOFA sources. Some Libraries can be disabled via a CMake option.

A Library can "contain" other Libraries. Technically, it will have link dependencies on those Libraries.

From the system point of view, a Library is a dynamic library (.so or .dylib or .dll).

Examples: Sofa.Core, Sofa.Type

Module

Modules are the elements defining all usual SOFA features with Components in Sofa/Component. Modules can be loaded in a Simulation by the Plugin Manager via the Component RequiredPlugin in a scene, or the runSofa parameter -l ModuleName, or within the plugin_list.conf file.

Modules contain Components. Modules are not externalizable. They are all within SOFA sources. Modules can be disabled via a CMake option. Most Modules are ON by default.

A Module can "contain" other Modules and Libraries. Technically, it will have link dependencies on those Modules.

From the system point of view, a Module is a dynamic library (.so or .dylib or .dll).

Examples: Sofa.Component.Collision, Sofa.Component.Engine.Analyze, Sofa.Component.SolidMechanics

Plugin

Plugins are optional Modules adding more SOFA features.

Plugins contain Components. Plugins are externalizable. Some external plugins can be auto-fetched into SOFA sources. Plugins can be disabled via a CMake option. Most Plugins are OFF by default.

A Plugin can "contain" other Modules and Libraries. Technically, it will have link dependencies on those Modules.

From the system point of view, a Plugin is a dynamic library (.so or .dylib or .dll).

Examples: SofaPython3, SofaCUDA, CImgPlugin

Collection

Collections are interfaces for sets of Modules and/or Libraries.

Collections do not contain any code. Collections can be disabled via a CMake option.

From the system point of view, a Collection is a dynamic library (.so or .dylib or .dll).

Examples: SofaComponentAll, SofaBaseTopology, SofaGeneralMeshCollision

Project

Projects are programs using parts of SOFA as dependency. The goal of Projects is to create tools based on SOFA.

From the system point of view, a Project is an executable.

Examples: runSofa, SofaPhysicsAPI

Tutorial

Tutorials are programs using parts of SOFA as dependency. The goal of Tutorials is to show how to build a Simulation with SOFA API.

From the system point of view, a Tutorial is an executable.

Examples: chainHybrid, oneTetrahedron

Simulation

Simulation corresponds to the process computing the change of state of the physical systems, given their rest and initial state.

Scene

Scene denotes the graph structure (direct acyclic graph) describing the physical systems, their physical behavior, their properties and the numerical tools used for the computation. The Scene description starts with a root Node which then contains child Nodes (sub-Nodes). Each child Node of the root Node usually corresponds to one object (one physical system). Read more about the Scene graph

Example

Example refers to set of Scene files provided with SOFA. These Scene files illustrate most of the SOFA components in a dedicated Simulation. They can be found within the examples/ folder in the SOFA sources or within the share/sofa/examples/ folder in the SOFA binaries.

Unit test

Scene tests correspond to C++ codes testing SOFA classes or parts of codes to assess their proper functioning. Unit tests can be triggered on each pull-request.

Scene test

Scene tests correspond to Scene files which are launched to check if the associated Simulations run without error. Scene tests can be triggered on each pull-request.

Regression test

Regression tests correspond to Scene files which Simulation result configuration was previously saved. These tests are launched to check if the Simulation remains consistent with the save Simulation result. Regression tests can be triggered on each pull-request.

Node

Node defines a hierarchical level of the Scene graph. The root Node is the entry point of the simulation (first Node without any parent) and it may contain several child Nodes (sub-Nodes). Each child Node of the root Node usually corresponds to one object (one physical system). Generally, a Node can have many children, and it may have several parent (except the root Node). An operation performed on a Node automatically propagates its effect to all of its child Nodes. The collection of all Nodes builds the Scene graph.

Component

Component corresponds to C++ classes implementing specific physical models or algorithms. A Component must belong to a Node.

Data

Data is a public attribute of a Component (C++ class) visible to the user in the SOFA user interface. For a physical model or an algorithm, a Data is a parameter available for the user (e.g. the total mass totalMass in a mass component). Data may be defined by the user (some are compulsory - a.k.a. required - else a warning will be sent), accessed and modified. Read more about Data.

Datafield

DataField refers to a Data

Link corresponds to connection created between Data instances of two different Components. One Data may be linked to one or several other Data (respectively called a SingleLink and a MultiLink). The network of interconnected Data objects defines a Data dependency graph, superimposed on the Scene graph.