<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>multiPhysicsFoam – Overset</title><link>https://multiphysicsfoam.com/tags/overset/</link><description>Recent content in Overset on multiPhysicsFoam</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://multiphysicsfoam.com/tags/overset/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: overPimpleFluid</title><link>https://multiphysicsfoam.com/docs/user-guide/region-physics/fluid-models/overpimplefluid/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://multiphysicsfoam.com/docs/user-guide/region-physics/fluid-models/overpimplefluid/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;code>overPimpleFluid&lt;/code> solves the transient, incompressible Navier-Stokes equations
for a Newtonian single-phase fluid on an &lt;strong>overset (Chimera) mesh&lt;/strong> using the
&lt;strong>PIMPLE&lt;/strong> pressure-velocity coupling algorithm. It is the multiPhysicsFoam
port of OpenFOAM&amp;rsquo;s &lt;code>overPimpleDyMFoam&lt;/code> and shares its feature set with
&lt;a href="https://multiphysicsfoam.com/docs/user-guide/region-physics/fluid-models/pimplefluid/">&lt;code>pimpleFluid&lt;/code>&lt;/a>: turbulence modelling (laminar, RANS, LES),
MRF and &lt;code>fvOptions&lt;/code>. In addition, it masks hole cells (&lt;code>cellMask&lt;/code>), tags fringe
cells (&lt;code>interpolatedCells&lt;/code>) and can make the predicted fluxes conservative
across the overset fringe (&lt;code>oversetAdjustPhi&lt;/code>). The region mesh must be a
&lt;code>dynamicOversetFvMesh&lt;/code>, which makes it suitable for flows around bodies that
undergo large rigid-body motions, e.g. rotors or moving objects.&lt;/p>
&lt;h2 id="governing-equations">Governing Equations&lt;/h2>
&lt;h3 id="continuity">Continuity&lt;/h3>
$$
\nabla \cdot \mathbf{U} = 0
$$
&lt;h3 id="momentum">Momentum&lt;/h3>
$$
\frac{\partial \mathbf{U}}{\partial t} + \nabla \cdot \left(\mathbf{U}\mathbf{U}\right) - \nabla \cdot \mathbf{R}
= -\chi_c\,\nabla p_\text{kin} + \mathbf{S}_U
$$
&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{U}$&lt;/td>
&lt;td>Velocity&lt;/td>
&lt;td>m/s&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$p_\text{kin} = p/\rho$&lt;/td>
&lt;td>Kinematic pressure&lt;/td>
&lt;td>m²/s²&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{R}$&lt;/td>
&lt;td>Effective stress tensor (viscous + turbulent)&lt;/td>
&lt;td>m²/s²&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{S}_U$&lt;/td>
&lt;td>Momentum source (from &lt;code>fvOptions&lt;/code>)&lt;/td>
&lt;td>m/s²&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\chi_c$&lt;/td>
&lt;td>Cell mask (&lt;code>cellMask&lt;/code>): 0 on hole cells, 1 elsewhere&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Overset coupling between the mesh components is not part of the equations
above: values in fringe (interpolated) cells are supplied by the overset
cell-cell stencil (&lt;code>oversetInterpolation&lt;/code> in &lt;code>fvSchemes&lt;/code>), and the &lt;code>overset&lt;/code>
patch type couples the matrices of the individual mesh zones.&lt;/p>
&lt;h3 id="overset-masks">Overset masks&lt;/h3>
&lt;p>Both masks are derived from the cell types of the cell-cell stencil
(&lt;code>Stencil::New(mesh).cellTypes()&lt;/code>):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Mask&lt;/th>
&lt;th>Value 0 on&lt;/th>
&lt;th>Value 1 on&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>cellMask&lt;/code> $\chi_c$&lt;/td>
&lt;td>&lt;code>HOLE&lt;/code> and &lt;code>SPECIAL&lt;/code> cells&lt;/td>
&lt;td>all other cells&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>interpolatedCells&lt;/code> $\chi_i$&lt;/td>
&lt;td>&lt;code>INTERPOLATED&lt;/code> (fringe) cells&lt;/td>
&lt;td>all other cells&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The face mask $\chi_f$ is obtained by &lt;code>localMin&lt;/code> interpolation of $\chi_c$,
i.e. a face is masked if either neighbouring cell is a hole. The flux is
multiplied by $\chi_f$ after each pressure correction and after mesh motion.&lt;/p>
&lt;h3 id="stress-tensor-for-fsi-coupling">Stress tensor (for FSI coupling)&lt;/h3>
&lt;p>As in &lt;code>pimpleFluid&lt;/code>, the Cauchy stress tensor is updated after each pressure
corrector:&lt;/p>
$$
\boldsymbol{\sigma} = \rho \left( -p_\text{kin}\,\mathbf{I} - \mathbf{R}^\text{dev} \right)
$$
&lt;h2 id="numerical-algorithm">Numerical Algorithm&lt;/h2>
&lt;p>&lt;code>usesPIMPLE()&lt;/code> returns &lt;code>true&lt;/code>, so the framework drives the region through
&lt;code>prePredictor&lt;/code> → &lt;code>momentumPredictor&lt;/code> → &lt;code>pressureCorrector&lt;/code> for each outer
PIMPLE iteration (&lt;code>nOuterCorrectors&lt;/code> from the top-level &lt;code>system/fvSolution&lt;/code>).
&lt;code>solveRegion&lt;/code>, &lt;code>postSolve&lt;/code>, &lt;code>correct&lt;/code> and &lt;code>setCoupledEqns&lt;/code> are no-ops.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Pre-predictor (mesh motion and masking)&lt;/strong> — executed at most once per
time step (latched on the time index) unless &lt;code>moveMeshOuterCorrectors&lt;/code> is
enabled; &lt;code>meshMotionCorrector()&lt;/code> runs the same block. If the mesh changed:
&lt;ul>
&lt;li>update MRF zones;&lt;/li>
&lt;li>recompute &lt;code>cellMask&lt;/code>, the face mask and &lt;code>interpolatedCells&lt;/code> from the new
overset stencil;&lt;/li>
&lt;li>correct &lt;code>Uf&lt;/code> and &lt;code>phi&lt;/code> on faces that changed from hole to active
(&lt;code>faceMaskOld&lt;/code>), set $\phi = \mathbf{S}_f\cdot\mathbf{U}_f$ and mask hole
faces;&lt;/li>
&lt;li>make $\phi$ relative to the mesh motion;&lt;/li>
&lt;li>optionally print the mesh Courant number (&lt;code>checkMeshCourantNo&lt;/code>).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Momentum predictor&lt;/strong> — assemble the momentum equation (cached for the
pressure corrector), relax and constrain it, and, if &lt;code>momentumPredictor&lt;/code>
is on, solve it with the pressure gradient masked on hole cells:
$A_U\mathbf{U} - \mathbf{H} = -\chi_c\nabla p_\text{kin}$.&lt;/li>
&lt;li>&lt;strong>Pressure corrector (PISO loop)&lt;/strong> — for each of &lt;code>nCorrectors&lt;/code>:
&lt;ul>
&lt;li>$r_{AU} = 1/A_U$, $\hat{\mathbf{U}} = r_{AU}\mathbf{H}$ (via
&lt;code>constrainHbyA&lt;/code>), $\phi_{\hat{U}} = \hat{\mathbf{U}}_f\cdot\mathbf{S}_f$
stored in the persistent field &lt;code>phiHbyA&lt;/code>; MRF makes it relative;&lt;/li>
&lt;li>if &lt;code>oversetAdjustPhi&lt;/code> is set, &lt;code>phiHbyA&lt;/code> is made relative to the mesh
motion, corrected by &lt;code>oversetAdjustPhi(phiHbyA, U, adjustZone)&lt;/code> and made
absolute again;&lt;/li>
&lt;li>non-orthogonal loop solving
$\nabla\cdot\left(r_{AU,f}\nabla p_\text{kin}\right) = \nabla\cdot\phi_{\hat{U}}$;
on the final non-orthogonal iteration
$\phi = \phi_{\hat{U}} - \text{flux}(p\text{Eqn})$ and
$\mathbf{U} = \chi_c\left(\hat{\mathbf{U}} - r_{AU}\,\text{reconstruct}(\text{flux}/r_{AU,f})\right)$;
with &lt;code>oversetPatchErrOutput&lt;/code> the overset patch flux error is reported via
&lt;code>oversetPatchPhiErr&lt;/code>;&lt;/li>
&lt;li>continuity errors are evaluated with fringe and hole cells excluded
($\chi_i\chi_c\nabla\cdot\phi$);&lt;/li>
&lt;li>&lt;code>Uf&lt;/code> is reset to $\overline{\mathbf{U}}_f$ with its normal component
replaced by $\phi/|\mathbf{S}_f|$;&lt;/li>
&lt;li>$\phi$ is made relative to the mesh motion and multiplied by $\chi_f$.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Turbulence correction&lt;/strong> — transport model and turbulence model are
corrected once per outer iteration (&lt;code>turbCorr&lt;/code>).&lt;/li>
&lt;li>&lt;strong>Post-processing fields&lt;/strong> — &lt;code>p = pKin·rho&lt;/code> and &lt;code>sigma&lt;/code> are updated.&lt;/li>
&lt;/ol>
&lt;h3 id="time-step-control">Time-step control&lt;/h3>
&lt;p>&lt;code>getMinDeltaT()&lt;/code> re-reads the DyM controls and returns
$\Delta t_\text{max} = \text{maxCo}/\text{Co}\cdot\Delta t$, where the
Courant number is computed from $|\phi|$ weighted by the &lt;code>localMin&lt;/code>
interpolation of $\chi_c + \chi_i$ (as in &lt;code>overPimpleDyMFoam&lt;/code>). The
&lt;code>maxDeltaT&lt;/code> cap is applied by the solver&amp;rsquo;s &lt;code>setDeltaT.H&lt;/code>.&lt;/p>
&lt;h3 id="differences-to-pimplefluid">Differences to &lt;code>pimpleFluid&lt;/code>&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Aspect&lt;/th>
&lt;th>&lt;code>pimpleFluid&lt;/code>&lt;/th>
&lt;th>&lt;code>overPimpleFluid&lt;/code>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Mesh&lt;/td>
&lt;td>any &lt;code>dynamicFvMesh&lt;/code> (static or moving)&lt;/td>
&lt;td>&lt;code>dynamicOversetFvMesh&lt;/code> (overset stencil required)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Hole / fringe handling&lt;/td>
&lt;td>–&lt;/td>
&lt;td>&lt;code>cellMask&lt;/code>, face mask, &lt;code>interpolatedCells&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Pressure gradient &amp;amp; velocity correction&lt;/td>
&lt;td>unmasked&lt;/td>
&lt;td>multiplied by &lt;code>cellMask&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Fringe flux adjustment&lt;/td>
&lt;td>–&lt;/td>
&lt;td>optional &lt;code>oversetAdjustPhi&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>correctPhi&lt;/code> after mesh motion&lt;/td>
&lt;td>&lt;code>pcorr&lt;/code> solve if &lt;code>correctPhi&lt;/code>&lt;/td>
&lt;td>no &lt;code>pcorr&lt;/code> solve; only face-mask correction of &lt;code>Uf&lt;/code>/&lt;code>phi&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>ddtCorr&lt;/code>&lt;/td>
&lt;td>applied if &lt;code>pimple.ddtCorr()&lt;/code>&lt;/td>
&lt;td>not applied&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Uf&lt;/code>&lt;/td>
&lt;td>only for moving meshes&lt;/td>
&lt;td>always created&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Continuity error&lt;/td>
&lt;td>all cells&lt;/td>
&lt;td>fringe and hole cells excluded&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Non-interpolated fields&lt;/td>
&lt;td>–&lt;/td>
&lt;td>&lt;code>HbyA&lt;/code>, &lt;code>grad(pKin)&lt;/code>, &lt;code>surfaceIntegrate(phi)&lt;/code>, &lt;code>surfaceIntegrate(phiHbyA)&lt;/code>, &lt;code>cellMask&lt;/code>, &lt;code>cellDisplacement&lt;/code>, &lt;code>interpolatedCells&lt;/code>, &lt;code>cellInterpolationWeight&lt;/code> are added to the stencil&amp;rsquo;s &lt;code>nonInterpolatedFields&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&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>Turbulence (laminar / RANS / LES)&lt;/td>
&lt;td>&lt;code>constant/turbulenceProperties&lt;/code>&lt;/td>
&lt;td>Uses &lt;code>incompressible::turbulenceModel&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Transport properties&lt;/td>
&lt;td>&lt;code>constant/transportProperties&lt;/code>&lt;/td>
&lt;td>$\nu$ via &lt;code>singlePhaseTransportModel&lt;/code>; &lt;code>rho&lt;/code> is also read&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Moving Reference Frame (MRF)&lt;/td>
&lt;td>&lt;code>constant/MRFProperties&lt;/code>&lt;/td>
&lt;td>&lt;code>IOMRFZoneList&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>fvOptions&lt;/code>&lt;/td>
&lt;td>&lt;code>system/fvOptions&lt;/code>&lt;/td>
&lt;td>Explicit/implicit source terms&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Overset stencil&lt;/td>
&lt;td>&lt;code>oversetInterpolation&lt;/code> in &lt;code>system/fvSchemes&lt;/code>&lt;/td>
&lt;td>Any &lt;code>cellCellStencil&lt;/code>, incl. the repo&amp;rsquo;s &lt;code>fastOversetCellStencil&lt;/code> (&lt;code>src/numerics/overset&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Mesh motion&lt;/td>
&lt;td>&lt;code>constant/dynamicMeshDict&lt;/code>&lt;/td>
&lt;td>&lt;code>dynamicOversetFvMesh&lt;/code> with any motion solver, e.g. &lt;code>multiSolidBodyMotionSolver&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&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>U&lt;/code>&lt;/td>
&lt;td>&lt;code>volVectorField&lt;/code>&lt;/td>
&lt;td>Velocity&lt;/td>
&lt;td>m/s&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pKin&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>Kinematic pressure $p/\rho$&lt;/td>
&lt;td>m²/s²&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>zoneID&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>Overset mesh-component identifier (read by the overset stencil)&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pointDisplacement&lt;/code>&lt;/td>
&lt;td>&lt;code>pointVectorField&lt;/code>&lt;/td>
&lt;td>Required by displacement-based motion solvers&lt;/td>
&lt;td>m&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Turbulence fields&lt;/td>
&lt;td>—&lt;/td>
&lt;td>As required by selected model&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>All patches of these fields on overset boundaries must be of type &lt;code>overset&lt;/code>.&lt;/p>
&lt;p>Additionally created at runtime:&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>Written&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>phi&lt;/code>&lt;/td>
&lt;td>&lt;code>surfaceScalarField&lt;/code>&lt;/td>
&lt;td>Face-normal flux&lt;/td>
&lt;td>yes&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>phiHbyA&lt;/code>&lt;/td>
&lt;td>&lt;code>surfaceScalarField&lt;/code>&lt;/td>
&lt;td>Predicted flux (persistent)&lt;/td>
&lt;td>yes&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Uf&lt;/code>&lt;/td>
&lt;td>&lt;code>surfaceVectorField&lt;/code>&lt;/td>
&lt;td>Face velocity (read if present)&lt;/td>
&lt;td>yes&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>cellMask&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>Hole-cell mask&lt;/td>
&lt;td>yes&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>interpolatedCells&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>Fringe-cell mask&lt;/td>
&lt;td>yes&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 tensor&lt;/td>
&lt;td>yes&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>Pressure &lt;code>pKin·rho&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>cumulativeContErr&lt;/code>&lt;/td>
&lt;td>&lt;code>uniformDimensionedScalarField&lt;/code>&lt;/td>
&lt;td>Cumulative continuity error (&lt;code>&amp;lt;time&amp;gt;/uniform&lt;/code>)&lt;/td>
&lt;td>yes&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&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">/&lt;/span>&lt;span class="n">transportProperties&lt;/span> &lt;span class="err">–&lt;/span> &lt;span class="n">nu&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">rho&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">/&lt;/span>&lt;span class="n">turbulenceProperties&lt;/span> &lt;span class="err">–&lt;/span> &lt;span class="n">turbulence&lt;/span> &lt;span class="n">model&lt;/span> &lt;span class="n">selection&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">/&lt;/span>&lt;span class="n">dynamicMeshDict&lt;/span> &lt;span class="err">–&lt;/span> &lt;span class="n">dynamicOversetFvMesh&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">motion&lt;/span> &lt;span class="n">solver&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">/&lt;/span>&lt;span class="n">fvSolution&lt;/span> &lt;span class="err">–&lt;/span> &lt;span class="n">PIMPLE&lt;/span> &lt;span class="n">sub&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">dict&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="n">linear&lt;/span> &lt;span class="n">solver&lt;/span> &lt;span class="n">settings&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">/&lt;/span>&lt;span class="n">fvSchemes&lt;/span> &lt;span class="err">–&lt;/span> &lt;span class="n">discretisation&lt;/span> &lt;span class="n">schemes&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">oversetInterpolation&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">/&lt;/span>&lt;span class="n">controlDict&lt;/span> &lt;span class="err">–&lt;/span> &lt;span class="n">libs&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">overset&lt;/span> &lt;span class="n">fvMotionSolvers&lt;/span>&lt;span class="p">)&lt;/span>
&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 (overPimpleFluid) )
&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="controldict-singleregionmode">&lt;code>controlDict&lt;/code> (singleRegionMode)&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">libs (overset fvMotionSolvers);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">singleRegionMode yes;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">regionType overPimpleFluid;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">adjustTimeStep true;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">maxCo 1; // default 1.0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">maxDeltaT 1e-3; // default GREAT
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="transportproperties">&lt;code>transportProperties&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">transportModel Newtonian;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">nu 1e-05;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">rho 1; // used for p = pKin*rho and sigma
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="dynamicmeshdict">&lt;code>dynamicMeshDict&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">dynamicFvMesh dynamicOversetFvMesh;
&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 multiSolidBodyMotionSolver;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">multiSolidBodyMotionSolverCoeffs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> movingZone1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> solidBodyMotionFunction rotatingMotion;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> rotatingMotionCoeffs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> origin (0.005 0.005 0.005);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> axis (0 0 1);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> omega 100.0;
&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;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">PIMPLE
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> momentumPredictor false;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> nOuterCorrectors 1;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> nCorrectors 3;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> nNonOrthogonalCorrectors 0;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> // Overset controls
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> oversetAdjustPhi false; // default false
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> adjustZone -1; // default -1, zone used by oversetAdjustPhi
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> oversetPatchErrOutput false; // default false
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> // Moving mesh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> checkMeshCourantNo no; // default false
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> moveMeshOuterCorrectors no; // default false
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> // Pressure reference (pKin without fixed-value patch)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> pKinRefPoint (0.0001 0.0001 0.001); // or pKinRefCell (default 0)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> pKinRefValue 0.0; // default 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>correctPhi&lt;/code> (default: &lt;code>mesh.dynamic()&lt;/code>) is read but currently has no effect.&lt;/p>
&lt;h3 id="key-fvschemes-settings">Key &lt;code>fvSchemes&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">oversetInterpolation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> method fastOversetCellStencil; // or inverseDistance, cellVolumeWeight, ...
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> weightMethod correctedCellVolumeWeight; // fastOversetCellStencil only
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> allowInterpolatedDonors false;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> excludedReachablePatches ( hole );
&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">oversetInterpolationSuppressed
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> grad(pKin);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> surfaceIntegrate(phiHbyA);
&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">fluxRequired
&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 no;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> pKin ;
&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="mesh-preparation">Mesh preparation&lt;/h3>
&lt;p>The overset mesh components are combined into a single mesh and &lt;code>zoneID&lt;/code> is
set per component, e.g. (from &lt;code>twoSimpleRotors/Allrun.pre&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">blockMesh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">topoSet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">subsetMesh box -patch hole -overwrite
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">topoSet
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">restore0Dir
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">setFields # writes zoneID from cellSets
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="coupling">Coupling&lt;/h2>
&lt;p>No interface type in &lt;code>src/regionInterfaces&lt;/code> refers to &lt;code>overPimpleFluid&lt;/code>
specifically. The region registers the same fields as &lt;code>pimpleFluid&lt;/code> (&lt;code>U&lt;/code>,
&lt;code>pKin&lt;/code>, &lt;code>p&lt;/code>, &lt;code>phi&lt;/code>, &lt;code>sigma&lt;/code>), so interfaces and partitioned BCs that look these
up by name (&lt;code>fsiInterface&lt;/code> via &lt;code>regionCoupledTraction&lt;/code>/&lt;code>sigma&lt;/code>,
&lt;code>heatTransferInterface&lt;/code>/&lt;code>defaultInterface&lt;/code> via additional region types such as
&lt;code>transportTemperature&lt;/code>) can in principle be attached to it.&lt;/p>
&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>heatTransferInterface&lt;/code>&lt;/td>
&lt;td>&lt;code>T&lt;/code>, heat flux (with a temperature region type stacked)&lt;/td>
&lt;td>partitioned (DNA) — untested&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>fsiInterface&lt;/code>&lt;/td>
&lt;td>Displacement &lt;code>D&lt;/code>, traction &lt;code>sigma·n&lt;/code>&lt;/td>
&lt;td>partitioned (DNA) — untested&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>defaultInterface&lt;/code>&lt;/td>
&lt;td>Any scalar (generic &lt;code>regionCoupledScalarJump&lt;/code>/&lt;code>Flux&lt;/code> BCs)&lt;/td>
&lt;td>partitioned (DNA) — untested&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>None of these combinations is covered by a tutorial.&lt;/p>
&lt;h2 id="known-limitations">Known Limitations&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Overset mesh required&lt;/strong> — the constructor calls &lt;code>Stencil::New(mesh())&lt;/code>, so
the region mesh must be a &lt;code>dynamicOversetFvMesh&lt;/code> (and the &lt;code>overset&lt;/code> library
must be loaded).&lt;/li>
&lt;li>&lt;strong>No &lt;code>correctPhi&lt;/code> / &lt;code>pcorr&lt;/code> solve&lt;/strong> — after mesh motion the flux is only
corrected on hole ↔ active faces via the face mask; the &lt;code>correctPhi&lt;/code>
keyword is read but not used.&lt;/li>
&lt;li>&lt;strong>No &lt;code>ddtCorr&lt;/code>&lt;/strong> — the &lt;code>fvc::ddtCorr&lt;/code> flux correction is not added to
&lt;code>phiHbyA&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Monolithic coupling not implemented&lt;/strong> — &lt;code>setCoupledEqns&lt;/code> is a no-op.&lt;/li>
&lt;li>&lt;strong>&lt;code>solveRegion&lt;/code>, &lt;code>postSolve&lt;/code>, &lt;code>correct&lt;/code> are no-ops&lt;/strong> — all work happens in
the PIMPLE hooks.&lt;/li>
&lt;li>&lt;strong>Incompressible, Newtonian, single phase, no energy equation&lt;/strong> — same
restrictions as &lt;code>pimpleFluid&lt;/code>; pair with a temperature region type for heat
transfer.&lt;/li>
&lt;li>&lt;strong>Multi-region use untested&lt;/strong> — only a single-region tutorial exists.&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/singleRegion/overPimpleFluid/twoSimpleRotors&lt;/code>&lt;/td>
&lt;td>Two counter-rotating rotors on overset meshes in a closed box (laminar, &lt;code>fastOversetCellStencil&lt;/code>, single-region mode)&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>