<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>multiPhysicsFoam – Incompressible</title><link>https://multiphysicsfoam.com/tags/incompressible/</link><description>Recent content in Incompressible on multiPhysicsFoam</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://multiphysicsfoam.com/tags/incompressible/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: pimpleFluid</title><link>https://multiphysicsfoam.com/docs/user-guide/region-physics/fluid-models/pimplefluid/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://multiphysicsfoam.com/docs/user-guide/region-physics/fluid-models/pimplefluid/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;code>pimpleFluid&lt;/code> solves the transient, incompressible Navier-Stokes equations for
a Newtonian single-phase fluid using the &lt;strong>PIMPLE&lt;/strong> (merged PISO–SIMPLE)
pressure-velocity coupling algorithm. It supports turbulence modelling (laminar,
RANS, LES), arbitrary moving meshes (ALE formulation), multiple reference frames
(MRF), and run-time selectable source terms via &lt;code>fvOptions&lt;/code>. It is the most
general-purpose fluid region type in multiPhysicsFoam and is suitable as the
fluid side in conjugate heat transfer, fluid-structure interaction, and
standalone flow problems.&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}
= -\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;/tbody>
&lt;/table>
&lt;p>The effective stress tensor $\mathbf{R}$ is computed by the selected turbulence
model via &lt;code>turbulence::divDevReff(U)&lt;/code>. For laminar flow this reduces to the
viscous stress $2\nu\,\text{dev}(\mathbf{D})$ where $\mathbf{D}$ is the
rate-of-strain tensor.&lt;/p>
&lt;h3 id="stress-tensor-for-fsi-coupling">Stress tensor (for FSI coupling)&lt;/h3>
&lt;p>After each pressure-correction step the Cauchy stress tensor is updated:&lt;/p>
$$
\boldsymbol{\sigma} = \rho \left( -p_\text{kin}\,\mathbf{I} - \mathbf{R}^\text{dev} \right)
$$
&lt;p>This field (&lt;code>sigma&lt;/code>) is used when &lt;code>pimpleFluid&lt;/code> is coupled to a solid region
via &lt;code>fsiInterface&lt;/code>.&lt;/p>
&lt;h2 id="numerical-algorithm">Numerical Algorithm&lt;/h2>
&lt;p>The PIMPLE loop consists of an outer iteration (SIMPLE-like relaxation) wrapping
an inner PISO loop:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Pre-predictor&lt;/strong> — mesh motion update (ALE); flux correction after mesh
deformation (&lt;code>correctPhi&lt;/code>); MRF zone update.&lt;/li>
&lt;li>&lt;strong>Momentum predictor&lt;/strong> — assemble and (optionally) solve the momentum
equation to obtain a predicted velocity $\mathbf{U}^*$.&lt;/li>
&lt;li>&lt;strong>Pressure correction (PISO inner loop)&lt;/strong> — solve the pressure Poisson
equation:&lt;/li>
&lt;/ol>
$$
\nabla \cdot \left( r_{AU}\,\nabla p_\text{kin} \right) = \nabla \cdot \hat{\mathbf{U}}
$$
&lt;p>where $r_{AU} = (A_U)^{-1}$ and $\hat{\mathbf{U}} = \mathbf{H}(U)/A_U$.
Velocity is then explicitly corrected:&lt;/p>
$$
\mathbf{U} = \hat{\mathbf{U}} - r_{AU}\,\nabla p_\text{kin}
$$
&lt;ol start="4">
&lt;li>&lt;strong>Non-orthogonal corrector sub-loop&lt;/strong> — improves accuracy on non-orthogonal
meshes (controlled by &lt;code>nNonOrthogonalCorrectors&lt;/code>).&lt;/li>
&lt;li>&lt;strong>Turbulence correction&lt;/strong> — transport equations for the selected turbulence
model are solved once per outer PIMPLE iteration (controlled by
&lt;code>turbOnFinalIterOnly&lt;/code> / &lt;code>turbCorr&lt;/code>).&lt;/li>
&lt;/ol>
&lt;p>Steps 2–5 are repeated for &lt;code>nOuterCorrectors&lt;/code> outer iterations; steps 3–4 are
repeated for &lt;code>nCorrectors&lt;/code> inner iterations.&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>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>Kinematic viscosity $\nu$ via &lt;code>singlePhaseTransportModel&lt;/code>&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>; multiple zones supported&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, porosity, momentum sources&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>Turbulence fields&lt;/td>
&lt;td>—&lt;/td>
&lt;td>As required by selected model (e.g. &lt;code>k&lt;/code>, &lt;code>epsilon&lt;/code>, &lt;code>omega&lt;/code>, &lt;code>nut&lt;/code>)&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&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>Condition&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>always&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&lt;/td>
&lt;td>moving mesh only&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>always (FSI)&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">kinematic&lt;/span> &lt;span class="n">viscosity&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">nu&lt;/span>&lt;span class="p">)&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">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>&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">);
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For combined fluid + passive scalar transport add further region types:&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">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 transportTemperature) )
&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;p>When running as a standalone single-region case via &lt;code>singleRegionMode&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">singleRegionMode yes;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">regionType pimpleFluid;
&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 yes;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> nOuterCorrectors 1; // outer SIMPLE-like iterations
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> nCorrectors 2; // inner PISO iterations
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> nNonOrthogonalCorrectors 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"> // Moving mesh
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> correctPhi yes; // defaults to yes if mesh is dynamic
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> checkMeshCourantNo no;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> moveMeshOuterCorrectors no;
&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 (closed domains)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> pKinRefCell 0;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> pKinRefValue 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;h3 id="adjustable-time-stepping-controldict">Adjustable time stepping (&lt;code>controlDict&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">adjustTimeStep yes;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">maxCo 0.5; // maximum Courant number
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">maxDeltaT 1e-3; // upper bound on time-step size
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="coupling">Coupling&lt;/h2>
&lt;p>&lt;code>pimpleFluid&lt;/code> participates in the following multi-region interfaces:&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>Temperature &lt;code>T&lt;/code>, heat flux &lt;code>q&lt;/code>&lt;/td>
&lt;td>partitioned (DNA), monolithic&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)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>defaultInterface&lt;/code>&lt;/td>
&lt;td>Any scalar/vector&lt;/td>
&lt;td>partitioned (DNA)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The stress tensor &lt;code>sigma&lt;/code> is automatically maintained and made available to
&lt;code>fsiInterface&lt;/code> for computing the traction boundary condition on the solid side.&lt;/p>
&lt;h2 id="known-limitations">Known Limitations&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Incompressible only&lt;/strong> — density is constant (read from
&lt;code>transportProperties&lt;/code>). Compressibility, variable density, or
buoyancy-driven flows are not supported; use &lt;code>buoyantPimpleFluid&lt;/code> for
the latter.&lt;/li>
&lt;li>&lt;strong>Newtonian fluid&lt;/strong> — viscosity is treated as constant or temperature-
independent. Non-Newtonian rheology is not supported via this region type.&lt;/li>
&lt;li>&lt;strong>Single phase&lt;/strong> — two-phase or interface-tracking flows are not supported;
use &lt;code>interTrackFluid&lt;/code> instead.&lt;/li>
&lt;li>&lt;strong>No energy equation&lt;/strong> — the fluid energy/temperature equation is not solved
here. Pair with &lt;code>transportTemperature&lt;/code> or &lt;code>turbulentTransportTemperature&lt;/code> for
heat transfer in the fluid.&lt;/li>
&lt;li>&lt;strong>Monolithic p-U coupling not implemented&lt;/strong> — &lt;code>setCoupledEqns&lt;/code> is a no-op.
For monolithic pressure-velocity coupling use &lt;code>pUCoupledIcoFluid&lt;/code>.&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/pimpleFluid/pitzDaily&lt;/code>&lt;/td>
&lt;td>Backward-facing step flow (single-region, adjustable time-step)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/singleRegion/pimpleFluid/mixerVesselAMI2D&lt;/code>&lt;/td>
&lt;td>Rotating mixer with AMI interface (MRF / sliding mesh)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/conjugateHeatTransfer/flowOverHeatedPlate&lt;/code>&lt;/td>
&lt;td>Flow over a heated plate (pimpleFluid + conductTemperature)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/conjugateHeatTransfer/ShellAndTubeHeatExchanger&lt;/code>&lt;/td>
&lt;td>Shell-and-tube heat exchanger (pimpleFluid + conductTemperature)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/fluidStructureInteraction/beamInCrossFlow&lt;/code>&lt;/td>
&lt;td>Beam in cross-flow FSI (pimpleFluid + solidStVK)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/fluidStructureInteraction/HronTurekFsi3&lt;/code>&lt;/td>
&lt;td>Hron-Turek FSI benchmark (pimpleFluid + solidStVK)&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., *multiRegionFoam: A Unified Multiphysics Framework for Multi-Region Coupled Continuum-Physical Problems, 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>