<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>multiPhysicsFoam – Conjugate-Heat-Transfer</title><link>https://multiphysicsfoam.com/tags/conjugate-heat-transfer/</link><description>Recent content in Conjugate-Heat-Transfer on multiPhysicsFoam</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://multiphysicsfoam.com/tags/conjugate-heat-transfer/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: heatTransferInterface</title><link>https://multiphysicsfoam.com/docs/user-guide/interface-physics/heattransferinterface/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://multiphysicsfoam.com/docs/user-guide/interface-physics/heattransferinterface/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;code>heatTransferInterface&lt;/code> couples the temperature field &lt;code>T&lt;/code> of two regions that
share an interface, usually a fluid (&lt;code>pimpleFluid transportTemperature&lt;/code>) and a
solid (&lt;code>conductTemperature&lt;/code>). It is used for conjugate heat transfer (CHT)
and, stacked with &lt;code>fsiInterface&lt;/code> on the same patch pair, for thermo-FSI. The
interface class itself holds only one parameter, the constant
&lt;code>jumpCoefficient&lt;/code>. All transfer work happens in the two partitioned boundary
conditions &lt;code>regionCoupledTemperatureJump&lt;/code> and &lt;code>regionCoupledHeatFlux&lt;/code>, which
are solved inside the DNA coupling loop of &lt;code>multiRegionSystem&lt;/code>.&lt;/p>
&lt;h2 id="interface-conditions">Interface Conditions&lt;/h2>
&lt;p>Let side $A$ carry the &lt;code>regionCoupledTemperatureJump&lt;/code> BC (Dirichlet side) and
side $B$ carry the &lt;code>regionCoupledHeatFlux&lt;/code> BC (Neumann side). These sides are
set by the BC types in &lt;code>0/&amp;lt;region&amp;gt;/T&lt;/code>. They do not depend on the order in
&lt;code>coupledPatchPair&lt;/code>.&lt;/p>
&lt;h3 id="jump-condition">Jump condition&lt;/h3>
$$
T_A = c \, T_B \quad \text{on } \Gamma
$$
&lt;p>In the code, the jump BC sets its value to
$T_B + \texttt{valueJump}$ with $\texttt{valueJump} = T_B\,(c - 1)$, where
$T_B$ is the neighbour patch value interpolated onto side $A$. With the
default tutorial value $c = 1$ this is plain temperature continuity.&lt;/p>
&lt;h3 id="flux-condition">Flux condition&lt;/h3>
$$
\kappa_A \nabla T_A \cdot \mathbf{n}_A + \kappa_B \nabla T_B \cdot \mathbf{n}_B = 0 \quad \text{on } \Gamma
$$
&lt;p>The flux BC sets its gradient to&lt;/p>
$$
\left.\frac{\partial T}{\partial n}\right|_B = -\frac{\left(\kappa_A \, \partial_n T_A\right)_{A \to B}}{\kappa_B}
$$
&lt;p>where $\left(\kappa_A \, \partial_n T_A\right)_{A \to B}$ is the flux of the jump side
(&lt;code>flux()&lt;/code> = &lt;code>snGrad() * kappa&lt;/code>), interpolated onto side $B$. The flux
jump of &lt;code>regionCoupledHeatFlux&lt;/code> is always zero (&lt;code>fluxJump()&lt;/code> returns &lt;code>*this * 0&lt;/code>).&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>$T$&lt;/td>
&lt;td>Temperature (coupled field)&lt;/td>
&lt;td>K&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$c$&lt;/td>
&lt;td>&lt;code>jumpCoefficient&lt;/code> (dimensionless, uniform, constant)&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\kappa$&lt;/td>
&lt;td>Diffusivity looked up by the BC (default field name &lt;code>kappa&lt;/code>)&lt;/td>
&lt;td>W/(m K) (see note below)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{n}_A, \mathbf{n}_B$&lt;/td>
&lt;td>Outward patch normals of side $A$ / $B$&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\Gamma$&lt;/td>
&lt;td>Interface (coupled patch pair)&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The flux balance only means energy conservation when $\kappa$ has the same
units on both sides. The code does not check this; see Known Limitations.&lt;/p>
&lt;h2 id="implementation">Implementation&lt;/h2>
&lt;p>&lt;code>heatTransferInterface&lt;/code> derives from &lt;code>regionInterfaceType&lt;/code> and is registered in
its &lt;code>IOdictionary&lt;/code> run-time selection table. At run time:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Construction&lt;/strong> (&lt;code>regionInterfaceType&lt;/code> base): the object is named
&lt;code>&amp;lt;regionA&amp;gt;&amp;lt;PatchA&amp;gt;&amp;lt;RegionB&amp;gt;&amp;lt;PatchB&amp;gt;HeatTransferInterface&lt;/code>, for example
&lt;code>fluidInterfaceSolidTopHeatTransferInterface&lt;/code>. The base class builds global
patches for both sides and creates the interface-to-interface mapping
immediately (&lt;code>interfaceTransferMethod&lt;/code>, default &lt;code>AMI&lt;/code>; see Case Setup).
&lt;code>heatTransferInterface&lt;/code> then reads
&lt;code>heatTransferInterfaceCoeffs/jumpCoefficient&lt;/code>.&lt;/li>
&lt;li>&lt;strong>&lt;code>correct()&lt;/code>&lt;/strong>: no-op. It is called from &lt;code>regionInterfaceType::update()&lt;/code>,
which each coupled BC calls in &lt;code>updateCoeffs()&lt;/code>. Because
&lt;code>heatTransferInterface&lt;/code> creates no &lt;code>faMesh&lt;/code>, &lt;code>update()&lt;/code> does no curvature work.&lt;/li>
&lt;li>&lt;strong>&lt;code>getMinDeltaT()&lt;/code>&lt;/strong>: returns &lt;code>GREAT&lt;/code>. The interface never limits the time
step.&lt;/li>
&lt;li>&lt;strong>&lt;code>info()&lt;/code>&lt;/strong>: empty.&lt;/li>
&lt;li>&lt;strong>Mapping update&lt;/strong>: when the interface reports &lt;code>changing()&lt;/code>,
&lt;code>regionInterfaceTypeList::update()&lt;/code> calls
&lt;code>updateInterpolatorAndGlobalPatches()&lt;/code>. The mapping and global patches are
rebuilt every &lt;code>interpolatorUpdateFrequency&lt;/code> time steps (&lt;code>0&lt;/code> disables this).&lt;/li>
&lt;li>&lt;strong>Boundary conditions&lt;/strong> (in each DNA iteration, when &lt;code>T&lt;/code> is assembled and
solved by &lt;code>multiRegionSystem&lt;/code>):
&lt;ul>
&lt;li>&lt;code>regionCoupledTemperatureJump::updateCoeffs()&lt;/code> looks up the neighbour &lt;code>T&lt;/code>,
interpolates its patch values, adds &lt;code>valueJump()&lt;/code>, applies the
acceleration model (&lt;code>accType&lt;/code>, &lt;code>relax&lt;/code>) and fixes the value.&lt;/li>
&lt;li>&lt;code>regionCoupledHeatFlux::updateCoeffs()&lt;/code> asks the neighbour
jump BC for &lt;code>flux()&lt;/code>, interpolates it, negates it, divides it by the local
&lt;code>kappa&lt;/code>, applies the acceleration model and fixes the gradient.&lt;/li>
&lt;li>&lt;code>regionCoupledTemperatureJump&lt;/code> looks up the interface found through its
own &lt;code>interfaceType&lt;/code> entry as a &lt;code>heatTransferInterface&lt;/code> (to read
&lt;code>jumpCoefficient&lt;/code>) and stops with a &lt;code>FatalError&lt;/code> if it is another type.
&lt;code>regionCoupledHeatFlux&lt;/code> defines the same check but never calls it.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Residuals&lt;/strong>: the DNA loop evaluates the jump residual
$|T_A - T_B - \texttt{valueJump}|$ and the flux residual
$|q_B + q_{A\to B} - 0|$ through the generic jump/flux BCs. These are checked
against &lt;code>maxJumpRes&lt;/code> / &lt;code>maxFluxRes&lt;/code>.&lt;/li>
&lt;/ol>
&lt;h3 id="diffusivity-lookup">Diffusivity lookup&lt;/h3>
&lt;p>&lt;code>regionCoupledTemperatureJump&lt;/code> and &lt;code>regionCoupledHeatFlux&lt;/code> override
&lt;code>diffusivityName()&lt;/code>. It returns the patch keyword &lt;code>diffusivity&lt;/code> if that is
set, otherwise &lt;code>kappa&lt;/code>. &lt;code>diffCoeff()&lt;/code> then:&lt;/p>
&lt;ol>
&lt;li>uses the patch values of the &lt;code>volScalarField&lt;/code> with that name, if one is
registered on the region mesh;&lt;/li>
&lt;li>otherwise reads a uniform &lt;code>dimensionedScalar&lt;/code> with that name from the
region&amp;rsquo;s &lt;code>transportProperties&lt;/code> (the dictionary must be registered on the mesh).&lt;/li>
&lt;/ol>
&lt;h2 id="coupled-fields">Coupled Fields&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Required boundary conditions (side A / side B)&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>T&lt;/code>&lt;/td>
&lt;td>&lt;code>regionCoupledTemperatureJump&lt;/code> / &lt;code>regionCoupledHeatFlux&lt;/code>&lt;/td>
&lt;td>Temperature. Value continuity (×&lt;code>jumpCoefficient&lt;/code>) on the jump side, heat-flux continuity on the flux side.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Fields needed but not created by the interface:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Where it must exist&lt;/th>
&lt;th>Source&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>T&lt;/code>&lt;/td>
&lt;td>both regions, same name&lt;/td>
&lt;td>region type (e.g. &lt;code>transportTemperature&lt;/code>, &lt;code>conductTemperature&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>kappa&lt;/code> (or the name given by &lt;code>diffusivity&lt;/code>)&lt;/td>
&lt;td>both regions, as &lt;code>volScalarField&lt;/code> or as a &lt;code>transportProperties&lt;/code> entry&lt;/td>
&lt;td>region type or &lt;code>transportProperties&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The interface creates no fields. The BC keyword &lt;code>neighbourFieldName&lt;/code> is read
and written by &lt;code>interfaceToInterfaceCoupleManager&lt;/code>, but the jump/flux BCs always
look up the neighbour field by the local field name.&lt;/p>
&lt;h2 id="compatible-region-types">Compatible Region Types&lt;/h2>
&lt;p>The region types below assemble a &lt;code>T&lt;/code> equation in &lt;code>setCoupledEqns&lt;/code> and/or
register a diffusivity the BCs can find. Rows marked &lt;em>tutorial&lt;/em> are run in
the shipped tutorials. The other rows follow from the code and are untested.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Region type (side A)&lt;/th>
&lt;th>Region type (side B)&lt;/th>
&lt;th>Notes&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>pimpleFluid transportTemperature&lt;/code>&lt;/td>
&lt;td>&lt;code>conductTemperature&lt;/code>&lt;/td>
&lt;td>&lt;em>Tutorial&lt;/em> (&lt;code>flowOverHeatedPlate&lt;/code>, &lt;code>ShellAndTubeHeatExchanger&lt;/code>). Both register &lt;code>kappa&lt;/code> (W/(m K)). Fluid takes the jump BC, solid the flux BC.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>pimpleFluid transportTemperature&lt;/code>&lt;/td>
&lt;td>&lt;code>solidStVK conductTemperature&lt;/code>&lt;/td>
&lt;td>&lt;em>Tutorial&lt;/em> (&lt;code>heatedBeamInCrossFlow&lt;/code>), with &lt;code>fsiInterface&lt;/code> on the same patch pair. &lt;code>T&lt;/code>/&lt;code>kappa&lt;/code> come from &lt;code>conductTemperature&lt;/code>, not &lt;code>solidStVK&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>rhoPimpleFluid&lt;/code>&lt;/td>
&lt;td>&lt;code>conductTemperature&lt;/code>&lt;/td>
&lt;td>Untested. &lt;code>rhoPimpleFluid&lt;/code> registers &lt;code>kappa&lt;/code> from &lt;code>turbulence-&amp;gt;kappaEff()&lt;/code> and assembles a &lt;code>T&lt;/code> equation in &lt;code>setCoupledEqns&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>laplacianFluid&lt;/code>&lt;/td>
&lt;td>any of the above&lt;/td>
&lt;td>Untested. &lt;code>laplacianFluid&lt;/code> registers &lt;code>DT&lt;/code> (m²/s), not &lt;code>kappa&lt;/code>. Set &lt;code>diffusivity DT;&lt;/code> on its patch, or provide &lt;code>kappa&lt;/code> in its &lt;code>transportProperties&lt;/code>. Mixing &lt;code>DT&lt;/code> with a &lt;code>kappa&lt;/code> in W/(m K) breaks flux consistency.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>conductPotentialTemperature&lt;/code>&lt;/td>
&lt;td>any of the above&lt;/td>
&lt;td>Untested. The conductivity is a &lt;code>dimensionedScalar&lt;/code> &lt;code>k&lt;/code> in &lt;code>transportProperties&lt;/code> (not a field). Set &lt;code>diffusivity k;&lt;/code> so the fallback lookup finds it.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>See &lt;code>docs/regions/conductTemperature.md&lt;/code>, &lt;code>docs/regions/transportTemperature.md&lt;/code>,
&lt;code>docs/regions/pimpleFluid.md&lt;/code>, &lt;code>docs/regions/rhoPimpleFluid.md&lt;/code>,
&lt;code>docs/regions/solidStVK.md&lt;/code>, &lt;code>docs/regions/laplacianFluid.md&lt;/code> and
&lt;code>docs/regions/conductPotentialTemperature.md&lt;/code>.&lt;/p>
&lt;h2 id="case-setup">Case Setup&lt;/h2>
&lt;h3 id="regioninterfaceproperties-entry">&lt;code>regionInterfaceProperties&lt;/code> entry&lt;/h3>
&lt;p>From &lt;code>tutorials/conjugateHeatTransfer/flowOverHeatedPlate/constant/regionInterfacePropertiesPartitioned&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">partitionedCoupledPatches
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> fluidsolid
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&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"> coupledPatchPair
&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 interface)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> (solid 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"> coupledFields
&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"> heatTransferInterfaceCoeffs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> // Jump coefficient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> jumpCoefficient jumpCoefficient [ 0 0 0 0 0 0 0 ] 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"> }
&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">monolithicCoupledPatches
&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">curvatureCorrectedSurfacePatches 0();
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">interpolatorUpdateFrequency 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">interfaceTransferMethod directMap;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">directMapCoeffs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Thermo-FSI stacks both interface types on one patch pair
(&lt;code>tutorials/fluidStructureInteraction/heatedBeamInCrossFlow/constant/regionInterfaceProperties&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">fluidsolid
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (fsiInterface heatTransferInterface);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> coupledPatchPair
&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 interfaceShadow)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> (solid 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"> coupledFields
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> (
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> D
&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"> coupled yes;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> fsiInterfaceCoeffs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> heatTransferInterfaceCoeffs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> // Jump coefficient
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> jumpCoefficient jumpCoefficient [ 0 0 0 0 0 0 0 ] 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">}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="keywords">Keywords&lt;/h4>
&lt;p>Per-interface entry (inside &lt;code>partitionedCoupledPatches&lt;/code>):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Keyword&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Default&lt;/th>
&lt;th>Read by&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>interfaceType&lt;/code>&lt;/td>
&lt;td>yes&lt;/td>
&lt;td>–&lt;/td>
&lt;td>&lt;code>regionInterfaceTypeList&lt;/code>&lt;/td>
&lt;td>List of interface types; one object is created per entry.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>coupledPatchPair&lt;/code>&lt;/td>
&lt;td>yes&lt;/td>
&lt;td>–&lt;/td>
&lt;td>&lt;code>regionInterfaceTypeList&lt;/code>&lt;/td>
&lt;td>&lt;code>((regionA patchA) (regionB patchB))&lt;/code>; must have exactly two entries.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>coupledFields&lt;/code>&lt;/td>
&lt;td>yes&lt;/td>
&lt;td>–&lt;/td>
&lt;td>&lt;code>regionInterfaceTypeList&lt;/code>&lt;/td>
&lt;td>Fields coupled across this interface (&lt;code>T&lt;/code>).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>heatTransferInterfaceCoeffs&lt;/code>&lt;/td>
&lt;td>yes&lt;/td>
&lt;td>–&lt;/td>
&lt;td>&lt;code>heatTransferInterface&lt;/code>&lt;/td>
&lt;td>Sub-dictionary; &lt;code>subDict&lt;/code> fails if it is missing.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>heatTransferInterfaceCoeffs/jumpCoefficient&lt;/code>&lt;/td>
&lt;td>yes&lt;/td>
&lt;td>– (no default in code)&lt;/td>
&lt;td>&lt;code>heatTransferInterface&lt;/code>&lt;/td>
&lt;td>Dimensionless &lt;code>dimensionedScalar&lt;/code> $c$, with $T_A = c\,T_B$.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>coupled&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>true&lt;/code>&lt;/td>
&lt;td>&lt;code>regionInterfaceType&lt;/code>&lt;/td>
&lt;td>Turns the coupling on/off. When off, the coupled BCs skip &lt;code>updateCoeffs()&lt;/code> and the residuals are zero.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>couplingStartTime&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>0&lt;/code>&lt;/td>
&lt;td>&lt;code>regionInterfaceType&lt;/code>&lt;/td>
&lt;td>If &lt;code>&amp;gt; 0&lt;/code> and &lt;code>coupled&lt;/code> is off, coupling is turned on once &lt;code>time &amp;gt;= couplingStartTime&lt;/code>.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Top-level entries (shared by all interfaces in the file):&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Keyword&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Default&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>interfaceTransferMethod&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>AMI&lt;/code>&lt;/td>
&lt;td>Patch-to-patch mapping: &lt;code>AMI&lt;/code> or &lt;code>directMap&lt;/code> (&lt;code>RBF&lt;/code> is not compiled; it needs Eigen).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>&amp;lt;interfaceTransferMethod&amp;gt;Coeffs&lt;/code>&lt;/td>
&lt;td>yes&lt;/td>
&lt;td>–&lt;/td>
&lt;td>Must exist (&lt;code>subDict&lt;/code>), even when empty. Neither &lt;code>AMI&lt;/code> nor &lt;code>directMap&lt;/code> reads any entries from it.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>interpolatorUpdateFrequency&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>1&lt;/code>&lt;/td>
&lt;td>Rebuild period (in time steps) of the mapping for changing interfaces; &lt;code>0&lt;/code> = never.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>curvatureCorrectedSurfacePatches&lt;/code>&lt;/td>
&lt;td>yes&lt;/td>
&lt;td>–&lt;/td>
&lt;td>Read by the base class for every interface type; use &lt;code>0()&lt;/code> for heat transfer.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="multiregionproperties-dna-entry">&lt;code>multiRegionProperties&lt;/code> DNA entry&lt;/h3>
&lt;p>From &lt;code>tutorials/conjugateHeatTransfer/flowOverHeatedPlate/constant/multiRegionProperties&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">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="boundary-conditions">Boundary conditions&lt;/h3>
&lt;p>Jump side, fluid
(&lt;code>tutorials/conjugateHeatTransfer/flowOverHeatedPlate/0/fluid/orig/partitioned/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">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">
&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">
&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>Flux side, solid
(&lt;code>tutorials/conjugateHeatTransfer/flowOverHeatedPlate/0/solid/orig/partitioned/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">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">
&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>Patch keywords common to both BCs:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Keyword&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Default&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>interfaceType&lt;/code>&lt;/td>
&lt;td>yes&lt;/td>
&lt;td>–&lt;/td>
&lt;td>Interface type list. Only the &lt;strong>first&lt;/strong> entry is used to find the interface (matched by type plus local region/patch), so &lt;code>heatTransferInterface&lt;/code> must come first.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>diffusivity&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>kappa&lt;/code>&lt;/td>
&lt;td>Name of the diffusivity field / &lt;code>transportProperties&lt;/code> entry.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>accType&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>fixed&lt;/code> (with a warning)&lt;/td>
&lt;td>Acceleration model: &lt;code>fixed&lt;/code>, &lt;code>aitken&lt;/code>, &lt;code>IQNILS&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>relax&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>1.0&lt;/code>&lt;/td>
&lt;td>Initial relaxation factor of the acceleration model.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>nonOrthCorr&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;td>Non-orthogonal correction of the coupled &lt;code>snGrad&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>secondOrder&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;td>Second-order correction of the coupled &lt;code>snGrad&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>neighbourFieldName&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>local field name&lt;/td>
&lt;td>Read and written, but not used by these two BCs (see above).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>value&lt;/code>&lt;/td>
&lt;td>–&lt;/td>
&lt;td>–&lt;/td>
&lt;td>Initial patch value.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The tutorials put the jump BC on the fluid side and the flux BC on the solid
side. The opposite assignment is not forbidden by the code, but the flux BC
&lt;code>refCast&lt;/code>s the neighbour patch field to &lt;code>genericRegionCoupledJumpFvPatchField&lt;/code>,
so the two sides must use one jump BC and one flux BC.&lt;/p>
&lt;h2 id="known-limitations">Known Limitations&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Partitioned only.&lt;/strong> The monolithic solve in &lt;code>multiRegionSystem::solve()&lt;/code>
is commented out (&amp;ldquo;need to be ported&amp;rdquo;). The &lt;code>*Monolithic&lt;/code> variants of
&lt;code>flowOverHeatedPlate&lt;/code> and &lt;code>ShellAndTubeHeatExchanger&lt;/code> (BCs
&lt;code>monolithicTemperature&lt;/code>, &lt;code>monolithicThermalDiffusivitySlave&lt;/code>) are compiled
but do not drive a monolithic solve at present.&lt;/li>
&lt;li>&lt;strong>Constant, uniform jump coefficient.&lt;/strong> &lt;code>jumpCoefficient&lt;/code> is a single
&lt;code>dimensionedScalar&lt;/code>, read once. It cannot vary in space or time. The
generic jump BC&amp;rsquo;s &lt;code>jumpCoefficient&lt;/code> patch keyword (field lookup) is not used
by &lt;code>regionCoupledTemperatureJump&lt;/code>, which overrides &lt;code>valueJump()&lt;/code>.&lt;/li>
&lt;li>&lt;strong>No interface physics.&lt;/strong> &lt;code>correct()&lt;/code> and &lt;code>info()&lt;/code> are empty, and
&lt;code>getMinDeltaT()&lt;/code> returns &lt;code>GREAT&lt;/code>. There is no contact resistance, no
radiation and no interfacial heat source (&lt;code>fluxJump()&lt;/code> is always zero).&lt;/li>
&lt;li>&lt;strong>No unit/consistency check on the diffusivity.&lt;/strong> The flux balance uses
whatever field the &lt;code>diffusivity&lt;/code> name resolves to on each side. For
example, &lt;code>laplacianFluid&lt;/code> provides &lt;code>DT&lt;/code> in m²/s, while &lt;code>conductTemperature&lt;/code>
provides &lt;code>kappa&lt;/code> in W/(m K). Mixing them silently gives a non-conservative
coupling (inferred from the code).&lt;/li>
&lt;li>&lt;strong>Missing diffusivity is a fatal error.&lt;/strong> If neither a &lt;code>kappa&lt;/code> field nor a
&lt;code>kappa&lt;/code> entry in the region&amp;rsquo;s &lt;code>transportProperties&lt;/code> exists, the lookup in
&lt;code>diffCoeff()&lt;/code> stops the run.&lt;/li>
&lt;li>&lt;strong>Same patch names on both sides (inferred, untested).&lt;/strong>
&lt;code>interfaceToInterfaceCoupleManager::nbrMesh()/nbrPatch()&lt;/code> and
&lt;code>interpolateFromNbrField()&lt;/code> decide the side by comparing &lt;strong>patch names only&lt;/strong>
with &lt;code>patchA&lt;/code>. If both coupled patches have the same name in their regions
(e.g. &lt;code>interface&lt;/code>/&lt;code>interface&lt;/code>), side B would resolve itself as its own
neighbour. All shipped tutorials use different names.&lt;/li>
&lt;li>&lt;strong>&lt;code>interfaceTransferMethod&lt;/code> is global.&lt;/strong> It and its &lt;code>Coeffs&lt;/code> sub-dictionary
are read from the top level of &lt;code>regionInterfaceProperties&lt;/code>, so all
interfaces in a case share one mapping method.&lt;/li>
&lt;li>&lt;strong>&lt;code>neighbourFieldName&lt;/code> has no effect&lt;/strong> on &lt;code>regionCoupledTemperatureJump&lt;/code> /
&lt;code>regionCoupledHeatFlux&lt;/code>. The neighbour field is always looked up by the
local field name.&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>Laminar flow over a heated plate: &lt;code>fluid (pimpleFluid transportTemperature)&lt;/code> / &lt;code>solid (conductTemperature)&lt;/code>, &lt;code>directMap&lt;/code> transfer. Partitioned (&lt;code>-p&lt;/code>) and monolithic (&lt;code>-m&lt;/code>) dictionaries are provided.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/conjugateHeatTransfer/ShellAndTubeHeatExchanger&lt;/code>&lt;/td>
&lt;td>Two fluid regions (&lt;code>inner&lt;/code>, &lt;code>outer&lt;/code>) coupled to one &lt;code>solid&lt;/code> through two &lt;code>heatTransferInterface&lt;/code>s, &lt;code>AMI&lt;/code> transfer, &lt;code>nonOrthCorr true&lt;/code>. Partitioned and monolithic dictionaries are provided.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/fluidStructureInteraction/heatedBeamInCrossFlow&lt;/code>&lt;/td>
&lt;td>Thermo-FSI: &lt;code>heatTransferInterface&lt;/code> stacked with &lt;code>fsiInterface&lt;/code> on one patch pair (&lt;code>solidStVK conductTemperature&lt;/code> solid), &lt;code>directMap&lt;/code> transfer.&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><item><title>Docs: regionCoupledHeatFlux</title><link>https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/coupled-boundary-conditions/regioncoupledheatflux/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/coupled-boundary-conditions/regioncoupledheatflux/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;code>regionCoupledHeatFlux&lt;/code> is the flux side (Neumann side) of the temperature
coupling used with &lt;code>heatTransferInterface&lt;/code> for conjugate heat transfer and
thermo-FSI. It derives from &lt;code>genericRegionCoupledFlux&amp;lt;scalar&amp;gt;&lt;/code> (and so from
&lt;code>fixedGradient&lt;/code>). It fixes the normal temperature gradient so that the local
conductive heat flux is equal and opposite to the heat flux of the
value-side partner on the neighbour region, without an interfacial source.
The partner must be a &lt;code>genericRegionCoupledJump&amp;lt;scalar&amp;gt;&lt;/code>-derived BC, in
practice &lt;code>regionCoupledTemperatureJump&lt;/code>. Unlike its partner, this BC does
&lt;strong>not&lt;/strong> check the interface type (see Implementation).&lt;/p>
&lt;h2 id="mathematical-formulation">Mathematical Formulation&lt;/h2>
&lt;p>Let $B$ be this patch and $A$ the neighbour (jump-side) patch:&lt;/p>
$$
\kappa_A \frac{\partial T_A}{\partial n_A} + \kappa_B \frac{\partial T_B}{\partial n_B} = 0
\quad \text{on } \Gamma
$$
&lt;p>imposed as the gradient&lt;/p>
$$
\left.\frac{\partial T_B}{\partial n}\right|_b
= -\frac{\mathcal{I}_{A\to B}\!\left(\kappa_A\, \partial_n T_A\right)}{\kappa_B}
$$
&lt;p>followed by relaxation with the acceleration model. &lt;code>fluxJump()&lt;/code> returns zero.&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>$T$&lt;/td>
&lt;td>Temperature (field &lt;code>T&lt;/code> in both regions)&lt;/td>
&lt;td>K&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\kappa_B$&lt;/td>
&lt;td>Diffusivity named by &lt;code>diffusivity&lt;/code>, default &lt;code>kappa&lt;/code>&lt;/td>
&lt;td>W/(m K)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\kappa_A\,\partial_n T_A$&lt;/td>
&lt;td>&lt;code>flux()&lt;/code> of the jump-side partner&lt;/td>
&lt;td>W/m²&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathcal{I}_{A\to B}$&lt;/td>
&lt;td>Interface-to-interface interpolation&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="implementation">Implementation&lt;/h2>
&lt;p>Run-time work is inherited from &lt;code>genericRegionCoupledFlux&amp;lt;scalar&amp;gt;&lt;/code> (see
there). The class adds:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>fluxJump()&lt;/code>&lt;/strong>: returns a zero field.&lt;/li>
&lt;li>&lt;strong>&lt;code>diffusivityName()&lt;/code>&lt;/strong>: the &lt;code>diffusivity&lt;/code> keyword if set, otherwise
&lt;code>kappa&lt;/code>. &lt;code>diffCoeff()&lt;/code> uses a &lt;code>volScalarField&lt;/code> with that name on the local
region if one is registered, otherwise a uniform &lt;code>dimensionedScalar&lt;/code> from
the region&amp;rsquo;s &lt;code>transportProperties&lt;/code>.&lt;/li>
&lt;li>&lt;strong>&lt;code>heatTransInterface()&lt;/code>&lt;/strong>: a type check plus cast to
&lt;code>heatTransferInterface&lt;/code>, as in &lt;code>regionCoupledTemperatureJump&lt;/code>. It is
declared and defined but &lt;strong>never called&lt;/strong>, so the BC accepts any interface
type listed first in &lt;code>interfaceType&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>Per DNA iteration of &lt;code>T&lt;/code>, &lt;code>updateCoeffs()&lt;/code> updates the interface,
&lt;code>refCast&lt;/code>s the neighbour &lt;code>T&lt;/code> patch field to
&lt;code>genericRegionCoupledJumpFvPatchField&amp;lt;scalar&amp;gt;&lt;/code>, interpolates and negates its
&lt;code>flux()&lt;/code>, divides by the local $\kappa$, relaxes the gradient and fixes it.
&lt;code>evaluate()&lt;/code> sets the patch temperature from the gradient (with the optional
non-orthogonal and second-order corrections). The flux residual
$|\kappa_B g_B + \mathcal{I}(q_A)|$ is checked against &lt;code>maxFluxRes&lt;/code>.&lt;/p>
&lt;h2 id="dictionary-entries">Dictionary Entries&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Keyword&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Default&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>type&lt;/code>&lt;/td>
&lt;td>&lt;code>regionCoupledHeatFlux&lt;/code>&lt;/td>
&lt;td>yes&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>interfaceType&lt;/code>&lt;/td>
&lt;td>Interface type list; the first entry selects the interface (normally &lt;code>heatTransferInterface&lt;/code>; not checked)&lt;/td>
&lt;td>yes&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>diffusivity&lt;/code>&lt;/td>
&lt;td>Name of the thermal conductivity field / &lt;code>transportProperties&lt;/code> entry&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>kappa&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>neighbourFieldName&lt;/code>&lt;/td>
&lt;td>Read and written, not used&lt;/td>
&lt;td>no&lt;/td>
&lt;td>local field name (&lt;code>T&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>accType&lt;/code>&lt;/td>
&lt;td>&lt;code>fixed&lt;/code>, &lt;code>aitken&lt;/code> or &lt;code>IQNILS&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>fixed&lt;/code> (with warning)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>relax&lt;/code>&lt;/td>
&lt;td>Initial / fixed relaxation factor&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>1.0&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>couplingReuse&lt;/code>&lt;/td>
&lt;td>&lt;code>IQNILS&lt;/code> only: reused time steps&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>0&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>nonOrthCorr&lt;/code>&lt;/td>
&lt;td>Non-orthogonal correction in &lt;code>evaluate()&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>secondOrder&lt;/code>&lt;/td>
&lt;td>Second-order value evaluation&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>gradient&lt;/code>&lt;/td>
&lt;td>Initial gradient; if given, the initial patch value is evaluated from it&lt;/td>
&lt;td>no&lt;/td>
&lt;td>zero&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>value&lt;/code>&lt;/td>
&lt;td>Not read (only written)&lt;/td>
&lt;td>no&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="usage">Usage&lt;/h2>
&lt;p>From &lt;code>tutorials/fluidStructureInteraction/heatedBeamInCrossFlow/0/solid/orig/partitioned/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">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 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"> diffusivity &amp;#34;kappa&amp;#34;;
&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>Partner in &lt;code>0/fluid/orig/partitioned/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">interfaceShadow
&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"> diffusivity &amp;#34;kappa&amp;#34;;
&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>Interface in &lt;code>constant/regionInterfaceProperties&lt;/code> (heat transfer stacked on
FSI):&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">fluidsolid
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (fsiInterface heatTransferInterface);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> coupledPatchPair
&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 interfaceShadow)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> (solid 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"> coupledFields
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> (
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> D
&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"> coupled yes;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> fsiInterfaceCoeffs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> heatTransferInterfaceCoeffs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> jumpCoefficient jumpCoefficient [ 0 0 0 0 0 0 0 ] 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">}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="known-limitations">Known Limitations&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>No interface-type check.&lt;/strong> &lt;code>heatTransInterface()&lt;/code> is never called, so a
wrong first &lt;code>interfaceType&lt;/code> entry is not caught here. It is usually caught
by the partner &lt;code>regionCoupledTemperatureJump&lt;/code>, which does check.&lt;/li>
&lt;li>&lt;strong>Partner must be a jump BC&lt;/strong> of &lt;code>T&lt;/code> (bad-cast error otherwise).&lt;/li>
&lt;li>&lt;strong>No interfacial heat source or contact resistance&lt;/strong>: &lt;code>fluxJump()&lt;/code> is zero.
For phase change use &lt;code>regionCoupledPhaseChangeHeatFlux&lt;/code>.&lt;/li>
&lt;li>&lt;strong>No unit check on &lt;code>kappa&lt;/code>&lt;/strong> across the two regions.&lt;/li>
&lt;li>&lt;strong>&lt;code>value&lt;/code> is ignored on input&lt;/strong> and &lt;strong>&lt;code>gradient&lt;/code> is not written&lt;/strong> (restart
starts from a zero gradient).&lt;/li>
&lt;li>&lt;strong>First relaxation uses the patch values as reference&lt;/strong> (inherited; the
tutorials use the default &lt;code>fixed&lt;/code>/&lt;code>relax 1&lt;/code> on this side, where it has no
effect).&lt;/li>
&lt;li>Inherited from &lt;code>genericRegionCoupledFlux&lt;/code>: &lt;code>neighbourFieldName&lt;/code> unused,
corrections only in the evaluated value, &lt;code>IQNILS&lt;/code> not parallel-consistent,
partitioned only.&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>Solid side (&lt;code>conductTemperature&lt;/code>, patch &lt;code>top&lt;/code>), default &lt;code>kappa&lt;/code>, no relaxation.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/conjugateHeatTransfer/ShellAndTubeHeatExchanger&lt;/code>&lt;/td>
&lt;td>Solid side towards both fluids (&lt;code>solid_to_inner&lt;/code>, &lt;code>solid_to_outer&lt;/code>), &lt;code>nonOrthCorr true&lt;/code>, &lt;code>AMI&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/fluidStructureInteraction/heatedBeamInCrossFlow&lt;/code>&lt;/td>
&lt;td>Solid side (&lt;code>solidStVK conductTemperature&lt;/code>) of the thermo-FSI interface.&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><item><title>Docs: regionCoupledTemperatureJump</title><link>https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/coupled-boundary-conditions/regioncoupledtemperaturejump/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/coupled-boundary-conditions/regioncoupledtemperaturejump/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;code>regionCoupledTemperatureJump&lt;/code> is the value side (Dirichlet side) of the
temperature coupling of &lt;code>heatTransferInterface&lt;/code>, used for conjugate heat
transfer and thermo-FSI. It derives from &lt;code>genericRegionCoupledJump&amp;lt;scalar&amp;gt;&lt;/code>
(and so from &lt;code>fixedValue&lt;/code>). It fixes the patch temperature to the neighbour
temperature, interpolated onto this patch and scaled by the interface&amp;rsquo;s
&lt;code>jumpCoefficient&lt;/code> $c$ ($c = 1$: temperature continuity). It also supplies its
heat flux $\kappa\,\partial T/\partial n$ to the partner
&lt;code>regionCoupledHeatFlux&lt;/code> on the neighbour region. The interface found through
the first &lt;code>interfaceType&lt;/code> entry must be a &lt;code>heatTransferInterface&lt;/code>.&lt;/p>
&lt;h2 id="mathematical-formulation">Mathematical Formulation&lt;/h2>
&lt;p>Let $A$ be this patch and $B$ the neighbour (flux-side) patch:&lt;/p>
$$
T_A = c\;\mathcal{I}_{B\to A}(T_B) \quad \text{on } \Gamma
$$
&lt;p>implemented as $T_A = \mathcal{I}_{B\to A}(T_B) + j$ with&lt;/p>
$$
j = \mathcal{I}_{B\to A}(T_B)\,(c - 1),
$$
&lt;p>followed by relaxation with the acceleration model. The heat flux handed to
&lt;code>regionCoupledHeatFlux&lt;/code> is&lt;/p>
$$
q_A = \kappa_A \left.\frac{\partial T_A}{\partial n}\right|_b
$$
&lt;p>with the coupled &lt;code>snGrad&lt;/code> of &lt;code>genericRegionCoupledJump&lt;/code> (optional
non-orthogonal and second-order corrections).&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>$T$&lt;/td>
&lt;td>Temperature (field &lt;code>T&lt;/code> in both regions)&lt;/td>
&lt;td>K&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$c$&lt;/td>
&lt;td>&lt;code>heatTransferInterfaceCoeffs/jumpCoefficient&lt;/code> (uniform, constant)&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\kappa_A$&lt;/td>
&lt;td>Diffusivity named by &lt;code>diffusivity&lt;/code>, default &lt;code>kappa&lt;/code>&lt;/td>
&lt;td>W/(m K)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathcal{I}_{B\to A}$&lt;/td>
&lt;td>Interface-to-interface interpolation&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="implementation">Implementation&lt;/h2>
&lt;p>Run-time work is inherited from &lt;code>genericRegionCoupledJump&amp;lt;scalar&amp;gt;&lt;/code> (see
there). The class adds:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>valueJump()&lt;/code>&lt;/strong>: looks up the neighbour &lt;code>T&lt;/code> under the local field name,
interpolates its neighbour patch values, and returns
$\mathcal{I}(T_B)\,(c - 1)$. Here $c$ is
&lt;code>heatTransInterface().jumpCoefficient().value()&lt;/code>, a single scalar.&lt;/li>
&lt;li>&lt;strong>&lt;code>heatTransInterface()&lt;/code>&lt;/strong>: checks that the interface matched through the
first &lt;code>interfaceType&lt;/code> entry has type &lt;code>heatTransferInterface&lt;/code>, otherwise
&lt;code>FatalError&lt;/code> (&amp;ldquo;BC can only be used in combination with a
heatTransferInterface&amp;rdquo;). It is called from &lt;code>valueJump()&lt;/code>, so the check
runs on the first &lt;code>updateCoeffs()&lt;/code> and on every residual evaluation.&lt;/li>
&lt;li>&lt;strong>&lt;code>diffusivityName()&lt;/code>&lt;/strong>: returns the &lt;code>diffusivity&lt;/code> keyword if set,
otherwise &lt;code>kappa&lt;/code>. &lt;code>diffCoeff()&lt;/code> uses the &lt;code>volScalarField&lt;/code> with this name
on the local region if one is registered, else a uniform
&lt;code>dimensionedScalar&lt;/code> of that name from the region&amp;rsquo;s &lt;code>transportProperties&lt;/code>.&lt;/li>
&lt;/ul>
&lt;p>Per DNA iteration of &lt;code>T&lt;/code>: the interface is updated (its &lt;code>correct()&lt;/code> is a
no-op), the value $\mathcal{I}(T_B) + j$ is set, relaxed (&lt;code>accType&lt;/code>, &lt;code>relax&lt;/code>)
and fixed. The jump residual $|T_A - \mathcal{I}(T_B) - j|$ is checked against
&lt;code>maxJumpRes&lt;/code>.&lt;/p>
&lt;h2 id="dictionary-entries">Dictionary Entries&lt;/h2>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Keyword&lt;/th>
&lt;th>Description&lt;/th>
&lt;th>Required&lt;/th>
&lt;th>Default&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>type&lt;/code>&lt;/td>
&lt;td>&lt;code>regionCoupledTemperatureJump&lt;/code>&lt;/td>
&lt;td>yes&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>interfaceType&lt;/code>&lt;/td>
&lt;td>Interface type list. The &lt;strong>first&lt;/strong> entry must be &lt;code>heatTransferInterface&lt;/code>.&lt;/td>
&lt;td>yes&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>diffusivity&lt;/code>&lt;/td>
&lt;td>Name of the thermal conductivity field / &lt;code>transportProperties&lt;/code> entry&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>kappa&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>neighbourFieldName&lt;/code>&lt;/td>
&lt;td>Read and written, not used&lt;/td>
&lt;td>no&lt;/td>
&lt;td>local field name (&lt;code>T&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>jumpCoefficient&lt;/code>&lt;/td>
&lt;td>Read by the base class but &lt;strong>ignored&lt;/strong> (the coefficient comes from the interface)&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>word::null&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>accType&lt;/code>&lt;/td>
&lt;td>&lt;code>fixed&lt;/code>, &lt;code>aitken&lt;/code> or &lt;code>IQNILS&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>fixed&lt;/code> (with warning)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>relax&lt;/code>&lt;/td>
&lt;td>Initial / fixed relaxation factor&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>1.0&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>couplingReuse&lt;/code>&lt;/td>
&lt;td>&lt;code>IQNILS&lt;/code> only: reused time steps&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>0&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>nonOrthCorr&lt;/code>&lt;/td>
&lt;td>Non-orthogonal correction of &lt;code>snGrad&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>secondOrder&lt;/code>&lt;/td>
&lt;td>Second-order &lt;code>snGrad&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>value&lt;/code>&lt;/td>
&lt;td>Initial patch value (read if present, otherwise uninitialised)&lt;/td>
&lt;td>effectively yes&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="usage">Usage&lt;/h2>
&lt;p>From &lt;code>tutorials/conjugateHeatTransfer/flowOverHeatedPlate/0/fluid/orig/partitioned/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">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">
&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">
&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>Partner in &lt;code>0/solid/orig/partitioned/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">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">
&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>Interface in &lt;code>constant/regionInterfacePropertiesPartitioned&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">partitionedCoupledPatches
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">(
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> fluidsolid
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&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"> coupledPatchPair
&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 interface)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> (solid 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"> coupledFields
&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"> heatTransferInterfaceCoeffs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> jumpCoefficient jumpCoefficient [ 0 0 0 0 0 0 0 ] 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"> }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">);
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>and the &lt;code>T&lt;/code> entry in the &lt;code>DNA&lt;/code> block of &lt;code>constant/multiRegionProperties&lt;/code>
(&lt;code>maxCoupleIter&lt;/code>, &lt;code>maxJumpRes&lt;/code>, &lt;code>maxFluxRes&lt;/code>). For thermo-FSI the interface
entry lists &lt;code>interfaceType (fsiInterface heatTransferInterface);&lt;/code>, while the
&lt;code>T&lt;/code> patches keep &lt;code>interfaceType (heatTransferInterface);&lt;/code>
(&lt;code>tutorials/fluidStructureInteraction/heatedBeamInCrossFlow&lt;/code>).&lt;/p>
&lt;h2 id="known-limitations">Known Limitations&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Needs &lt;code>heatTransferInterface&lt;/code> first&lt;/strong> in the BC&amp;rsquo;s &lt;code>interfaceType&lt;/code> list;
any other type aborts in &lt;code>valueJump()&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Constant, uniform jump coefficient.&lt;/strong> $c$ is a single
&lt;code>dimensionedScalar&lt;/code> read once by the interface. The &lt;code>jumpCoefficient&lt;/code> patch
keyword (field lookup) of &lt;code>regionCoupledScalarJump&lt;/code> is not used here.&lt;/li>
&lt;li>&lt;strong>No unit check on &lt;code>kappa&lt;/code>.&lt;/strong> The flux balance with the partner only
conserves energy if both sides name conductivities in the same units
(e.g. not &lt;code>DT&lt;/code> in m²/s on one side).&lt;/li>
&lt;li>&lt;strong>Missing diffusivity is fatal&lt;/strong> when the partner first asks for &lt;code>flux()&lt;/code>
(no &lt;code>kappa&lt;/code> field and no &lt;code>kappa&lt;/code> in &lt;code>transportProperties&lt;/code>).&lt;/li>
&lt;li>Inherited from &lt;code>genericRegionCoupledJump&lt;/code>: &lt;code>neighbourFieldName&lt;/code> unused,
side detection by patch name only, acceleration state carried over time
steps, &lt;code>IQNILS&lt;/code> not parallel-consistent, partitioned only (the
&lt;code>*Monolithic&lt;/code> tutorial variants use other BCs).&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>Fluid side of &lt;code>fluid (pimpleFluid transportTemperature)&lt;/code> / &lt;code>solid (conductTemperature)&lt;/code>, Aitken 0.75, &lt;code>directMap&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/conjugateHeatTransfer/ShellAndTubeHeatExchanger&lt;/code>&lt;/td>
&lt;td>Fluid side on &lt;code>inner_to_solid&lt;/code> and &lt;code>outer_to_solid&lt;/code>, &lt;code>nonOrthCorr true&lt;/code>, default &lt;code>fixed&lt;/code> relaxation, &lt;code>AMI&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>tutorials/fluidStructureInteraction/heatedBeamInCrossFlow&lt;/code>&lt;/td>
&lt;td>Fluid side of the thermo-FSI interface (&lt;code>diffusivity &amp;quot;kappa&amp;quot;&lt;/code>, Aitken 0.75), stacked with &lt;code>fsiInterface&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>