<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>multiPhysicsFoam – Compressible</title><link>https://multiphysicsfoam.com/tags/compressible/</link><description>Recent content in Compressible on multiPhysicsFoam</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://multiphysicsfoam.com/tags/compressible/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: rhoPimpleFluid</title><link>https://multiphysicsfoam.com/docs/user-guide/region-physics/fluid-models/rhopimplefluid/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://multiphysicsfoam.com/docs/user-guide/region-physics/fluid-models/rhopimplefluid/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;code>rhoPimpleFluid&lt;/code> solves the transient, compressible Navier-Stokes equations for
a Newtonian single-phase fluid with the &lt;strong>PIMPLE&lt;/strong> (merged PISO–SIMPLE)
pressure-velocity coupling algorithm. It is a port of OpenFOAM&amp;rsquo;s
&lt;code>rhoPimpleFoam&lt;/code>: density follows from a run-time selectable thermophysical
model (&lt;code>fluidThermo&lt;/code>), and an energy equation for sensible enthalpy or internal
energy is solved alongside momentum. It supports compressible turbulence
modelling (laminar, RANS, LES), a transonic pressure formulation, local time
stepping (LTS), moving meshes, MRF and &lt;code>fvOptions&lt;/code>. It is suitable for
subsonic to supersonic gas flows, standalone or as the fluid side of a
multi-region problem.&lt;/p>
&lt;h2 id="governing-equations">Governing Equations&lt;/h2>
&lt;h3 id="continuity">Continuity&lt;/h3>
$$
\frac{\partial \rho}{\partial t} + \nabla \cdot \left(\rho\mathbf{U}\right) = S_\rho
$$
&lt;h3 id="momentum">Momentum&lt;/h3>
$$
\frac{\partial \left(\rho\mathbf{U}\right)}{\partial t} + \nabla \cdot \left(\rho\mathbf{U}\mathbf{U}\right) - \nabla \cdot \mathbf{R}
= -\nabla p + \mathbf{S}_U
$$
&lt;p>The effective stress divergence is provided by the turbulence model via
&lt;code>compressible::turbulenceModel::divDevRhoReff(U)&lt;/code>.&lt;/p>
&lt;h3 id="energy">Energy&lt;/h3>
&lt;p>The energy variable $e$ is either sensible enthalpy $h$ or sensible internal
energy $e$, selected by the &lt;code>energy&lt;/code> keyword in &lt;code>thermophysicalProperties&lt;/code>.
With $K = \tfrac{1}{2}|\mathbf{U}|^2$:&lt;/p>
$$
\frac{\partial \left(\rho h\right)}{\partial t} + \nabla \cdot \left(\rho\mathbf{U}h\right) + \frac{\partial \left(\rho K\right)}{\partial t} + \nabla \cdot \left(\rho\mathbf{U}K\right) - \frac{\partial p}{\partial t} - \nabla \cdot \left(\alpha_\text{eff}\nabla h\right)
= S_h
$$
&lt;p>For internal energy the pressure-work term $-\partial p/\partial t$ is
replaced by $\nabla \cdot \left(p\,\mathbf{U}\right)$ (&lt;code>div(phiv,p)&lt;/code>). The
$\partial p/\partial t$ term is only included if &lt;code>dpdt&lt;/code> is enabled in the
thermophysical model (default &lt;code>yes&lt;/code>). With active MRF zones the term
$\nabla \cdot (\phi_\text{MRF}\,p)$ is added.&lt;/p>
&lt;h3 id="equation-of-state">Equation of state&lt;/h3>
&lt;p>Density is closed by the thermophysical model, $\rho = \rho(p, T)$, with
compressibility $\psi = \partial\rho/\partial p$ used in the pressure
equation.&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>$\rho$&lt;/td>
&lt;td>Density&lt;/td>
&lt;td>kg/m³&lt;/td>
&lt;/tr>
&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$&lt;/td>
&lt;td>(Static) pressure&lt;/td>
&lt;td>Pa&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$T$&lt;/td>
&lt;td>Temperature&lt;/td>
&lt;td>K&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$h$, $e$&lt;/td>
&lt;td>Sensible enthalpy / internal energy&lt;/td>
&lt;td>J/kg&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$K$&lt;/td>
&lt;td>Specific kinetic energy&lt;/td>
&lt;td>m²/s²&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\psi$&lt;/td>
&lt;td>Compressibility&lt;/td>
&lt;td>s²/m²&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{R}$&lt;/td>
&lt;td>Effective stress tensor (viscous + turbulent)&lt;/td>
&lt;td>Pa&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\alpha_\text{eff}$&lt;/td>
&lt;td>Effective thermal diffusivity (laminar + turbulent)&lt;/td>
&lt;td>kg/(m·s)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$S_\rho$, $\mathbf{S}_U$, $S_h$&lt;/td>
&lt;td>Sources (from &lt;code>fvOptions&lt;/code>)&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="stress-tensor-for-fsi-coupling">Stress tensor (for FSI coupling)&lt;/h3>
&lt;p>After each pressure-correction stage the Cauchy stress tensor is updated:&lt;/p>
$$
\boldsymbol{\sigma} = -p\,\mathbf{I} - \mathbf{R}^\text{dev}
$$
&lt;p>where $\mathbf{R}^\text{dev}$ is &lt;code>turbulence::devRhoReff()&lt;/code>. Since $p$ is the
static pressure in Pa, no density scaling is applied (unlike &lt;code>pimpleFluid&lt;/code>).&lt;/p>
&lt;h2 id="numerical-algorithm">Numerical Algorithm&lt;/h2>
&lt;p>The region implements the &lt;code>regionType&lt;/code> PIMPLE interface
(&lt;code>usesPIMPLE() = true&lt;/code>), so the outer PIMPLE loop is driven by
&lt;code>multiRegionSystem&lt;/code>. Per time step:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>&lt;code>correct()&lt;/code>&lt;/strong> — reset the outer-iteration counter; if &lt;code>correctPhi&lt;/code> is
active, snapshot $\nabla\cdot(\rho\mathbf{U})$ for flux correction; if LTS is
active, recompute the local time-step field &lt;code>rDeltaT&lt;/code> (see below).&lt;/li>
&lt;li>&lt;strong>Pre-predictor&lt;/strong> — on the first outer iteration of the step (or every
iteration with &lt;code>moveMeshOuterCorrectors yes&lt;/code>): &lt;code>mesh.controlledUpdate()&lt;/code>;
if the mesh changed, update MRF, rebuild the flux from &lt;code>rhoUf&lt;/code>, apply
&lt;code>CorrectPhi&lt;/code>, make the flux relative and correct &lt;code>rhoUf&lt;/code>; optionally print
the mesh Courant number.&lt;/li>
&lt;li>&lt;strong>Momentum predictor&lt;/strong> —
&lt;ul>
&lt;li>on the first outer iteration and unless &lt;code>SIMPLErho&lt;/code> is set, solve the
density transport equation;&lt;/li>
&lt;li>assemble the momentum matrix (cached for the pressure corrector), relax,
and solve it with $-\nabla p$ if &lt;code>momentumPredictor yes&lt;/code>; update $K$;&lt;/li>
&lt;li>assemble and solve the energy equation, then &lt;code>thermo.correct()&lt;/code>.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Pressure corrector (PISO loop, &lt;code>nCorrectors&lt;/code>)&lt;/strong> — for each corrector:
update $\rho$ from thermo (unless &lt;code>SIMPLErho&lt;/code>), build
$\mathbf{H}/A$ and $\phi_{HbyA}$ (with &lt;code>ddtCorr&lt;/code>, MRF and mesh-motion
corrections, optional &lt;code>consistent&lt;/code> SIMPLEC treatment), constrain pressure
BCs, and solve the compressible pressure equation inside the
non-orthogonal loop:&lt;/li>
&lt;/ol>
$$
\frac{\partial \rho}{\partial t} + \psi\,\frac{\partial p'}{\partial t} + \nabla\cdot\phi_{HbyA} - \nabla\cdot\left(\rho\, r_{AU}\,\nabla p\right) = S_p
$$
&lt;p>With &lt;code>transonic yes&lt;/code> the flux is split into a convective part
$\phi_d = (\psi_f/\rho_f)\,\phi_{HbyA}$ treated implicitly
($\nabla\cdot(\phi_d\,p)$) and the pressure equation is relaxed for
diagonal dominance. Afterwards: explicit pressure relaxation, velocity
correction $\mathbf{U} = \mathbf{H}/A - r_{AU}\nabla p$, pressure limiting
(&lt;code>pressureControl&lt;/code>), &lt;code>thermo.correctRho&lt;/code> with &lt;code>rhoMin&lt;/code>/&lt;code>rhoMax&lt;/code>, a second
density solve, continuity-error report, $\rho$ reset to thermo, &lt;code>rhoUf&lt;/code>
correction and $\partial p/\partial t$ update.
5. &lt;strong>Turbulence correction&lt;/strong> — &lt;code>turbulence-&amp;gt;correct()&lt;/code> if &lt;code>pimple.turbCorr()&lt;/code>
(see &lt;code>turbOnFinalIterOnly&lt;/code>), then update of &lt;code>sigma&lt;/code>.&lt;/p>
&lt;p>Steps 2–5 are repeated for &lt;code>nOuterCorrectors&lt;/code> outer iterations; step 4 for
&lt;code>nCorrectors&lt;/code> inner iterations.&lt;/p>
&lt;p>&lt;strong>Mesh motion corrector&lt;/strong> (&lt;code>meshMotionCorrector()&lt;/code>, called by
&lt;code>multiRegionSystem::preSolve&lt;/code> and in the FSI coupling loop) performs
&lt;code>controlledUpdate&lt;/code>, MRF update, flux reconstruction from &lt;code>rhoUf&lt;/code> +
&lt;code>CorrectPhi&lt;/code>, and &lt;code>rhoUf&lt;/code> correction.&lt;/p>
&lt;h3 id="time-step-control">Time-step control&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Global time stepping&lt;/strong> — &lt;code>getMinDeltaT()&lt;/code> returns
$\Delta t_\text{max} = \text{maxCo}/\text{Co}\;\Delta t$, where the Courant
number is evaluated from the mass flux, $\text{Co} = \tfrac{1}{2}\max\left(\sum_f|\phi|/(\rho V)\right)\Delta t$.
&lt;code>maxCo&lt;/code> is read from &lt;code>controlDict&lt;/code> (default &lt;code>1.0&lt;/code>).&lt;/li>
&lt;li>&lt;strong>Local time stepping (LTS)&lt;/strong> — enabled automatically when &lt;code>fvSchemes&lt;/code>
selects &lt;code>ddtSchemes { default localEuler; }&lt;/code>. &lt;code>getMinDeltaT()&lt;/code> then returns
&lt;code>GREAT&lt;/code> (the global step is left untouched) and &lt;code>rDeltaT&lt;/code> is computed per
cell from the Courant number (plus an acoustic estimate with &lt;code>transonic&lt;/code>),
then smoothed and damped, as in stock &lt;code>rhoPimpleFoam&lt;/code>.&lt;/li>
&lt;/ul>
&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>Thermophysical model&lt;/td>
&lt;td>&lt;code>constant/thermophysicalProperties&lt;/code>&lt;/td>
&lt;td>&lt;code>fluidThermo::New&lt;/code>; &lt;code>hePsiThermo&lt;/code> or &lt;code>heRhoThermo&lt;/code>; energy must be &lt;code>h&lt;/code> or &lt;code>e&lt;/code> variant&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Turbulence (laminar / RANS / LES)&lt;/td>
&lt;td>&lt;code>constant/turbulenceProperties&lt;/code>&lt;/td>
&lt;td>&lt;code>compressible::turbulenceModel&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>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>fvOptions&lt;/code>&lt;/td>
&lt;td>&lt;code>system/fvOptions&lt;/code> (or &lt;code>constant/fvOptions&lt;/code>)&lt;/td>
&lt;td>Sources/constraints on $\rho$, $\mathbf{U}$, $h$/$e$, $p$ (e.g. &lt;code>limitTemperature&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Dynamic mesh&lt;/td>
&lt;td>&lt;code>constant/dynamicMeshDict&lt;/code>&lt;/td>
&lt;td>Any &lt;code>dynamicFvMesh&lt;/code>; enables &lt;code>rhoUf&lt;/code> and &lt;code>correctPhi&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>p&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>Pressure (read by thermo)&lt;/td>
&lt;td>Pa&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>T&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>Temperature (read by thermo)&lt;/td>
&lt;td>K&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>Velocity&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>omega&lt;/code>, &lt;code>nut&lt;/code>, &lt;code>alphat&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>rho&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>Density (read if present, else from thermo)&lt;/td>
&lt;td>always&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>phi&lt;/code>&lt;/td>
&lt;td>&lt;code>surfaceScalarField&lt;/code>&lt;/td>
&lt;td>Mass flux $\rho\mathbf{U}\cdot\mathbf{S}_f$ (read if present)&lt;/td>
&lt;td>always&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>K&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>Kinetic energy $\tfrac12&lt;/td>
&lt;td>\mathbf{U}&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>dpdt&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>$\partial p/\partial t$&lt;/td>
&lt;td>always (zero if &lt;code>dpdt no&lt;/code>; written only on dynamic meshes)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>kappa&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>Effective thermal conductivity &lt;code>kappaEff&lt;/code>&lt;/td>
&lt;td>always (heat-transfer coupling)&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;tr>
&lt;td>&lt;code>rhoUf&lt;/code>&lt;/td>
&lt;td>&lt;code>surfaceVectorField&lt;/code>&lt;/td>
&lt;td>Face momentum&lt;/td>
&lt;td>dynamic mesh only&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>rDeltaT&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>Reciprocal local time step&lt;/td>
&lt;td>LTS only&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>uniform/cumulativeContErr&lt;/code>&lt;/td>
&lt;td>&lt;code>uniformDimensionedScalarField&lt;/code>&lt;/td>
&lt;td>Cumulative continuity error&lt;/td>
&lt;td>always&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">thermophysicalProperties&lt;/span> &lt;span class="err">–&lt;/span> &lt;span class="n">thermo&lt;/span> &lt;span class="n">type&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mixture&lt;/span> &lt;span class="n">properties&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 class="p">(&lt;/span>&lt;span class="n">localEuler&lt;/span> &lt;span class="err">→&lt;/span> &lt;span class="n">LTS&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"> ( gas (rhoPimpleFluid) )
&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">application multiPhysicsFoam;
&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 rhoPimpleFluid;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="thermophysicalproperties-from-aerofoilnaca0012">&lt;code>thermophysicalProperties&lt;/code> (from &lt;code>aerofoilNACA0012&lt;/code>)&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">thermoType&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">hePsiThermo&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">mixture&lt;/span> &lt;span class="n">pureMixture&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">transport&lt;/span> &lt;span class="k">const&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">thermo&lt;/span> &lt;span class="n">hConst&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">equationOfState&lt;/span> &lt;span class="n">perfectGas&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">specie&lt;/span> &lt;span class="n">specie&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">energy&lt;/span> &lt;span class="n">sensibleInternalEnergy&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="n">sensibleEnthalpy&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>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">mixture&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">specie&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">molWeight&lt;/span> &lt;span class="mf">28.9&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">thermodynamics&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">Cp&lt;/span> &lt;span class="mi">1005&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">Hf&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">transport&lt;/span> &lt;span class="p">{&lt;/span> &lt;span class="n">mu&lt;/span> &lt;span class="mf">1.82e-05&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">Pr&lt;/span> &lt;span class="mf">0.71&lt;/span>&lt;span class="p">;&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;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;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> nCorrectors 2;
&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"> transonic no; // implicit convective pressure term
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> consistent no; // SIMPLEC-like correction
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> SIMPLErho no; // skip rho transport, take rho from thermo
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> turbOnFinalIterOnly true;
&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 limits (pressureControl): pMin/pMax or pMinFactor/pMaxFactor
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> pMinFactor 0.1;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> pMaxFactor 2;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> // Density bounds for thermo.correctRho
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> rhoMin 0; // default 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> rhoMax 1e5; // default GREAT
&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"> // LTS only (ddtSchemes default localEuler)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> maxCo 0.5; // default 0.8
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> rDeltaTSmoothingCoeff 0.1; // default 0.02
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> rDeltaTDampingCoeff 0.9; // default 1.0 (no damping)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> maxDeltaT 1; // default GREAT
&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; // default 1.0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">maxDeltaT 1e-4;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&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>heatTransferInterface&lt;/code>&lt;/td>
&lt;td>Temperature &lt;code>T&lt;/code>, heat flux via &lt;code>kappa&lt;/code>&lt;/td>
&lt;td>partitioned (DNA)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>fsiInterface&lt;/code>&lt;/td>
&lt;td>Displacement &lt;code>D&lt;/code>, traction from &lt;code>sigma&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 (generic &lt;code>regionCoupledScalarJump&lt;/code>/&lt;code>Flux&lt;/code> BCs)&lt;/td>
&lt;td>partitioned (DNA)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>For partitioned heat transfer, &lt;code>setCoupledEqns&lt;/code> assembles a separate
temperature equation (independent of the &lt;code>fieldName&lt;/code> argument):&lt;/p>
$$
\frac{\partial \left(\rho c_{pv} T\right)}{\partial t} + \nabla\cdot\left(c_{pv,f}\,\phi\,T\right)
= \nabla\cdot\left(\kappa_\text{eff}\nabla T\right)
$$
&lt;p>with $c_{pv} = $ &lt;code>thermo.Cpv()&lt;/code> and &lt;code>kappa&lt;/code> refreshed from
&lt;code>turbulence-&amp;gt;kappaEff()&lt;/code> on each call. The matrix is registered as
&lt;code>T&amp;lt;region&amp;gt;MeshrhoPimpleFluidTypeEqn&lt;/code>. The &lt;code>regionCoupledTemperatureJump&lt;/code> /
&lt;code>regionCoupledHeatFlux&lt;/code> BCs read the diffusivity field &lt;code>kappa&lt;/code> by default.
&lt;code>selfCoupledFieldNames()&lt;/code> is not overridden (empty list).&lt;/p>
&lt;h2 id="known-limitations">Known Limitations&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Coupled temperature equation is decoupled from the energy equation&lt;/strong> —
the DNA &lt;code>T&lt;/code> equation in &lt;code>setCoupledEqns&lt;/code> contains no pressure-work,
kinetic-energy, MRF or &lt;code>fvOptions&lt;/code> terms, and &lt;code>postSolve()&lt;/code> is a no-op, so
&lt;code>thermo.correct()&lt;/code> is not called after the coupled &lt;code>T&lt;/code> solve and &lt;code>he&lt;/code> is
not updated from the new &lt;code>T&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Heat-transfer and FSI coupling are untested&lt;/strong> — no multi-region
tutorial uses &lt;code>rhoPimpleFluid&lt;/code>; only single-region cases exist.&lt;/li>
&lt;li>&lt;strong>Monolithic coupling not implemented&lt;/strong> — &lt;code>setCoupledEqns&lt;/code> only provides
the partitioned &lt;code>T&lt;/code> matrix; monolithic coupling is disabled in
&lt;code>multiRegionSystem&lt;/code>.&lt;/li>
&lt;li>&lt;strong>&lt;code>solveRegion()&lt;/code> and &lt;code>postSolve()&lt;/code> are no-ops&lt;/strong> — all work happens inside
the PIMPLE hooks.&lt;/li>
&lt;li>&lt;strong>&lt;code>maxDeltaT&lt;/code> not applied in &lt;code>getMinDeltaT()&lt;/code>&lt;/strong> — &lt;code>maxDeltaT&lt;/code> from
&lt;code>controlDict&lt;/code> is read but the returned value is only Courant-based.&lt;/li>
&lt;li>&lt;strong>Mesh motion corrector does not make the flux relative&lt;/strong> — unlike
&lt;code>prePredictor&lt;/code>, &lt;code>meshMotionCorrector()&lt;/code> does not call
&lt;code>fvc::makeRelative&lt;/code> after &lt;code>CorrectPhi&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Single phase, single species&lt;/strong> — reacting or multi-species mixtures and
buoyancy (gravity, &lt;code>p_rgh&lt;/code>) are not handled; use &lt;code>buoyantPimpleFluid&lt;/code> for
buoyancy-driven flows.&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/rhoPimpleFluid/aerofoilNACA0012&lt;/code>&lt;/td>
&lt;td>Compressible RANS (kOmegaSST) flow around a NACA0012 aerofoil, internal energy, &lt;code>limitTemperature&lt;/code> fvOption&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/singleRegion/rhoPimpleFluid/obliqueShock&lt;/code>&lt;/td>
&lt;td>Laminar supersonic oblique shock with &lt;code>transonic&lt;/code> formulation and LTS (&lt;code>localEuler&lt;/code>)&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>