From f75950a7d9437628010eec55b024281092fc6bdd Mon Sep 17 00:00:00 2001 From: Paul Baksic Date: Wed, 29 Jul 2026 18:00:25 +0200 Subject: [PATCH 01/10] start generic changes for main principles --- .../10_Integration_Scheme.md | 45 ++++++++++++------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md b/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md index 3b45455d9..2fd256a7d 100644 --- a/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md +++ b/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md @@ -1,9 +1,9 @@ Integration Schemes =================== -All dynamic simulations assume to discretize the temporal evolution of the system through small time steps. This time step is usually noted *dt*. An integration scheme is the [numerical method](https://en.wikipedia.org/wiki/Numerical_methods_for_ordinary_differential_equations) describing how to find the approximate solution for ordinary differential equations (ODE). +All dynamic simulations assume to discretize the temporal evolution of the system through small time steps. This time step is usually noted *dt*. An integration scheme is the [numerical method](https://en.wikipedia.org/wiki/Numerical_methods_for_ordinary_differential_equations) describing how to linearly relate the different time derivatives in order to discretize and linearize those ODE. -They are usually called **ODESolver** in SOFA. +They are usually called **IntegrationScheme** in SOFA. Let's write our ordinary differential equation of a function *y* as follows: @@ -11,7 +11,7 @@ $$ \frac{dy}{dt}=f\left( t,y(t)\right) $$ -ODESolver defines how to go from the current time step (t) to the next (t + dt), which will structure the linear system $\mathbf{A}x=b$. The integration scheme therefore defines which forces impact the left hand side matrix $\mathbf{A}$ and which forces contribute to the right hand side vector *b*: +IntegrationScheme defines how to go from the current time step (t) to the next (t + dt), which will structure the linear system $\mathbf{A}x=b$. The integration scheme therefore defines which forces impact the left hand side matrix $\mathbf{A}$ and which forces contribute to the right hand side vector *b*: - explicit contributions depending on the degrees of freedom (DOFs) at the current time step $x(t)$ will contribute to the $b$ vector - while implicit contributions depending on the degrees of freedom (DOFs) at the next step $x(t+dt)$ (unknown) will contribute to $\mathbf{A}$. @@ -38,11 +38,11 @@ $$ Explicit schemes are usually known as being fast to solve (since the created linear system is lighter) but they require very small time steps, unless they may undergo stability issues. They are known to efficiently solve non-stiff problems. -Explicit ODESolvers in SOFA: +Explicit IntegrationScheme in SOFA: -- [EulerExplicitSolver](../../../components/odesolver/forward/eulerexplicitsolver/) -- [CentralDifferenceSolver](../../../components/odesolver/forward/centraldifferencesolver/) -- [RungeKutta2Solver](../../../components/odesolver/forward/rungekutta2solver/) +- [EulerExplicitIntegrationScheme](../../../components/integrationscheme/forward/eulerexplicitintegrationscheme/) +- [CentralDifferenceIntegrationScheme](../../../components/integrationscheme/forward/centraldifferenceintegrationscheme/) +- [RungeKutta2IntegrationScheme](../../../components/integrationscheme/forward/rungekutta2integrationscheme/) ### Implicit scheme @@ -61,17 +61,32 @@ $$ Implicit schemes are known as being slower to solve (the outcoming linear system is more complex) but they are way more stable than explicit schemes. Stiff differential equations require the use of implicit schemes. -Implicit ODESolvers in SOFA: +Implicit IntegrationScheme in SOFA: + +- [EulerImplicitIntegrationScheme](../../../components/integrationscheme/backward/eulerimplicitintegrationscheme/) +- [NewmarkImplicitIntegrationScheme](../../../components/integrationscheme/backward/newmarkimplicitintegrationscheme/) +- [BDFIntegrationScheme](../../../components/integrationscheme/backward/variationalsymplecticintegrationscheme/) + + +Solving for non linearities +---------------- + +As it has been seen, integrating through time boils down to building and solving a linear system. What is hidden behind this is that the mechanics needs to be linearized to be summarized in a linear system. While has no effect for linear elasticity, it can result in pretty bad dynamics in the case of hyperelasticity. + +For explicit integration scheme, there is no strategy other than reducing the timestep to try to improve such non-linearities. But, because of the nature of implicit integration scheme, one can take advantage of using a non-linear solver to compute the integration in order to better take into account the non-linearities. + +The current design of Implicit integration scheme is based on this finding to enable the use of Newton-Raphson solver at the level of the simulation to compute dynamics. + + + -- [EulerImplicitSolver](../../../components/odesolver/backward/eulerimplicitsolver/) -- [NewmarkImplicitSolver](../../../components/odesolver/backward/newmarkimplicitsolver/) -- [VariationalSymplecticSolver](../../../components/odesolver/backward/variationalsymplecticsolver/) In the SOFA code ---------------- +//TODO -The integration scheme is described in the `solve()` function of the ODESolver. This *solve()* function is called by the [AnimationLoop](../../animation-loop/) (through a dedicated visitor) and builds the complete linear system $\mathbf{A}x=b$. +The integration scheme is described in the `integrate()` function of the IntegrationScheme. This *integrate()* function is called by the [AnimationLoop](../../animation-loop/) (through a dedicated visitor) and builds the complete linear system $\mathbf{A}x=b$. ### Specification of the scheme @@ -107,9 +122,9 @@ Again, Depending on the scheme (explicit or implicit, see previous paragraph), t -### State vectors in ODESolver +### State vectors in IntegrationScheme -In order to build the linear matrix system, the ODESolver uses information contained in [state vectors](../../mechanicalobject/#state-vectors) (like DOFs and their derivatives) within the scope of the ODESolver. The ODESolver does not access the state vectors directly. It accesses the state vectors remotely using visitors, which traverse the graph starting from the node which contains the solver. This keeps the implementation of the solver independent of the simulated objects and their types. +In order to build the linear matrix system, the IntegrationScheme uses information contained in [state vectors](../../mechanicalobject/#state-vectors) (like DOFs and their derivatives) within the scope of the IntegrationScheme. The IntegrationScheme does not access the state vectors directly. It accesses the state vectors remotely using visitors, which traverse the graph starting from the node which contains the solver. This keeps the implementation of the solver independent of the simulated objects and their types. Each type of solver may use different auxiliary state vectors to implement their simulation method. State vectors (MultiVec) are allocated and processed in the scope of the solver in a thread-safe way using an instance of _simulation::common::VectorOperations_. For instance, a Runge-Kutta algorithms needs to save the result of previous time steps. @@ -125,7 +140,7 @@ MultiVecCoord previousPos(&vop, previousPosID); // additional vector ### Compute the solution -In most cases, the matrix system $\mathbf{A}x=b$ can then be sent to a [LinearSolver](../../system-resolution/linear-solver/) in charge of finally solving the system defined according to the chosen scheme. Within the function *ODESolver::solve()*, the call to the LinearSolver will appear through the function call: +In most cases, the matrix system $\mathbf{A}x=b$ can then be sent to a [LinearSolver](../../system-resolution/linear-solver/) in charge of finally solving the system defined according to the chosen scheme. Within the function *IntegrationScheme::solve()*, the call to the LinearSolver will appear through the function call: ``` cpp matrix.solve(x, b); From c7cfaeb0f52b4f7202d648a70977f1a43660300e Mon Sep 17 00:00:00 2001 From: Paul Baksic Date: Wed, 29 Jul 2026 18:03:32 +0200 Subject: [PATCH 02/10] Add some equations --- .../10_Integration_Scheme.md | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md b/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md index 2fd256a7d..05d11a9f7 100644 --- a/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md +++ b/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md @@ -75,10 +75,31 @@ As it has been seen, integrating through time boils down to building and solving For explicit integration scheme, there is no strategy other than reducing the timestep to try to improve such non-linearities. But, because of the nature of implicit integration scheme, one can take advantage of using a non-linear solver to compute the integration in order to better take into account the non-linearities. -The current design of Implicit integration scheme is based on this finding to enable the use of Newton-Raphson solver at the level of the simulation to compute dynamics. +The current design of Implicit integration scheme is based on this finding to enable the use of Newton-Raphson solver at the level of the simulation to compute dynamics. But to present it let's first dive into what it takes to use a Newton-Raphson solver : we need to express the time step as a root-finding problem. +### From Dynamic equations to root finding problem +First let's introduce the dynamic equations we wish to solve. +$$ +\boldsymbol{M}\boldsymbol{a} = \mathcal{F}(\boldsymbol{x},\boldsymbol{v}) + \boldsymbol{F_{\text{ext}}} +$$ + + +$$ +\begin{aligned} +g_{\boldsymbol{x}}^{(t,h)} &: (\boldsymbol{v}_{t+h}, \boldsymbol{a}_{t+h}) &\mapsto \boldsymbol{x}_{t+h} \\ +g_{\boldsymbol{v}}^{(t,h)} &: (\boldsymbol{a}_{t+h}) &\mapsto \boldsymbol{v}_{t+h} +\end{aligned} +$$ + +$$ +\begin{cases} +\boldsymbol{M}\boldsymbol{a}_{t+h} &= \mathcal{F}(\boldsymbol{x}_{t+h},\boldsymbol{v}_{t+h}) + \boldsymbol{F_{\text{ext}}} \\ +\boldsymbol{x}_{t+h} &= g_{\boldsymbol{x}}^{(t,h)}(\boldsymbol{v}_{t+h}, \boldsymbol{a}_{t+h}) \\ +\boldsymbol{v}_{t+h} &= g_{\boldsymbol{v}}^{(t,h)}(\boldsymbol{a}_{t+h}) +\end{cases} +$$ From 55b9c777d2da6d7da3cbdd862422ce91cb32cfa9 Mon Sep 17 00:00:00 2001 From: Paul Baksic Date: Thu, 30 Jul 2026 14:57:33 +0200 Subject: [PATCH 03/10] Add all genberal equations --- .../10_Integration_Scheme.md | 265 ++++++++++++++---- 1 file changed, 211 insertions(+), 54 deletions(-) diff --git a/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md b/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md index 05d11a9f7..6edab3a99 100644 --- a/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md +++ b/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md @@ -71,115 +71,272 @@ Implicit IntegrationScheme in SOFA: Solving for non linearities ---------------- -As it has been seen, integrating through time boils down to building and solving a linear system. What is hidden behind this is that the mechanics needs to be linearized to be summarized in a linear system. While has no effect for linear elasticity, it can result in pretty bad dynamics in the case of hyperelasticity. +As it has been seen, integrating through time boils down to building and solving a linear system. What is hidden behind this is that the mechanics needs to be linearized to be summarized in a linear system. While it has no effect for linear elasticity, it can result in pretty bad dynamics in the case of hyperelasticity. For explicit integration scheme, there is no strategy other than reducing the timestep to try to improve such non-linearities. But, because of the nature of implicit integration scheme, one can take advantage of using a non-linear solver to compute the integration in order to better take into account the non-linearities. The current design of Implicit integration scheme is based on this finding to enable the use of Newton-Raphson solver at the level of the simulation to compute dynamics. But to present it let's first dive into what it takes to use a Newton-Raphson solver : we need to express the time step as a root-finding problem. -### From Dynamic equations to root finding problem +> **Note :**\ +> Currently, SOFA doesn't propose any Newton-Raphson algorithm able to solve for non-linear mechanics. It is an ongoing work that'll be release soon. But the refactoring of the ODE solver has been made in order to enable such new solver to be implemented. It is thus important to explain the design choices at the light of future development. + +### 1) From Dynamic equations to root finding problem First let's introduce the dynamic equations we wish to solve. $$ \boldsymbol{M}\boldsymbol{a} = \mathcal{F}(\boldsymbol{x},\boldsymbol{v}) + \boldsymbol{F_{\text{ext}}} +\tag{1.1} $$ +With $\boldsymbol{a}$ the acceleration, $\boldsymbol{M}$ the mass matrix and $\mathcal{F}(\boldsymbol{x},\boldsymbol{v})$ being a non linear function of the position ($\boldsymbol{x}$) and velocity ($\boldsymbol{v}$). +Now let's consider that we have the solution to this equation at a time $t$. This means having the tensor $\boldsymbol{X}_t = (\boldsymbol{x}_t, \boldsymbol{v}_t, \boldsymbol{a}_t)$ that satisfy @eq:eq-dyn. In order to integrate the unknown along time and know their value at a future timestamp $t + h$, we need to introduce a relationship between the three unknown. Indeed, with only one equation but three unknown (position, velocity and acceleration), we need to introduce more equations to get a solvable system. This set of new equations is exactly the _integration scheme_ and can be defined as the following functions. $$ + \begin{aligned} g_{\boldsymbol{x}}^{(t,h)} &: (\boldsymbol{v}_{t+h}, \boldsymbol{a}_{t+h}) &\mapsto \boldsymbol{x}_{t+h} \\ g_{\boldsymbol{v}}^{(t,h)} &: (\boldsymbol{a}_{t+h}) &\mapsto \boldsymbol{v}_{t+h} +\tag{1.2} \end{aligned} $$ +Now one can rewrite the set of equations to be solved : + $$ \begin{cases} \boldsymbol{M}\boldsymbol{a}_{t+h} &= \mathcal{F}(\boldsymbol{x}_{t+h},\boldsymbol{v}_{t+h}) + \boldsymbol{F_{\text{ext}}} \\ \boldsymbol{x}_{t+h} &= g_{\boldsymbol{x}}^{(t,h)}(\boldsymbol{v}_{t+h}, \boldsymbol{a}_{t+h}) \\ \boldsymbol{v}_{t+h} &= g_{\boldsymbol{v}}^{(t,h)}(\boldsymbol{a}_{t+h}) \end{cases} +\tag{1.3} $$ +With the unknown $\boldsymbol{X}_{t+h} = (\boldsymbol{x}_{t+h}, \boldsymbol{v}_{t+h}, \boldsymbol{a}_{t+h})$. +#### 1.1) General form +Let define a function $\mathcal{G}_{t} (\boldsymbol{X}_{t+h} = (\boldsymbol{x}_{t+h}, \boldsymbol{v}_{t+h}, \boldsymbol{a}_{t+h}))$ such as its root is the solution of the set of equation (1.3): +$$ +\mathcal{G}_{t}(\boldsymbol{X} = (\boldsymbol{x}, \boldsymbol{v}, \boldsymbol{a}))) = +\begin{cases} +\boldsymbol{M}\boldsymbol{a} - \mathcal{F}(\boldsymbol{x},\boldsymbol{v}) - \boldsymbol{F_{\text{ext}}} \\ +\boldsymbol{x} - g_{\boldsymbol{x}}^{(t,h)}(\boldsymbol{v}, \boldsymbol{a}) \\ +\boldsymbol{v} - g_{\boldsymbol{v}}^{(t,h)}(\boldsymbol{a}) +\end{cases} +\tag{1.4} +$$ +We will see later that using this general form ends up in solving for the difference in acceleration in one timestep. We will call the family of integration scheme using this forme the **_Velocity-based integration schemes_**. +#### 1.2) Simplified form +To simplify this set of equation, if $g_v^{(t,h)}$ is invertible, one can rewrite the set as : +$$ +\begin{cases} +\boldsymbol{M}g_{\boldsymbol{v}}^{(t,h)-1}(\boldsymbol{v}_{t+h}) &= \mathcal{F}(\boldsymbol{x}_{t+h},\boldsymbol{v}_{t+h}) + \boldsymbol{F_{\text{ext}}} \\ +\boldsymbol{x}_{t+h} &= \tilde{g}_{\boldsymbol{x}}^{(t,h)}(\boldsymbol{v}_{t+h}) +\end{cases} +\tag{1.5} +$$ +With $\tilde{g}_{\boldsymbol{x}}^{(t,h)}(\boldsymbol{v}_{t+h}) = g_{\boldsymbol{x}}^{(t,h)}(\boldsymbol{v}_{t+h}, g_v^{(t,h)-1}(\boldsymbol{v}_{t+h}))$. We will use this simplified form for the following equations. +Let define a function $\mathcal{G}_{t} (\tilde{\boldsymbol{X}}_{t+h} = (\boldsymbol{x}_{t+h}, \boldsymbol{v}_{t+h}))$ such as its root is still the solution of (1.3): +$$ +\mathcal{G}_{t}(\tilde{\boldsymbol{X}} = (\boldsymbol{x}, \boldsymbol{v})) = +\begin{cases} +\boldsymbol{M}g_v^{(t,h)-1}(\boldsymbol{v}) - \mathcal{F}(\boldsymbol{x},\boldsymbol{v}) - \boldsymbol{F_{\text{ext}}} \\ +\boldsymbol{x} - \tilde{g}_{x}^{(t,h)}(\boldsymbol{v}) +\end{cases} +\tag{1.6} +$$ +To find the root of such non-linear function, one way to do it is to use a non-linear root finder, the most common one is the Newton-Raphson algorithm -In the SOFA code ----------------- -//TODO - -The integration scheme is described in the `integrate()` function of the IntegrationScheme. This *integrate()* function is called by the [AnimationLoop](../../animation-loop/) (through a dedicated visitor) and builds the complete linear system $\mathbf{A}x=b$. - - -### Specification of the scheme -The construction of the linear system changes whether the integration scheme is explicit or implicit, which is specified by: +### 2) Newton-Raphson equations +#### 2.1) Basics on Newton-Raphson -- for explicit cases -``` cpp -mop->setImplicit(false); -``` -- for implicit cases -``` cpp -mop->setImplicit(true); -``` +The Newton-Raphson algorithm is an iterative algorithm which goal is to find the root of a non-linear function that is at least $\mathscr{C}^1$ and has values in $\mathbb{R}^p$. For the sake of simplicity we will consider $n = p$ for the rest of this document (the main difference lying in the invertibility of the Jacobian of the function, when $n \neq p$ or when the Jacobian is not invertible a pseudo inverse must be used). +Let consider a $\mathscr{C}^1$ non-linear function $\mathcal{G} : \mathbb{R}^n \mapsto \mathbb{R}^n$. Given a current guess $\boldsymbol{X}^{(i)}$, the goal of the algorithm is to find $\mathrm{d}\boldsymbol{X}^{(i)}$ such as +$$ +\mathcal{G}(\boldsymbol{X}^{(i+1)}) = \mathcal{G}(\boldsymbol{X}^{(i)} + \mathrm{d}\boldsymbol{X}^{(i)}) = 0 +$$ +To do this the function $\mathcal{G}$ is linearized at the current guess to express the previous equation as a linear equation. +$$ +\mathcal{G}(\boldsymbol{X}^{(i)} + \mathrm{d}\boldsymbol{X}^{(i)}) \approx \mathcal{G}(\boldsymbol{X}^{(i)}) + \left.\frac{\partial \mathcal{G}}{\partial \boldsymbol{X}}\right|_{\boldsymbol{X}^{(i)}} \cdot \mathrm{d}\boldsymbol{X}^{(i)} = 0 +$$ +$$ +\mathrm{d}\boldsymbol{X}^{(i)} = - \left.\frac{\partial \mathcal{G}}{\partial \boldsymbol{X}}\right|_{\boldsymbol{X}^{(i)}}^{-1} \cdot \mathcal{G}(\boldsymbol{X}^{(i)}) +\tag{2.1} +$$ +With $\frac{\partial \mathcal{G}}{\partial \boldsymbol{X}}$ being the Jacobian of the function $\mathcal{G}$ : +$$ +\frac{\partial \mathcal{G}}{\partial \boldsymbol{X}} = +\begin{pmatrix} +\frac{\partial \mathcal{G}_0}{\partial \boldsymbol{X}_0} & \frac{\partial \mathcal{G}_0}{\partial \boldsymbol{X}_1} & \dots & \frac{\partial \mathcal{G}_0}{\partial \boldsymbol{X}_n} \\ +\frac{\partial \mathcal{G}_1}{\partial \boldsymbol{X}_0} & \frac{\partial \mathcal{G}_1}{\partial \boldsymbol{X}_1} & \dots & \frac{\partial \mathcal{G}_1}{\partial \boldsymbol{X}_n} \\ +\vdots & \vdots & \ddots & \vdots \\ +\frac{\partial \mathcal{G}_n}{\partial \boldsymbol{X}_0} & \frac{\partial \mathcal{G}_n}{\partial \boldsymbol{X}_1} & \dots & \frac{\partial \mathcal{G}_n}{\partial \boldsymbol{X}_n} +\end{pmatrix} +$$ +Then the current guess is updated according to +$$ +\boldsymbol{X}^{(i+1)} = \boldsymbol{X}^{(i)} + \mathrm{d}\boldsymbol{X}^{(i)} +\tag{2.2} +$$ +The algorithm stops when the norm of the current residue $\|\boldsymbol{r}^{(i)}\| = \|\mathcal{G}(\boldsymbol{X}^{(i)})\|$ is under a certain threshold $\epsilon \in \mathbb{R}$ -### Build the linear matrix system +#### 2.2) Newton-Raphson for dynamic equations of motion +##### 2.2.1) Acceleration-based integration scheme +In the case of dynamic equations of motion, we have defined the function for which we want to find the root (1.4). Now we are going to write the recurrence relations resulting for the application of a Newton-Raphson algorithm to this problem. -The left hand side matrix $\mathbf{A}$ is built using the function: -``` cpp -matrix = MechanicalMatrix(r_M, r_B, r_K); -``` -where $r_M$ (mass coefficient), $r_B$ (damping coefficient) and $r_K$ (stiffness coefficient) are Rayleigh coefficients (see section below). Depending on the scheme (explicit or implicit, see previous paragraph) and on the type of LinearSolver used (if any), the abstract function `MechanicalMatrix` will trigger different [visitors](../../visitors/), thus different functions to compute the system matrix $\mathbf{A}$. Discover the API used for the computation of $\mathbf{A}$ in the [ForceField](../../multi-model-representation/forcefield/#forcefield-api) and [Mass](../../multi-model-representation/mass/#mass-api) doc pages. +By applying (2.1) to (1.4) we can compute the final linear system to solve: +$$ +\left.\frac{\partial \mathcal{G}_{t}}{\partial \boldsymbol{X}}\right|_{\boldsymbol{X}^{(i)}} \mathrm{d}\boldsymbol{X}^{(i)} = - \mathcal{G}_{t}(\boldsymbol{X}^{(i)}) +$$ -The right hand side vector *b* is built through the function: -``` cpp -computeForce(b) -``` +Let's take a look closer to the Jacobian. -Again, Depending on the scheme (explicit or implicit, see previous paragraph), the abstract function `computeForce` will trigger different [visitors](../../visitors/), thus different functions to accumulate the forces into the vector $b$. Discover the API used for the computation of $b$ in the [ForceField](../../multi-model-representation/forcefield/#forcefield-api) doc page. +$$ +\begin{aligned} +\left.\frac{\partial \mathcal{G}_{t}}{\partial \boldsymbol{X}}\right|_{\boldsymbol{X}^{(i)}} &= +\begin{pmatrix} +\left.\frac{\partial \mathcal{G}_{t,0}}{\partial \boldsymbol{X}_{\boldsymbol{x}}}\right|_{\boldsymbol{X}^{(i)}} & \left.\frac{\partial \mathcal{G}_{t,0}}{\partial \boldsymbol{X}_{\boldsymbol{v}}}\right|_{\boldsymbol{X}^{(i)}} & \left.\frac{\partial \mathcal{G}_{t,0}}{\partial \boldsymbol{X}_{\boldsymbol{a}}}\right|_{\boldsymbol{X}^{(i)}} \\ +\left.\frac{\partial \mathcal{G}_{t,1}}{\partial \boldsymbol{X}_{\boldsymbol{x}}}\right|_{\boldsymbol{X}^{(i)}} & \left.\frac{\partial \mathcal{G}_{t,1}}{\partial \boldsymbol{X}_{\boldsymbol{v}}}\right|_{\boldsymbol{X}^{(i)}} & \left.\frac{\partial \mathcal{G}_{t,1}}{\partial \boldsymbol{X}_{\boldsymbol{a}}}\right|_{\boldsymbol{X}^{(i)}} \\ +\left.\frac{\partial \mathcal{G}_{t,2}}{\partial \boldsymbol{X}_{\boldsymbol{x}}}\right|_{\boldsymbol{X}^{(i)}} & \left.\frac{\partial \mathcal{G}_{t,2}}{\partial \boldsymbol{X}_{\boldsymbol{v}}}\right|_{\boldsymbol{X}^{(i)}} & \left.\frac{\partial \mathcal{G}_{t,2}}{\partial \boldsymbol{X}_{\boldsymbol{a}}}\right|_{\boldsymbol{X}^{(i)}} +\end{pmatrix} \\ +&= +\begin{pmatrix} +-\left.\frac{\partial \mathcal{F}}{\partial \boldsymbol{x}}\right|_{\boldsymbol{X}^{(i)}} & \quad - \left.\frac{\partial \mathcal{F}}{\partial \boldsymbol{v}}\right|_{\boldsymbol{X}^{(i)}} & \quad \boldsymbol{M} \\ +I & \quad -\left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\boldsymbol{X}^{(i)}} & \quad -\left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{a}}\right|_{\boldsymbol{X}^{(i)}} \\ +0 & \quad I & \quad -\left.\frac{\mathrm{d} g_{\boldsymbol{v}}^{(t,h)}}{\mathrm{d} \boldsymbol{a}}\right|_{\boldsymbol{X}^{(i)}} +\end{pmatrix} +\end{aligned} +$$ +We can already identify two common mechanical matrices : +$$ +\begin{cases} +\boldsymbol{K}^{(i)} = \left.\frac{\partial \mathcal{F}}{\partial \boldsymbol{x}}\right|_{\boldsymbol{X}^{(i)}} \\ +\boldsymbol{B}^{(i)} = \left.\frac{\partial \mathcal{F}}{\partial \boldsymbol{v}}\right|_{\boldsymbol{X}^{(i)}} +\end{cases} +$$ +We are going to inverse this linear system by bloc by injecting the last equation into the second one. This is done by first inverting the last equation with respect to $\mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{v}}$. +$$ +\mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{v}} = \left.\frac{\mathrm{d} g_{\boldsymbol{v}}^{(t,h)}}{\mathrm{d} \boldsymbol{a}}\right|_{\boldsymbol{X}^{(i)}} \mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{a}} - \mathcal{G}_{t}(\boldsymbol{X}^{(i)})_2 +$$ +Then we can inject it back to the second equation and then invert it again with respect to $\mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{x}}$ +$$ +\begin{aligned} +\mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{x}} &= \left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\boldsymbol{X}^{(i)}} \left(\left.\frac{\mathrm{d} g_{\boldsymbol{v}}^{(t,h)}}{\mathrm{d} \boldsymbol{a}}\right|_{\boldsymbol{X}^{(i)}} \mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{a}} - \mathcal{G}_{t}(\boldsymbol{X}^{(i)})_2\right) + \left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{a}}\right|_{\boldsymbol{X}^{(i)}} \mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{a}} - \mathcal{G}_{t}(\boldsymbol{X}^{(i)})_1 \\ +&= \left(\left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\boldsymbol{X}^{(i)}}\left.\frac{\mathrm{d} g_{\boldsymbol{v}}^{(t,h)}}{\mathrm{d} \boldsymbol{a}}\right|_{\boldsymbol{X}^{(i)}} + \left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{a}}\right|_{\boldsymbol{X}^{(i)}}\right) \mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{a}} - \left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\boldsymbol{X}^{(i)}}\mathcal{G}_{t}(\boldsymbol{X}^{(i)})_2 - \mathcal{G}_{t}(\boldsymbol{X}^{(i)})_1 +\end{aligned} +$$ -### State vectors in IntegrationScheme -In order to build the linear matrix system, the IntegrationScheme uses information contained in [state vectors](../../mechanicalobject/#state-vectors) (like DOFs and their derivatives) within the scope of the IntegrationScheme. The IntegrationScheme does not access the state vectors directly. It accesses the state vectors remotely using visitors, which traverse the graph starting from the node which contains the solver. This keeps the implementation of the solver independent of the simulated objects and their types. +Let define the following coefficients +$$ +\begin{aligned} +\text{DG}^{(i)}_{\boldsymbol{v}} &= \left.\frac{\mathrm{d} g_{\boldsymbol{v}}^{(t,h)}}{\mathrm{d} \boldsymbol{a}}\right|_{\boldsymbol{X}^{(i)}} \\ +\text{DG}^{(i)}_{\boldsymbol{x}} &= \left(\left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\boldsymbol{X}^{(i)}} \left.\frac{\mathrm{d} g_{\boldsymbol{v}}^{(t,h)}}{\mathrm{d} \boldsymbol{a}}\right|_{\boldsymbol{X}^{(i)}} + \left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{a}}\right|_{\boldsymbol{X}^{(i)}}\right) +\end{aligned} +$$ +We can inject the two expressions of $\mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{x}}$ and $\mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{v}}$ into the first equation : +$$ +\begin{aligned} +&-\boldsymbol{K}^{(i)}\mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{x}} - \boldsymbol{B}^{(i)}\mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{v}} + \boldsymbol{M} \mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{a}} = -\mathcal{G}_{t}(\boldsymbol{X}^{(i)})_0 \\ +\Longleftrightarrow\quad& -\boldsymbol{K}^{(i)} \left(\text{DG}^{(i)}_{\boldsymbol{x}} \mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{a}} - \left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\boldsymbol{X}^{(i)}}\mathcal{G}_{t}(\boldsymbol{X}^{(i)})_2 - \mathcal{G}_{t}(\boldsymbol{X}^{(i)})_1\right) - \boldsymbol{B}^{(i)} \left(\text{DG}^{(i)}_{\boldsymbol{v}} \mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{a}} - \mathcal{G}_{t}(\boldsymbol{X}^{(i)})_2\right) + \boldsymbol{M} \mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{a}} = -\mathcal{G}_{t}(\boldsymbol{X}^{(i)})_0 \\ +\Longleftrightarrow\quad& (\boldsymbol{M} -\boldsymbol{K}^{(i)}\cdot\text{DG}^{(i)}_{\boldsymbol{x}} - \boldsymbol{B}^{(i)} \text{DG}^{(i)}_{\boldsymbol{v}})\mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{a}} = -\mathcal{G}_{t}(\boldsymbol{X}^{(i)})_0-\boldsymbol{K}^{(i)} \mathcal{G}_{t}(\boldsymbol{X}^{(i)})_1 - \left(\boldsymbol{B}^{(i)} + \boldsymbol{K}^{(i)}\left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\boldsymbol{X}^{(i)}}\right) \mathcal{G}_{t}(\boldsymbol{X}^{(i)})_2 +\end{aligned} +$$ -Each type of solver may use different auxiliary state vectors to implement their simulation method. State vectors (MultiVec) are allocated and processed in the scope of the solver in a thread-safe way using an instance of _simulation::common::VectorOperations_. For instance, a Runge-Kutta algorithms needs to save the result of previous time steps. +To summarize, the update strategy is as follow : +$$ +\begin{cases} +\mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{a}} &= (\boldsymbol{M} -\boldsymbol{K}^{(i)}\cdot\text{DG}^{(i)}_{\boldsymbol{x}} - \boldsymbol{B}^{(i)} \text{DG}^{(i)}_{\boldsymbol{v}})^{(-1)} \left(-\mathcal{G}_{t}(\boldsymbol{X}^{(i)})_0-\boldsymbol{K}^{(i)} \mathcal{G}_{t}(\boldsymbol{X}^{(i)})_1 - \left(\boldsymbol{B}^{(i)} + \boldsymbol{K}^{(i)}\left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\boldsymbol{X}^{(i)}}\right)\cdot \mathcal{G}_{t}(\boldsymbol{X}^{(i)})_2\right) \\ +\mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{v}} &= \text{DG}^{(i)}_{\boldsymbol{v}} \mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{a}} - \mathcal{G}_{t}(\boldsymbol{X}^{(i)})_2 \\ +\mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{x}} &= \left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\boldsymbol{X}^{(i)}} \mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{v}} + \left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{a}}\right|_{\boldsymbol{X}^{(i)}} \mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{a}} - \mathcal{G}_{t}(\boldsymbol{X}^{(i)})_1 \\ +&= \text{DG}^{(i)}_{\boldsymbol{x}} \mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{a}} - \left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\boldsymbol{X}^{(i)}}\mathcal{G}_{t}(\boldsymbol{X}^{(i)})_2 - \mathcal{G}_{t}(\boldsymbol{X}^{(i)})_1 \\ +\boldsymbol{X}^{(i+1)} &= \boldsymbol{X}^{(i)} + \begin{pmatrix} \mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{x}} \\ \mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{v}} \\ \mathrm{d}\boldsymbol{X}^{(i)}_{\boldsymbol{a}} \end{pmatrix} +\end{cases} +\tag{2.3} +$$ -To create an auxiliary vector, this can be done as follows: -``` cpp -MultiVecCoord pos(&vop, core::VecCoordId::position() ); // standard position vector -MultiVecDeriv acc(&vop); // auxiliary vector -MultiVecCoord previousPos(&vop, previousPosID); // additional vector -``` +##### 2.2.1) Velocity-based integration scheme +In the case of velocity-based equations of motion, we have defined the function for which we want to find the root (1.6). Now we are going to write the recurrence relations resulting for the application of a Newton-Raphson algorithm to this problem. +By applying (2.1) to (1.6) we can compute the final linear system to solve: +$$ +\left.\frac{\partial \mathcal{G}_{t}}{\partial \tilde{\boldsymbol{X}}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} \mathrm{d}\tilde{\boldsymbol{X}}^{(i)} = - \mathcal{G}_{t}(\tilde{\boldsymbol{X}}^{(i)}) +$$ +Let's take a look closer to the Jacobian. +$$ +\begin{aligned} +\left.\frac{\partial \mathcal{G}_{t}}{\partial \tilde{\boldsymbol{X}}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} &= +\begin{pmatrix} +\left.\frac{\partial \mathcal{G}_{t,0}}{\partial \tilde{\boldsymbol{X}}_{\boldsymbol{x}}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} & \left.\frac{\partial \mathcal{G}_{t,0}}{\partial \tilde{\boldsymbol{X}}_{\boldsymbol{v}}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} \\ +\left.\frac{\partial \mathcal{G}_{t,1}}{\partial \tilde{\boldsymbol{X}}_{\boldsymbol{x}}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} & \left.\frac{\partial \mathcal{G}_{t,1}}{\partial \tilde{\boldsymbol{X}}_{\boldsymbol{v}}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} +\end{pmatrix} \\ +&= +\begin{pmatrix} +-\left.\frac{\partial \mathcal{F}}{\partial \boldsymbol{x}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} & \quad \boldsymbol{M} \left.\frac{\mathrm{d} g_{\boldsymbol{v}}^{(t,h)-1}}{\mathrm{d} \boldsymbol{v}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} - \left.\frac{\partial \mathcal{F}}{\partial \boldsymbol{v}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} \\ +I & \quad -\left.\frac{\mathrm{d} \tilde{g}_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} +\end{pmatrix} +\end{aligned} +$$ +We can already identify two common mechanical matrices : +$$ +\begin{cases} +\boldsymbol{K}^{(i)} = \left.\frac{\partial \mathcal{F}}{\partial \boldsymbol{x}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} \\ +\boldsymbol{B}^{(i)} = \left.\frac{\partial \mathcal{F}}{\partial \boldsymbol{v}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} +\end{cases} +$$ +This linear system by bloc can be solved using a Shur complement method. Here we have a special case where all blocks are squared. So we can do a development using the bottom left block: +$$ +\mathrm{d}\tilde{\boldsymbol{X}}^{(i)}_{\boldsymbol{x}} = \left.\frac{\mathrm{d} \tilde{g}_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} \cdot \mathrm{d}\tilde{\boldsymbol{X}}^{(i)}_{\boldsymbol{v}} - \mathcal{G}_{t}(\tilde{\boldsymbol{X}}^{(i)})_1 +$$ +And by injecting this into the first equation we get : +$$ +\begin{aligned} +& -\boldsymbol{K}^{(i)} \left(\left.\frac{\mathrm{d} \tilde{g}_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} \cdot \mathrm{d}\tilde{\boldsymbol{X}}^{(i)}_{\boldsymbol{v}} - \mathcal{G}_{t}(\tilde{\boldsymbol{X}}^{(i)})_1\right) + \left(\boldsymbol{M} \left.\frac{\mathrm{d} g_{\boldsymbol{v}}^{(t,h)-1}}{\mathrm{d} \boldsymbol{v}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} - \boldsymbol{B}^{(i)}\right)\mathrm{d}\tilde{\boldsymbol{X}}^{(i)}_{\boldsymbol{v}} = - \mathcal{G}_{t}(\tilde{\boldsymbol{X}}^{(i)})_0 \\ +\Longleftrightarrow & \left( \boldsymbol{M} \left.\frac{\mathrm{d} g_{\boldsymbol{v}}^{(t,h)-1}}{\mathrm{d} \boldsymbol{v}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} - \boldsymbol{K}^{(i)} \left.\frac{\mathrm{d} \tilde{g}_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} - \boldsymbol{B}^{(i)}\right) \mathrm{d}\tilde{\boldsymbol{X}}^{(i)}_{\boldsymbol{v}} = -\boldsymbol{K}^{(i)} \mathcal{G}_{t}(\tilde{\boldsymbol{X}}^{(i)})_1 - \mathcal{G}_{t}(\tilde{\boldsymbol{X}}^{(i)})_0 +\end{aligned} +\tag{2.4} +$$ +To summarize, the update strategy is as follow : +$$ +\begin{cases} +\mathrm{d}\tilde{\boldsymbol{X}}^{(i)}_{\boldsymbol{v}} &= \left( \boldsymbol{M} \left.\frac{\mathrm{d} g_{\boldsymbol{v}}^{(t,h)-1}}{\mathrm{d} \boldsymbol{v}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} - \boldsymbol{K}^{(i)} \left.\frac{\mathrm{d} \tilde{g}_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} - \boldsymbol{B}^{(i)}\right)^{-1} \left(-\boldsymbol{K}^{(i)} \mathcal{G}_{t}(\tilde{\boldsymbol{X}}^{(i)})_1 - \mathcal{G}_{t}(\tilde{\boldsymbol{X}}^{(i)})_0\right) \\ +\mathrm{d}\tilde{\boldsymbol{X}}^{(i)}_{\boldsymbol{x}} &= \left.\frac{\mathrm{d} \tilde{g}_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\tilde{\boldsymbol{X}}^{(i)}} \cdot \mathrm{d}\tilde{\boldsymbol{X}}^{(i)}_{\boldsymbol{v}} - \mathcal{G}_{t}(\tilde{\boldsymbol{X}}^{(i)})_1 \\ +\tilde{\boldsymbol{X}}^{(i+1)} &= \tilde{\boldsymbol{X}}^{(i)} + \begin{pmatrix} \mathrm{d}\tilde{\boldsymbol{X}}^{(i)}_{\boldsymbol{x}} \\ \mathrm{d}\tilde{\boldsymbol{X}}^{(i)}_{\boldsymbol{v}} \end{pmatrix} +\end{cases} +\tag{2.5} +$$ +In the SOFA code +---------------- -### Compute the solution +### Design choices +In the light of the presented Newton-Raphson algorithm and the associated equations, the design for implicit intergation scheme is now clearer : it needs an API that enable the computation of such iterative algorithm, meaning that we need to be able compute the right-hand-side of the linearized equation independently from the left-hand-side, and also update the solution independently. This choice has lead to the following API interface: -In most cases, the matrix system $\mathbf{A}x=b$ can then be sent to a [LinearSolver](../../system-resolution/linear-solver/) in charge of finally solving the system defined according to the chosen scheme. Within the function *IntegrationScheme::solve()*, the call to the LinearSolver will appear through the function call: +#### ImplicitIntegrationScheme +This base class inherits directly from the class `BaseIntegrationScheme` and proposes the virtual API taht'll be implemented by the different implicit integrations chemes. Here is the list of thoses methods : -``` cpp -matrix.solve(x, b); -``` +```cpp -Some simple matrix cases provides a diagonal matrix $\mathbf{A}$. In this specific configuration, a solution can directly be found by dividing the right hand side vector *b* by the diagonal matrix $\mathbf{A}$. This is done using the function: -``` cpp -mop.accFromF(acc, f); ``` +#### AccelerationBasedIntegrationScheme -Rayleigh damping ----------------- - -The Rayleigh damping is a numerical damping. This damping has therefore no physical meaning and must not be mixed up with physical damping (like _DiagonalVelocityDampingForceField_ in SOFA). The Rayleigh damping corresponds to a damping matrix that is proportional to the mass or/and stiffness matrices using coefficients, respectively Rayleigh stiffness factor $r_K$ or Rayleigh mass factor $r_M$. This numerical damping is usually used to stabilize or ease convergence of the simulation. However, it has to be used carefully. +#### VelocityBasedIntegrationScheme -When Rayleigh damping is used, the damping matrix becomes the sum of the physical and the numerical (Rayleigh) damping: $\mathbf{B} = \mathbf{B}_{\text{phys}} - \mathbf{M} \cdot r_M+ \mathbf{K} \cdot r_K$ where $\mathbf{B}_{\text{phys}}$ is the physical damping matrix, $\mathbf{M}$ is the mass matrix and $\mathbf{K}$ is the stiffness matrix. -The negative sign in front of $\mathbf{M}$, a positive matrix, represents the fact that viscosity opposes motion. Elasticity also opposes it, however $\mathbf{K}$ is a negative matrix. This formula therefore provides two positive coefficients $r_K$ and $r_M$. -You can see the use of Rayleigh mass and stiffness dampings in the `solve()` function of the _EulerImplicit_ class (see EulerImplicitSolver.cpp). +#### Special case : StaticEquilibriumIntegrationscheme +> **Note on Rayleigh damping :**\ +> Most of the integration scheme propose to add _Rayleigh damping_ which is a numerical damping. This damping has therefore no physical meaning and must not be mixed up with physical damping (like _DiagonalVelocityDampingForceField_ in SOFA). The Rayleigh damping corresponds to a damping matrix that is proportional to the mass or/and stiffness matrices using coefficients, respectively Rayleigh stiffness factor $r_K$ or Rayleigh mass factor $r_M$. This numerical damping is usually used to stabilize or ease convergence of the simulation. However, it has to be used carefully. +> +> When Rayleigh damping is used, the damping matrix becomes the sum of the physical and the numerical (Rayleigh) damping: $\mathbf{B} = \mathbf{B}_{\text{phys}} - \mathbf{M} \cdot r_M+ \mathbf{K} \cdot r_K$ where $\mathbf{B}_{\text{phys}}$ is the physical damping matrix, $\mathbf{M}$ is the mass matrix and $\mathbf{K}$ is the stiffness matrix. +> The negative sign in front of $\mathbf{M}$, a positive matrix, represents the fact that viscosity opposes motion. Elasticity also opposes it, however $\mathbf{K}$ is a negative matrix. This formula therefore provides two positive coefficients $r_K$ and $r_M$. +> +> You can see the use of Rayleigh mass and stiffness dampings in the `integrate()` function of the _EulerImplicit_ class (see EulerImplicitSolver.cpp). From 53d44841019859872dabbb5ac7eb78c5efcbae80 Mon Sep 17 00:00:00 2001 From: Paul Baksic Date: Thu, 30 Jul 2026 17:29:17 +0200 Subject: [PATCH 04/10] Finalize the main principles --- .../10_Integration_Scheme.md | 111 +++++++++++++++++- 1 file changed, 108 insertions(+), 3 deletions(-) diff --git a/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md b/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md index 6edab3a99..37bcc9a0a 100644 --- a/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md +++ b/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md @@ -323,16 +323,52 @@ In the light of the presented Newton-Raphson algorithm and the associated equati This base class inherits directly from the class `BaseIntegrationScheme` and proposes the virtual API taht'll be implemented by the different implicit integrations chemes. Here is the list of thoses methods : ```cpp + //This method purpose is to enable the integration scheme to prepare internal state before beginning the solving step. (Not pure virtual) + virtual void doSetupIntegrationStep(...) {} + // Compute the system matrix. The boolean i shere to avoid computin zero-valued vectors after the first iteration (i.e. such as the integration scheme error which is always null after one iteration) + virtual void computeLHS(bool firstIteration = false) = 0; + + // compute the current RHS. + virtual void computeRHS(bool firstIteration = false) = 0; + + // Returns the evaluation of the residual + virtual SReal evaluateResidual() = 0; + + // Solve the linear equation from a Newton iteration, i.e. it computes (x^{i+1}-x^i). + virtual void solveLinearEquation() = 0; + + // Use the computed unknown to update state accordingly. The alpha parameter is here to implement line search + virtual void updateStatesFromLinearSolution(SReal alpha, bool firstIteration = false) = 0; + + //This method is called after the integration step is completed. (Not pure virutal) + virtual void finalizeIntegrationStep() {} + + // This method comes form the BaseIntegrationScheme API, it is a monolithic step integration. + virtual void integrate(...) override; + + // This methods returns the factor to put in front of the linear system unknown accumulating it to the velocity. + // In the case of acceleration-based integraiton scheme, we can see in (2.3) that this should return $DG_v$ + virtual SReal getVelocityIntegrationFactor() const = 0; + + // This methods returns the factor to put in front of the linear system unknown accumulating it to the position. + // In the case of acceleration-based integraiton scheme, we can see in (2.3) that this should return $DG_x$ + virtual SReal getPositionIntegrationFactor() const = 0; + + // This method returns the order of the integration scheme in term of number of past timestep needed to compute the next timestep. For instance, if $p_{t+dt} = f(v_{t+dt}, ... , v_{t-k*dt}$, then the order is k+1 + virtual sofa::Size getIntegrationSchemeTimeOrder() const = 0; + + // Rayleigh damping coefficient related to stiffness > 0 + Data d_rayleighStiffness; / + // Rayleigh damping coefficient related to mass > 0 + Data d_rayleighMass; ``` -#### AccelerationBasedIntegrationScheme +For the two famillies a lot of this API can be implemented agnostically from the integraiton s cheme expression. Knowing the integration scheme expression is finally only required to compute the residual vector, and some factors of the LHS or RHS computation. Knowing this, we have proposed two specialization of this class, proposing new simplier API entries for both acceleration and velocity based integration scheme. -#### VelocityBasedIntegrationScheme -#### Special case : StaticEquilibriumIntegrationscheme > **Note on Rayleigh damping :**\ > Most of the integration scheme propose to add _Rayleigh damping_ which is a numerical damping. This damping has therefore no physical meaning and must not be mixed up with physical damping (like _DiagonalVelocityDampingForceField_ in SOFA). The Rayleigh damping corresponds to a damping matrix that is proportional to the mass or/and stiffness matrices using coefficients, respectively Rayleigh stiffness factor $r_K$ or Rayleigh mass factor $r_M$. This numerical damping is usually used to stabilize or ease convergence of the simulation. However, it has to be used carefully. > @@ -340,3 +376,72 @@ This base class inherits directly from the class `BaseIntegrationScheme` and pro > The negative sign in front of $\mathbf{M}$, a positive matrix, represents the fact that viscosity opposes motion. Elasticity also opposes it, however $\mathbf{K}$ is a negative matrix. This formula therefore provides two positive coefficients $r_K$ and $r_M$. > > You can see the use of Rayleigh mass and stiffness dampings in the `integrate()` function of the _EulerImplicit_ class (see EulerImplicitSolver.cpp). + + +#### AccelerationBasedIntegrationScheme + +For acceleration-based integration scheme, the only parts that are integration dependent are : + +- $\text{DG}^{(i)}_{\boldsymbol{x}} = \left.\frac{\mathrm{d} g_{\boldsymbol{v}}^{(t,h)}}{\mathrm{d} \boldsymbol{a}}\right|_{\boldsymbol{X}^{(i)}} $ +- $\text{DG}^{(i)}_{\boldsymbol{v}} = \left(\left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\boldsymbol{X}^{(i)}} \left.\frac{\mathrm{d} g_{\boldsymbol{v}}^{(t,h)}}{\mathrm{d} \boldsymbol{a}}\right|_{\boldsymbol{X}^{(i)}} + \left.\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{a}}\right|_{\boldsymbol{X}^{(i)}}\right)$ +- $\mathcal{G}_{t}(\boldsymbol{X}^{(i)})_1$ +- $\mathcal{G}_{t}(\boldsymbol{X}^{(i)})_2$ + +This enable to completely fulfill the `ImplicitIntegrationScheme` API in this new class by adding new light methods that will need to be specialized for every integration scheme : +```cpp +// This method returns a scalar which is the value of the derivative of the position integration scheme with respect to the acceleration. +// To build the $DG_x$ and $DG_v$ factor (see equation above) +virtual SReal getPositionUpdateDerivedFromAcceleration() const = 0; + +// This method returns a scalar which is the value of the derivative of the position integration scheme with respect to the velocity. +// To build the $DG_x$ and $DG_v$ factor (see equation above) +virtual SReal getPositionUpdateDerivedFromVelocity() const = 0; + +// This method returns a scalar which is the value of the derivative of the velocity integration scheme with respect to the acceleration. +// To build the $DG_x$ and $DG_v$ factor (see equation above) +virtual SReal getVelocityUpdateDerivedFromAcceleration() const = 0; + +// This method compute the error in term of position update given the current state, or $G_t(X)_1$ +virtual void computeCurrentPositionIntegrationError(...) = 0; + +// This method compute the error in term of velocity update given the current state, or $G_t(X)_2$ +virtual void computeCurrentVelocityIntegrationError(...) = 0; +``` + +The tree first method returning only scalar values, they are the most traightforward method to implement. The two last have to deal with advanced concept of SOFA such as mechanical operation on `VecId`. For an example on how to implement this, see the Newmak implementation [here](//TODO, link to cpp file in the master branch once the PR is merged). + + +#### VelocityBasedIntegrationScheme + + +For velocity-based integration scheme, the only parts that are integration dependent are : + +- $g_{\boldsymbol{v}}^{(t,h)-1}$ +- $\left.\frac{\mathrm{d} \tilde{g}_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}}\right|_{\tilde{\boldsymbol{X}}^{(i)}}$ +- $\left.\frac{\mathrm{d} g_{\boldsymbol{v}}^{(t,h)-1}}{\mathrm{d} \boldsymbol{v}}\right|_{\tilde{\boldsymbol{X}}^{(i)}}$ +- $\mathcal{G}_{t}(\boldsymbol{X}^{(i)})_1$ + +This enable to completely fulfill the `ImplicitIntegrationScheme` API in this new class by adding new light methods that will need to be specialized for every integration scheme : + +```cpp +// This method returns a scalar which is the value of the derivative of the position integration scheme with respect to the velocity. +// To update the state +virtual SReal getPositionUpdateDerivedFromVelocity() const = 0; + +// This method returns a scalar which is the value of the derivative of the position integration scheme with respect to the velocity. +// To build the RHS +virtual SReal getInverseVelocityUpdateDerivedFromVelocity() const = 0; + +//This method compute the error in term of position update, or $G_t(X)_1$ +virtual void computeCurrentPositionIntegrationError(...) = 0; + +//This method compute the acceleration given the current velocity, or $g_v^{(t,h)-1}$ +virtual void computeAccelerationFromVelocity(...) = 0; +``` +Again, the two first method returning only scalar values, they are the most traightforward method to implement. The two last have to deal with advanced concept of SOFA such as mechanical operation on `VecId`. For an example on how to implement this, see the Euler implicit implementation [here](//TODO, link to cpp file in the master branch once the PR is merged). + +#### Special case : StaticEquilibriumIntegrationscheme + +The Static equilibrium integration scheme is a special case as it is not a real integraiton scheme becaus eit does not advance time linearly. + +For more details see its dedicated [documentation page](../../../components/integrationscheme/backward/staticequilibriumintegrationscheme/) From 952d7fff8b9518a14bb3c1b965c391a844850c9b Mon Sep 17 00:00:00 2001 From: Paul Baksic Date: Thu, 30 Jul 2026 17:32:33 +0200 Subject: [PATCH 05/10] Rename folder/files --- .../10_EulerExplicitIntegrationScheme.md} | 0 .../20_EulerImplicitIntegrationScheme.md} | 0 .../50_StaticEquilibriumIntegrationScheme.md} | 0 .../60_NewmarkImplicitIntegrationScheme.md} | 0 .../20_Backward/BDFIntegrationScheme.md} | 0 .../20_Backward/NewtonRaphsonSolver.md | 47 ------------------- 6 files changed, 47 deletions(-) rename 30_Components/{40_ODESolver/10_Forward/10_EulerExplicitSolver.md => 40_IntegrationScheme/10_Forward/10_EulerExplicitIntegrationScheme.md} (100%) rename 30_Components/{40_ODESolver/20_Backward/20_EulerImplicitSolver.md => 40_IntegrationScheme/20_Backward/20_EulerImplicitIntegrationScheme.md} (100%) rename 30_Components/{40_ODESolver/20_Backward/50_StaticSolver.md => 40_IntegrationScheme/20_Backward/50_StaticEquilibriumIntegrationScheme.md} (100%) rename 30_Components/{40_ODESolver/20_Backward/60_NewmarkImplicitSolver.md => 40_IntegrationScheme/20_Backward/60_NewmarkImplicitIntegrationScheme.md} (100%) rename 30_Components/{40_ODESolver/20_Backward/BDFOdeSolver.md => 40_IntegrationScheme/20_Backward/BDFIntegrationScheme.md} (100%) delete mode 100644 30_Components/40_ODESolver/20_Backward/NewtonRaphsonSolver.md diff --git a/30_Components/40_ODESolver/10_Forward/10_EulerExplicitSolver.md b/30_Components/40_IntegrationScheme/10_Forward/10_EulerExplicitIntegrationScheme.md similarity index 100% rename from 30_Components/40_ODESolver/10_Forward/10_EulerExplicitSolver.md rename to 30_Components/40_IntegrationScheme/10_Forward/10_EulerExplicitIntegrationScheme.md diff --git a/30_Components/40_ODESolver/20_Backward/20_EulerImplicitSolver.md b/30_Components/40_IntegrationScheme/20_Backward/20_EulerImplicitIntegrationScheme.md similarity index 100% rename from 30_Components/40_ODESolver/20_Backward/20_EulerImplicitSolver.md rename to 30_Components/40_IntegrationScheme/20_Backward/20_EulerImplicitIntegrationScheme.md diff --git a/30_Components/40_ODESolver/20_Backward/50_StaticSolver.md b/30_Components/40_IntegrationScheme/20_Backward/50_StaticEquilibriumIntegrationScheme.md similarity index 100% rename from 30_Components/40_ODESolver/20_Backward/50_StaticSolver.md rename to 30_Components/40_IntegrationScheme/20_Backward/50_StaticEquilibriumIntegrationScheme.md diff --git a/30_Components/40_ODESolver/20_Backward/60_NewmarkImplicitSolver.md b/30_Components/40_IntegrationScheme/20_Backward/60_NewmarkImplicitIntegrationScheme.md similarity index 100% rename from 30_Components/40_ODESolver/20_Backward/60_NewmarkImplicitSolver.md rename to 30_Components/40_IntegrationScheme/20_Backward/60_NewmarkImplicitIntegrationScheme.md diff --git a/30_Components/40_ODESolver/20_Backward/BDFOdeSolver.md b/30_Components/40_IntegrationScheme/20_Backward/BDFIntegrationScheme.md similarity index 100% rename from 30_Components/40_ODESolver/20_Backward/BDFOdeSolver.md rename to 30_Components/40_IntegrationScheme/20_Backward/BDFIntegrationScheme.md diff --git a/30_Components/40_ODESolver/20_Backward/NewtonRaphsonSolver.md b/30_Components/40_ODESolver/20_Backward/NewtonRaphsonSolver.md deleted file mode 100644 index 442b1e1e0..000000000 --- a/30_Components/40_ODESolver/20_Backward/NewtonRaphsonSolver.md +++ /dev/null @@ -1,47 +0,0 @@ -NewtonRaphsonSolver -=================== - -NewtonRaphsonSolver is a component able to solve nonlinear equations using [Newton-Raphson method](https://en.wikipedia.org/wiki/Newton%27s_method). -From an initial guess, the algorithm successively computes better approximations of the root of the nonlinear function. -At every iteration, multiple criteria are evaluated to decide to stop the algorithm (because it converged or the maximum number of iterations has been reached), or to continue. - -The algorithm relies on the derivative of the function and a linear system to solve. -For a function $F : \mathbb{R}^k \rightarrow \mathbb{R}^k$, the new approximation of the root $x_{n+1}$ is computed as: - -$$ -\nabla_F(x_n) (x_{n+1} - x_n) = -F(x_n) -$$ - -where: - -- $x_i$ is the $i$-th approximation of the root -- $x_0$ is the initial guess -- $\nabla_F$ is the Jacobian matrix of the function - -If $dx$ is the solution of the previous linear system, then - -$$ -x_{n+1} = dx + x_n -$$ - -Example -------- - -To solve a static equilibrium (see [StaticSolver](StaticSolver.md)), the nonlinear equation to solve is the sum of forces must be equal to zero ($\sum F = 0$). At each iteration, the linear system $K dx = -\sum F$ must be solved to compute the next approximation of the root. Here K is the derivative of the forces, also called the stiffness matrix. - -Usage ------ - -This component must be linked by another component requiring to solve a nonlinear equation, such as an implicit ODE solver or a static solver. - -In XML format, the link may look like: - -```xml - - -``` From 07cecc3d1e47591093f792f6e9b853d62e9f082f Mon Sep 17 00:00:00 2001 From: Paul Baksic Date: Thu, 30 Jul 2026 17:38:19 +0200 Subject: [PATCH 06/10] Minimal renaming in IS files --- .../10_Forward/10_EulerExplicitIntegrationScheme.md | 12 ++++++------ .../20_Backward/20_EulerImplicitIntegrationScheme.md | 10 +++++----- .../50_StaticEquilibriumIntegrationScheme.md | 12 ++++++------ .../60_NewmarkImplicitIntegrationScheme.md | 10 +++++----- .../20_Backward/BDFIntegrationScheme.md | 4 ++-- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/30_Components/40_IntegrationScheme/10_Forward/10_EulerExplicitIntegrationScheme.md b/30_Components/40_IntegrationScheme/10_Forward/10_EulerExplicitIntegrationScheme.md index 8b8152dd4..2196a6746 100644 --- a/30_Components/40_IntegrationScheme/10_Forward/10_EulerExplicitIntegrationScheme.md +++ b/30_Components/40_IntegrationScheme/10_Forward/10_EulerExplicitIntegrationScheme.md @@ -1,7 +1,7 @@ -EulerExplicitSolver +EulerExplicitIntegrationScheme =================== -The EulerExplicitSolver component belongs to the category of [integration schemes or ODE Solver](../../../../simulation-principles/system-resolution/integration-scheme/). This scheme allows to solve dynamic systems explicitly: all forces will be computed based on the state information at the current time step $x(t)$. +The EulerExplicitIntegrationScheme component belongs to the category of [integration schemes](../../../../simulation-principles/system-resolution/integration-scheme/). This scheme allows to solve dynamic systems explicitly: all forces will be computed based on the state information at the current time step $x(t)$. Looking at continuum mechanics, the linear system $\mathbf{A}x=b$ arises from the dynamic equation. This dynamic is written as follows but other physics (like heat transfer) result in a similar equation: @@ -9,7 +9,7 @@ $$ \mathbf{M}\Delta v=dt\left(f(x,t)\right) $$ -where $x$ is the degrees of freedom, $\mathbf{M}$ the mass matrix and $f(x,t)$ a function of $x$ (and possibly its derivatives) acting on our system. In the case of the EulerExplicitSolver, this equation can be written: +where $x$ is the degrees of freedom, $\mathbf{M}$ the mass matrix and $f(x,t)$ a function of $x$ (and possibly its derivatives) acting on our system. In the case of the EulerExplicitIntegrationScheme, this equation can be written: $$ \mathbf{M}\Delta v=dt\left(f(x(t))\right) @@ -26,16 +26,16 @@ Depending on whether the mass matrix is diagonal or not, SOFA supports two cases Note that the **symplectic** data allows to modify the scheme to make it [symplectic](https://en.wikipedia.org/wiki/Semi-implicit_Euler_method), i.e. velocities are updated before the positions. It allows to update the positions from the newly computed velocities, instead of velocities from the previous time step. This option makes the scheme more robust in time. -EulerExplicitSolver is symplectic by default. +EulerExplicitIntegrationScheme is symplectic by default. Sequence diagram ---------------- - + Usage ----- -The EulerExplicitSolver **requires** a MechanicalObject to store the state vectors. However, as explained above, no LinearSolver is needed and the EulerExplicitSolver is **only working using a [UniformMass](../../../mass/uniformmass/) or [DiagonalMass](../../../mass/diagonalmass/)**, which ensures to have a diagonal system matrix. +The EulerExplicitIntegrationScheme **requires** a MechanicalObject to store the state vectors. However, as explained above, no LinearSolver is needed and the EulerExplicitIntegrationScheme is **only working using a [UniformMass](../../../mass/uniformmass/) or [DiagonalMass](../../../mass/diagonalmass/)**, which ensures to have a diagonal system matrix. diff --git a/30_Components/40_IntegrationScheme/20_Backward/20_EulerImplicitIntegrationScheme.md b/30_Components/40_IntegrationScheme/20_Backward/20_EulerImplicitIntegrationScheme.md index 3c9e85035..cc861ec1f 100644 --- a/30_Components/40_IntegrationScheme/20_Backward/20_EulerImplicitIntegrationScheme.md +++ b/30_Components/40_IntegrationScheme/20_Backward/20_EulerImplicitIntegrationScheme.md @@ -1,7 +1,7 @@ -EulerImplicitSolver +EulerImplicitIntegrationScheme =================== -This component belongs to the category of [integration schemes or ODE Solver](../../../../simulation-principles/system-resolution/integration-scheme/). This scheme builds the system following an implicit scheme: forces are considered based on the state information at the next time step $x(t+dt)$, unknown at the current time step. +This component belongs to the category of [integration schemes](../../../../simulation-principles/system-resolution/integration-scheme/). This scheme builds the system following an implicit scheme: forces are considered based on the state information at the next time step $x(t+dt)$, unknown at the current time step. Looking at continuum mechanics, the linear system $\mathbf{A}x=b$ arises from the dynamic equation. This dynamic is written as follows but other physics (like heat transfer) result in a similar equation: @@ -9,7 +9,7 @@ $$ \mathbf{M}\Delta v=dt\left(f(x,t)\right) $$ -where $x$ is the degrees of freedom, $\mathbf{M}$ the mass matrix and $f(x,t)$ a function of $x$ (and possibly its derivatives) acting on our system. In the case of the EulerImplicitSolver, this equation can be written: +where $x$ is the degrees of freedom, $\mathbf{M}$ the mass matrix and $f(x,t)$ a function of $x$ (and possibly its derivatives) acting on our system. In the case of the EulerImplicitIntegrationScheme, this equation can be written: $$ \mathbf{M} \Delta v=dt \cdot f(x(t+dt)) @@ -102,7 +102,7 @@ $$ Sequence diagram ---------------- - + @@ -110,7 +110,7 @@ Sequence diagram Usage ----- -The EulerImplicitSolver **requires**: +The EulerImplicitIntegrationScheme **requires**: - a [LinearSolver](../../../../simulation-principles/system-resolution/linear-solver/) to solve the linear system - and a MechanicalObject to store the state vectors. diff --git a/30_Components/40_IntegrationScheme/20_Backward/50_StaticEquilibriumIntegrationScheme.md b/30_Components/40_IntegrationScheme/20_Backward/50_StaticEquilibriumIntegrationScheme.md index 270be8cac..41f05f4f1 100644 --- a/30_Components/40_IntegrationScheme/20_Backward/50_StaticEquilibriumIntegrationScheme.md +++ b/30_Components/40_IntegrationScheme/20_Backward/50_StaticEquilibriumIntegrationScheme.md @@ -1,7 +1,7 @@ -StaticSolver +StaticEquilibriumIntegrationScheme ============ -This component belongs to the category of [integration schemes or ODE Solver](../../../../simulation-principles/system-resolution/integration-scheme/). +This component belongs to the category of [integration schemes](../../../../simulation-principles/system-resolution/integration-scheme/). In the field of mechanics, statics consists in finding the equilibrium taking into account the loads (internal forces, external forces and torques) acting on the physical system, that do not experience an acceleration ( $a=0$ ). Finding a static equilibrium means finding a solution to: $\textstyle \sum F=0$ where $F$ is the sum of all loads, one of which might be unknown. @@ -9,7 +9,7 @@ In a static analysis, the inertia and damping effects are ignored, i.e. the dyna In a static simulation involving elasticity, the linear system that we solve corresponds to $K \Delta u=f$ where $K$ is the stiffness matrix (derivative of elastic forces), $\Delta u$ is a vector describing the total increment of displacement and $f$ are all explicit forces. We realize here that the static solver is in fact an implicit scheme, since the $K$ matrix is present in the left-hand side of the equation. The solution $\Delta u$ is obtained iteratively. At each iteration _i_, the displacement is incremented $\Delta u_{i+1}=\Delta u_{i}+\delta u_i$, thus resulting in the following system to solve: $K_i \delta u_i=f$. -In case of non-linear elasticity, $K_i$ is a linearization which must be updated with regards to the increment of displacement $\delta u_i$. In such cases, several iterations of Newton Raphson are required to find an appropriate approximate solution. In one step of the StaticSolver, the number of Newton Raphson iterations is ruled by the data field **newton_iterations**. +In case of non-linear elasticity, $K_i$ is a linearization which must be updated with regards to the increment of displacement $\delta u_i$. In such cases, several iterations of Newton Raphson are required to find an appropriate approximate solution. In one step of the StaticEquilibriumIntegrationScheme, the number of Newton Raphson iterations is ruled by the data field **newton_iterations**. _Reminder_: the [Newton Raphson method](https://en.wikipedia.org/wiki/Newton%27s_method) is an iterative algorithm aiming at finding the solution of the system $f(x)=0$ where $f(x)$ is non-linear. At each iteration of Newton Raphson algorithm, we find a new approximate solution: @@ -25,17 +25,17 @@ $$ Sequence diagram ---------------- - + Usage ----- -At each simulation step and each Newton Raphson iteration, the StaticSolver **requires**: +At each simulation step and each Newton Raphson iteration, the StaticEquilibriumIntegrationScheme **requires**: - a [LinearSolver](../../../../simulation-principles/system-resolution/linear-solver/) to solve the linear system - and a MechanicalObject to store the state vectors. -A StaticSolver must be used in simulations where the dynamics has no or a negligible effect on the system. A StaticSolver would also be relevant for systems with low mass. In such case, we fall into the quasi-static analysis. +A StaticEquilibriumIntegrationScheme must be used in simulations where the dynamics has no or a negligible effect on the system. A StaticEquilibriumIntegrationScheme would also be relevant for systems with low mass. In such case, we fall into the quasi-static analysis. In some loading configuration, applying the full forces and torques might not lead to any converging simulation. It is then relevant to go for an incremental loading, i.e. loads are applied incrementally at each simulation step $i$. This incremental loading has to be done in the associated ForceField. If you want to use this solver with Newton Raphson iterations, it is in the user's hand to make sure the external forces used in the scene (pressure, traction, etc.) only get incremented at each time step, and not at each calls to addForce (which is currently the case for most force fields). diff --git a/30_Components/40_IntegrationScheme/20_Backward/60_NewmarkImplicitIntegrationScheme.md b/30_Components/40_IntegrationScheme/20_Backward/60_NewmarkImplicitIntegrationScheme.md index 6c9a84d4a..bf60b8311 100644 --- a/30_Components/40_IntegrationScheme/20_Backward/60_NewmarkImplicitIntegrationScheme.md +++ b/30_Components/40_IntegrationScheme/20_Backward/60_NewmarkImplicitIntegrationScheme.md @@ -1,9 +1,9 @@ -NewmarkImplicitSolver +NewmarkIntegrationScheme ===================== -This component belongs to the category of [integration schemes or ODE Solver](../../../../simulation-principles/system-resolution/integration-scheme/). +This component belongs to the category of [integration schemes](../../../../simulation-principles/system-resolution/integration-scheme/). -This scheme is an implicit time integrator for dynamic system using the Newmark scheme. To compute the new position or new velocity, the NewmarkImplicitSolver is based on the following equations: +This scheme is an implicit time integrator for dynamic system using the Newmark scheme. To compute the new position or new velocity, the NewmarkIntegrationScheme is based on the following equations: $$ x_{t+h}=x_t+h v_t+\frac{h^2}{2}((1-2\beta)a_t+2\beta a_{t+h}) @@ -42,13 +42,13 @@ $$ Sequence diagram ---------------- - + Usage ----- -At each simulation step and each Newton Raphson iteration, the NewmarkImplicitSolver **requires**: +At each simulation step and each Newton Raphson iteration, the NewmarkIntegrationScheme **requires**: - a [LinearSolver](../../../../simulation-principles/system-resolution/linear-solver/) to solve the linear system - and a MechanicalObject to store the state vectors. diff --git a/30_Components/40_IntegrationScheme/20_Backward/BDFIntegrationScheme.md b/30_Components/40_IntegrationScheme/20_Backward/BDFIntegrationScheme.md index 51d1b82a7..2a95fbddf 100644 --- a/30_Components/40_IntegrationScheme/20_Backward/BDFIntegrationScheme.md +++ b/30_Components/40_IntegrationScheme/20_Backward/BDFIntegrationScheme.md @@ -1,7 +1,7 @@ -BDFOdeSolver +BDFIntegrationScheme ============ -This component belongs to the category of [integration schemes or ODE Solver](../../../../simulation-principles/system-resolution/integration-scheme/). +This component belongs to the category of [integration schemes](../../../../simulation-principles/system-resolution/integration-scheme/). It is an implicit method for the numerical integration of the ODE resulting from Newton's second law of motion. The method relies on [Backward Differentiation Formula](https://en.wikipedia.org/wiki/Backward_differentiation_formula) (BDF). From d858bf22c971488a4bdb9ce059d235112cd7c5ac Mon Sep 17 00:00:00 2001 From: Paul Baksic Date: Thu, 30 Jul 2026 17:42:27 +0200 Subject: [PATCH 07/10] Remove flowcharts as they are really quickly outdated --- .../integrationscheme/EulerExplicitSolver.png | Bin 27540 -> 0 bytes .../integrationscheme/EulerImplicitSolver.png | Bin 128953 -> 0 bytes .../NewmarkImplicitSolver.png | Bin 55942 -> 0 bytes images/integrationscheme/StaticSolver.png | Bin 117365 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/integrationscheme/EulerExplicitSolver.png delete mode 100644 images/integrationscheme/EulerImplicitSolver.png delete mode 100644 images/integrationscheme/NewmarkImplicitSolver.png delete mode 100644 images/integrationscheme/StaticSolver.png diff --git a/images/integrationscheme/EulerExplicitSolver.png b/images/integrationscheme/EulerExplicitSolver.png deleted file mode 100644 index 214e6e250e6f92f4ae6711a59150b4c6395c0788..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27540 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 WqmKB#`T!1lX`pL#Der>)gZ}_{pyNXT diff --git a/images/integrationscheme/EulerImplicitSolver.png b/images/integrationscheme/EulerImplicitSolver.png deleted file mode 100644 index 02dbb5f388181849cb8c24f4cf24247c56dcc0e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128953 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

>{H^pK~TsWsD7<^&W3Sj%<{K8hXs5mB2d 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Œ}(YZQ@?VK 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 diff --git a/images/integrationscheme/NewmarkImplicitSolver.png b/images/integrationscheme/NewmarkImplicitSolver.png deleted file mode 100644 index 7dae5fb32b5a90159787745a7740bbb825a18435..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55942 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


~!0 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 F{{aQ!wd()? From 458f8c17809002f118c19b036fefa5f0ee8ffc64 Mon Sep 17 00:00:00 2001 From: Paul Baksic Date: Fri, 31 Jul 2026 10:47:55 +0200 Subject: [PATCH 08/10] Add some insights on the API --- .../20_MechanicalObject.md | 2 +- .../10_Integration_Scheme.md | 26 ++++++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/20_Simulation_Principles/20_MechanicalObject.md b/20_Simulation_Principles/20_MechanicalObject.md index a019770d1..a7007d796 100644 --- a/20_Simulation_Principles/20_MechanicalObject.md +++ b/20_Simulation_Principles/20_MechanicalObject.md @@ -122,7 +122,7 @@ Symbolic ids The MultiVec entries are not directly accessible by the solvers. The MultiVec are represented by identificators. The operations on the vectors are implemented using visitors which contain the identificators of the relevant vectors. The MultiVec identificators (MultiVecId) have different types, depending on the data they contain (positions or their derivatives) and the access mode. -The use of symbolic identificators (MultiVecId) prevent other components (like solvers) from handling state vectors directly and allow to easily work with abstract MultiVec by using their ids. These symbolic ids are widely used by specialized visitors, like the ones used in [ODESolver](./../system-resolution/integration-scheme/). +The use of symbolic identificators (MultiVecId) prevent other components (like solvers) from handling state vectors directly and allow to easily work with abstract MultiVec by using their ids. These symbolic ids are widely used by specialized visitors, like the ones used in [IntegrationScheme](./../system-resolution/integration-scheme/). ``` cpp typedef TMultiVecId ConstMultiVecCoordId; diff --git a/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md b/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md index 37bcc9a0a..354fea650 100644 --- a/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md +++ b/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md @@ -313,7 +313,7 @@ $$ $$ -In the SOFA code +The SOFA implementation ---------------- ### Design choices @@ -348,11 +348,11 @@ This base class inherits directly from the class `BaseIntegrationScheme` and pro virtual void integrate(...) override; // This methods returns the factor to put in front of the linear system unknown accumulating it to the velocity. - // In the case of acceleration-based integraiton scheme, we can see in (2.3) that this should return $DG_v$ + // In the case of acceleration-based integration scheme, we can see in (2.3) that this should return $DG_v$ virtual SReal getVelocityIntegrationFactor() const = 0; // This methods returns the factor to put in front of the linear system unknown accumulating it to the position. - // In the case of acceleration-based integraiton scheme, we can see in (2.3) that this should return $DG_x$ + // In the case of acceleration-based integration scheme, we can see in (2.3) that this should return $DG_x$ virtual SReal getPositionIntegrationFactor() const = 0; // This method returns the order of the integration scheme in term of number of past timestep needed to compute the next timestep. For instance, if $p_{t+dt} = f(v_{t+dt}, ... , v_{t-k*dt}$, then the order is k+1 @@ -365,7 +365,7 @@ This base class inherits directly from the class `BaseIntegrationScheme` and pro ``` -For the two famillies a lot of this API can be implemented agnostically from the integraiton s cheme expression. Knowing the integration scheme expression is finally only required to compute the residual vector, and some factors of the LHS or RHS computation. Knowing this, we have proposed two specialization of this class, proposing new simplier API entries for both acceleration and velocity based integration scheme. +For the two famillies a lot of this API can be implemented agnostically from the integration s cheme expression. Knowing the integration scheme expression is finally only required to compute the residual vector, and some factors of the LHS or RHS computation. Knowing this, we have proposed two specialization of this class, proposing new simplier API entries for both acceleration and velocity based integration scheme. @@ -440,8 +440,22 @@ virtual void computeAccelerationFromVelocity(...) = 0; ``` Again, the two first method returning only scalar values, they are the most traightforward method to implement. The two last have to deal with advanced concept of SOFA such as mechanical operation on `VecId`. For an example on how to implement this, see the Euler implicit implementation [here](//TODO, link to cpp file in the master branch once the PR is merged). -#### Special case : StaticEquilibriumIntegrationscheme +#### Special case : StaticEquilibriumIntegrationScheme -The Static equilibrium integration scheme is a special case as it is not a real integraiton scheme becaus eit does not advance time linearly. +The Static equilibrium integration scheme is a special case as it is not a real integration scheme becaus eit does not advance time linearly. For more details see its dedicated [documentation page](../../../components/integrationscheme/backward/staticequilibriumintegrationscheme/) + +#### Some API details + +For all integration scheme, as we have seen in the dynamic equations, the right-hand-side and the left-hand-side are composed of contirbutions coming from the mass and external and internal forces. This means that for building those terms, the intergation schemes will need to access the ForceFields and the Mass objects to either accumulate their _explicit_ part in the right-hand-side or their _implicit_ part in the left-hand-side. + +This is performed using a mechanism of visitors that will iterate through the scene graph and call API method of those component so that they can add their contributions. For instance : +- `addForce` method of forcefield will contribute to the right-hand-side +- `buildStiffnessMatrix` method of forcefield will build its implicit part, contributing to the left-hand-side +- `addMDx` in mass object will be used to add the gravity term in the right-hand-side + +This list is not exhausitve, please refer to the [Forcefield](../../multi-model-representation/forcefield/) and [Mass](../../multi-model-representation/mass/) documentation pages. + + + From ddf4efef8602aba918f5da33b04e63361703f417 Mon Sep 17 00:00:00 2001 From: Paul Baksic Date: Fri, 31 Jul 2026 11:49:40 +0200 Subject: [PATCH 09/10] Add components rewritting --- .../10_Integration_Scheme.md | 4 + .../10_EulerExplicitIntegrationScheme.md | 6 - .../20_EulerImplicitIntegrationScheme.md | 104 +++++------------- .../50_StaticEquilibriumIntegrationScheme.md | 8 +- .../60_NewmarkImplicitIntegrationScheme.md | 51 ++++----- .../20_Backward/BDFIntegrationScheme.md | 83 +++++++------- 6 files changed, 93 insertions(+), 163 deletions(-) diff --git a/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md b/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md index 354fea650..65a7d8afc 100644 --- a/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md +++ b/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md @@ -440,6 +440,10 @@ virtual void computeAccelerationFromVelocity(...) = 0; ``` Again, the two first method returning only scalar values, they are the most traightforward method to implement. The two last have to deal with advanced concept of SOFA such as mechanical operation on `VecId`. For an example on how to implement this, see the Euler implicit implementation [here](//TODO, link to cpp file in the master branch once the PR is merged). +> **Note :**\ +> The velocity-base integration schemes offer a possibility to reduce the integration to a _first order_ integration, meaning the velocity is considered as null at the begining of each time step. This feature can help for quasi-static simulation or simulations where the objects dynamic is by nature subject to numerical noise such as very lightwheight objects. \ +> This feature can be activated using the data `firstOrder=True` + #### Special case : StaticEquilibriumIntegrationScheme The Static equilibrium integration scheme is a special case as it is not a real integration scheme becaus eit does not advance time linearly. diff --git a/30_Components/40_IntegrationScheme/10_Forward/10_EulerExplicitIntegrationScheme.md b/30_Components/40_IntegrationScheme/10_Forward/10_EulerExplicitIntegrationScheme.md index 2196a6746..b160047e8 100644 --- a/30_Components/40_IntegrationScheme/10_Forward/10_EulerExplicitIntegrationScheme.md +++ b/30_Components/40_IntegrationScheme/10_Forward/10_EulerExplicitIntegrationScheme.md @@ -28,12 +28,6 @@ It allows to update the positions from the newly computed velocities, instead of This option makes the scheme more robust in time. EulerExplicitIntegrationScheme is symplectic by default. -Sequence diagram ----------------- - - - - Usage ----- diff --git a/30_Components/40_IntegrationScheme/20_Backward/20_EulerImplicitIntegrationScheme.md b/30_Components/40_IntegrationScheme/20_Backward/20_EulerImplicitIntegrationScheme.md index cc861ec1f..00a12edfd 100644 --- a/30_Components/40_IntegrationScheme/20_Backward/20_EulerImplicitIntegrationScheme.md +++ b/30_Components/40_IntegrationScheme/20_Backward/20_EulerImplicitIntegrationScheme.md @@ -3,106 +3,56 @@ EulerImplicitIntegrationScheme This component belongs to the category of [integration schemes](../../../../simulation-principles/system-resolution/integration-scheme/). This scheme builds the system following an implicit scheme: forces are considered based on the state information at the next time step $x(t+dt)$, unknown at the current time step. -Looking at continuum mechanics, the linear system $\mathbf{A}x=b$ arises from the dynamic equation. This dynamic is written as follows but other physics (like heat transfer) result in a similar equation: +This is the most broadly used integration scheme thank's to its unconditional stability and simplicity. -$$ -\mathbf{M}\Delta v=dt\left(f(x,t)\right) -$$ - -where $x$ is the degrees of freedom, $\mathbf{M}$ the mass matrix and $f(x,t)$ a function of $x$ (and possibly its derivatives) acting on our system. In the case of the EulerImplicitIntegrationScheme, this equation can be written: - -$$ -\mathbf{M} \Delta v=dt \cdot f(x(t+dt)) -$$ +It is recommended to read the theoretical part of the [integration schemes](../../../../simulation-principles/system-resolution/integration-scheme/) page to understand the following. -by using a Taylor expansion, we get: +The EulerImplicitIntegrationScheme inherits from VelocityBaseIntegrationScheme because its integration scheme in velocity is invertible. Its equations are the following : $$ -\mathbf{M} \Delta v=dt \cdot \left( f(x(t))+\cdot \frac{\partial f}{\partial x} \Delta x \right) +\begin{aligned} +g_{\boldsymbol{x}}^{(t,h)} &: \boldsymbol{v}, \boldsymbol{a} \mapsto \boldsymbol{x}_t + h \boldsymbol{v} \\ +g_{\boldsymbol{v}}^{(t,h)} &: \boldsymbol{a} \mapsto \boldsymbol{v}_t + h \boldsymbol{a} +\end{aligned} $$ -since we have: $\Delta x=dt(v(t)+\Delta v)$, then: - -$$ -\mathbf{M}\Delta v=dt\cdot \left( f(x(t))+dt\cdot \frac{\partial f}{\partial x}v(t)+dt\cdot \frac{\partial f}{\partial x} \Delta v \right) -$$ - -Finally, gathering the unknown (depending on $\Delta v$) in the left-hand side, we have: - -$$ -\left( \mathbf{M}-dt^2 \cdot \frac{\partial f}{\partial x} \right) \Delta v=dt\cdot f(x(t))+dt^2\cdot \frac{\partial f}{\partial x}v(t) -$$ - -We can notice the appearance of the stiffness matrix : $\mathbf{K}_{ij}=\textstyle\frac{\partial f_i}{\partial x_j}$. The stiffness matrix $\mathbf{K}$ is a symmetric matrix, can either be linear or non-linear regarding $x$. - -$$ -\left( \mathbf{M}-dt^2 \cdot \mathbf{K} \right) \Delta v=dt\cdot f(x(t))+dt^2\cdot \mathbf{K}v(t) -$$ - -The computation of the **right hand side** is done by the ForceFields. Just like in the explicit case (see [EulerExplicitSolver](../../forward/eulerexplicitsolver/)), the explicit contribution $dt\left(f(x(t))\right)$ is implemented in the same function `addForce()`. The second part $dt^2\cdot \frac{\partial f}{\partial x}v(t)$ is computed by the function `addDForce()`. - -It is important to note that, depending on the **choice of LinearSolver** (direct or iterative), the API functions called to build the **left hand side** system matrix $\mathbf{A}=\left( M-dt^2 \cdot \frac{\partial f}{\partial x} \right)$ will not be the same: - - - if a direct solver is used, the mass $\mathbf{M}$ is computed in the `addMToMatrix()` and the stiffness part $-dt^2 \cdot \frac{\partial f}{\partial x}$ is computed in the function `addKToMatrix()` in ForceFields - - - if an iterative solver is used, the mass is iteratively multiplied by the unknown $\mathbf{M} \Delta v$ within the `addMDx()`, as the stiffness part $-dt^2 \cdot \frac{\partial f}{\partial x} \Delta v$ within the function `addDForce()` in ForceFields. +#### API specialization -#### Considering viscosity - - -As you might have noticed, the Taylor expansion detailed above does not take into account a possible dependency of the force $f(x,t)$ on the velocity. By considering it, the effect of velocity will result in a viscosity effect through the damping matrix $\mathbf{B}$. - -Let's apply the Taylor expansion taking into account the velocity and we get: - -$$ -\mathbf{M} \Delta v=dt \cdot \left( f(x(t), v(t))+\cdot \frac{\partial f}{\partial x} \Delta x+\cdot \frac{\partial f}{\partial v} \Delta v \right) +As explained in the [IntegrationScheme](../../../../simulation-principles/system-resolution/integration-scheme/) documentation, the specilization consist in implementing 4 methods that requires the knowledge of four terms/expressions. for Euler implicit they are the following : $$ - +\begin{aligned} +&\tilde{g}_{\boldsymbol{x}}^{(t,h)} \equiv g_{\boldsymbol{x}}^{(t,h)} \\ +&g_{\boldsymbol{v}}^{(t,h)-1} : \boldsymbol{v} \mapsto \frac{1}{h}(\boldsymbol{v} - \boldsymbol{v}_t) +\end{aligned} +\qquad \qquad \qquad +\begin{aligned} +&\frac{\mathrm{d} \tilde{g}_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}} = h \\ +&\frac{\mathrm{d} g_{\boldsymbol{v}}^{(t,h)-1}}{\mathrm{d} \boldsymbol{v}} = \frac{1}{h} +\end{aligned} $$ -\left( \mathbf{M}-dt \cdot \frac{\partial f}{\partial v}-dt^2 \cdot \frac{\partial f}{\partial x} \right) \Delta v=dt\cdot f(x(t),v(t))+dt^2\cdot \frac{\partial f}{\partial x}v(t) -$$ - -$$ -\left( \mathbf{M}-dt \cdot \mathbf{B}-dt^2 \cdot \mathbf{K} \right) \Delta v=dt\cdot f(x(t),v(t))+dt^2\cdot \mathbf{K}v(t) -$$ - -Depending on the choice of LinearSolver (direct or iterative), the API functions called to build the $\mathbf{B}$ damping matrix on the left hand side will not be the same: - - - if a direct solver is used, the damping matrix $\mathbf{B}$ is computed in the `addBToMatrix()` in ForceFields - - if an iterative solver is used, the damping is iteratively multiplied by the unknown $\mathbf{B} \Delta v$ within the `addDForce()` just as the stiffness part in the function `addDForce()` in ForceFields. - - - -#### Dissipation - -SOFA is a framework aiming at interactive simulations. For this purpose, dissipative schemes are very appropriate. The Euler scheme is an order 1 time integration scheme (since only using the current state $x(t)$ and no older one like $x(t-dt)$). It is known to be a dissipative scheme. Moreover, only one Newton step is performed in the EulerImplicit, which might harm the energy conservation. - -#### Numerical damping - -With Rayleigh damping, the option is given to the user to add numerical damping. The description of the meaning and effect of these Rayleigh damping coefficients is given in [ODESolver](../../../../simulation-principles/system-resolution/integration-scheme/#rayleigh-damping). #### Trapezoidal rule -Activating the trapezoidalScheme option of the Euler implicit scheme will make the scheme less dissipative. This is due to the fact that the [trapezoidal rule](https://en.wikipedia.org/wiki/Trapezoidal_rule) increases the order of the time integration. Moreover, higher order schemes are known to be less dissipative. +Activating the trapezoidalScheme option of the Euler implicit scheme will make the scheme less dissipative. This will apply the [trapezoidal rule](https://en.wikipedia.org/wiki/Trapezoidal_rule) to the velocity integration, and thus will increase the order of the time integration, which is known to be less dissipative. It is also known to increase robustness and stability to the time integration due to the order 2 in time of this trapezoidal scheme. The modified scheme is the following: $$ -y_{n+1}-y_n=\frac{dt}{2}(f(y_{n+1})+f(y_n)) +\begin{aligned} +g_{\boldsymbol{x}}^{(t,h)} &: \boldsymbol{v}, \boldsymbol{a} \mapsto \boldsymbol{x}_t + \frac{h}{2} \boldsymbol{v_t} + \frac{h}{2} \boldsymbol{v} \\ +g_{\boldsymbol{v}}^{(t,h)} &: \boldsymbol{a} \mapsto \boldsymbol{v}_t + h \boldsymbol{a} +\end{aligned} $$ -This results in the following linear system: +This results in the updated term: $$ -\left( \mathbf{M}-\frac{dt^2}{4} \frac{\partial f}{\partial x}\right) \Delta v=dt\cdot f(x(t))+\frac{dt^2}{2}\cdot \frac{\partial f}{\partial x}v(t) -$$ +\frac{\mathrm{d} \tilde{g}_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}} = h/2 +$$ -Sequence diagram ----------------- - - +To activate this trapezoidal rule, you need to use the data `trapezoidalScheme=true`. diff --git a/30_Components/40_IntegrationScheme/20_Backward/50_StaticEquilibriumIntegrationScheme.md b/30_Components/40_IntegrationScheme/20_Backward/50_StaticEquilibriumIntegrationScheme.md index 41f05f4f1..08a805175 100644 --- a/30_Components/40_IntegrationScheme/20_Backward/50_StaticEquilibriumIntegrationScheme.md +++ b/30_Components/40_IntegrationScheme/20_Backward/50_StaticEquilibriumIntegrationScheme.md @@ -11,7 +11,7 @@ In a static simulation involving elasticity, the linear system that we solve cor In case of non-linear elasticity, $K_i$ is a linearization which must be updated with regards to the increment of displacement $\delta u_i$. In such cases, several iterations of Newton Raphson are required to find an appropriate approximate solution. In one step of the StaticEquilibriumIntegrationScheme, the number of Newton Raphson iterations is ruled by the data field **newton_iterations**. -_Reminder_: the [Newton Raphson method](https://en.wikipedia.org/wiki/Newton%27s_method) is an iterative algorithm aiming at finding the solution of the system $f(x)=0$ where $f(x)$ is non-linear. At each iteration of Newton Raphson algorithm, we find a new approximate solution: +_Reminder_: the Newton Raphson method is an iterative algorithm aiming at finding the solution of the system $f(x)=0$ where $f(x)$ is non-linear. At each iteration of Newton Raphson algorithm, we find a new approximate solution: $x^{n+1}=x^n-\frac{f(x^n)}{f'(x^n)}$ where $f'(x^n) = \frac{df}{dx}(x^n)$ @@ -22,12 +22,6 @@ $$ $$ -Sequence diagram ----------------- - - - - Usage ----- diff --git a/30_Components/40_IntegrationScheme/20_Backward/60_NewmarkImplicitIntegrationScheme.md b/30_Components/40_IntegrationScheme/20_Backward/60_NewmarkImplicitIntegrationScheme.md index bf60b8311..5c617d5fd 100644 --- a/30_Components/40_IntegrationScheme/20_Backward/60_NewmarkImplicitIntegrationScheme.md +++ b/30_Components/40_IntegrationScheme/20_Backward/60_NewmarkImplicitIntegrationScheme.md @@ -1,48 +1,37 @@ NewmarkIntegrationScheme ===================== -This component belongs to the category of [integration schemes](../../../../simulation-principles/system-resolution/integration-scheme/). +This component belongs to the category of [integration schemes](../../../../simulation-principles/system-resolution/integration-scheme/). This scheme builds the system following an implicit scheme: forces are considered based on the state information at the next time step $x(t+dt)$, unknown at the current time step. -This scheme is an implicit time integrator for dynamic system using the Newmark scheme. To compute the new position or new velocity, the NewmarkIntegrationScheme is based on the following equations: +It is recommended to read the theoretical part of the [integration schemes](../../../../simulation-principles/system-resolution/integration-scheme/) page to understand the following. -$$ -x_{t+h}=x_t+h v_t+\frac{h^2}{2}((1-2\beta)a_t+2\beta a_{t+h}) -$$ - -$$ -v_{t+h}=v_t+h((1-\gamma)a_t+\gamma a_{t+h}) -$$ +The Newmark-$\beta$ integration scheme is a parametrized integration scheme. It presents a set of two parameters $\zeta = (\beta, \gamma)$, balancing the 'implicitness' of the solver: +1. With $\zeta =(0,0.5)$, the scheme is an explicit central difference scheme +2. With $\zeta =(0.25,0.5)$ it behaves like an average constant acceleration scheme +3. With $\zeta =(1/6,0.5)$ it behaves like a linear accelerations scheme +4. If $2 \beta \geq \gamma \geq 1/2$, then the Newmark-$\beta$ method is stable regardless of the size of the time-step +It inherits from AccelerationBAsedIntegrationScheme as only the acceleration integration is implicit. Its equations are the following : -Applied to a mechanical system where $\small Ma_t+(r_MM+r_KK)v_t+Kx_t=f_{ext}$, we need to solve the following system: - - -$$ -\tiny Ma_{t+h}+(r_MM+r_KK)v_{t+h}+Kx_{t+h}=f_{ext} -$$ - -$$ -\tiny Ma_{t+h}+(r_MM+r_KK)(v_t+h((1-\gamma)a_t+\gamma a_{t+h}))+K(x_t+hv_t+\frac{h^2}{2}((1-2\beta)a_t+2\beta a_{t+h}))=f_{ext} $$ +\begin{aligned} +g_{\boldsymbol{x}}^{(t,h)} &: \boldsymbol{v}, \boldsymbol{a} \mapsto \boldsymbol{x}_t + h \boldsymbol{v}_t + h^2\left[\left(\frac{1}{2} - \beta\right)\boldsymbol{a}_t + \beta \boldsymbol{a}\right] \\ +g_{\boldsymbol{v}}^{(t,h)} &: \boldsymbol{a} \mapsto \boldsymbol{v}_t + h \left[(1-\gamma)\boldsymbol{a}_t + \gamma \boldsymbol{a}\right] +\end{aligned} +$$ -$$ -\tiny (M+h\gamma(r_MM+r_KK)+h^2\beta K)a_{t+h}=f_{ext}-(r_MM+r_KK)(v_t+h(1-\gamma)a_t)-K(x_t+hv_t+\frac{h^2(1-2\beta)}{2}a_t) -$$ -$$ -\tiny ((1+h\gamma r_M)M+(h^2\beta +h\gamma r_K)K)a_{t+h}=f_{ext}-(r_MM+r_KK)v_t-Kx_t-(r_MM+r_KK)(h(1-\gamma)a_t)-K(hv_t+\frac{h^2(1-2\beta)}{2}a_t) -$$ +#### API specialization +As explained in the [IntegrationScheme](../../../../simulation-principles/system-resolution/integration-scheme/) documentation, the specialization consist in implementing 5 methods that requires the knowledge of four terms/expressions. For Newmark-$\beta$ they are the following : $$ -\tiny ((1+h\gamma r_M)M+(h^2\beta+h\gamma r_K)K)a_{t+h}=a_t-(r_MM+r_KK)(h(1-\gamma)a_t)-K(hv_t+\frac{h^2(1-2\beta)}{2}a_t) +\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}} = 0 +\qquad \qquad \qquad +\frac{\mathrm{d} g_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{a}} = h^2\beta +\qquad \qquad \qquad +\frac{\mathrm{d} g_{\boldsymbol{v}}^{(t,h)}}{\mathrm{d} \boldsymbol{a}} = h \gamma $$ - - -Sequence diagram ----------------- - - Usage diff --git a/30_Components/40_IntegrationScheme/20_Backward/BDFIntegrationScheme.md b/30_Components/40_IntegrationScheme/20_Backward/BDFIntegrationScheme.md index 2a95fbddf..7379caf28 100644 --- a/30_Components/40_IntegrationScheme/20_Backward/BDFIntegrationScheme.md +++ b/30_Components/40_IntegrationScheme/20_Backward/BDFIntegrationScheme.md @@ -4,67 +4,66 @@ BDFIntegrationScheme This component belongs to the category of [integration schemes](../../../../simulation-principles/system-resolution/integration-scheme/). It is an implicit method for the numerical integration of the ODE resulting from Newton's second law of motion. -The method relies on [Backward Differentiation Formula](https://en.wikipedia.org/wiki/Backward_differentiation_formula) (BDF). +It is recommended to read the theoretical part of the [integration schemes](../../../../simulation-principles/system-resolution/integration-scheme/) page to understand the following. + +The method relies on [Backward Differentiation Formula](https://en.wikipedia.org/wiki/Backward_differentiation_formula) (BDF). This is a special case of [linear multistep method](https://en.wikipedia.org/wiki/Linear_multistep_method). To integrate the ODE in time, it uses information from the previous time steps to compute the next step. It establishes a linear combination of the unknown states, the previous states and the values of the ODE function when applied on those states. -This equation leads to a nonlinear function to solve. -That is why this component requires a [NewtonRaphsonSolver](NewtonRaphsonSolver.md), which the purpose is to solve nonlinear functions. -The coefficients of the linear combination come from the approximation of the function by a Lagrange interpolation polynomial. +It the specific case of BDF, the coefficients of the linear combination come from the approximation of the function by a Lagrange interpolation polynomial. The order of the BDF is the number of previous time steps required to approximate the interpolation polynomial. The first-order BDF requires a single time step in the past to compute the next. It corresponds to the [backward Euler method](EulerImplicitSolver.md). The coefficients are unique for a given order, but can be influenced by a change of time step size. The SOFA component supports any order, and any change of time step size. -Details -------- +In the following we are going to present the generic linear multistep method equations from which BFD derives. It has to be noted that we made the choice to only apply the linear multi step method to the position integration, not on the velocity. Using it to both decreases the stability margin of the integration scheme, leading to big instabilities in the scenes. -The ODE resulting from Newton's second law of motion is: +The LinearMultistepIntegrationScheme inherits from VelocityBaseIntegrationScheme because its integration scheme in velocity is invertible. Its equations are the following : $$ -\begin{bmatrix} -\frac{d q}{d t}\\ -M \frac{d \dot{q}}{d t} -\end{bmatrix} -= -\begin{bmatrix} -\dot{q}\\ -F(q, \dot{q}) -\end{bmatrix} +\begin{aligned} +g_{\boldsymbol{x}}^{(t,h)} &: \boldsymbol{v}, \boldsymbol{a} \mapsto - \sum_{j=1}^{n} \frac{\alpha_j}{\alpha_{n+1}} \boldsymbol{x}_{t-n+j} + h \frac{\beta_{n+1}}{\alpha_{n+1}} \boldsymbol{v} + h \sum_{j=1}^{n} \frac{\beta_j}{\alpha_{n+1}} \boldsymbol{v}_{t-n+j} \\ +g_{\boldsymbol{v}}^{(t,h)} &: \boldsymbol{a} \mapsto \boldsymbol{v}_{t} + h \boldsymbol{a} +\end{aligned} $$ -where $q$ and $\dot{q}$ are respectively the position and the velocity, $M$ is the mass matrix, and $F$ is the sum of forces. - -We define $y(t)=\begin{bmatrix} q \\ \dot{q} \end{bmatrix}$, and $f(t,y)=\begin{bmatrix} \dot{q} \\ M^{-1} F(q,\dot{q}) \end{bmatrix}$, such that the ODE is $y'=f(t,y)$. -We are interested in computing $y(t_{n+s})$ and we know the values of $y(t_{n+j})$ for $j \lt s$. -The Lagrange interpolation polynomial is the linear combination $L(t) = \sum_{j=0}^s y(t_n+j) l_j(t)$, where $l_j$ is the basis polynomials defined as $l_j(t)=\prod_{0 \leq m \leq s, m \neq j} \frac{t-t_{n+m}}{t_{n+j}-t{n+m}}$. -Then, we approximate $y'$ by $L'$, leading to the equation $\sum_{j=0}^s y_{n+j} l'_j(t_{n+s}) = f(t_{n+s},y_{n+s})$. -We can now define a nonlinear function $r(q, \dot{q}) = \left[\sum_{j=0}^s y_{n+j} l'_j(t_{n+s})\right] - f(t_{n+s},y_{n+s})$. -The roots of this function corresponds to $y_{tn+s}$, i.e. the next values of the state. +with $n$ the order of the integration scheme -To find the root of this function, we use a Newton-Raphson algorithm. -It means the derivative of the function is necessary. -At each iteration $i$ of the algorithm, we solve the following linear system: +#### API specialization +As explained in the [IntegrationScheme](../../../../simulation-principles/system-resolution/integration-scheme/) documentation, the specilization consist in implementing 4 methods that requires the knowledge of four terms/expressions. for Euler implicit they are the following : $$ -\begin{bmatrix} -l'_s(t_{n+s}) I & -dt I \\ --dt \frac{\partial F}{\partial q} & l'_s(t_{n+s}) M - dt \frac{\partial F}{\partial \dot{q}} -\end{bmatrix} -\begin{bmatrix} -q^{i+1} - q^i \\ -\dot{q}^{i+1} - \dot{q}^{i} -\end{bmatrix} -= -r(q^i, \dot{q}^i) +\begin{aligned} +&\tilde{g}_{\boldsymbol{x}}^{(t,h)} \equiv g_{\boldsymbol{x}}^{(t,h)} \\ +&g_{\boldsymbol{v}}^{(t,h)-1} : \boldsymbol{v} \mapsto \frac{\boldsymbol{v} - \boldsymbol{v}_t}{h} +\end{aligned} +\qquad \qquad \qquad +\begin{aligned} +&\frac{\mathrm{d} \tilde{g}_{\boldsymbol{x}}^{(t,h)}}{\mathrm{d} \boldsymbol{v}} = h \frac{\beta_{n+1}}{\alpha_{n+1}} \\ +&\frac{\mathrm{d} g_{\boldsymbol{v}}^{(t,h)-1}}{\mathrm{d} \boldsymbol{v}} = \frac{1}{h} +\end{aligned} $$ -This system is solved by a block Gaussian elimination leading to the velocity-based linear system: -$$ -\left(l'_s(t_{n+s}) M - dt \frac{\partial F}{\partial \dot{q}} - \frac{dt^2}{l'_s(t_{n+s})} \frac{\partial F}{\partial q} \right) -(\dot{q}^{i+1} - \dot{q}^i) -= -r_{\dot{q}}(q^i, \dot{q}^i) - \frac{dt}{l'_s(t_{n+s})} \frac{\partial F}{\partial q} r_{q}(q^i, \dot{q}^i) -$$ +#### BDF implementation + +The generic implementation of LinearMultistepIntegrationScheme requires to overide only one virtual funciton being : + +```cpp +// Method that will compute the $\alpha$ and $\beta factors$ +virtual void computeFactors() = 0; +``` + +The the implementation of BDFIntegrationScheme only computes those terms using the previously cited Lagrange polynomial interpolation. + + +----- + +The BDFIntegrationScheme **requires**: + +- a [LinearSolver](../../../../simulation-principles/system-resolution/linear-solver/) to solve the linear system +- and a MechanicalObject to store the state vectors. + From f2bd981da3fa691d10c0c31be9fb0f10cf4302ce Mon Sep 17 00:00:00 2001 From: Paul Baksic Date: Fri, 31 Jul 2026 11:58:51 +0200 Subject: [PATCH 10/10] Remove TODO link as they can be guessed --- .../40_System_Resolution/10_Integration_Scheme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md b/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md index 65a7d8afc..862076ebb 100644 --- a/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md +++ b/20_Simulation_Principles/40_System_Resolution/10_Integration_Scheme.md @@ -408,7 +408,7 @@ virtual void computeCurrentPositionIntegrationError(...) = 0; virtual void computeCurrentVelocityIntegrationError(...) = 0; ``` -The tree first method returning only scalar values, they are the most traightforward method to implement. The two last have to deal with advanced concept of SOFA such as mechanical operation on `VecId`. For an example on how to implement this, see the Newmak implementation [here](//TODO, link to cpp file in the master branch once the PR is merged). +The tree first method returning only scalar values, they are the most traightforward method to implement. The two last have to deal with advanced concept of SOFA such as mechanical operation on `VecId`. For an example on how to implement this, see the Newmak implementation [here](https://github.com/sofa-framework/sofa/blob/master/Sofa/Component/IntegrationScheme/Backward/src/sofa/component/integrationscheme/backward/NewmarkIntegrationScheme.cpp). #### VelocityBasedIntegrationScheme @@ -438,7 +438,7 @@ virtual void computeCurrentPositionIntegrationError(...) = 0; //This method compute the acceleration given the current velocity, or $g_v^{(t,h)-1}$ virtual void computeAccelerationFromVelocity(...) = 0; ``` -Again, the two first method returning only scalar values, they are the most traightforward method to implement. The two last have to deal with advanced concept of SOFA such as mechanical operation on `VecId`. For an example on how to implement this, see the Euler implicit implementation [here](//TODO, link to cpp file in the master branch once the PR is merged). +Again, the two first method returning only scalar values, they are the most traightforward method to implement. The two last have to deal with advanced concept of SOFA such as mechanical operation on `VecId`. For an example on how to implement this, see the Euler implicit implementation [here](https://github.com/sofa-framework/sofa/blob/master/Sofa/Component/IntegrationScheme/Backward/src/sofa/component/integrationscheme/backward/EulerImplicitIntegrationScheme.cpp). > **Note :**\ > The velocity-base integration schemes offer a possibility to reduce the integration to a _first order_ integration, meaning the velocity is considered as null at the begining of each time step. This feature can help for quasi-static simulation or simulations where the objects dynamic is by nature subject to numerical noise such as very lightwheight objects. \