<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>multiPhysicsFoam – Traction</title><link>https://multiphysicsfoam.com/tags/traction/</link><description>Recent content in Traction on multiPhysicsFoam</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://multiphysicsfoam.com/tags/traction/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: solidTraction</title><link>https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/uncoupled-boundary-conditions/solidtraction/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/uncoupled-boundary-conditions/solidtraction/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;code>solidTraction&lt;/code> imposes a known surface traction $\mathbf{t}$ and/or normal
pressure $p$ on the displacement field &lt;code>D&lt;/code> of a solid region. It is the
uncoupled counterpart of the FSI traction BC: use it for loaded or
traction-free solid surfaces that are not coupled to another region. The class
derives from &lt;code>fixedGradient&lt;/code> (vector only). In each update it recomputes the
displacement normal gradient so that the stress on the patch matches the
prescribed load. The traction and the pressure can each be given as a
constant field, as a time series, or as a separate volume field. It was
ported from the foam-extend solid-mechanics toolbox (Cardiff, Tuković). It
reads the fields of &lt;code>solidStVK&lt;/code> (&lt;code>impK&lt;/code>, &lt;code>rImpK&lt;/code>, &lt;code>gradD&lt;/code>, &lt;code>sigma&lt;/code>, &lt;code>Finv&lt;/code>).&lt;/p>
&lt;h2 id="mathematical-formulation">Mathematical Formulation&lt;/h2>
&lt;p>The target condition is a traction balance in the current (deformed)
configuration:&lt;/p>
$$
\mathbf{n}_c \cdot \boldsymbol{\sigma} = \mathbf{t} - p\,\mathbf{n}_c
\quad \text{on } \partial\Omega_t,
\qquad
\mathbf{n}_c = \frac{\mathbf{F}^{-T}\cdot\mathbf{n}_0}{\lvert \mathbf{F}^{-T}\cdot\mathbf{n}_0 \rvert}
$$
&lt;p>It is imposed through the normal gradient of &lt;code>D&lt;/code>, in the segregated
&amp;ldquo;implicit stiffness&amp;rdquo; form used by &lt;code>solidStVK&lt;/code>:&lt;/p>
$$
\mathbf{g}^{\,new} = \frac{1}{K}\left[ \left(\mathbf{t} - p\,\mathbf{n}_c\right) - \mathbf{n}_c\cdot\boldsymbol{\sigma} + K\, \mathbf{n}_0\cdot\nabla\mathbf{D} \right],
\qquad
\mathbf{g} \leftarrow \omega\,\mathbf{g}^{\,new} + (1-\omega)\,\mathbf{g}^{\,old}
$$
&lt;p>$\boldsymbol{\sigma}$ and $\nabla\mathbf{D}$ are the current patch values.
When the iteration has converged, $\mathbf{g} = \mathbf{n}_0\cdot\nabla\mathbf{D}$,
so the bracket requires $\mathbf{n}_c\cdot\boldsymbol{\sigma} = \mathbf{t} - p\,\mathbf{n}_c$.
The $K\,\mathbf{n}_0\cdot\nabla\mathbf{D}$ term mirrors the implicit/explicit
Laplacian pair in the &lt;code>solidStVK&lt;/code> momentum equation.&lt;/p>
&lt;p>The patch value is then reconstructed from the gradient:&lt;/p>
$$
\mathbf{D}_b =
\begin{cases}
\mathbf{D}_P + \mathbf{k}\cdot(\nabla\mathbf{D})_P + \delta\,\mathbf{g} &amp; \text{first order} \\[1ex]
\mathbf{D}_P + \mathbf{k}\cdot(\nabla\mathbf{D})_P + \tfrac{\delta}{2}\left(\mathbf{g} + \mathbf{n}_0\cdot(\nabla\mathbf{D})_P\right) &amp; \texttt{secondOrder yes}
\end{cases}
$$
&lt;p>with $\mathbf{k} = (\mathbf{I}-\mathbf{n}_0\mathbf{n}_0)\cdot\boldsymbol{\Delta}$.&lt;/p>
&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 (patch field)&lt;/td>
&lt;td>m&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{t}$&lt;/td>
&lt;td>Prescribed traction (&lt;code>traction&lt;/code>, &lt;code>tractionSeries&lt;/code> or &lt;code>tractionField&lt;/code>)&lt;/td>
&lt;td>Pa&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$p$&lt;/td>
&lt;td>Prescribed pressure, positive = compressive (&lt;code>pressure&lt;/code>, &lt;code>pressureSeries&lt;/code> or &lt;code>pressureField&lt;/code>)&lt;/td>
&lt;td>Pa&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{n}_0$&lt;/td>
&lt;td>Patch unit normal of the undeformed mesh&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{n}_c$&lt;/td>
&lt;td>Deformed unit normal from &lt;code>Finv&lt;/code>&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\boldsymbol{\sigma}$&lt;/td>
&lt;td>Cauchy stress, patch values of &lt;code>sigma&lt;/code>&lt;/td>
&lt;td>Pa&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{F}^{-1}$&lt;/td>
&lt;td>Inverse deformation gradient, patch values of &lt;code>Finv&lt;/code>&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$K$&lt;/td>
&lt;td>Implicit stiffness, patch values of &lt;code>impK&lt;/code> ($1/K$ from &lt;code>rImpK&lt;/code>)&lt;/td>
&lt;td>Pa&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{g}$&lt;/td>
&lt;td>Patch normal gradient (&lt;code>gradient&lt;/code>)&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\omega$&lt;/td>
&lt;td>&lt;code>relaxationFactor&lt;/code>&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\delta$&lt;/td>
&lt;td>$1/$&lt;code>patch().deltaCoeffs()&lt;/code>&lt;/td>
&lt;td>m&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\boldsymbol{\Delta}$, $\mathbf{k}$&lt;/td>
&lt;td>Patch delta vector and non-orthogonal correction vector&lt;/td>
&lt;td>m&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Note on OpenFOAM.com.&lt;/strong> In OpenFOAM.com, &lt;code>fvPatch::delta()&lt;/code> is
patch-normal for non-coupled patches, so $\mathbf{k} \equiv \mathbf{0}$ and the
non-orthogonal term in $\mathbf{D}_b$ has no effect.&lt;/p>
&lt;h2 id="implementation">Implementation&lt;/h2>
&lt;p>&lt;strong>Construction.&lt;/strong> The dictionary constructor reads &lt;code>secondOrder&lt;/code>,
&lt;code>setEffectiveTraction&lt;/code> and &lt;code>relaxationFactor&lt;/code>. It reads &lt;code>gradient&lt;/code> and &lt;code>value&lt;/code>
if present, otherwise it starts from zero gradient and the patch-internal
value. It then sets up the traction and the pressure. For each, exactly one
of three forms is allowed. Giving two forms of the same quantity stops the
run (&lt;code>FatalError&lt;/code>):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Traction&lt;/th>
&lt;th>Pressure&lt;/th>
&lt;th>Behaviour&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>traction&lt;/code>&lt;/td>
&lt;td>&lt;code>pressure&lt;/code>&lt;/td>
&lt;td>Patch field (&lt;code>uniform&lt;/code> or &lt;code>nonuniform&lt;/code>), constant in time&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tractionSeries {...}&lt;/code>&lt;/td>
&lt;td>&lt;code>pressureSeries {...}&lt;/code>&lt;/td>
&lt;td>&lt;code>interpolationTable&lt;/code> sub-dictionary, interpolated at &lt;code>time().timeOutputValue()&lt;/code>. The value is uniform over the patch.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tractionField &amp;lt;name&amp;gt;&lt;/code>&lt;/td>
&lt;td>&lt;code>pressureField &amp;lt;name&amp;gt;&lt;/code>&lt;/td>
&lt;td>A &lt;code>volVectorField&lt;/code> / &lt;code>volScalarField&lt;/code> with that name is constructed by the BC (&lt;code>MUST_READ&lt;/code> from the time directory, &lt;code>AUTO_WRITE&lt;/code>), and its boundary values on this patch are used&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>If neither a series nor a field is given, &lt;code>traction&lt;/code> and &lt;code>pressure&lt;/code> are read
as plain patch fields, so both are required.&lt;/p>
&lt;p>&lt;strong>&lt;code>updateCoeffs()&lt;/code>&lt;/strong> (skipped if already updated in this evaluation):&lt;/p>
&lt;ol>
&lt;li>Once per time step (tracked through &lt;code>curTimeIndex_&lt;/code>), calls
&lt;code>correctBoundaryConditions()&lt;/code> on the &lt;code>tractionField&lt;/code> / &lt;code>pressureField&lt;/code>, if
one is used.&lt;/li>
&lt;li>Updates $\mathbf{t}$ and $p$ from the field or the series.&lt;/li>
&lt;li>If &lt;code>setEffectiveTraction&lt;/code> is on, subtracts the patch values of a
&lt;code>volScalarField&lt;/code> named &lt;code>p&lt;/code> from the pressure. This applies the effective
rather than the total traction, which is meant for poro-elastic solids.&lt;/li>
&lt;li>Looks 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> on the patch. All are
mandatory.&lt;/li>
&lt;li>Computes $\mathbf{n}_c$ and the relaxed gradient $\mathbf{g}$ above, then
calls &lt;code>fixedGradient::updateCoeffs()&lt;/code>.&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>&lt;code>evaluate()&lt;/code>&lt;/strong> calls &lt;code>updateCoeffs()&lt;/code> if needed. It looks up the cell
gradient field named &lt;code>grad&amp;lt;fieldName&amp;gt;&lt;/code> (i.e. &lt;code>gradD&lt;/code> for &lt;code>D&lt;/code>), sets
$\mathbf{D}_b$ by the formula above and resets the &lt;code>updated&lt;/code> flag. The matrix
coefficients are those of the stock &lt;code>fixedGradient&lt;/code> condition: the gradient
$\mathbf{g}$ enters the Laplacian as an explicit flux.&lt;/p>
&lt;p>&lt;strong>Interaction with &lt;code>solidStVK&lt;/code>.&lt;/strong> &lt;code>D&lt;/code> boundary conditions are updated when the
momentum equation for &lt;code>D&lt;/code> is assembled. &lt;code>sigma&lt;/code>, &lt;code>gradD&lt;/code> and &lt;code>Finv&lt;/code> come from
the previous Picard / DNA iteration (updated in &lt;code>solidStVK::postSolve()&lt;/code>), so
the traction is enforced iteratively. It converges together with the &lt;code>PICARD&lt;/code>
loop on &lt;code>D&lt;/code>. The &lt;code>relaxationFactor&lt;/code> gives extra under-relaxation of the
gradient if this loop oscillates.&lt;/p>
&lt;p>&lt;strong>&lt;code>write()&lt;/code>&lt;/strong> writes the form actually used for traction and pressure
(&lt;code>tractionField&lt;/code>/&lt;code>tractionSeries&lt;/code>/&lt;code>traction&lt;/code>, and likewise for pressure), then
&lt;code>secondOrder&lt;/code>, &lt;code>setEffectiveTraction&lt;/code>, &lt;code>relaxationFactor&lt;/code>, &lt;code>value&lt;/code> and
&lt;code>gradient&lt;/code>.&lt;/p>
&lt;h2 id="dictionary-entries">Dictionary Entries&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Keyword&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Default&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>type&lt;/code>&lt;/td>
&lt;td>&lt;code>solidTraction&lt;/code>&lt;/td>
&lt;td>yes&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>traction&lt;/code>&lt;/td>
&lt;td>Traction patch field (vector)&lt;/td>
&lt;td>yes, unless &lt;code>tractionSeries&lt;/code> or &lt;code>tractionField&lt;/code> is given&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tractionSeries&lt;/code>&lt;/td>
&lt;td>&lt;code>interpolationTable&amp;lt;vector&amp;gt;&lt;/code> sub-dictionary (&lt;code>file&lt;/code>, optional &lt;code>outOfBounds&lt;/code>, &lt;code>readerType&lt;/code>)&lt;/td>
&lt;td>alternative to &lt;code>traction&lt;/code>&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tractionField&lt;/code>&lt;/td>
&lt;td>Name of a &lt;code>volVectorField&lt;/code> to read from the time directory&lt;/td>
&lt;td>alternative to &lt;code>traction&lt;/code>&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pressure&lt;/code>&lt;/td>
&lt;td>Pressure patch field (scalar, positive = compressive)&lt;/td>
&lt;td>yes, unless &lt;code>pressureSeries&lt;/code> or &lt;code>pressureField&lt;/code> is given&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pressureSeries&lt;/code>&lt;/td>
&lt;td>&lt;code>interpolationTable&amp;lt;scalar&amp;gt;&lt;/code> sub-dictionary&lt;/td>
&lt;td>alternative to &lt;code>pressure&lt;/code>&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pressureField&lt;/code>&lt;/td>
&lt;td>Name of a &lt;code>volScalarField&lt;/code> to read from the time directory&lt;/td>
&lt;td>alternative to &lt;code>pressure&lt;/code>&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>secondOrder&lt;/code>&lt;/td>
&lt;td>Second-order reconstruction of the patch value&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>setEffectiveTraction&lt;/code>&lt;/td>
&lt;td>Subtract the region&amp;rsquo;s &lt;code>p&lt;/code> field from the pressure&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>relaxationFactor&lt;/code>&lt;/td>
&lt;td>Under-relaxation $\omega$ of the gradient&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>1.0&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>gradient&lt;/code>&lt;/td>
&lt;td>Initial normal gradient&lt;/td>
&lt;td>no&lt;/td>
&lt;td>zero&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>value&lt;/code>&lt;/td>
&lt;td>Initial patch value&lt;/td>
&lt;td>no&lt;/td>
&lt;td>patch-internal value&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>In the series sub-dictionary, &lt;code>outOfBounds&lt;/code> defaults to &lt;code>warn&lt;/code> and
&lt;code>readerType&lt;/code> to &lt;code>openFoam&lt;/code>. Both are standard OpenFOAM &lt;code>interpolationTable&lt;/code>
keywords.&lt;/p>
&lt;p>Required registered fields on the solid mesh:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Provided by&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>impK&lt;/code>, &lt;code>rImpK&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>&lt;code>solidStVK&lt;/code>&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>&lt;code>solidStVK&lt;/code>&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>&lt;code>solidStVK&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>&lt;code>solidStVK&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>grad&amp;lt;fieldName&amp;gt;&lt;/code>&lt;/td>
&lt;td>&lt;code>volTensorField&lt;/code>&lt;/td>
&lt;td>&lt;code>solidStVK&lt;/code> (&lt;code>gradD&lt;/code>, when the BC is on &lt;code>D&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>p&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>only with &lt;code>setEffectiveTraction yes&lt;/code>; no shipped solid region type provides it&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="usage">Usage&lt;/h2>
&lt;p>Traction-free surface (&lt;code>0/&amp;lt;solid&amp;gt;/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">freeSurface
&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 solidTraction;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> traction uniform (0 0 0);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> pressure uniform 0;
&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>Uniform pressure ramped in time from a table file:&lt;/p>
&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">loadedSurface&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">type&lt;/span> &lt;span class="n">solidTraction&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">traction&lt;/span> &lt;span class="n">uniform&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">pressureSeries&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">file&lt;/span> &lt;span class="s2">&amp;#34;$FOAM_CASE/constant/solid/pressureSeries&amp;#34;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">outOfBounds&lt;/span> &lt;span class="nb">clamp&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">relaxationFactor&lt;/span> &lt;span class="mf">0.8&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">value&lt;/span> &lt;span class="n">uniform&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>with &lt;code>constant/solid/pressureSeries&lt;/code> in the &lt;code>openFoam&lt;/code> table format, e.g.
&lt;code>( (0 0) (1 1e4) )&lt;/code>.&lt;/p>
&lt;h2 id="known-limitations">Known Limitations&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Only for &lt;code>solidStVK&lt;/code>.&lt;/strong> The fields &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> are looked up unconditionally. No other compiled region type
provides all of them.&lt;/li>
&lt;li>&lt;strong>Field and series data are uniform or per face only.&lt;/strong> &lt;code>tractionSeries&lt;/code> /
&lt;code>pressureSeries&lt;/code> give a value that is uniform over the patch.
&lt;code>traction&lt;/code> / &lt;code>pressure&lt;/code> are constant in time. For space- and time-varying
loads, use &lt;code>tractionField&lt;/code> / &lt;code>pressureField&lt;/code> and drive that field&amp;rsquo;s own
boundary conditions (they are corrected once per time step).&lt;/li>
&lt;li>&lt;strong>&lt;code>setEffectiveTraction&lt;/code> needs a &lt;code>p&lt;/code> field&lt;/strong> on the solid mesh. No shipped
solid region type registers one.&lt;/li>
&lt;li>&lt;strong>Non-orthogonal correction has no effect in OpenFOAM.com&lt;/strong> (patch-normal
&lt;code>delta()&lt;/code>; see the note above).&lt;/li>
&lt;li>&lt;strong>Copies lose the field link.&lt;/strong> The mapping and copy constructors do not
copy &lt;code>tractionFieldPtr_&lt;/code> / &lt;code>pressureFieldPtr_&lt;/code>. A cloned patch field (e.g. a
stored old-time or previous-iteration copy) keeps the last
traction/pressure values and stops following the field. The original
boundary condition of &lt;code>D&lt;/code> is not affected.&lt;/li>
&lt;li>&lt;strong>Inconsistent gradient names.&lt;/strong> &lt;code>updateCoeffs()&lt;/code> always reads &lt;code>gradD&lt;/code>,
while &lt;code>evaluate()&lt;/code> reads &lt;code>grad&amp;lt;fieldName&amp;gt;&lt;/code>. On a field other than &lt;code>D&lt;/code> the two
differ.&lt;/li>
&lt;/ul>
&lt;h2 id="tutorials">Tutorials&lt;/h2>
&lt;p>No tutorial uses &lt;code>solidTraction&lt;/code>. The FSI tutorials use
&lt;code>regionCoupledTraction&lt;/code> on the coupled solid surface and &lt;code>fixedValue&lt;/code> /
&lt;code>solidSymmetry&lt;/code> elsewhere.&lt;/p>
&lt;h2 id="references">References&lt;/h2>
&lt;ul>
&lt;li>Cardiff, P., Karač, A., De Jaeger, P., Jasak, H., Nagy, J., Ivanković, A., Tuković, Ž., &lt;em>An open-source finite volume toolbox for solid mechanics and fluid-solid interaction simulations&lt;/em>, arXiv:1808.10736, 2018.&lt;/li>
&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>