<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>multiPhysicsFoam – Advection-Diffusion</title><link>https://multiphysicsfoam.com/tags/advection-diffusion/</link><description>Recent content in Advection-Diffusion on multiPhysicsFoam</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://multiphysicsfoam.com/tags/advection-diffusion/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: transportTemperature</title><link>https://multiphysicsfoam.com/docs/user-guide/region-physics/heat-transfer-models/transporttemperature/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://multiphysicsfoam.com/docs/user-guide/region-physics/heat-transfer-models/transporttemperature/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;code>transportTemperature&lt;/code> adds a temperature equation to a fluid region. It does
not solve for the flow itself: it is stacked on top of a flow region type in
the same region, e.g. &lt;code>(fluid (pimpleFluid transportTemperature))&lt;/code>, and
advects &lt;code>T&lt;/code> with the velocity &lt;code>U&lt;/code> and face flux &lt;code>phi&lt;/code> that the companion
region type owns. Material properties (&lt;code>rho&lt;/code>, &lt;code>cp&lt;/code>, &lt;code>kappa&lt;/code>) are constant
(&lt;code>kappa&lt;/code> may be a non-uniform field). There is no turbulent heat flux; the
turbulent variant &lt;code>turbulentTransportTemperature&lt;/code> exists in the source tree
but is not compiled (see Known Limitations). The typical use is the fluid side
of conjugate heat transfer, coupled to &lt;code>conductTemperature&lt;/code> through
&lt;code>heatTransferInterface&lt;/code>.&lt;/p>
&lt;h2 id="governing-equations">Governing Equations&lt;/h2>
&lt;h3 id="energy-temperature">Energy (temperature)&lt;/h3>
$$
\rho\, c_p \left( \frac{\partial T}{\partial t} + \nabla \cdot \left( \phi\, T \right) \right)
= \nabla \cdot \left( \kappa\, \nabla T \right)
$$
&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>$T$&lt;/td>
&lt;td>Temperature&lt;/td>
&lt;td>K&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\phi$&lt;/td>
&lt;td>Volumetric face flux (&lt;code>phi&lt;/code>) from the companion fluid region type&lt;/td>
&lt;td>m³/s&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\rho$&lt;/td>
&lt;td>Density (constant)&lt;/td>
&lt;td>kg/m³&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$c_p$&lt;/td>
&lt;td>Specific heat capacity (constant)&lt;/td>
&lt;td>J/(kg K)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\kappa$&lt;/td>
&lt;td>Thermal conductivity (uniform or field)&lt;/td>
&lt;td>W/(m K)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The convective term is written in conservative form $\nabla \cdot (\phi T)$
without a $-T\,\nabla\cdot\phi$ correction, so it assumes a divergence-free
(incompressible, volumetric) flux. There is no source term and no viscous
heating.&lt;/p>
&lt;h2 id="numerical-algorithm">Numerical Algorithm&lt;/h2>
&lt;p>&lt;code>transportTemperature&lt;/code> has no solution loop of its own. &lt;code>usesPIMPLE()&lt;/code> returns
&lt;code>false&lt;/code>, and &lt;code>solveRegion()&lt;/code>, &lt;code>prePredictor()&lt;/code>, &lt;code>momentumPredictor()&lt;/code>,
&lt;code>pressureCorrector()&lt;/code>, &lt;code>meshMotionCorrector()&lt;/code> and &lt;code>postSolve()&lt;/code> are all
no-ops. Per time step:&lt;/p>
&lt;ol>
&lt;li>&lt;code>preSolve()&lt;/code>: &lt;code>correct()&lt;/code> calls &lt;code>kappa.correctBoundaryConditions()&lt;/code>.&lt;/li>
&lt;li>The companion fluid region type solves its flow (e.g. the PIMPLE loop of
&lt;code>pimpleFluid&lt;/code>), which updates the shared &lt;code>U&lt;/code> and &lt;code>phi&lt;/code>.&lt;/li>
&lt;li>Inside the DNA loop for &lt;code>T&lt;/code>, &lt;code>multiRegionSystem&lt;/code> calls
&lt;code>setCoupledEqns()&lt;/code>, which assembles the equation above as an
&lt;code>fvScalarMatrix&lt;/code> and registers it under
&lt;code>T&amp;lt;region&amp;gt;MeshtransportTemperatureTypeEqn&lt;/code>. The matrix is then relaxed
(&lt;code>relaxationFactors&lt;/code>) and solved, with optional Picard re-assembly
controlled by the region&amp;rsquo;s &lt;code>PICARD&lt;/code> dictionary in &lt;code>fvSolution&lt;/code>.&lt;/li>
&lt;li>&lt;code>getMinDeltaT()&lt;/code> returns &lt;code>GREAT&lt;/code>, so this region never limits the time
step. Time-step control comes from the companion fluid type (Courant
number) or a fixed &lt;code>deltaT&lt;/code>.&lt;/li>
&lt;/ol>
&lt;p>The temperature is therefore advanced once per time step, after the flow,
using the flux from the end of the flow solve (one-way, segregated coupling
from flow to temperature; &lt;code>T&lt;/code> does not feed back into the flow).&lt;/p>
&lt;p>&lt;code>setCoupledEqns()&lt;/code> ignores its &lt;code>fieldName&lt;/code> argument and always assembles the
&lt;code>T&lt;/code> equation. &lt;code>selfCoupledFieldNames()&lt;/code> is not overridden (returns an empty
list), so &lt;code>T&lt;/code> is &lt;strong>only solved if it is listed as a partitioned-coupled field&lt;/strong>
(a &lt;code>DNA { T {...} }&lt;/code> entry in &lt;code>multiRegionProperties&lt;/code> and &lt;code>T&lt;/code> in an interface&amp;rsquo;s
&lt;code>coupledFields&lt;/code>).&lt;/p>
&lt;h2 id="sub-models">Sub-Models&lt;/h2>
&lt;p>None. &lt;code>transportTemperature&lt;/code> does not construct &lt;code>fvOptions&lt;/code>, a turbulence
model, or a thermophysical model.&lt;/p>
&lt;h2 id="required-fields">Required Fields&lt;/h2>
&lt;p>How each field is obtained:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Unit&lt;/th>
&lt;th>Source&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;td>Looked up from the mesh registry (provided by the companion fluid type); read from &lt;code>0/&amp;lt;region&amp;gt;/U&lt;/code> (&lt;code>MUST_READ&lt;/code>) if not registered yet&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>Volumetric face flux&lt;/td>
&lt;td>m³/s&lt;/td>
&lt;td>Looked up from the registry; otherwise read if a &lt;code>phi&lt;/code> file exists, else created as &lt;code>interpolate(U) &amp;amp; Sf&lt;/code>&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&lt;/td>
&lt;td>K&lt;/td>
&lt;td>Looked up from the registry, otherwise read from &lt;code>0/&amp;lt;region&amp;gt;/T&lt;/code> (&lt;code>MUST_READ&lt;/code>, written)&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>Thermal conductivity&lt;/td>
&lt;td>W/(m K)&lt;/td>
&lt;td>Looked up from the registry, otherwise read from &lt;code>0/&amp;lt;region&amp;gt;/kappa&lt;/code> if present, else created uniform from &lt;code>transportProperties&lt;/code> (written)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Because fields are looked up from the mesh registry first, the companion
region type must be listed &lt;strong>before&lt;/strong> &lt;code>transportTemperature&lt;/code> so that it
creates &lt;code>U&lt;/code> and &lt;code>phi&lt;/code>; every tutorial does this.&lt;/p>
&lt;p>The coupling boundary conditions &lt;code>regionCoupledTemperatureJump&lt;/code> and
&lt;code>regionCoupledHeatFlux&lt;/code> look up the diffusivity field &lt;code>kappa&lt;/code> by default (or
the name given by their &lt;code>diffusivity&lt;/code> keyword), which matches the field this
region type registers.&lt;/p>
&lt;h2 id="case-setup">Case Setup&lt;/h2>
&lt;h3 id="required-dictionaries">Required dictionaries&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="n">constant&lt;/span>&lt;span class="o">/&amp;lt;&lt;/span>&lt;span class="n">region&lt;/span>&lt;span class="o">&amp;gt;/&lt;/span>&lt;span class="n">transportProperties&lt;/span> &lt;span class="err">–&lt;/span> &lt;span class="n">rho&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">cp&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">kappa&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">all&lt;/span> &lt;span class="n">required&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">system&lt;/span>&lt;span class="o">/&amp;lt;&lt;/span>&lt;span class="n">region&lt;/span>&lt;span class="o">&amp;gt;/&lt;/span>&lt;span class="n">fvSolution&lt;/span> &lt;span class="err">–&lt;/span> &lt;span class="n">T&lt;/span> &lt;span class="n">solver&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">relaxation&lt;/span> &lt;span class="n">factor&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">T&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">system&lt;/span>&lt;span class="o">/&amp;lt;&lt;/span>&lt;span class="n">region&lt;/span>&lt;span class="o">&amp;gt;/&lt;/span>&lt;span class="n">fvSchemes&lt;/span> &lt;span class="err">–&lt;/span> &lt;span class="n">ddt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">T&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">div&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">phi&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">T&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">laplacian&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">kappa&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="n">T&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 (pimpleFluid transportTemperature) )
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> (solid (conductTemperature) )
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">DNA
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> T
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> maxCoupleIter 20;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> residualControl
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> maxJumpRes 1e-07;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> outputJumpResField no;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> maxFluxRes 1e-07;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> outputFluxResField 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"> }
&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="transportproperties">&lt;code>transportProperties&lt;/code>&lt;/h3>
&lt;p>All three entries are read with &lt;code>dimensionedScalar(name, dict)&lt;/code> and have no
defaults. They can share the dictionary with the companion fluid type&amp;rsquo;s
entries (&lt;code>transportModel&lt;/code>, &lt;code>nu&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">rho rho [1 -3 0 0 0 0 0] 1;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cp cp [0 2 -2 -1 0 0 0] 500.0;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">kappa kappa [1 1 -3 -1 0 0 0] 5.0;
&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">solvers
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> T
&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 GAMG;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> tolerance 1e-7;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> relTol 0;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> smoother GaussSeidel;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">relaxationFactors
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> T 1.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="coupled-t-boundary-condition-fluid-side-partitioned">Coupled &lt;code>T&lt;/code> boundary condition (fluid side, partitioned)&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">interface
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> type regionCoupledTemperatureJump;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (heatTransferInterface);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> accType aitken;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> relax 0.75;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> secondOrder false;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> nonOrthCorr false;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> value $internalField;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The solid side uses &lt;code>regionCoupledHeatFlux&lt;/code> on its interface patch.&lt;/p>
&lt;h2 id="coupling">Coupling&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Interface type&lt;/th>
&lt;th>Exchanged fields&lt;/th>
&lt;th>Coupling mode&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> (jump on fluid side), heat flux $\kappa \nabla T \cdot \mathbf{n}$ (solid side)&lt;/td>
&lt;td>partitioned (DNA)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>No interface type accesses &lt;code>transportTemperature&lt;/code> directly. Coupling happens
through the &lt;code>T&lt;/code> boundary conditions above, which read &lt;code>kappa&lt;/code> from the region
registry. The partner region is &lt;code>conductTemperature&lt;/code> in all tutorials,
possibly stacked with &lt;code>solidStVK&lt;/code> for thermo-FSI.&lt;/p>
&lt;p>Companion flow region types: all tutorials use &lt;code>pimpleFluid&lt;/code>. Any flow type
that registers a volumetric &lt;code>U&lt;/code> and &lt;code>phi&lt;/code> on the same mesh should work in
principle (e.g. &lt;code>icoFluid&lt;/code>), but this is untested. &lt;code>rhoPimpleFluid&lt;/code>
registers a mass flux &lt;code>phi&lt;/code> (&lt;code>rho*U &amp;amp; Sf&lt;/code>), so it is dimensionally
inconsistent with the equation above.&lt;/p>
&lt;h2 id="known-limitations">Known Limitations&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Only solved as a DNA-coupled field&lt;/strong> — &lt;code>selfCoupledFieldNames()&lt;/code> is not
overridden, so without a &lt;code>DNA { T ... }&lt;/code> entry the temperature is never
solved (in particular not in single-region mode). There is no
&lt;code>tutorials/singleRegion/transportTemperature&lt;/code> case.&lt;/li>
&lt;li>&lt;strong>Monolithic coupling not available&lt;/strong> — monolithic coupling in
&lt;code>multiRegionSystem::solve()&lt;/code> is currently commented out.&lt;/li>
&lt;li>&lt;strong>Laminar heat conduction only&lt;/strong> — no turbulent diffusivity
($\kappa_t$ / &lt;code>Prt&lt;/code>). &lt;code>turbulentTransportTemperature&lt;/code>
(&lt;code>src/regions/turbulentTransportTemperature&lt;/code>) adds this but is commented out
in &lt;code>src/multiRegionSystem/Make/files&lt;/code> and therefore not built.&lt;/li>
&lt;li>&lt;strong>Constant properties&lt;/strong> — &lt;code>rho&lt;/code> and &lt;code>cp&lt;/code> are uniform constants; &lt;code>kappa&lt;/code> is
read once and only its boundary values are refreshed in &lt;code>correct()&lt;/code>.
No temperature-dependent properties.&lt;/li>
&lt;li>&lt;strong>One-way coupling&lt;/strong> — &lt;code>T&lt;/code> has no effect on the flow (no buoyancy). Use
&lt;code>buoyantPimpleFluid&lt;/code> for natural convection.&lt;/li>
&lt;li>&lt;strong>Incompressible flux assumed&lt;/strong> — the convection term has no
$\nabla\cdot\phi$ correction and expects a volumetric flux.&lt;/li>
&lt;li>&lt;strong>No &lt;code>fvOptions&lt;/code>&lt;/strong> — heat sources cannot be added.&lt;/li>
&lt;li>&lt;strong>No time-step constraint&lt;/strong> — &lt;code>getMinDeltaT()&lt;/code> returns &lt;code>GREAT&lt;/code>; no
diffusion-number based time-step limit.&lt;/li>
&lt;/ul>
&lt;h2 id="tutorials">Tutorials&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Tutorial&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>tutorials/conjugateHeatTransfer/flowOverHeatedPlate&lt;/code>&lt;/td>
&lt;td>Flow over a heated plate (pimpleFluid + transportTemperature / 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 with two fluid regions (inner, outer) and a solid wall&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/fluidStructureInteraction/heatedBeamInCrossFlow&lt;/code>&lt;/td>
&lt;td>Thermo-FSI: heated beam in cross flow (fluid: pimpleFluid + transportTemperature; solid: solidStVK + conductTemperature; DNA on &lt;code>D&lt;/code> and &lt;code>T&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>