<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>multiPhysicsFoam – Solid</title><link>https://multiphysicsfoam.com/tags/solid/</link><description>Recent content in Solid on multiPhysicsFoam</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://multiphysicsfoam.com/tags/solid/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: conductTemperature</title><link>https://multiphysicsfoam.com/docs/user-guide/region-physics/heat-transfer-models/conducttemperature/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://multiphysicsfoam.com/docs/user-guide/region-physics/heat-transfer-models/conducttemperature/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;code>conductTemperature&lt;/code> models transient heat conduction in a solid. It solves a
single energy equation for the temperature &lt;code>T&lt;/code>, using density &lt;code>rho&lt;/code>, specific
heat &lt;code>cv&lt;/code> and thermal conductivity &lt;code>kappa&lt;/code>. There is no velocity field, no
advection and no pressure-velocity coupling. It is meant to be the solid side
of a conjugate heat transfer problem, coupled to a fluid region (usually
&lt;code>pimpleFluid transportTemperature&lt;/code>) through a &lt;code>heatTransferInterface&lt;/code>. It can
also be stacked with a solid mechanics region type (e.g. &lt;code>solidStVK&lt;/code>) for
thermo-FSI.&lt;/p>
&lt;h2 id="governing-equations">Governing Equations&lt;/h2>
&lt;h3 id="energy-heat-conduction">Energy (heat conduction)&lt;/h3>
$$
\frac{\partial \left( \rho \, c_v \, T \right)}{\partial t}
= \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>$\rho$&lt;/td>
&lt;td>Density&lt;/td>
&lt;td>kg/m³&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$c_v$&lt;/td>
&lt;td>Specific heat capacity&lt;/td>
&lt;td>J/(kg K) = m²/(s² K)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\kappa$&lt;/td>
&lt;td>Thermal conductivity&lt;/td>
&lt;td>W/(m K) = kg m/(s³ K)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The equation is assembled as&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="n">fvm&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="n">ddt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">rho_&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="n">cv_&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">T&lt;/span>&lt;span class="p">())&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">fvm&lt;/span>&lt;span class="o">::&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 class="s">&amp;#34;laplacian(kappa,T)&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>so &lt;code>fvSchemes&lt;/code> must provide a &lt;code>laplacian(kappa,T)&lt;/code> entry (or a &lt;code>default&lt;/code>
laplacian scheme). The equation has no source term.&lt;/p>
&lt;h2 id="numerical-algorithm">Numerical Algorithm&lt;/h2>
&lt;p>&lt;code>conductTemperature&lt;/code> does not run its own solve loop. &lt;code>usesPIMPLE()&lt;/code> returns
&lt;code>false&lt;/code>. &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. The temperature is solved only when &lt;code>multiRegionSystem&lt;/code> asks for it:&lt;/p>
&lt;ol>
&lt;li>The region does &lt;strong>not&lt;/strong> override &lt;code>selfCoupledFieldNames()&lt;/code>, so the base
default (an empty list) applies. &lt;code>T&lt;/code> is therefore solved &lt;strong>only&lt;/strong> when it
appears as a partitioned-coupled field, i.e. when the case has a
&lt;code>DNA { T { ... } }&lt;/code> entry in &lt;code>multiRegionProperties&lt;/code> and &lt;code>T&lt;/code> is listed in
&lt;code>coupledFields&lt;/code> of an interface in &lt;code>regionInterfaceProperties&lt;/code>.&lt;/li>
&lt;li>Inside each DNA coupling iteration,
&lt;code>multiRegionSystem::assembleAndSolveEqns&amp;lt;fvMatrix, scalar&amp;gt;(&amp;quot;T&amp;quot;)&lt;/code> calls
&lt;code>setCoupledEqns(&amp;quot;T&amp;quot;)&lt;/code>. This assembles the equation above and stores it
under the key &lt;code>T&amp;lt;regionName&amp;gt;MeshconductTemperatureTypeEqn&lt;/code>. The equation is
then relaxed (&lt;code>relaxationFactors&lt;/code> in &lt;code>fvSolution&lt;/code>) and solved. The region
Picard corrector (&lt;code>maxCorr&lt;/code> / &lt;code>relTol&lt;/code> / &lt;code>tolerance&lt;/code> per field in
&lt;code>fvSolution&lt;/code>) can re-assemble and re-solve it within one DNA iteration.
&lt;code>setCoupledEqns&lt;/code> ignores its &lt;code>fieldName&lt;/code> argument and always assembles the
&lt;code>T&lt;/code> equation.&lt;/li>
&lt;li>&lt;code>correct()&lt;/code> only calls &lt;code>kappa.correctBoundaryConditions()&lt;/code>.&lt;/li>
&lt;li>&lt;code>getMinDeltaT()&lt;/code> returns &lt;code>GREAT&lt;/code>, so this region never limits the global
time step.&lt;/li>
&lt;/ol>
&lt;h2 id="sub-models">Sub-Models&lt;/h2>
&lt;p>None. The region does not read &lt;code>fvOptions&lt;/code>, a thermophysical model or
turbulence. All material properties come from &lt;code>transportProperties&lt;/code> or from
optional field files.&lt;/p>
&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>Read mode&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Unit&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>T&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>&lt;code>MUST_READ&lt;/code>, &lt;code>AUTO_WRITE&lt;/code>&lt;/td>
&lt;td>Temperature&lt;/td>
&lt;td>K&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>&lt;code>READ_IF_PRESENT&lt;/code>, &lt;code>AUTO_WRITE&lt;/code>&lt;/td>
&lt;td>Thermal conductivity. If there is no file, a uniform field is created from &lt;code>transportProperties&lt;/code> with &lt;code>calculated&lt;/code> patches.&lt;/td>
&lt;td>W/(m K)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>rho&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>&lt;code>READ_IF_PRESENT&lt;/code>, &lt;code>NO_WRITE&lt;/code>&lt;/td>
&lt;td>Density. If there is no file, it is uniform from &lt;code>transportProperties&lt;/code>.&lt;/td>
&lt;td>kg/m³&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>cv&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>&lt;code>READ_IF_PRESENT&lt;/code>, &lt;code>NO_WRITE&lt;/code>&lt;/td>
&lt;td>Specific heat. If there is no file, it is uniform from &lt;code>transportProperties&lt;/code>.&lt;/td>
&lt;td>m²/(s² K)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;code>T&lt;/code> and &lt;code>kappa&lt;/code> are created through &lt;code>lookupOrRead&lt;/code>. If a sibling region type
on the same mesh has already registered a field with that name, that field is
reused. &lt;code>rho&lt;/code> and &lt;code>cv&lt;/code> are always constructed by this region.&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">cv&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 class="n">dimensioned&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">relaxationFactors&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="ow">and&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 class="n">schemes&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="mi">0&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">T&lt;/span> &lt;span class="err">–&lt;/span> &lt;span class="n">temperature&lt;/span> &lt;span class="n">with&lt;/span> &lt;span class="n">coupled&lt;/span> &lt;span class="n">BC&lt;/span> &lt;span class="n">on&lt;/span> &lt;span class="n">the&lt;/span> &lt;span class="n">interface&lt;/span> &lt;span class="n">patch&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 looked up as &lt;code>dimensionedScalar&lt;/code> and are required, even
when a field file overrides them:&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.0;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cv cv [0 2 -2 -1 0 0 0] 100.0;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">kappa kappa [1 1 -3 -1 0 0 0] 100.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 PCG;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> preconditioner DIC;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> tolerance 1e-15;
&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"> minIter 2;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> maxIter 250;
&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="interface-boundary-condition-on-t">Interface boundary condition on &lt;code>T&lt;/code>&lt;/h3>
&lt;p>On the solid side of a partitioned &lt;code>heatTransferInterface&lt;/code> (flux side; the
fluid side then uses &lt;code>regionCoupledTemperatureJump&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">top
&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 regionCoupledHeatFlux;
&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"> 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 coupled patch fields look up the diffusivity field &lt;code>kappa&lt;/code> by default (set
the patch keyword &lt;code>diffusivity&lt;/code> to use another name). This matches the field
that &lt;code>conductTemperature&lt;/code> registers.&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> (temperature jump / heat flux via &lt;code>regionCoupledTemperatureJump&lt;/code> / &lt;code>regionCoupledHeatFlux&lt;/code>, using &lt;code>kappa&lt;/code>)&lt;/td>
&lt;td>partitioned (DNA)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;code>heatTransferInterface&lt;/code> only provides the &lt;code>jumpCoefficient&lt;/code> (from
&lt;code>heatTransferInterfaceCoeffs&lt;/code>). The patch fields do the actual transfer.
Monolithic coupling is commented out in &lt;code>multiRegionSystem::solve()&lt;/code>, so
only partitioned coupling is available at the moment.&lt;/p>
&lt;h2 id="known-limitations">Known Limitations&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Coupled use only.&lt;/strong> &lt;code>selfCoupledFieldNames()&lt;/code> is not overridden, so &lt;code>T&lt;/code>
is never solved unless it is DNA-coupled. A standalone (single-region)
&lt;code>conductTemperature&lt;/code> case does not advance &lt;code>T&lt;/code>. Use &lt;code>laplacianFluid&lt;/code> for
standalone conduction.&lt;/li>
&lt;li>&lt;strong>No source terms.&lt;/strong> &lt;code>fvOptions&lt;/code> are not read or applied.&lt;/li>
&lt;li>&lt;strong>Static mesh only.&lt;/strong> &lt;code>meshMotionCorrector()&lt;/code> is a no-op and the equation
contains no mesh-flux terms.&lt;/li>
&lt;li>&lt;strong>No time-step control.&lt;/strong> &lt;code>getMinDeltaT()&lt;/code> returns &lt;code>GREAT&lt;/code>; &lt;code>deltaT&lt;/code> must be
chosen by the user or limited by other regions.&lt;/li>
&lt;li>&lt;strong>Constant &lt;code>rho&lt;/code> and &lt;code>cv&lt;/code> in time.&lt;/strong> They are read once and never updated
(&lt;code>NO_WRITE&lt;/code>). Only &lt;code>kappa&lt;/code> gets a boundary refresh in &lt;code>correct()&lt;/code>, and its
values are never recomputed (for example as a function of &lt;code>T&lt;/code>).&lt;/li>
&lt;li>&lt;strong>No non-orthogonal corrector loop.&lt;/strong> The coupled solve path has no
&lt;code>correctNonOrthogonal()&lt;/code> loop, so &lt;code>nNonOrthogonalCorrectors&lt;/code> in
&lt;code>fvSolution&lt;/code> is not used by this region.&lt;/li>
&lt;li>&lt;strong>No output/post-processing.&lt;/strong> &lt;code>postSolve()&lt;/code> is a no-op. No derived fields
(e.g. heat flux) are written.&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/conjugateHeatTransfer/flowOverHeatedPlate&lt;/code>&lt;/td>
&lt;td>Flow over a heated plate (&lt;code>pimpleFluid transportTemperature&lt;/code> + &lt;code>conductTemperature&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/conjugateHeatTransfer/ShellAndTubeHeatExchanger&lt;/code>&lt;/td>
&lt;td>Shell-and-tube heat exchanger, two fluid regions + &lt;code>conductTemperature&lt;/code> solid&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/fluidStructureInteraction/heatedBeamInCrossFlow&lt;/code>&lt;/td>
&lt;td>Heated beam in cross-flow, thermo-FSI (&lt;code>solidStVK conductTemperature&lt;/code> solid)&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>