<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>multiPhysicsFoam – Nonlinear-Elasticity</title><link>https://multiphysicsfoam.com/tags/nonlinear-elasticity/</link><description>Recent content in Nonlinear-Elasticity on multiPhysicsFoam</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://multiphysicsfoam.com/tags/nonlinear-elasticity/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: solidStVK</title><link>https://multiphysicsfoam.com/docs/user-guide/region-physics/solid-models/solidstvk/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://multiphysicsfoam.com/docs/user-guide/region-physics/solid-models/solidstvk/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;code>solidStVK&lt;/code> solves the transient momentum balance for an elastic solid
undergoing large deformations. It uses the &lt;strong>St. Venant-Kirchhoff&lt;/strong>
hyperelastic law and a &lt;strong>total Lagrangian&lt;/strong> formulation: the unknown is the
total displacement &lt;code>D&lt;/code>, and every equation is assembled on the undeformed
(reference) mesh, which is never moved. The discretisation follows the
segregated finite-volume solid-mechanics approach of foam-extend
(Cardiff et al.). It uses an implicit &amp;ldquo;stiffness&amp;rdquo; Laplacian with explicit
deferred correction, and a Rhie-Chow-type momentum stabilisation. The region
type is built to act as the structural partner of a fluid region, coupled
through &lt;code>fsiInterface&lt;/code>. On its own it does not solve anything (see
&lt;a href="https://multiphysicsfoam.com/docs/user-guide/region-physics/solid-models/solidstvk/#known-limitations">Known Limitations&lt;/a>).&lt;/p>
&lt;h2 id="governing-equations">Governing Equations&lt;/h2>
&lt;h3 id="momentum-total-lagrangian">Momentum (total Lagrangian)&lt;/h3>
&lt;p>The equation assembled in &lt;code>setCoupledEqns()&lt;/code> is&lt;/p>
$$
\rho \frac{\partial^2 \mathbf{D}}{\partial t^2} =
\underbrace{\nabla \cdot \left( K \nabla \mathbf{D} \right)}_{\text{implicit}} - \underbrace{\nabla \cdot \left( K \nabla \mathbf{D} \right)}_{\text{explicit}} + \nabla \cdot \left( J\, \mathbf{F}^{-1} \cdot \boldsymbol{\sigma} \right) + \mathbf{S}_\text{stab}
$$
&lt;p>with the implicit stiffness $K = 2\mu + \lambda$. The implicit and explicit
Laplacians cancel at convergence, so the converged solution satisfies
$\rho\,\ddot{\mathbf{D}} = \nabla_0 \cdot \mathbf{P}^T$ with the first
Piola-Kirchhoff stress $\mathbf{P} = J \boldsymbol{\sigma} \mathbf{F}^{-T}$.
No body force (gravity) term is included.&lt;/p>
&lt;h3 id="kinematics">Kinematics&lt;/h3>
$$
\mathbf{F} = \mathbf{I} + (\nabla \mathbf{D})^T, \qquad
J = \det \mathbf{F}
$$
&lt;h3 id="st-venant-kirchhoff-constitutive-law">St. Venant-Kirchhoff constitutive law&lt;/h3>
$$
\mathbf{C} = \mathbf{F}^T \mathbf{F}, \qquad
\mathbf{E} = \tfrac{1}{2}\left( \mathbf{C} - \mathbf{I} \right), \qquad
\mathbf{S} = 2\mu\,\mathbf{E} + \lambda\,\mathrm{tr}(\mathbf{E})\,\mathbf{I}
$$
$$
\boldsymbol{\sigma} = \frac{1}{J}\, \mathbf{F}\, \mathbf{S}\, \mathbf{F}^T
$$
&lt;h3 id="lamé-parameters">Lamé parameters&lt;/h3>
$$
\mu = \frac{E}{2(1+\nu)}, \qquad
\lambda =
\begin{cases}
\dfrac{\nu E}{(1+\nu)(1-2\nu)} &amp; \text{plane strain / 3-D} \\[2ex]
\dfrac{\nu E}{(1+\nu)(1-\nu)} &amp; \text{plane stress (\texttt{planeStress yes})}
\end{cases}
$$
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Symbol&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Unit&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>$\mathbf{D}$&lt;/td>
&lt;td>Total displacement&lt;/td>
&lt;td>m&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\rho$&lt;/td>
&lt;td>Solid density&lt;/td>
&lt;td>kg/m³&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$E$&lt;/td>
&lt;td>Young&amp;rsquo;s modulus&lt;/td>
&lt;td>Pa&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\nu$&lt;/td>
&lt;td>Poisson&amp;rsquo;s ratio&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mu,\ \lambda$&lt;/td>
&lt;td>Lamé parameters&lt;/td>
&lt;td>Pa&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$K$&lt;/td>
&lt;td>Implicit stiffness $2\mu+\lambda$ (&lt;code>impK&lt;/code>, &lt;code>impKf&lt;/code>)&lt;/td>
&lt;td>Pa&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{F}$&lt;/td>
&lt;td>Deformation gradient&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$J$&lt;/td>
&lt;td>Jacobian $\det\mathbf{F}$&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{E}$&lt;/td>
&lt;td>Green-Lagrange strain&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{S}$&lt;/td>
&lt;td>2nd Piola-Kirchhoff stress&lt;/td>
&lt;td>Pa&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\boldsymbol{\sigma}$&lt;/td>
&lt;td>Cauchy stress (&lt;code>sigma&lt;/code>)&lt;/td>
&lt;td>Pa&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{S}_\text{stab}$&lt;/td>
&lt;td>Momentum stabilisation term&lt;/td>
&lt;td>Pa/m&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="momentum-stabilisation">Momentum stabilisation&lt;/h3>
&lt;p>$\mathbf{S}_\text{stab}$ is evaluated explicitly on the displacement
&lt;strong>increment&lt;/strong> &lt;code>DD&lt;/code> $= \mathbf{D} - \mathbf{D}^\text{old}$ and its gradient
&lt;code>gradDD&lt;/code>. Its diffusivity is $\gamma = s\,K$, where $s$ is the scale factor,
interpolated to faces as $\gamma_f$:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;code>type&lt;/code>&lt;/th>
&lt;th>Term&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>RhieChow&lt;/code> (default)&lt;/td>
&lt;td>$\nabla\cdot(\gamma_f \nabla \mathbf{DD}) - \nabla\cdot\left(\gamma_f\, \mathbf{S}_f \cdot (\nabla\mathbf{DD})_f\right)$, i.e. compact minus non-compact Laplacian&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>JamesonSchmidtTurkel&lt;/code>&lt;/td>
&lt;td>$-\nabla\cdot\left(\lvert\mathbf{S}_f\rvert\, \nabla \left[\nabla\cdot(\gamma_f \nabla \mathbf{DD})\right]\right)$ (fourth-order damping)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Laplacian&lt;/code>&lt;/td>
&lt;td>$\nabla\cdot(\gamma_f \nabla \mathbf{DD})$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>none&lt;/code>&lt;/td>
&lt;td>$\mathbf{0}$&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>On faces where $K$ differs between owner and neighbour (material
interfaces), $\gamma_f$ is replaced by
&lt;code>interfaceScaleFactor&lt;/code>·$\tfrac{1}{2}(K_\text{own}+K_\text{nei})$. On coupled
non-processor patches this replacement is applied to every face.&lt;/p>
&lt;h2 id="numerical-algorithm">Numerical Algorithm&lt;/h2>
&lt;p>&lt;code>usesPIMPLE()&lt;/code> returns &lt;code>false&lt;/code>. &lt;code>solveRegion()&lt;/code>, &lt;code>prePredictor()&lt;/code>,
&lt;code>momentumPredictor()&lt;/code>, &lt;code>pressureCorrector()&lt;/code> and &lt;code>meshMotionCorrector()&lt;/code> are
all no-ops. &lt;code>selfCoupledFieldNames()&lt;/code> is not overridden, so it returns an empty
list. The displacement equation is solved &lt;strong>only&lt;/strong> when &lt;code>D&lt;/code> appears in the
DNA (partitioned) coupled field list. In that case each DNA iteration of
&lt;code>multiRegionSystem::solve()&lt;/code> runs:&lt;/p>
&lt;ol>
&lt;li>&lt;code>solvePIMPLE()&lt;/code> on the fluid region(s). &lt;code>D&lt;/code> is a special FSI field, and
stand-alone PIMPLE is skipped whenever &lt;code>D&lt;/code> is DNA-coupled.&lt;/li>
&lt;li>&lt;code>assembleAndSolveEqns&amp;lt;fvMatrix, vector&amp;gt;(&amp;quot;D&amp;quot;)&lt;/code>. For &lt;code>solidStVK&lt;/code> this is a
Picard loop:
&lt;ol>
&lt;li>&lt;code>setCoupledEqns(&amp;quot;D&amp;quot;)&lt;/code> stores &lt;code>D.prevIter()&lt;/code> and assembles the momentum
equation above. It registers the equation as
&lt;code>D&amp;lt;mesh&amp;gt;MeshsolidStVKTypeEqn&lt;/code>.&lt;/li>
&lt;li>The equation is relaxed (&lt;code>relaxationFactors.equations&lt;/code>) and solved.&lt;/li>
&lt;li>&lt;code>postSolve()&lt;/code> relaxes the field &lt;code>D&lt;/code> (&lt;code>relaxationFactors.fields&lt;/code>). It then
updates &lt;code>DD&lt;/code>, &lt;code>gradD = fvc::grad(D)&lt;/code>, &lt;code>gradDD&lt;/code>, &lt;code>F&lt;/code>, &lt;code>Finv&lt;/code>, &lt;code>J&lt;/code>,
&lt;code>sigma&lt;/code>, interpolates &lt;code>D&lt;/code> to &lt;code>pointD&lt;/code> (&lt;code>volPointInterpolation&lt;/code>), updates
&lt;code>pointDD&lt;/code> and sets the solid velocity &lt;code>U = fvc::ddt(D)&lt;/code>.&lt;/li>
&lt;li>The loop repeats until the region&amp;rsquo;s &lt;code>PICARD.D&lt;/code> criteria are met
(&lt;code>maxCorr&lt;/code>, &lt;code>tolerance&lt;/code>, &lt;code>relTol&lt;/code>). If no &lt;code>PICARD&lt;/code> entry is given, it
runs one pass per DNA iteration.&lt;/li>
&lt;/ol>
&lt;/li>
&lt;li>&lt;code>meshMotionCorrector()&lt;/code> on all regions. The fluid mesh follows &lt;code>pointD&lt;/code> of
the solid (via &lt;code>interfaceTrackingFvMesh&lt;/code>). Then &lt;code>interfaces_-&amp;gt;update()&lt;/code>.&lt;/li>
&lt;li>DNA convergence is checked with the &lt;code>fsiInterface&lt;/code> residual: the
mismatch between the deformed solid interface points
(&lt;code>points + pointD&lt;/code>) and the fluid interface points.&lt;/li>
&lt;/ol>
&lt;p>&lt;code>correct()&lt;/code>, which runs from &lt;code>regionTypeList::preSolve()&lt;/code> once per time step,
only calls &lt;code>D.correctBoundaryConditions()&lt;/code>.&lt;/p>
&lt;p>&lt;code>getMinDeltaT()&lt;/code> returns &lt;code>GREAT&lt;/code>, so the solid never limits the time step.&lt;/p>
&lt;h2 id="sub-models">Sub-Models&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Sub-model&lt;/th>
&lt;th>Selection mechanism&lt;/th>
&lt;th>Notes&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Momentum stabilisation&lt;/td>
&lt;td>&lt;code>stabilisation&lt;/code> sub-dict in &lt;code>mechanicalProperties&lt;/code>&lt;/td>
&lt;td>&lt;code>none&lt;/code>, &lt;code>RhieChow&lt;/code>, &lt;code>JamesonSchmidtTurkel&lt;/code>, &lt;code>Laplacian&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>No &lt;code>fvOptions&lt;/code>, thermal-stress, plasticity or other constitutive models are
available. The material law is fixed to St. Venant-Kirchhoff.&lt;/p>
&lt;h2 id="required-fields">Required Fields&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Unit&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>D&lt;/code>&lt;/td>
&lt;td>&lt;code>volVectorField&lt;/code>&lt;/td>
&lt;td>Total displacement (&lt;strong>must be read&lt;/strong>)&lt;/td>
&lt;td>m&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Created at runtime. All of these are read if present and auto-written unless
stated otherwise:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Unit&lt;/th>
&lt;th>Default&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>DD&lt;/code>&lt;/td>
&lt;td>&lt;code>volVectorField&lt;/code>&lt;/td>
&lt;td>Displacement increment over the time step&lt;/td>
&lt;td>m&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>gradD&lt;/code>&lt;/td>
&lt;td>&lt;code>volTensorField&lt;/code>&lt;/td>
&lt;td>Displacement gradient&lt;/td>
&lt;td>–&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>gradDD&lt;/code>&lt;/td>
&lt;td>&lt;code>volTensorField&lt;/code>&lt;/td>
&lt;td>Gradient of displacement increment&lt;/td>
&lt;td>–&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>F&lt;/code>&lt;/td>
&lt;td>&lt;code>volTensorField&lt;/code>&lt;/td>
&lt;td>Deformation gradient&lt;/td>
&lt;td>–&lt;/td>
&lt;td>&lt;code>I&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Finv&lt;/code>&lt;/td>
&lt;td>&lt;code>volTensorField&lt;/code>&lt;/td>
&lt;td>Inverse deformation gradient&lt;/td>
&lt;td>–&lt;/td>
&lt;td>&lt;code>I&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>J&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>Jacobian&lt;/td>
&lt;td>–&lt;/td>
&lt;td>1&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>sigma&lt;/code>&lt;/td>
&lt;td>&lt;code>volSymmTensorField&lt;/code>&lt;/td>
&lt;td>Cauchy stress&lt;/td>
&lt;td>Pa&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>U&lt;/code>&lt;/td>
&lt;td>&lt;code>volVectorField&lt;/code>&lt;/td>
&lt;td>Solid velocity $\partial\mathbf{D}/\partial t$&lt;/td>
&lt;td>m/s&lt;/td>
&lt;td>0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>impK&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>Implicit stiffness $2\mu+\lambda$&lt;/td>
&lt;td>Pa&lt;/td>
&lt;td>uniform&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>impKf&lt;/code>&lt;/td>
&lt;td>&lt;code>surfaceScalarField&lt;/code>&lt;/td>
&lt;td>Face implicit stiffness&lt;/td>
&lt;td>Pa&lt;/td>
&lt;td>uniform&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>rImpK&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>$1/K$ (read if present, &lt;strong>not written&lt;/strong>)&lt;/td>
&lt;td>1/Pa&lt;/td>
&lt;td>$1/K$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pointD&lt;/code>&lt;/td>
&lt;td>&lt;code>pointVectorField&lt;/code>&lt;/td>
&lt;td>Displacement interpolated to points&lt;/td>
&lt;td>m&lt;/td>
&lt;td>from &lt;code>D&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pointDD&lt;/code>&lt;/td>
&lt;td>&lt;code>pointVectorField&lt;/code>&lt;/td>
&lt;td>Point displacement increment&lt;/td>
&lt;td>m&lt;/td>
&lt;td>from &lt;code>DD&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;code>pointD&lt;/code> is the field that &lt;code>fsiInterface&lt;/code>, &lt;code>interfaceTrackingFvMesh&lt;/code> and the
&lt;code>solidPointDisplacement&lt;/code> function object look up. Its presence is also how
&lt;code>fsiInterface&lt;/code> tells which side of the interface is the solid.&lt;/p>
&lt;h2 id="case-setup">Case Setup&lt;/h2>
&lt;h3 id="required-dictionaries">Required dictionaries&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="n">constant&lt;/span>&lt;span class="o">/&amp;lt;&lt;/span>&lt;span class="n">solid&lt;/span>&lt;span class="o">&amp;gt;/&lt;/span>&lt;span class="n">mechanicalProperties&lt;/span> &lt;span class="err">–&lt;/span> &lt;span class="n">rho&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">E&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">nu&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">planeStress&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">optional&lt;/span> &lt;span class="n">stabilisation&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">constant&lt;/span>&lt;span class="o">/&amp;lt;&lt;/span>&lt;span class="n">solid&lt;/span>&lt;span class="o">&amp;gt;/&lt;/span>&lt;span class="n">dynamicMeshDict&lt;/span> &lt;span class="err">–&lt;/span> &lt;span class="n">staticFvMesh&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">the&lt;/span> &lt;span class="n">solid&lt;/span> &lt;span class="n">mesh&lt;/span> &lt;span class="n">is&lt;/span> &lt;span class="n">never&lt;/span> &lt;span class="n">moved&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">system&lt;/span>&lt;span class="o">/&amp;lt;&lt;/span>&lt;span class="n">solid&lt;/span>&lt;span class="o">&amp;gt;/&lt;/span>&lt;span class="n">fvSolution&lt;/span> &lt;span class="err">–&lt;/span> &lt;span class="n">D&lt;/span> &lt;span class="n">solver&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">relaxation&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">PICARD&lt;/span> &lt;span class="n">loop&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">D&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">system&lt;/span>&lt;span class="o">/&amp;lt;&lt;/span>&lt;span class="n">solid&lt;/span>&lt;span class="o">&amp;gt;/&lt;/span>&lt;span class="n">fvSchemes&lt;/span> &lt;span class="err">–&lt;/span> &lt;span class="n">d2dt2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ddt&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">grad&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">the&lt;/span> &lt;span class="n">named&lt;/span> &lt;span class="n">laplacian&lt;/span> &lt;span class="n">schemes&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="mechanicalproperties">&lt;code>mechanicalProperties&lt;/code>&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">planeStress no; // required; yes =&amp;gt; plane-stress lambda
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">rho rho [1 -3 0 0 0 0 0] 1000; // required
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">nu nu [0 0 0 0 0 0 0] 0.4; // required
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">E E [1 -1 -2 0 0 0 0] 5.6e6; // required
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">// Optional. If absent: { type RhieChow; scaleFactor 0.1; }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">stabilisation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> type RhieChow; // none | RhieChow | JamesonSchmidtTurkel | Laplacian
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> scaleFactor 0.1; // required unless type none or useCellZones yes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> useCellZones false; // default false; then &amp;lt;cellZoneName&amp;gt;ScaleFactor per zone
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceScaleFactor 0.01; // default 0.01; used on material-interface faces
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="multiregionproperties-entry">&lt;code>multiRegionProperties&lt;/code> entry&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">regions
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ( fluid (pimpleFluid) )
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ( solid (solidStVK) )
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">DNA
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> maxCoupleIter 100;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> residualControl
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> maxIntRes 1e-7;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> outputIntResField yes;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>solidStVK&lt;/code> can be stacked with other region types on the same mesh, e.g.
&lt;code>( solid (solidStVK conductTemperature) )&lt;/code> in &lt;code>heatedBeamInCrossFlow&lt;/code>.&lt;/p>
&lt;h3 id="key-fvsolution-settings">Key &lt;code>fvSolution&lt;/code> settings&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">solvers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;D|DD&amp;#34;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> solver PCG;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> preconditioner FDIC;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> tolerance 1e-09;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> relTol 0.1;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">relaxationFactors
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> fields
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;#34;DD|D&amp;#34; 0.9; // applied to D in postSolve()
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">PICARD
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> D
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> maxCorr 1000; // Picard (outer) corrections per DNA iteration
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> tolerance 1e-09;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> relTol 1e-09;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> infoFrequency 100;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="key-fvschemes-settings">Key &lt;code>fvSchemes&lt;/code> settings&lt;/h3>
&lt;p>The momentum equation and the &lt;code>RhieChow&lt;/code> stabilisation use the named
Laplacian scheme &lt;code>laplacian(DD,D)&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">d2dt2Schemes { default backward; }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ddtSchemes { default backward; }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gradSchemes { default leastSquares; }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">divSchemes { default Gauss linear; }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">laplacianSchemes
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> default none;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> laplacian(DD,D) Gauss linear corrected;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">interpolationSchemes { default linear; } // also used for interpolate(impK)
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>With &lt;code>default none&lt;/code>, the &lt;code>JamesonSchmidtTurkel&lt;/code> stabilisation also needs
&lt;code>JSTinner&lt;/code> and &lt;code>JSTouter&lt;/code> Laplacian entries. The &lt;code>Laplacian&lt;/code> stabilisation
needs an entry for its default scheme name.&lt;/p>
&lt;h3 id="boundary-conditions-for-d">Boundary conditions for &lt;code>D&lt;/code>&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Patch role&lt;/th>
&lt;th>BC type&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>FSI interface (solid side)&lt;/td>
&lt;td>&lt;code>regionCoupledTraction&lt;/code> (with &lt;code>interfaceType (fsiInterface)&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Clamped&lt;/td>
&lt;td>&lt;code>fixedValue&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Symmetry plane&lt;/td>
&lt;td>&lt;code>solidSymmetry&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Prescribed traction / pressure (uncoupled)&lt;/td>
&lt;td>&lt;code>solidTraction&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">interface
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> type regionCoupledTraction;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> neighbourFieldName sigma;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (fsiInterface);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> secondOrder false;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> nonOrthCorr false;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> value uniform (0 0 0);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>regionCoupledTraction&lt;/code> and &lt;code>solidTraction&lt;/code> look up &lt;code>impK&lt;/code>, &lt;code>rImpK&lt;/code>, &lt;code>gradD&lt;/code>,
&lt;code>sigma&lt;/code> and &lt;code>Finv&lt;/code> from the solid region. All of these are provided by
&lt;code>solidStVK&lt;/code>.&lt;/p>
&lt;h2 id="coupling">Coupling&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Interface type&lt;/th>
&lt;th>Exchanged fields&lt;/th>
&lt;th>Coupling modes&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>fsiInterface&lt;/code>&lt;/td>
&lt;td>Fluid traction &lt;code>sigma·n&lt;/code> → solid (&lt;code>regionCoupledTraction&lt;/code> on &lt;code>D&lt;/code>); solid &lt;code>pointD&lt;/code> → fluid mesh motion (&lt;code>interfaceTrackingFvMesh&lt;/code>)&lt;/td>
&lt;td>partitioned (DNA)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>heatTransferInterface&lt;/code>&lt;/td>
&lt;td>&lt;code>T&lt;/code>, heat flux (through a stacked &lt;code>conductTemperature&lt;/code>, not &lt;code>solidStVK&lt;/code> itself)&lt;/td>
&lt;td>partitioned (DNA)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Notes on &lt;code>fsiInterface&lt;/code> with this region type:&lt;/p>
&lt;ul>
&lt;li>The interface mapping is built with the solid mesh temporarily moved to its
deformed configuration (&lt;code>points + pointD&lt;/code>). The mesh is then moved back, so
the solid stays total Lagrangian.&lt;/li>
&lt;li>The fluid traction is mapped to the solid patch and its sign is flipped.
The deformed normal is computed as $\mathbf{n} = \mathbf{F}^{-T}\mathbf{n}_0 / |\cdot|$.&lt;/li>
&lt;li>The interface residual for DNA convergence is the point-position mismatch
between the deformed solid patch and the fluid patch.&lt;/li>
&lt;/ul>
&lt;h2 id="known-limitations">Known Limitations&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Requires DNA coupling of &lt;code>D&lt;/code>&lt;/strong> — &lt;code>solveRegion()&lt;/code> is a no-op and
&lt;code>selfCoupledFieldNames()&lt;/code> returns an empty list. If &lt;code>D&lt;/code> is not listed in a
&lt;code>partitionedCoupledPatches&lt;/code> &lt;code>coupledFields&lt;/code> entry (and in the &lt;code>DNA&lt;/code> dict),
the displacement equation is never solved. Single-region (stand-alone
solid) runs are therefore not supported.&lt;/li>
&lt;li>&lt;strong>Partitioned only&lt;/strong> — there is no monolithic FSI path (monolithic
coupling is disabled in &lt;code>multiRegionSystem&lt;/code>).&lt;/li>
&lt;li>&lt;strong>St. Venant-Kirchhoff only&lt;/strong> — linear elastic in Green strain. It is not
suited to large compressive strains. No other material laws, thermal
expansion, or body forces (gravity) are implemented.&lt;/li>
&lt;li>&lt;strong>Constant, uniform material properties&lt;/strong> — &lt;code>rho&lt;/code>, &lt;code>E&lt;/code>, &lt;code>nu&lt;/code> are single
&lt;code>dimensionedScalar&lt;/code>s read from &lt;code>mechanicalProperties&lt;/code>.&lt;/li>
&lt;li>&lt;strong>No time-step control&lt;/strong> — &lt;code>getMinDeltaT()&lt;/code> returns &lt;code>GREAT&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Static solid mesh&lt;/strong> — &lt;code>meshMotionCorrector()&lt;/code> is a no-op. The
&lt;code>staticFvMesh&lt;/code> reference configuration is used throughout, and deformation
is represented only through &lt;code>D&lt;/code>/&lt;code>pointD&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Unused code&lt;/strong> — &lt;code>solidStVKDdtCoeffs.H&lt;/code> (ddt-scheme coefficients) and
the &lt;code>threeK&lt;/code> member are present but not used anywhere.&lt;/li>
&lt;/ul>
&lt;h2 id="tutorials">Tutorials&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Tutorial path&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>tutorials/fluidStructureInteraction/HronTurekFsi3&lt;/code>&lt;/td>
&lt;td>Hron-Turek FSI3 benchmark (pimpleFluid + solidStVK)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/fluidStructureInteraction/beamInCrossFlow&lt;/code>&lt;/td>
&lt;td>Elastic beam in cross-flow (pimpleFluid + solidStVK)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/fluidStructureInteraction/heatedBeamInCrossFlow&lt;/code>&lt;/td>
&lt;td>Heated elastic beam in cross-flow; FSI plus conjugate heat transfer (pimpleFluid + transportTemperature / solidStVK + conductTemperature)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="references">References&lt;/h2>
&lt;ul>
&lt;li>Alkfri, A., Habes, C., Marschall, H., &lt;em>multiRegionFoam: A Unified Multiphysics Framework for Multi-Region Coupled Continuum-Physical Problems&lt;/em>, Engineering with Computers, 2023.
DOI: &lt;a href="https://doi.org/10.1007/s00366-024-01974-4">10.1007/s00366-024-01974-4&lt;/a>&lt;/li>
&lt;/ul></description></item></channel></rss>