<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>multiPhysicsFoam – Conduction</title><link>https://multiphysicsfoam.com/tags/conduction/</link><description>Recent content in Conduction on multiPhysicsFoam</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://multiphysicsfoam.com/tags/conduction/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: conductPotentialTemperature</title><link>https://multiphysicsfoam.com/docs/user-guide/region-physics/electrochemistry-models/conductpotentialtemperature/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://multiphysicsfoam.com/docs/user-guide/region-physics/electrochemistry-models/conductpotentialtemperature/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;code>conductPotentialTemperature&lt;/code> models a solid, electrically conducting region
such as the copper or aluminium current-collector tab of a lithium-ion battery
cell. It solves a charge-conservation (Laplace) equation for the electric
potential and a transient heat-conduction equation for the temperature, with
ohmic (Joule) heating from the potential gradient as the heat source. It has no
electrochemistry of its own and is intended to be coupled to an
&lt;a href="https://multiphysicsfoam.com/docs/user-guide/region-physics/electrochemistry-models/ntgk/">&lt;code>NTGK&lt;/code>&lt;/a> battery region, which provides the current through the shared
interface.&lt;/p>
&lt;p>The electrode polarity of the region is set by the &lt;code>electrode&lt;/code> keyword in
&lt;code>transportProperties&lt;/code>. It decides which potential field is used: &lt;code>phiPos&lt;/code> for
&lt;code>positive&lt;/code> and &lt;code>phiNeg&lt;/code> for &lt;code>negative&lt;/code>. These field names match the potential
fields of &lt;code>NTGK&lt;/code>, so the same field name can be coupled across the
battery/tab interface. A single region type therefore covers both tabs.&lt;/p>
&lt;h2 id="governing-equations">Governing Equations&lt;/h2>
&lt;h3 id="electric-potential">Electric potential&lt;/h3>
$$
\nabla \cdot \left( \sigma \, \nabla \phi \right) = 0
$$
&lt;p>where $\phi$ is &lt;code>phiPos&lt;/code> or &lt;code>phiNeg&lt;/code>, depending on &lt;code>electrode&lt;/code>. The equation has
no transient term, so the potential is quasi-steady within each time step.&lt;/p>
&lt;h3 id="energy">Energy&lt;/h3>
$$
\rho c_p \frac{\partial T}{\partial t} - \nabla \cdot \left( k \, \nabla T \right) = S_T
$$
&lt;h3 id="joule-heating">Joule heating&lt;/h3>
$$
S_T = \dot{Q}_\text{ohm} = \sigma \, \nabla\phi \cdot \nabla\phi
$$
&lt;p>$S_T$ is evaluated explicitly with &lt;code>fvc::grad&lt;/code> and stored in the field &lt;code>ST&lt;/code>.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Symbol&lt;/th>
&lt;th>Field / keyword&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Unit&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>$\phi$&lt;/td>
&lt;td>&lt;code>phiPos&lt;/code> / &lt;code>phiNeg&lt;/code>&lt;/td>
&lt;td>Electric potential&lt;/td>
&lt;td>V&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$T$&lt;/td>
&lt;td>&lt;code>T&lt;/code>&lt;/td>
&lt;td>Temperature&lt;/td>
&lt;td>K&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\sigma$&lt;/td>
&lt;td>&lt;code>sigma&lt;/code>&lt;/td>
&lt;td>Electric conductivity&lt;/td>
&lt;td>S/m&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\rho$&lt;/td>
&lt;td>&lt;code>rho&lt;/code>&lt;/td>
&lt;td>Density&lt;/td>
&lt;td>kg/m³&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$c_p$&lt;/td>
&lt;td>&lt;code>cp&lt;/code>&lt;/td>
&lt;td>Specific heat capacity&lt;/td>
&lt;td>J/(kg K)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$k$&lt;/td>
&lt;td>&lt;code>k&lt;/code>&lt;/td>
&lt;td>Thermal conductivity&lt;/td>
&lt;td>W/(m K)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$S_T$&lt;/td>
&lt;td>&lt;code>ST&lt;/code>&lt;/td>
&lt;td>Volumetric heat source (Joule heating)&lt;/td>
&lt;td>W/m³&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>All material properties are uniform &lt;code>dimensionedScalar&lt;/code>s.&lt;/p>
&lt;h2 id="numerical-algorithm">Numerical Algorithm&lt;/h2>
&lt;p>&lt;code>conductPotentialTemperature&lt;/code> has no region-local solve. &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> and &lt;code>meshMotionCorrector()&lt;/code> are all no-ops. Each time step
goes through the coupled-matrix path of &lt;code>multiRegionSystem&lt;/code>:&lt;/p>
&lt;ol>
&lt;li>&lt;code>setCoupledEqns(fieldName)&lt;/code> assembles one equation and registers it in
&lt;code>fvScalarMatrices&lt;/code> under the key
&lt;code>&amp;lt;field&amp;gt;&amp;lt;region&amp;gt;MeshconductPotentialTemperatureTypeEqn&lt;/code>:
&lt;ul>
&lt;li>if &lt;code>fieldName&lt;/code> is the region&amp;rsquo;s potential field (&lt;code>phiPos&lt;/code> or &lt;code>phiNeg&lt;/code>):
&lt;code>fvm::laplacian(sigma, phi)&lt;/code>, using the laplacian scheme name
&lt;code>laplacian(sigma,fai)&lt;/code>;&lt;/li>
&lt;li>if &lt;code>fieldName&lt;/code> is &lt;code>T&lt;/code>: &lt;code>fvm::ddt(rho*cp, T) - fvm::laplacian(k, T)&lt;/code>
(scheme name &lt;code>laplacian(k,T)&lt;/code>), with &lt;code>ST&lt;/code> as an explicit source;&lt;/li>
&lt;li>any other field name, including the potential field of the opposite
polarity, is ignored.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>The equations are solved by the DNA (partitioned) coupling loop for each
field listed in an interface&amp;rsquo;s &lt;code>coupledFields&lt;/code> (iteration controls come from
the &lt;code>DNA&lt;/code> block in &lt;code>multiRegionProperties&lt;/code>).&lt;/li>
&lt;li>&lt;code>postSolve()&lt;/code> calls &lt;code>correct()&lt;/code>, which recomputes &lt;code>ST&lt;/code> from the updated
potential. The new &lt;code>ST&lt;/code> is first used in the &lt;code>T&lt;/code> equation of the
&lt;strong>next&lt;/strong> time step.&lt;/li>
&lt;/ol>
&lt;p>&lt;code>getMinDeltaT()&lt;/code> returns &lt;code>GREAT&lt;/code>, so this region never limits the time step.&lt;/p>
&lt;p>&lt;code>selfCoupledFieldNames()&lt;/code> is not overridden. It returns an empty list, so the
region&amp;rsquo;s equations are assembled and solved only when their field is listed
in the &lt;code>coupledFields&lt;/code> of a partitioned interface in &lt;code>regionInterfaceProperties&lt;/code>.&lt;/p>
&lt;h2 id="sub-models">Sub-Models&lt;/h2>
&lt;p>None. The region does not read or apply &lt;code>fvOptions&lt;/code>, and there are no
turbulence, transport-model or MRF sub-models.&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>Description&lt;/th>
&lt;th>Unit&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>phiPos&lt;/code> or &lt;code>phiNeg&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>Electric potential (&lt;code>phiPos&lt;/code> if &lt;code>electrode positive;&lt;/code>, &lt;code>phiNeg&lt;/code> if &lt;code>electrode negative;&lt;/code>)&lt;/td>
&lt;td>V&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;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Optional / 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>Unit&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>ST&lt;/code>&lt;/td>
&lt;td>&lt;code>volScalarField&lt;/code>&lt;/td>
&lt;td>Joule heat source. Read if present, otherwise initialised to 0; written at write time&lt;/td>
&lt;td>W/m³&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">/&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">electrode&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">sigma&lt;/span>&lt;span class="p">,&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">k&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">solvers&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">phiPos&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="n">phiNeg&lt;/span> &lt;span class="ow">and&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">grad&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">Joule&lt;/span> &lt;span class="n">heating&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">laplacian&lt;/span> &lt;span class="n">schemes&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="transportproperties">&lt;code>transportProperties&lt;/code>&lt;/h3>
&lt;p>Every keyword is required; there are no defaults. Any &lt;code>electrode&lt;/code> value other
than &lt;code>positive&lt;/code> or &lt;code>negative&lt;/code> is a fatal error.&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">electrode negative; // positive -&amp;gt; phiPos, negative -&amp;gt; phiNeg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">rho rho [1 -3 0 0 0 0 0] 8933; // kg/m3 (copper)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cp cp [0 2 -2 -1 0 0 0] 385; // J/kg/K
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">k k [1 1 -3 -1 0 0 0] 398; // W/m/K
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sigma sigma [-1 -3 3 0 0 2 0] 59.6e6; // S/m
&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"> ( batteryRegion (NTGK) )
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ( negTabRegion (conductPotentialTemperature) )
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ( posTabRegion (conductPotentialTemperature) )
&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"> phiPos { maxCoupleIter 50; residualControl { maxJumpRes 1e-05; maxFluxRes 1e-05; } }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> phiNeg { maxCoupleIter 25; residualControl { maxJumpRes 1e-05; maxFluxRes 1e-05; } }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> T { maxCoupleIter 10; residualControl { maxJumpRes 1e-05; maxFluxRes 1e-05; } }
&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">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"> phiNeg // or phiPos, depending on electrode
&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-8;
&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"> 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-8;
&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;/code>&lt;/pre>&lt;/div>&lt;h3 id="interface-boundary-conditions">Interface boundary conditions&lt;/h3>
&lt;p>On the tab side of the battery/tab interface, the tutorial uses
&lt;code>regionCoupledScalarFlux&lt;/code> (or &lt;code>regionCoupledScalarJump&lt;/code>) with &lt;code>diffusivity&lt;/code>
set to the name of the matching &lt;code>transportProperties&lt;/code> entry: &lt;code>sigma&lt;/code> for the
potential and &lt;code>k&lt;/code> for &lt;code>T&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">toCellFromNeg
&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 regionCoupledScalarFlux;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (defaultInterface);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> diffusivity &amp;#34;sigma&amp;#34;; // &amp;#34;k&amp;#34; for T
&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 external terminal is set by an ordinary boundary condition on the potential:
&lt;code>fixedValue 0&lt;/code> on the negative tab and &lt;code>fixedGradient&lt;/code> (applied current) on the
positive tab.&lt;/p>
&lt;h2 id="coupling">Coupling&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Interface type&lt;/th>
&lt;th>Partner region 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>defaultInterface&lt;/code>&lt;/td>
&lt;td>&lt;code>NTGK&lt;/code>&lt;/td>
&lt;td>&lt;code>phiPos&lt;/code> (positive tab) or &lt;code>phiNeg&lt;/code> (negative tab), &lt;code>T&lt;/code>&lt;/td>
&lt;td>partitioned (DNA)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>No interface type contains code specific to this region type. Coupling goes
through the generic &lt;code>regionCoupledScalarJump&lt;/code> / &lt;code>regionCoupledScalarFlux&lt;/code>
patch fields, which read &lt;code>sigma&lt;/code> / &lt;code>k&lt;/code> from the region&amp;rsquo;s &lt;code>transportProperties&lt;/code>.
An interface&amp;rsquo;s &lt;code>coupledFields&lt;/code> may list both &lt;code>phiPos&lt;/code> and &lt;code>phiNeg&lt;/code>, because the
region ignores the potential field of the opposite polarity.&lt;/p>
&lt;h2 id="known-limitations">Known Limitations&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Static mesh only&lt;/strong>: &lt;code>meshMotionCorrector()&lt;/code> is a no-op.&lt;/li>
&lt;li>&lt;strong>No &lt;code>fvOptions&lt;/code>&lt;/strong>: additional sources cannot be added to the potential or
temperature equation.&lt;/li>
&lt;li>&lt;strong>Uniform, constant properties&lt;/strong>: &lt;code>sigma&lt;/code>, &lt;code>rho&lt;/code>, &lt;code>cp&lt;/code> and &lt;code>k&lt;/code> are
&lt;code>dimensionedScalar&lt;/code>s; temperature-dependent or spatially varying properties
are not supported.&lt;/li>
&lt;li>&lt;strong>Quasi-steady potential&lt;/strong>: the potential equation has no transient term. The
member &lt;code>C_&lt;/code> (a specific capacitance meant for a transient term) is declared
and initialised to 1 but never used.&lt;/li>
&lt;li>&lt;strong>Explicit, lagged Joule heating&lt;/strong>: &lt;code>ST&lt;/code> is updated only in &lt;code>postSolve()&lt;/code>, so
the temperature equation uses the source from the previous time step. &lt;code>ST&lt;/code> is
not computed at construction, so the first time step uses the initial &lt;code>ST&lt;/code>
(0 unless an &lt;code>ST&lt;/code> field is supplied).&lt;/li>
&lt;li>&lt;strong>Not self-coupled&lt;/strong>: with an empty &lt;code>selfCoupledFieldNames()&lt;/code>, the region
cannot be run standalone (e.g. in singleRegionMode). Its fields are only
solved through DNA coupling.&lt;/li>
&lt;li>&lt;strong>Monolithic coupling not supported&lt;/strong>: the only tutorial runs partitioned
coupling only (its &lt;code>Allrun -m&lt;/code> reports monolithic coupling as unsupported).&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/electrochemistry/NTGKBatteryWithTabs&lt;/code>&lt;/td>
&lt;td>Prismatic NTGK battery cell with copper negative tab and aluminium positive tab (&lt;code>conductPotentialTemperature&lt;/code>), coupled via &lt;code>defaultInterface&lt;/code> (&lt;code>./Allrun -p -S&lt;/code>)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="references">References&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>Kwon, K. H. et al., &lt;em>A two-dimensional modeling of a lithium-polymer battery&lt;/em>,
Journal of Power Sources 163(1), 151–157 (2006).
DOI: &lt;a href="https://doi.org/10.1016/j.jpowsour.2005.12.051">10.1016/j.jpowsour.2005.12.051&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Kim, G.-H., Pesaran, A., Spotnitz, R., &lt;em>A three-dimensional thermal abuse model
for lithium-ion cells&lt;/em>, Journal of Power Sources 170(2), 476–489 (2007).
DOI: &lt;a href="https://doi.org/10.1016/j.jpowsour.2007.04.018">10.1016/j.jpowsour.2007.04.018&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>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;/p>
&lt;/li>
&lt;/ul></description></item><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>