<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>multiPhysicsFoam – Phase-Change</title><link>https://multiphysicsfoam.com/tags/phase-change/</link><description>Recent content in Phase-Change on multiPhysicsFoam</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://multiphysicsfoam.com/tags/phase-change/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: massTransferInterface</title><link>https://multiphysicsfoam.com/docs/user-guide/interface-physics/masstransferinterface/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://multiphysicsfoam.com/docs/user-guide/interface-physics/masstransferinterface/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;code>massTransferInterface&lt;/code> models phase change (evaporation/condensation) at a
sharp interface between two fluid regions, e.g. a liquid and its vapour. It is
&lt;strong>not&lt;/strong> a species/concentration interface: there is no Henry or partition
coefficient and no species field. The interface is assumed to sit at a fixed
saturation temperature $T_{sat}$. The interfacial mass flux $\dot m$ follows
from the energy balance: the net conductive heat that reaches the interface
from both sides at $T = T_{sat}$, divided by the latent heat $h_{lv}$.&lt;/p>
&lt;p>The interface type itself only computes $\dot m$ and the matching heat-flux
jump. These quantities enter the solution through dedicated partitioned
boundary conditions (&lt;code>regionCoupledPhaseChangeHeatFlux&lt;/code> for &lt;code>T&lt;/code>,
&lt;code>regionCoupledMassTransfer*&lt;/code> for &lt;code>U&lt;/code> and &lt;code>p&lt;/code>). The &lt;code>U&lt;/code>/&lt;code>p&lt;/code> conditions also need
a &lt;code>capillaryInterface&lt;/code> on the same patch pair (surface tension, curvature,
interface velocity). The two interface types are therefore used together.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Status:&lt;/strong> No tutorial uses this interface type, and the interface-tracking
fluid region it was written for (&lt;code>interTrackFluid&lt;/code>) is disabled in
&lt;code>src/multiRegionSystem/Make/files&lt;/code>.
Treat this page as a description of the code, not of a validated feature.&lt;/p>
&lt;/blockquote>
&lt;h2 id="interface-conditions">Interface Conditions&lt;/h2>
&lt;p>Below, $A$ and $B$ are the two regions of the &lt;code>coupledPatchPair&lt;/code> and
$\mathbf{n}_A$, $\mathbf{n}_B$ the outward patch normals. In the BC formulas
&amp;ldquo;own&amp;rdquo; is the side the BC sits on and &amp;ldquo;nbr&amp;rdquo; is the other side. $\mathbf{n}_\varepsilon$
is the interface normal $\mathbf{n}$ on the &lt;code>meshA&lt;/code> side of the
&lt;code>capillaryInterface&lt;/code> and $-\mathbf{n}$ on the other side.&lt;/p>
&lt;h3 id="mass-flux-from-the-energy-balance-masstransferinterfacesaturatedflux">Mass flux from the energy balance (&lt;code>massTransferInterface::saturatedFlux&lt;/code>)&lt;/h3>
&lt;p>Both temperature fields are copied, the interface patch values are set to
$T_{sat}$ (&lt;code>fixedValue&lt;/code>), and the normal gradients are evaluated:&lt;/p>
$$
q_{sat} = k_A \left.\frac{\partial T_A}{\partial n_A}\right|_{T_\Gamma = T_{sat}} + k_B \left.\frac{\partial T_B}{\partial n_B}\right|_{T_\Gamma = T_{sat}}
$$
$$
\dot m = -\frac{q_{sat}}{h_{lv}} \quad \text{(set to } 0 \text{ at time index 1)}
$$
&lt;p>$-q_{sat}$ is the net heat conducted into the interface from both sides. It is
consumed as latent heat, so $\dot m > 0$ when the interface gains heat
(evaporation).&lt;/p>
&lt;h3 id="temperature-flux-condition-regioncoupledphasechangeheatflux">Temperature flux condition (&lt;code>regionCoupledPhaseChangeHeatFlux&lt;/code>)&lt;/h3>
$$
k_{own} \frac{\partial T_{own}}{\partial n_{own}}
= -\,k_{nbr} \frac{\partial T_{nbr}}{\partial n_{nbr}} + q_{sat}
$$
&lt;p>The other side of &lt;code>T&lt;/code> must carry a jump-type BC. That BC provides the value
continuity $T_{own} = T_{nbr}$; this interface type adds no temperature jump.&lt;/p>
&lt;h3 id="velocity-jump-regioncoupledmasstransfervelocityvalue">Velocity jump (&lt;code>regionCoupledMassTransferVelocityValue&lt;/code>)&lt;/h3>
$$
\mathbf{u}_{own} = \mathbf{u}_{nbr} + \left(\frac{1}{\rho_{own}} - \frac{1}{\rho_{nbr}}\right)\dot m\, \mathbf{n}_\varepsilon
$$
&lt;h3 id="pressure-jump-regioncoupledmasstransferpressurevalue">Pressure jump (&lt;code>regionCoupledMassTransferPressureValue&lt;/code>)&lt;/h3>
$$
p_{own} = p_{nbr} + 2\,(\mu_{nbr} - \mu_{own})\,\nabla_s\!\cdot\mathbf{u}_s - \sigma \kappa + (\rho_{nbr} - \rho_{own})\,\mathbf{g}\cdot(\mathbf{x}_f - \mathbf{x}_{ref}) - \left(\frac{1}{\rho_{own}} - \frac{1}{\rho_{nbr}}\right)\dot m^2
$$
&lt;p>If the pressure field is called &lt;code>pKin&lt;/code> (kinematic pressure), the same jump is
built from $\rho_{nbr}\,p_{kin,nbr}$ and the result is divided by
$\rho_{own}$.&lt;/p>
&lt;h3 id="momentum-flux-jump-regioncoupledmasstransfervelocityflux">Momentum flux jump (&lt;code>regionCoupledMassTransferVelocityFlux&lt;/code>)&lt;/h3>
&lt;p>The diffusive flux $\mu_{own}\,\partial\mathbf{u}_{own}/\partial n$ is set to the
negated normal component of the neighbour flux plus&lt;/p>
$$
\mathbf{f}_{\sigma,t} - \mu_{own}\,\mathbf{n}\,\nabla_s\!\cdot\mathbf{u}_s + (\mu_{nbr} - \mu_{own})\,(\nabla_s \mathbf{u}_s)\cdot\mathbf{n} + \dot m \left[\left(\frac{\dot m}{\rho_{own}}\mathbf{n}_\varepsilon - \mathbf{u}_{own}\right) - \left(\frac{\dot m}{\rho_{nbr}}\mathbf{n}_\varepsilon - \mathbf{u}_{nbr}\right)\right]
$$
&lt;p>where $\mathbf{f}_{\sigma,t}$ is the tangential part of the surface-tension
force from the &lt;code>capillaryInterface&lt;/code> finite-area mesh.&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>$T_{sat}$&lt;/td>
&lt;td>Saturation temperature (&lt;code>TSat&lt;/code>)&lt;/td>
&lt;td>K&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$h_{lv}$&lt;/td>
&lt;td>Latent heat of vaporisation (&lt;code>hlv&lt;/code>)&lt;/td>
&lt;td>J/kg&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$k_A$, $k_B$&lt;/td>
&lt;td>Thermal conductivity, entry &lt;code>k&lt;/code> in each region&amp;rsquo;s &lt;code>transportProperties&lt;/code>&lt;/td>
&lt;td>W/(m K)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$q_{sat}$&lt;/td>
&lt;td>Heat-flux imbalance at saturation (&lt;code>&amp;lt;patchA&amp;gt;fluxMTJump&lt;/code>)&lt;/td>
&lt;td>W/m²&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\dot m$&lt;/td>
&lt;td>Interfacial mass flux (&lt;code>&amp;lt;patchA&amp;gt;mDotS&lt;/code>)&lt;/td>
&lt;td>kg/(m² s)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\rho$, $\mu$&lt;/td>
&lt;td>Density and dynamic viscosity from &lt;code>transportProperties&lt;/code>&lt;/td>
&lt;td>kg/m³, Pa s&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\sigma$, $\kappa$, $\mathbf{u}_s$&lt;/td>
&lt;td>Surface tension, curvature, interface velocity from &lt;code>capillaryInterface&lt;/code>&lt;/td>
&lt;td>N/m, 1/m, m/s&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{g}$, $\mathbf{x}_{ref}$&lt;/td>
&lt;td>Gravity (&lt;code>g&lt;/code>) and &lt;code>PISO.pRefPoint&lt;/code>&lt;/td>
&lt;td>m/s², m&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="implementation">Implementation&lt;/h2>
&lt;ol>
&lt;li>&lt;strong>Construction.&lt;/strong> Reads &lt;code>massTransferInterfaceCoeffs&lt;/code> from the interface
entry. Creates on the interface finite-area mesh (&lt;code>aMesh()&lt;/code>, built from
region A if no &lt;code>&amp;lt;patchA&amp;gt;FaMesh&lt;/code> is registered) the area fields
&lt;code>hlvInterface&lt;/code> (uniform $h_{lv}$) and &lt;code>mDotInterface&lt;/code> (zero), both
&lt;code>NO_WRITE&lt;/code>.&lt;/li>
&lt;li>&lt;strong>&lt;code>correct()&lt;/code>&lt;/strong> calls &lt;code>updateMDotS()&lt;/code>:
&lt;ul>
&lt;li>&lt;code>saturatedFlux()&lt;/code> looks up &lt;code>T&lt;/code> in both regions and the scalar &lt;code>k&lt;/code> from
each region&amp;rsquo;s &lt;code>transportProperties&lt;/code> dictionary. It then computes
$q_{sat}$ as above on copies of &lt;code>T&lt;/code> (the solved fields are not changed).&lt;/li>
&lt;li>The result is stored in the area field &lt;code>&amp;lt;patchA&amp;gt;fluxMTJump&lt;/code>. The area
field &lt;code>&amp;lt;patchA&amp;gt;mDotS&lt;/code> is set to $-q_{sat}/h_{lv}$, or to zero when
&lt;code>timeIndex() == 1&lt;/code>. Both fields are created on demand and are
&lt;code>NO_WRITE&lt;/code>.&lt;/li>
&lt;li>&lt;code>mDotInterface&lt;/code> is set to &lt;code>mDotS&lt;/code>. A diagnostic line (time, integrated
$\dot m$, region volumes) is printed to the log.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Boundary conditions&lt;/strong> read the results: &lt;code>regionCoupledPhaseChangeHeatFlux&lt;/code>
uses &lt;code>fluxMTJump()&lt;/code> as the flux jump of &lt;code>T&lt;/code>. The
&lt;code>regionCoupledMassTransfer*&lt;/code> conditions interpolate &lt;code>mDotS()&lt;/code> to their
patch.&lt;/li>
&lt;li>&lt;strong>&lt;code>getMinDeltaT()&lt;/code>&lt;/strong> returns &lt;code>GREAT&lt;/code> (no time-step restriction).
&lt;strong>&lt;code>info()&lt;/code>&lt;/strong> is empty.&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>regionCoupledPhaseChangeHeatFlux&lt;/code> with &lt;code>interfaceType (massTransferInterface ...)&lt;/code> on one side / a &lt;code>genericRegionCoupledJump&lt;/code>-derived BC on the other (&lt;em>inferred&lt;/em>: &lt;code>regionCoupledScalarJump&lt;/code>; &lt;code>regionCoupledTemperatureJump&lt;/code> needs a &lt;code>heatTransferInterface&lt;/code> listed first)&lt;/td>
&lt;td>Temperature, flux jump $q_{sat}$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>U&lt;/code> (via &lt;code>pUPimple&lt;/code>)&lt;/td>
&lt;td>&lt;code>regionCoupledMassTransferVelocityValue&lt;/code> / &lt;code>regionCoupledMassTransferVelocityFlux&lt;/code>&lt;/td>
&lt;td>Velocity with mass-flux jump, &lt;code>interfaceType (capillaryInterface massTransferInterface)&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>p&lt;/code> (via &lt;code>pUPimple&lt;/code>)&lt;/td>
&lt;td>&lt;code>regionCoupledMassTransferPressureValue&lt;/code> / &lt;code>regionCoupledPressureFlux&lt;/code> (&lt;em>inferred&lt;/em>: there is no mass-transfer pressure-flux BC)&lt;/td>
&lt;td>Pressure with recoil term $\dot m^2$&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The BC&amp;rsquo;s &lt;code>interfaceType&lt;/code> list order matters. The first entry is the default
interface of the BC. &lt;code>regionCoupledPhaseChangeHeatFlux&lt;/code> aborts unless its
first entry is &lt;code>massTransferInterface&lt;/code>. &lt;code>regionCoupledMassTransferPressureValue&lt;/code>
and &lt;code>regionCoupledMassTransferVelocityFlux&lt;/code> abort unless their first entry is
&lt;code>capillaryInterface&lt;/code>. Each BC finds the second interface type by name on the
same patch.&lt;/p>
&lt;p>Fields and dictionaries needed in &lt;strong>both&lt;/strong> regions:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Name&lt;/th>
&lt;th>Type&lt;/th>
&lt;th>Used by&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>saturatedFlux()&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>transportProperties&lt;/code>&lt;/td>
&lt;td>registered &lt;code>IOdictionary&lt;/code> with &lt;code>k&lt;/code> (and &lt;code>rho&lt;/code>, &lt;code>mu&lt;/code> for the &lt;code>U&lt;/code>/&lt;code>p&lt;/code> BCs, &lt;code>nu&lt;/code> if &lt;code>pKin&lt;/code> is used)&lt;/td>
&lt;td>interface, BCs&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>U&lt;/code>, &lt;code>p&lt;/code> (or &lt;code>pKin&lt;/code>), &lt;code>phi&lt;/code>&lt;/td>
&lt;td>vol/surface fields&lt;/td>
&lt;td>&lt;code>regionCoupledMassTransfer*&lt;/code> BCs&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>g&lt;/code>&lt;/td>
&lt;td>&lt;code>uniformDimensionedVectorField&lt;/code>&lt;/td>
&lt;td>&lt;code>regionCoupledMassTransferPressureValue&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>PISO.pRefPoint&lt;/code>&lt;/td>
&lt;td>entry in &lt;code>fvSolution&lt;/code>&lt;/td>
&lt;td>&lt;code>regionCoupledMassTransferPressureValue&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="compatible-region-types">Compatible Region Types&lt;/h2>
&lt;p>No compiled region type combination has been shown to work. The table lists
what the code requires (&lt;em>inferred, untested&lt;/em>).&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>interTrackFluid&lt;/code>&lt;/td>
&lt;td>&lt;code>interTrackFluid&lt;/code>&lt;/td>
&lt;td>Intended pairing (moving-mesh interface tracking, as in the &lt;code>capillaryInterface&lt;/code> tutorials). &lt;strong>Disabled&lt;/strong> in &lt;code>src/multiRegionSystem/Make/files&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>icoFluid&lt;/code> + &lt;code>transportTemperature&lt;/code>&lt;/td>
&lt;td>&lt;code>icoFluid&lt;/code> + &lt;code>transportTemperature&lt;/code>&lt;/td>
&lt;td>&lt;code>icoFluid&lt;/code> provides &lt;code>U&lt;/code>, &lt;code>p&lt;/code>, &lt;code>phi&lt;/code>, &lt;code>transportProperties&lt;/code> (&lt;code>rho&lt;/code>, &lt;code>mu&lt;/code>) and documents these BCs (see &lt;code>icoFluid&lt;/code>). &lt;code>transportTemperature&lt;/code> provides &lt;code>T&lt;/code>. Both read &lt;code>kappa&lt;/code>, so &lt;code>k&lt;/code> must be added to &lt;code>transportProperties&lt;/code> as well. &lt;code>g&lt;/code> must be provided separately.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>any + &lt;code>conductTemperature&lt;/code>&lt;/td>
&lt;td>—&lt;/td>
&lt;td>Only the &lt;code>T&lt;/code> part can work (no &lt;code>U&lt;/code>/&lt;code>p&lt;/code>); &lt;code>k&lt;/code> must be added next to &lt;code>kappa&lt;/code>.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>The interface needs &lt;code>k&lt;/code> as a single uniform &lt;code>dimensionedScalar&lt;/code> per region. A
non-uniform &lt;code>kappa&lt;/code> field (see &lt;code>transportTemperature&lt;/code>, &lt;code>conductTemperature&lt;/code>) is
not used.&lt;/p>
&lt;h2 id="case-setup">Case Setup&lt;/h2>
&lt;p>No tutorial exists. The snippets below are assembled from the keywords the
code reads and from the structure of
&lt;code>tutorials/multiphaseFlow/2dRisingBubble&lt;/code> (which uses &lt;code>capillaryInterface&lt;/code>
only). They have not been run.&lt;/p>
&lt;h3 id="regioninterfaceproperties-entry">&lt;code>regionInterfaceProperties&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">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"> fluidAfluidB
&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 (capillaryInterface massTransferInterface);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&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"> (fluidA interface)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> (fluidB 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">
&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"> pUPimple
&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">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> capillaryInterfaceCoeffs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> sigma sigma [ 1 0 -2 0 0 0 0 ] 0.07232;
&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"> massTransferInterfaceCoeffs
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> {
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> hlv hlv [ 0 2 -2 0 0 0 0 ] 2.257e6; // required, J/kg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> TSat TSat [ 0 0 0 1 0 0 0 ] 373.15; // required, K
&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">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 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">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;table>
&lt;thead>
&lt;tr>
&lt;th>Keyword&lt;/th>
&lt;th>Where&lt;/th>
&lt;th>Default&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>hlv&lt;/code>&lt;/td>
&lt;td>&lt;code>massTransferInterfaceCoeffs&lt;/code>&lt;/td>
&lt;td>— (required)&lt;/td>
&lt;td>Latent heat $h_{lv}$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>TSat&lt;/code>&lt;/td>
&lt;td>&lt;code>massTransferInterfaceCoeffs&lt;/code>&lt;/td>
&lt;td>— (required)&lt;/td>
&lt;td>Saturation temperature $T_{sat}$&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>coupled&lt;/code>&lt;/td>
&lt;td>interface entry&lt;/td>
&lt;td>&lt;code>true&lt;/code>&lt;/td>
&lt;td>Base class switch&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>couplingStartTime&lt;/code>&lt;/td>
&lt;td>interface entry&lt;/td>
&lt;td>&lt;code>0&lt;/code>&lt;/td>
&lt;td>Base class&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>interfaceTransferMethod&lt;/code>&lt;/td>
&lt;td>top level&lt;/td>
&lt;td>&lt;code>AMI&lt;/code>&lt;/td>
&lt;td>Patch-to-patch mapping used by the BCs. See also the conformity note in Known Limitations.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>curvatureCorrectedSurfacePatches&lt;/code>&lt;/td>
&lt;td>top level&lt;/td>
&lt;td>— (required)&lt;/td>
&lt;td>Base class, needed by every interface type&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>All interface types listed in &lt;code>interfaceType&lt;/code> receive the same entry, so they
share &lt;code>coupledPatchPair&lt;/code> and &lt;code>coupledFields&lt;/code>.&lt;/p>
&lt;h3 id="multiregionproperties-dna-entry">&lt;code>multiRegionProperties&lt;/code> DNA 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">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"> pUPimple
&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 10;
&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"> U { maxJumpRes 1e-5; maxFluxRes 1e-4; }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> p { maxJumpRes 1e-5; maxFluxRes 1e-5; }
&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"> 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 10;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> residualControl { maxJumpRes 1e-5; maxFluxRes 1e-5; }
&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>Based on the &lt;code>capillaryInterface&lt;/code> BCs in
&lt;code>tutorials/multiphaseFlow/2dRisingBubble/0/fluidA/orig/partitioned/U&lt;/code> and
&lt;code>.../fluidB/orig/partitioned/p&lt;/code>, with the mass-transfer variants substituted:&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">// 0/fluidA/U
&lt;/span>&lt;/span>&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 regionCoupledMassTransferVelocityFlux;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> diffusivity &amp;#34;mu&amp;#34;;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (capillaryInterface massTransferInterface);
&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 uniform (0 0 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">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">// 0/fluidB/U
&lt;/span>&lt;/span>&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 regionCoupledMassTransferVelocityValue;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> diffusivity &amp;#34;mu&amp;#34;;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (capillaryInterface massTransferInterface);
&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 uniform (0 0 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">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">// 0/fluidA/p
&lt;/span>&lt;/span>&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 regionCoupledMassTransferPressureValue;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> diffusivity &amp;#34;v&amp;#34;;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (capillaryInterface massTransferInterface);
&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 uniform 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">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">// 0/fluidB/T
&lt;/span>&lt;/span>&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 regionCoupledPhaseChangeHeatFlux;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (massTransferInterface);
&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 uniform 373.15;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>regionCoupledPhaseChangeHeatFlux&lt;/code> fixes its diffusivity name to &lt;code>k&lt;/code>. It uses a
&lt;code>volScalarField k&lt;/code> if the region has one, otherwise &lt;code>k&lt;/code> from
&lt;code>transportProperties&lt;/code>.&lt;/p>
&lt;h2 id="known-limitations">Known Limitations&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>&lt;code>correct()&lt;/code> runs on every coupled BC update.&lt;/strong> &lt;code>regionInterfaceTypeList::update()&lt;/code>
does not call &lt;code>correct()&lt;/code>, but every &lt;code>genericRegionCoupledJump&lt;/code>/&lt;code>Flux&lt;/code>-derived
BC calls &lt;code>rgInterface().update()&lt;/code> in its &lt;code>updateCoeffs()&lt;/code>, which calls
&lt;code>correct()&lt;/code>. &lt;code>rgInterface()&lt;/code> resolves only the &lt;strong>first&lt;/strong> entry of the BC&amp;rsquo;s
&lt;code>interfaceType&lt;/code> list, so $\dot m$ is updated only by BCs that list
&lt;code>massTransferInterface&lt;/code> first (e.g. &lt;code>regionCoupledPhaseChangeHeatFlux&lt;/code> on
&lt;code>T&lt;/code>). The U/p mass-transfer BCs list &lt;code>capillaryInterface&lt;/code> first and never
trigger it. When it does run, it runs once per such BC evaluation, i.e.
several times per coupling iteration.&lt;/li>
&lt;li>&lt;strong>No runnable tutorial.&lt;/strong> No tutorial uses &lt;code>massTransferInterface&lt;/code>. The
&lt;code>interTrackFluid&lt;/code> region type it was written for is commented out in
&lt;code>src/multiRegionSystem/Make/files&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Constant properties.&lt;/strong> $h_{lv}$, $T_{sat}$ and &lt;code>k&lt;/code> are single uniform
scalars. $T_{sat}$ does not depend on pressure.&lt;/li>
&lt;li>&lt;strong>Conformal interface assumed.&lt;/strong> &lt;code>saturatedFlux()&lt;/code> adds patch-A and
patch-B face values index by index without mapping. Results are written into
an area field on the finite-area mesh of region A. This only makes sense if
both patches and the &lt;code>aMesh&lt;/code> have the same faces in the same order
(&lt;em>inferred&lt;/em>). The BCs on side A also call &lt;code>interpolateFromNbrField&lt;/code> on
&lt;code>mDotS&lt;/code>, which is already defined on A (&lt;em>inferred to be harmless only for
identical conformal patches&lt;/em>).&lt;/li>
&lt;li>&lt;strong>First time step forced to $\dot m = 0$.&lt;/strong> The check is
&lt;code>timeIndex() == 1&lt;/code>, so the first step after a restart is presumably not
affected, because the time index continues from &lt;code>uniform/time&lt;/code> (&lt;em>inferred&lt;/em>).&lt;/li>
&lt;li>&lt;strong>&lt;code>regionCoupledMassTransferVelocityValue::updatePhi()&lt;/code> is never called.&lt;/strong>
The mass-flux correction of the boundary &lt;code>phi&lt;/code> it implements is dead code.&lt;/li>
&lt;li>&lt;strong>No temperature constraint at the interface.&lt;/strong> $T_{sat}$ is used only to
compute $q_{sat}$. &lt;code>T&lt;/code> on the patches is not fixed to $T_{sat}$, and the
saturation check (&lt;code>checkSaturation&lt;/code>) is computed and then discarded.&lt;/li>
&lt;li>&lt;strong>Name clash risk with &lt;code>k&lt;/code>&lt;/strong> (&lt;em>inferred&lt;/em>). The heat-flux BC prefers a
&lt;code>volScalarField k&lt;/code>. In a turbulent region that is the turbulent kinetic
energy, not the conductivity.&lt;/li>
&lt;li>&lt;strong>Diagnostics are always on.&lt;/strong> &lt;code>updateMDotS()&lt;/code> and the velocity BC write an
&lt;code>Info&lt;/code> line on every call. The output fields are &lt;code>NO_WRITE&lt;/code>, so $\dot m$ is
not written to disk.&lt;/li>
&lt;li>&lt;strong>Partitioned only.&lt;/strong> Monolithic coupling is not available.&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;/td>
&lt;td>No tutorial uses &lt;code>massTransferInterface&lt;/code>. &lt;code>tutorials/multiphaseFlow/2dRisingBubble&lt;/code> shows the companion &lt;code>capillaryInterface&lt;/code> setup (also on the disabled &lt;code>interTrackFluid&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><item><title>Docs: regionCoupledMassTransferPressureValue</title><link>https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/coupled-boundary-conditions/regioncoupledmasstransferpressurevalue/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/coupled-boundary-conditions/regioncoupledmasstransferpressurevalue/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;code>regionCoupledMassTransferPressureValue&lt;/code> is the Dirichlet (jump) half of the
partitioned pressure coupling across a sharp liquid-vapour interface with
phase change. It acts on a &lt;code>volScalarField&lt;/code> (&lt;code>p&lt;/code> or &lt;code>pKin&lt;/code>) and derives from
&lt;code>genericRegionCoupledJump&amp;lt;scalar&amp;gt;&lt;/code>, i.e. from &lt;code>fixedValue&lt;/code>. It applies the
same normal-stress jump as &lt;code>regionCoupledPressureValue&lt;/code> and adds the recoil
pressure $-(1/\rho_\text{own}-1/\rho_\text{nbr})\,\dot m^2$. There is no
mass-transfer pressure-flux BC; the partner is presumably
&lt;code>regionCoupledPressureFlux&lt;/code> (&lt;em>inferred&lt;/em>). The BC needs a &lt;code>capillaryInterface&lt;/code>
as the &lt;strong>first&lt;/strong> &lt;code>interfaceType&lt;/code> entry and a &lt;code>massTransferInterface&lt;/code> on the
same patch pair.&lt;/p>
&lt;h2 id="mathematical-formulation">Mathematical Formulation&lt;/h2>
&lt;p>The BC sits on side A (&amp;ldquo;own&amp;rdquo;), which carries the &lt;code>faMesh&lt;/code> of the
&lt;code>capillaryInterface&lt;/code>; &amp;ldquo;nbr&amp;rdquo; is side B.
$\tilde{\dot m} = \mathcal{I}_{\text{nbr}\to\text{own}}(\dot m)$.&lt;/p>
&lt;p>For a field named &lt;code>p&lt;/code>:&lt;/p>
$$
p_\text{own}^{*} = \mathcal{I}(p_\text{nbr}) + 2(\mu_\text{nbr}-\mu_\text{own})\,\nabla_s\cdot\mathbf{u}_s - \sigma\kappa + (\rho_\text{nbr}-\rho_\text{own})\,(\mathbf{x}_f-\mathbf{x}_\text{ref})\cdot\mathbf{g} - \left(\frac{1}{\rho_\text{own}}-\frac{1}{\rho_\text{nbr}}\right)\tilde{\dot m}^2
\quad \text{on } \Gamma
$$
&lt;p>For a field named &lt;code>pKin&lt;/code>:&lt;/p>
$$
p_{\text{kin,own}}^{*} = \frac{1}{\rho_\text{own}}\Big[\rho_\text{nbr}\,\mathcal{I}(p_\text{kin,nbr}) + 2(\mu_\text{nbr}-\mu_\text{own})\,\nabla_s\cdot\mathbf{u}_s - \sigma\kappa + (\rho_\text{nbr}-\rho_\text{own})\,(\mathbf{x}_f-\mathbf{x}_\text{ref})\cdot\mathbf{g} - \left(\frac{1}{\rho_\text{own}}-\frac{1}{\rho_\text{nbr}}\right)\tilde{\dot m}^2\Big]
$$
&lt;p>followed by relaxation, $p^{k} = p^{k-1} + \omega\,(p^{*} - p^{k-1})$.&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>$p$, $p_\text{kin}$&lt;/td>
&lt;td>Pressure / kinematic pressure&lt;/td>
&lt;td>Pa / m²/s²&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\dot m$&lt;/td>
&lt;td>Interfacial mass flux, &lt;code>mDotS()&lt;/code> of the &lt;code>massTransferInterface&lt;/code>&lt;/td>
&lt;td>kg/(m² s)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{u}_s$&lt;/td>
&lt;td>Surface velocity on the &lt;code>faMesh&lt;/code> (&lt;code>Us()&lt;/code>)&lt;/td>
&lt;td>m/s&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\sigma$, $\kappa$&lt;/td>
&lt;td>Surface tension and face curvature from the &lt;code>capillaryInterface&lt;/code>&lt;/td>
&lt;td>N/m, 1/m&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mu$, $\rho$&lt;/td>
&lt;td>&lt;code>mu&lt;/code>, &lt;code>rho&lt;/code> from each region&amp;rsquo;s &lt;code>transportProperties&lt;/code>&lt;/td>
&lt;td>Pa·s, kg/m³&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{g}$&lt;/td>
&lt;td>&lt;code>uniformDimensionedVectorField g&lt;/code> of the local region&lt;/td>
&lt;td>m/s²&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{x}_\text{ref}$&lt;/td>
&lt;td>&lt;code>PISO.pRefPoint&lt;/code> from the local &lt;code>fvSolution&lt;/code>&lt;/td>
&lt;td>m&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="implementation">Implementation&lt;/h2>
&lt;p>&lt;code>updateCoeffs()&lt;/code> is the generic one of &lt;code>genericRegionCoupledJump&lt;/code>: return if
updated or &lt;code>coupled no&lt;/code>; call &lt;code>update()&lt;/code> on the first &lt;code>interfaceType&lt;/code> (the
&lt;code>capillaryInterface&lt;/code>); interpolate the neighbour field (looked up by the
local field name); add &lt;code>valueJump()&lt;/code>; relax; call
&lt;code>fixedValue::updateCoeffs()&lt;/code>.&lt;/p>
&lt;p>&lt;code>valueJump()&lt;/code> is that of &lt;code>regionCoupledPressureValue&lt;/code> with the extra recoil
term. It aborts unless the first &lt;code>interfaceType&lt;/code> is &lt;code>capillaryInterface&lt;/code>,
finds the &lt;code>massTransferInterface&lt;/code> by type name and interpolates &lt;code>mDotS()&lt;/code>
from the neighbour side. &lt;code>PISO.pRefPoint&lt;/code>, &lt;code>g&lt;/code>, and &lt;code>mu&lt;/code>/&lt;code>rho&lt;/code> of both
regions are required. The mesh flux and patch normals are computed but not
used.&lt;/p>
&lt;p>Since only the first interface is &lt;code>update()&lt;/code>d, $\dot m$ is not recomputed by
this BC. It changes only when a BC that lists &lt;code>massTransferInterface&lt;/code> first
(e.g. &lt;code>regionCoupledPhaseChangeHeatFlux&lt;/code> on &lt;code>T&lt;/code>) is updated. Until then the
recoil term is zero and the BC behaves like &lt;code>regionCoupledPressureValue&lt;/code>.&lt;/p>
&lt;p>The &lt;code>p&lt;/code> jump residual of the &lt;code>pUPimple&lt;/code> DNA loop is taken from this BC
(side A is checked first). &lt;code>flux()&lt;/code> uses the hardcoded diffusivity &lt;code>v&lt;/code>, for
which &lt;code>diffCoeff()&lt;/code> returns $\rho$ instead of $1/\rho$ (1 for &lt;code>pKin&lt;/code>); the
partner &lt;code>regionCoupledPressureFlux&lt;/code> cancels this flux.&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>regionCoupledMassTransferPressureValue&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>List of interface type names. First entry must be &lt;code>capillaryInterface&lt;/code>; &lt;code>massTransferInterface&lt;/code> must also be listed&lt;/td>
&lt;td>yes&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>value&lt;/code>&lt;/td>
&lt;td>Initial patch value. Read if present. If missing, the patch values are not initialised&lt;/td>
&lt;td>in practice yes&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>diffusivity&lt;/code>&lt;/td>
&lt;td>Read, but ignored: the BC always uses &lt;code>v&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>empty&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>neighbourFieldName&lt;/code>&lt;/td>
&lt;td>Read by the coupling manager, not used by this BC&lt;/td>
&lt;td>no&lt;/td>
&lt;td>local field name&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>jumpCoefficient&lt;/code>&lt;/td>
&lt;td>Read by the base class, not used, not written back&lt;/td>
&lt;td>no&lt;/td>
&lt;td>empty&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>accType&lt;/code>&lt;/td>
&lt;td>Acceleration model: &lt;code>fixed&lt;/code>, &lt;code>aitken&lt;/code>, &lt;code>IQNILS&lt;/code>. A warning is printed if missing&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>fixed&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>relax&lt;/code>&lt;/td>
&lt;td>(Initial) 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&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>snGrad()&lt;/code> / matrix coefficients&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 face-normal gradient&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Entries read from other files: &lt;code>PISO { pRefPoint (...); }&lt;/code> in the local
&lt;code>fvSolution&lt;/code>, &lt;code>g&lt;/code> in the local &lt;code>constant/&lt;/code>, and &lt;code>mu&lt;/code>, &lt;code>rho&lt;/code> in
&lt;code>transportProperties&lt;/code> of both regions.&lt;/p>
&lt;h2 id="usage">Usage&lt;/h2>
&lt;p>No tutorial uses this BC. Untested entry on side A, following
&lt;code>massTransferInterface&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">// 0/fluidA/p
&lt;/span>&lt;/span>&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 regionCoupledMassTransferPressureValue;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (capillaryInterface massTransferInterface);
&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 uniform 0;
&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 on side B (&lt;em>inferred&lt;/em>):&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">// 0/fluidB/p
&lt;/span>&lt;/span>&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 regionCoupledPressureFlux;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (capillaryInterface massTransferInterface);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> value uniform 0;
&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 &lt;code>regionInterfaceProperties&lt;/code> entry is shown on the
&lt;code>regionCoupledMassTransferVelocityValue&lt;/code> page and in &lt;code>massTransferInterface&lt;/code>.&lt;/p>
&lt;h2 id="known-limitations">Known Limitations&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Untested, no tutorial&lt;/strong>; the intended region type &lt;code>interTrackFluid&lt;/code> is
disabled.&lt;/li>
&lt;li>&lt;strong>$\dot m$ is only updated through another BC.&lt;/strong> See
&lt;a href="https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/coupled-boundary-conditions/regioncoupledmasstransferpressurevalue/#implementation">Implementation&lt;/a>.&lt;/li>
&lt;li>&lt;strong>&lt;code>mDotS()&lt;/code> is interpolated from the neighbour although it is defined on
side A&lt;/strong> (&lt;em>inferred&lt;/em>), where this BC sits. Harmless only for identical
conformal patches.&lt;/li>
&lt;li>&lt;strong>Must sit on side A&lt;/strong> (&lt;em>inferred&lt;/em>): $\sigma$, $\kappa$ and
$\nabla_s\cdot\mathbf{u}_s$ are used without interpolation.&lt;/li>
&lt;li>&lt;strong>No dedicated flux partner.&lt;/strong> &lt;code>regionCoupledPressureFlux&lt;/code> does not
account for phase change.&lt;/li>
&lt;li>&lt;strong>Constant properties&lt;/strong>, &lt;code>PISO.pRefPoint&lt;/code> required, &lt;code>diffusivity&lt;/code> and
&lt;code>neighbourFieldName&lt;/code> ignored (as for &lt;code>regionCoupledPressureValue&lt;/code>).&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;/td>
&lt;td>No tutorial uses &lt;code>regionCoupledMassTransferPressureValue&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><item><title>Docs: regionCoupledMassTransferVelocityFlux</title><link>https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/coupled-boundary-conditions/regioncoupledmasstransfervelocityflux/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/coupled-boundary-conditions/regioncoupledmasstransfervelocityflux/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;code>regionCoupledMassTransferVelocityFlux&lt;/code> is the Neumann (flux) half of the
partitioned velocity coupling across a sharp liquid-vapour interface with
phase change. It acts on a &lt;code>volVectorField&lt;/code> (&lt;code>U&lt;/code>) and derives from
&lt;code>genericRegionCoupledFlux&amp;lt;vector&amp;gt;&lt;/code>, i.e. from &lt;code>fixedGradient&lt;/code>. It uses the
same stress balance as &lt;code>regionCoupledVelocityFlux&lt;/code> and adds the momentum
flux $\dot m\,[\![\mathbf{u}_\text{rel}]\!]$ that the mass flux carries
across the interface. The partner condition on the other side is
&lt;code>regionCoupledMassTransferVelocityValue&lt;/code>. The BC needs a &lt;code>capillaryInterface&lt;/code>
as the &lt;strong>first&lt;/strong> &lt;code>interfaceType&lt;/code> entry and a &lt;code>massTransferInterface&lt;/code> on the
same patch pair.&lt;/p>
&lt;h2 id="mathematical-formulation">Mathematical Formulation&lt;/h2>
&lt;p>&amp;ldquo;own&amp;rdquo; is the side the BC sits on (side A, which carries the &lt;code>faMesh&lt;/code>) and
&amp;ldquo;nbr&amp;rdquo; the other side. $\mathbf{n}$ is the &lt;code>faMesh&lt;/code> face normal,
$\mathbf{n}_\varepsilon = \mathbf{n}$ if the local region is &lt;code>meshA&lt;/code> of the
&lt;code>capillaryInterface&lt;/code> (otherwise $-\mathbf{n}$). $\tilde{\mathbf{F}}$ is the
interpolated diffusive flux of the partner BC ($\mu_\text{nbr}$ times the
tangential face-normal gradient) and
$\tilde{\dot m} = \mathcal{I}_{\text{nbr}\to\text{own}}(\dot m)$.&lt;/p>
$$
\mu_\text{own}\frac{\partial \mathbf{U}_\text{own}}{\partial n} =
-(\mathbf{I}-\mathbf{n}\mathbf{n})\cdot\tilde{\mathbf{F}} + \mathbf{f}_{\sigma,t} - \mu_\text{own}\,\mathbf{n}\,(\nabla_s\cdot\mathbf{u}_s) + (\mu_\text{nbr}-\mu_\text{own})\,(\nabla_s\mathbf{u}_s)\cdot\mathbf{n} + \tilde{\dot m}\left[\left(\frac{\tilde{\dot m}}{\rho_\text{own}}\mathbf{n}_\varepsilon - \mathbf{U}_\text{own}\right) - \left(\frac{\tilde{\dot m}}{\rho_\text{nbr}}\mathbf{n}_\varepsilon - \mathbf{U}_\text{nbr}\right)\right]
$$
&lt;p>with the tangential surface-tension force&lt;/p>
$$
\mathbf{f}_{\sigma,t} = \sigma\,\frac{1}{S_f}\sum_{e} \mathbf{L}_e\,c_e \;-\; \sigma\kappa\,\mathbf{n}
$$
&lt;p>$\mathbf{U}_\text{own}$ are the current patch values (previous iteration) and
$\mathbf{U}_\text{nbr}$ the neighbour patch values &lt;strong>without interpolation&lt;/strong>
(see &lt;a href="https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/coupled-boundary-conditions/regioncoupledmasstransfervelocityflux/#known-limitations">Known Limitations&lt;/a>). The gradient is relaxed,
$g^{k} = g^{k-1} + \omega\,(g^{*} - g^{k-1})$, and the patch value is
reconstructed from it in &lt;code>evaluate()&lt;/code> as described for
&lt;code>regionCoupledVelocityFlux&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>$\mathbf{U}$&lt;/td>
&lt;td>Velocity&lt;/td>
&lt;td>m/s&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\dot m$&lt;/td>
&lt;td>Interfacial mass flux, &lt;code>mDotS()&lt;/code> of the &lt;code>massTransferInterface&lt;/code>&lt;/td>
&lt;td>kg/(m² s)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{u}_s$&lt;/td>
&lt;td>Surface velocity on the &lt;code>faMesh&lt;/code> (&lt;code>Us()&lt;/code>)&lt;/td>
&lt;td>m/s&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\sigma$, $\kappa$&lt;/td>
&lt;td>Surface tension and face curvature from the &lt;code>capillaryInterface&lt;/code>&lt;/td>
&lt;td>N/m, 1/m&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{L}_e$, $c_e$&lt;/td>
&lt;td>&lt;code>faMesh&lt;/code> edge length vectors and &lt;code>edgeLengthCorrection()&lt;/code>&lt;/td>
&lt;td>m, –&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mu$, $\rho$&lt;/td>
&lt;td>&lt;code>mu&lt;/code>, &lt;code>rho&lt;/code> from each region&amp;rsquo;s &lt;code>transportProperties&lt;/code>&lt;/td>
&lt;td>Pa·s, kg/m³&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="implementation">Implementation&lt;/h2>
&lt;p>&lt;code>updateCoeffs()&lt;/code> is the generic one of &lt;code>genericRegionCoupledFlux&lt;/code>: return if
updated or &lt;code>coupled no&lt;/code>; call &lt;code>update()&lt;/code> on the first &lt;code>interfaceType&lt;/code> (the
&lt;code>capillaryInterface&lt;/code>); interpolate and negate the neighbour &lt;code>flux()&lt;/code> (the
neighbour patch field is &lt;code>refCast&lt;/code> to &lt;code>genericRegionCoupledJump&amp;lt;vector&amp;gt;&lt;/code>);
add &lt;code>fluxJump()&lt;/code>; divide by &lt;code>diffCoeff()&lt;/code> (hardcoded name &lt;code>mu&lt;/code>: registered
&lt;code>volScalarField mu&lt;/code>, else &lt;code>transportProperties&lt;/code>); relax; call
&lt;code>fixedGradient::updateCoeffs()&lt;/code>.&lt;/p>
&lt;p>&lt;code>fluxJump()&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>aborts unless the first &lt;code>interfaceType&lt;/code> is &lt;code>capillaryInterface&lt;/code>; finds the
&lt;code>massTransferInterface&lt;/code> by type name;&lt;/li>
&lt;li>computes $\nabla_s\cdot\mathbf{u}_s$, $\nabla_s\mathbf{u}_s$ and the
edge-integrated surface-tension force on the &lt;code>faMesh&lt;/code>;&lt;/li>
&lt;li>reads &lt;code>mu&lt;/code> and &lt;code>rho&lt;/code> of both regions from &lt;code>transportProperties&lt;/code>; if a
region has a &lt;code>pKin&lt;/code> field, its &lt;code>mu&lt;/code> must equal &lt;code>rho*nu&lt;/code> exactly, otherwise
the run stops;&lt;/li>
&lt;li>interpolates &lt;code>mDotS()&lt;/code> from the neighbour side.&lt;/li>
&lt;/ul>
&lt;p>Because only the first interface is &lt;code>update()&lt;/code>d, $\dot m$ is not recomputed by
this BC. It changes only when a BC that lists &lt;code>massTransferInterface&lt;/code> first
(e.g. &lt;code>regionCoupledPhaseChangeHeatFlux&lt;/code> on &lt;code>T&lt;/code>) is updated.&lt;/p>
&lt;p>The &lt;code>U&lt;/code> flux residual of the &lt;code>pUPimple&lt;/code> DNA loop is taken from this BC if it
sits on side A:
$\lVert\mu_\text{own}\partial_n\mathbf{U}_\text{own} + \tilde{\mathbf{F}} - \text{fluxJump}\rVert_2$,
normalised as in &lt;code>genericRegionCoupledFlux&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>regionCoupledMassTransferVelocityFlux&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>List of interface type names. First entry must be &lt;code>capillaryInterface&lt;/code>; &lt;code>massTransferInterface&lt;/code> must also be listed&lt;/td>
&lt;td>yes&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>gradient&lt;/code>&lt;/td>
&lt;td>Initial patch-normal gradient. Read if present; otherwise zero gradient and the patch value is set from the internal field&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 (&lt;code>fixedGradient&lt;/code> ignores it). Written by &lt;code>write()&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>diffusivity&lt;/code>&lt;/td>
&lt;td>Read, but ignored: the BC always uses &lt;code>mu&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>empty&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>neighbourFieldName&lt;/code>&lt;/td>
&lt;td>Read by the coupling manager, not used by this BC&lt;/td>
&lt;td>no&lt;/td>
&lt;td>local field name&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>accType&lt;/code>&lt;/td>
&lt;td>Acceleration model for the gradient: &lt;code>fixed&lt;/code>, &lt;code>aitken&lt;/code>, &lt;code>IQNILS&lt;/code>. A warning is printed if missing&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>fixed&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>relax&lt;/code>&lt;/td>
&lt;td>(Initial) 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&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 reconstruction of the patch value&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;code>write()&lt;/code> does not write &lt;code>gradient&lt;/code>.&lt;/p>
&lt;h2 id="usage">Usage&lt;/h2>
&lt;p>No tutorial uses this BC. Untested entry on side A, following
&lt;code>massTransferInterface&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">// 0/fluidA/U
&lt;/span>&lt;/span>&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 regionCoupledMassTransferVelocityFlux;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (capillaryInterface massTransferInterface);
&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 uniform (0 0 0);
&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 on side B:&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">// 0/fluidB/U
&lt;/span>&lt;/span>&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 regionCoupledMassTransferVelocityValue;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (capillaryInterface massTransferInterface);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> value uniform (0 0 0);
&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 &lt;code>regionInterfaceProperties&lt;/code> entry is shown on the
&lt;code>regionCoupledMassTransferVelocityValue&lt;/code> page and in &lt;code>massTransferInterface&lt;/code>.&lt;/p>
&lt;h2 id="known-limitations">Known Limitations&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Neighbour velocity is not interpolated (bug).&lt;/strong> $\mathbf{U}_\text{nbr}$
in the mass-flux term is the raw neighbour patch field, combined index by
index with local fields. This is only correct for conformal patches with
identical face order; otherwise the sizes may not even match.&lt;/li>
&lt;li>&lt;strong>&lt;code>mDotS()&lt;/code> is interpolated from the neighbour although it is defined on
side A&lt;/strong> (&lt;em>inferred&lt;/em>), where this BC sits. Harmless only for identical
conformal patches.&lt;/li>
&lt;li>&lt;strong>Must sit on side A&lt;/strong> (&lt;em>inferred&lt;/em>): &lt;code>faMesh&lt;/code> normals, $\mathbf{u}_s$,
$\sigma$, $\kappa$ are used without interpolation.&lt;/li>
&lt;li>&lt;strong>$\dot m$ is only updated through another BC.&lt;/strong> See
&lt;a href="https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/coupled-boundary-conditions/regioncoupledmasstransfervelocityflux/#implementation">Implementation&lt;/a>.&lt;/li>
&lt;li>&lt;strong>Exact &lt;code>mu == rho*nu&lt;/code> check&lt;/strong> for regions with &lt;code>pKin&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Relaxation history starts from the patch value&lt;/strong> (&lt;em>inferred&lt;/em>). The base
class initialises the acceleration model with the patch values but relaxes
the gradient; harmless with &lt;code>relax 1&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Untested, no tutorial&lt;/strong>; &lt;code>interTrackFluid&lt;/code> is disabled.&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;/td>
&lt;td>No tutorial uses &lt;code>regionCoupledMassTransferVelocityFlux&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><item><title>Docs: regionCoupledMassTransferVelocityValue</title><link>https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/coupled-boundary-conditions/regioncoupledmasstransfervelocityvalue/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/coupled-boundary-conditions/regioncoupledmasstransfervelocityvalue/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;code>regionCoupledMassTransferVelocityValue&lt;/code> is the Dirichlet (jump) half of the
partitioned velocity coupling across a sharp liquid-vapour interface with
phase change. It acts on a &lt;code>volVectorField&lt;/code> (&lt;code>U&lt;/code>) and derives from
&lt;code>genericRegionCoupledJump&amp;lt;vector&amp;gt;&lt;/code>, i.e. from &lt;code>fixedValue&lt;/code>. The patch value is
the interpolated neighbour velocity plus the jump in normal velocity that a
mass flux $\dot m$ produces between two phases of different density. The
partner condition on the other side is
&lt;code>regionCoupledMassTransferVelocityFlux&lt;/code>. The BC needs both a
&lt;code>capillaryInterface&lt;/code> and a &lt;code>massTransferInterface&lt;/code> on the same patch pair,
and the pressure is coupled by &lt;code>regionCoupledMassTransferPressureValue&lt;/code> and
(&lt;em>inferred&lt;/em>) &lt;code>regionCoupledPressureFlux&lt;/code>. It is the phase-change counterpart
of &lt;code>regionCoupledVelocityValue&lt;/code>.&lt;/p>
&lt;h2 id="mathematical-formulation">Mathematical Formulation&lt;/h2>
&lt;p>&amp;ldquo;own&amp;rdquo; is the side the BC sits on and &amp;ldquo;nbr&amp;rdquo; the other side.
$\mathcal{I}_{\text{nbr}\to\text{own}}$ is the patch-to-patch interpolation.
$\mathbf{n}_\varepsilon$ is the local patch normal if the local region is
&lt;code>meshA&lt;/code> of the &lt;code>capillaryInterface&lt;/code>, and its negative otherwise. In both
cases it points out of region A.&lt;/p>
$$
\mathbf{U}_\text{own}^{*} = \mathcal{I}_{\text{nbr}\to\text{own}}(\mathbf{U}_\text{nbr}) + \left(\frac{1}{\rho_\text{own}} - \frac{1}{\rho_\text{nbr}}\right)\tilde{\dot m}\,\mathbf{n}_\varepsilon,
\qquad
\tilde{\dot m} = \mathcal{I}_{\text{nbr}\to\text{own}}(\dot m)
\quad \text{on } \Gamma
$$
&lt;p>followed by relaxation,
$\mathbf{U}^{k} = \mathbf{U}^{k-1} + \omega\,(\mathbf{U}^{*} - \mathbf{U}^{k-1})$.&lt;/p>
&lt;p>Unlike &lt;code>regionCoupledVelocityValue&lt;/code>, no surface-velocity or mesh-velocity
correction of the normal component is applied. That version is still in the
source but commented out.&lt;/p>
&lt;p>The diffusive momentum flux handed to &lt;code>regionCoupledMassTransferVelocityFlux&lt;/code>
is the same as for &lt;code>regionCoupledVelocityValue&lt;/code>: $\mu_\text{own}$ times the
tangential part of the face-normal gradient (normal component removed in the
vector &lt;code>snGrad()&lt;/code> of &lt;code>genericRegionCoupledJump&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>$\mathbf{U}$&lt;/td>
&lt;td>Velocity&lt;/td>
&lt;td>m/s&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\dot m$&lt;/td>
&lt;td>Interfacial mass flux, &lt;code>mDotS()&lt;/code> of the &lt;code>massTransferInterface&lt;/code> (area field on the side-A &lt;code>faMesh&lt;/code>)&lt;/td>
&lt;td>kg/(m² s)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\rho_\text{own}$, $\rho_\text{nbr}$&lt;/td>
&lt;td>&lt;code>rho&lt;/code> from each region&amp;rsquo;s &lt;code>transportProperties&lt;/code>&lt;/td>
&lt;td>kg/m³&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mathbf{n}_\varepsilon$&lt;/td>
&lt;td>Interface normal pointing out of region A&lt;/td>
&lt;td>–&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\mu_\text{own}$&lt;/td>
&lt;td>Diffusivity &lt;code>mu&lt;/code> (field or &lt;code>transportProperties&lt;/code>)&lt;/td>
&lt;td>Pa·s&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="implementation">Implementation&lt;/h2>
&lt;p>&lt;code>updateCoeffs()&lt;/code> is the generic one of &lt;code>genericRegionCoupledJump&lt;/code>: return if
updated or &lt;code>coupled no&lt;/code>; call &lt;code>update()&lt;/code> on the &lt;strong>first&lt;/strong> &lt;code>interfaceType&lt;/code>;
interpolate the neighbour &lt;code>U&lt;/code> (looked up by the local field name); add
&lt;code>valueJump()&lt;/code>; relax; call &lt;code>fixedValue::updateCoeffs()&lt;/code>.&lt;/p>
&lt;p>&lt;code>valueJump()&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>finds the &lt;code>capillaryInterface&lt;/code> and the &lt;code>massTransferInterface&lt;/code> by type name
on this patch (&lt;code>rgInterface(&amp;lt;type&amp;gt;)&lt;/code>), independent of their order in
&lt;code>interfaceType&lt;/code>;&lt;/li>
&lt;li>interpolates &lt;code>mDotS()&lt;/code> from the neighbour side;&lt;/li>
&lt;li>reads &lt;code>rho&lt;/code> of both regions from &lt;code>transportProperties&lt;/code>;&lt;/li>
&lt;li>&lt;code>refCast&lt;/code>s the neighbour &lt;code>U&lt;/code> patch field to &lt;code>genericRegionCoupledFlux&amp;lt;vector&amp;gt;&lt;/code>
and uses its values only for a diagnostic line;&lt;/li>
&lt;li>prints &lt;code>U Dirichlet boundary contributions: ...&lt;/code> (integrated volume fluxes
of the neighbour velocity, of the jump term and of mesh motion plus
$\dot m/\rho$) on every call.&lt;/li>
&lt;/ul>
&lt;p>Only the interface listed first in &lt;code>interfaceType&lt;/code> is &lt;code>update()&lt;/code>d by this
BC. With &lt;code>(capillaryInterface massTransferInterface)&lt;/code> the
&lt;code>massTransferInterface&lt;/code> is not corrected here. $\dot m$ is only recomputed
when a BC that lists &lt;code>massTransferInterface&lt;/code> first (e.g.
&lt;code>regionCoupledPhaseChangeHeatFlux&lt;/code> on &lt;code>T&lt;/code>) is updated. Otherwise it stays at
its initial value of zero.&lt;/p>
&lt;p>The class has two more functions that are not used in the solution:&lt;/p>
&lt;ul>
&lt;li>&lt;code>updatePhi()&lt;/code> would set the boundary &lt;code>phi&lt;/code> to the negated interpolated
neighbour flux plus $\pm(1/\rho_\text{own}-1/\rho_\text{nbr})\dot m\,|\mathbf{S}_f|$.
The call in the base class is commented out.&lt;/li>
&lt;li>The member &lt;code>correctClosedVolumePhi(phi, U, p, rAU)&lt;/code> would correct the
interface flux to the net volume flux $-\dot m/\rho\,|\mathbf{S}_f|$. It is
never called. The global &lt;code>correctClosedVolumePhi()&lt;/code> used by &lt;code>icoFluid&lt;/code> and
&lt;code>interTrackFluid&lt;/code> (&lt;code>closedVolume&lt;/code> on) recognises this BC, but forces the net
volume flux through the patch to &lt;strong>zero&lt;/strong>.&lt;/li>
&lt;/ul>
&lt;p>The &lt;code>U&lt;/code> jump residual is evaluated on this BC if the side-A &lt;code>U&lt;/code> patch is not
jump-derived (as in the intended setup):
$\lVert\mathbf{U}_\text{own} - \mathcal{I}(\mathbf{U}_\text{nbr}) - \text{valueJump}\rVert_2$,
normalised as in &lt;code>genericRegionCoupledJump&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>regionCoupledMassTransferVelocityValue&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>List of interface type names. Must contain &lt;code>capillaryInterface&lt;/code> and &lt;code>massTransferInterface&lt;/code>; the first entry is the one this BC &lt;code>update()&lt;/code>s&lt;/td>
&lt;td>yes&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>value&lt;/code>&lt;/td>
&lt;td>Initial patch value. Read if present. If missing, the patch values are not initialised&lt;/td>
&lt;td>in practice yes&lt;/td>
&lt;td>—&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>diffusivity&lt;/code>&lt;/td>
&lt;td>Read, but ignored: the BC always uses &lt;code>mu&lt;/code>&lt;/td>
&lt;td>no&lt;/td>
&lt;td>empty&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>neighbourFieldName&lt;/code>&lt;/td>
&lt;td>Read by the coupling manager, not used by this BC&lt;/td>
&lt;td>no&lt;/td>
&lt;td>local field name&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>jumpCoefficient&lt;/code>&lt;/td>
&lt;td>Read by the base class, not used, not written back&lt;/td>
&lt;td>no&lt;/td>
&lt;td>empty&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>accType&lt;/code>&lt;/td>
&lt;td>Acceleration model: &lt;code>fixed&lt;/code>, &lt;code>aitken&lt;/code>, &lt;code>IQNILS&lt;/code>. A warning is printed if missing&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>fixed&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>relax&lt;/code>&lt;/td>
&lt;td>(Initial) 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&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>snGrad()&lt;/code> / matrix coefficients&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 face-normal gradient&lt;/td>
&lt;td>no&lt;/td>
&lt;td>&lt;code>false&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;code>rho&lt;/code> (and &lt;code>mu&lt;/code>) must be present in &lt;code>transportProperties&lt;/code> of both regions.&lt;/p>
&lt;h2 id="usage">Usage&lt;/h2>
&lt;p>No tutorial uses this BC. The entry below follows &lt;code>massTransferInterface&lt;/code>
and has not been run. Side B (second in &lt;code>coupledPatchPair&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">// 0/fluidB/U
&lt;/span>&lt;/span>&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 regionCoupledMassTransferVelocityValue;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (capillaryInterface massTransferInterface);
&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 uniform (0 0 0);
&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 on side A:&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">// 0/fluidA/U
&lt;/span>&lt;/span>&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 regionCoupledMassTransferVelocityFlux;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (capillaryInterface massTransferInterface);
&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 uniform (0 0 0);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>regionInterfaceProperties&lt;/code> (excerpt):&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">fluidAfluidB
&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 (capillaryInterface massTransferInterface);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&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"> (fluidA interface)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> (fluidB 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">
&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"> pUPimple
&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">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> capillaryInterfaceCoeffs { sigma sigma [1 0 -2 0 0 0 0] 0.07232; }
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> massTransferInterfaceCoeffs { hlv hlv [0 2 -2 0 0 0 0] 2.257e6; TSat TSat [0 0 0 1 0 0 0] 373.15; }
&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 full case setup, including the &lt;code>T&lt;/code> coupling that drives $\dot m$, is in
&lt;code>massTransferInterface&lt;/code>.&lt;/p>
&lt;h2 id="known-limitations">Known Limitations&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Untested, no tutorial.&lt;/strong> The interface-tracking region type it was
written for (&lt;code>interTrackFluid&lt;/code>) is disabled in
&lt;code>src/multiRegionSystem/Make/files&lt;/code>.&lt;/li>
&lt;li>&lt;strong>$\dot m$ is only updated through another BC.&lt;/strong> See
&lt;a href="https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/coupled-boundary-conditions/regioncoupledmasstransfervelocityvalue/#implementation">Implementation&lt;/a>.&lt;/li>
&lt;li>&lt;strong>Must sit on side B&lt;/strong> (&lt;em>inferred&lt;/em>). &lt;code>mDotS()&lt;/code> lives on the side-A &lt;code>faMesh&lt;/code>
and is interpolated &amp;ldquo;from the neighbour&amp;rdquo;.&lt;/li>
&lt;li>&lt;strong>Neighbour must be flux-derived.&lt;/strong> The neighbour &lt;code>U&lt;/code> patch field is
&lt;code>refCast&lt;/code> to &lt;code>genericRegionCoupledFlux&amp;lt;vector&amp;gt;&lt;/code> (for a log line only); any
other type aborts.&lt;/li>
&lt;li>&lt;strong>Closed-volume correction ignores phase change.&lt;/strong> With &lt;code>closedVolume&lt;/code> on,
the global &lt;code>correctClosedVolumePhi()&lt;/code> forces zero net volume flux through
this patch, which contradicts a non-zero $\dot m$ (&lt;em>inferred&lt;/em>).&lt;/li>
&lt;li>&lt;strong>No normal mesh-velocity term.&lt;/strong> The normal velocity is not tied to the
mesh motion as in &lt;code>regionCoupledVelocityValue&lt;/code> (&lt;em>inferred from the
commented-out code; intent unclear&lt;/em>).&lt;/li>
&lt;li>&lt;strong>Log output on every call&lt;/strong>; &lt;code>diffusivity&lt;/code> and &lt;code>neighbourFieldName&lt;/code> are
ignored.&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;/td>
&lt;td>No tutorial uses &lt;code>regionCoupledMassTransferVelocityValue&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><item><title>Docs: regionCoupledPhaseChangeHeatFlux</title><link>https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/coupled-boundary-conditions/regioncoupledphasechangeheatflux/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://multiphysicsfoam.com/docs/user-guide/boundary-conditions/coupled-boundary-conditions/regioncoupledphasechangeheatflux/</guid><description>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;code>regionCoupledPhaseChangeHeatFlux&lt;/code> is the flux side (Neumann side) of the
temperature coupling of &lt;code>massTransferInterface&lt;/code> (evaporation/condensation
between two fluid regions). 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 conductive heat fluxes of both sides
add up to the interfacial heat-flux jump $q_{sat}$, which
&lt;code>massTransferInterface&lt;/code> computes and consumes as latent heat. The interface
found through the first &lt;code>interfaceType&lt;/code> entry must be a
&lt;code>massTransferInterface&lt;/code>. The partner on the neighbour region must be a
&lt;code>genericRegionCoupledJump&amp;lt;scalar&amp;gt;&lt;/code>-derived BC. The class does not prescribe
which one: &lt;code>regionCoupledScalarJump&lt;/code> with &lt;code>interfaceType (massTransferInterface)&lt;/code> and &lt;code>diffusivity k&lt;/code> fits (&lt;em>inferred&lt;/em>).
&lt;code>regionCoupledTemperatureJump&lt;/code> only works if a &lt;code>heatTransferInterface&lt;/code> on the
same patch pair is listed first in its own &lt;code>interfaceType&lt;/code>.&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>
$$
k_B \frac{\partial T_B}{\partial n_B} + k_A \frac{\partial T_A}{\partial n_A} = q_{sat}
\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(k_A\, \partial_n T_A\right) + q_{sat}}{k_B}
$$
&lt;p>followed by relaxation with the acceleration model. The flux jump is the
heat-flux imbalance at saturation computed by &lt;code>massTransferInterface&lt;/code>:&lt;/p>
$$
q_{sat} = k_A \left.\frac{\partial T_A}{\partial n_A}\right|_{T_\Gamma = T_{sat}} + k_B \left.\frac{\partial T_B}{\partial n_B}\right|_{T_\Gamma = T_{sat}},
\qquad
\dot m = -\frac{q_{sat}}{h_{lv}}
$$
&lt;p>The value continuity $T_A = T_B$ comes from the jump-side partner. This BC
does not fix $T_\Gamma$ to $T_{sat}$.&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>$k_B$&lt;/td>
&lt;td>Thermal conductivity, diffusivity name fixed to &lt;code>k&lt;/code>&lt;/td>
&lt;td>W/(m K)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$k_A\,\partial_n T_A$&lt;/td>
&lt;td>&lt;code>flux()&lt;/code> of the jump-side partner (its own &lt;code>diffusivity&lt;/code>)&lt;/td>
&lt;td>W/m²&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$q_{sat}$&lt;/td>
&lt;td>&lt;code>massTransferInterface::fluxMTJump()&lt;/code> (area field &lt;code>&amp;lt;patchA&amp;gt;fluxMTJump&lt;/code>)&lt;/td>
&lt;td>W/m²&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$T_{sat}$, $h_{lv}$&lt;/td>
&lt;td>Saturation temperature and latent heat of the interface&lt;/td>
&lt;td>K, J/kg&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>$\dot m$&lt;/td>
&lt;td>Interfacial mass flux of the interface&lt;/td>
&lt;td>kg/(m² s)&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 the internal field of
&lt;code>massTransInterface().fluxMTJump()&lt;/code>, an &lt;code>areaScalarField&lt;/code> on the
interface&amp;rsquo;s finite-area mesh. It is used &lt;strong>as is&lt;/strong>, without interpolation
between the two sides.&lt;/li>
&lt;li>&lt;strong>&lt;code>massTransInterface()&lt;/code>&lt;/strong>: checks that the interface matched through the
first &lt;code>interfaceType&lt;/code> entry is a &lt;code>massTransferInterface&lt;/code>, otherwise
&lt;code>FatalError&lt;/code>. Called from &lt;code>fluxJump()&lt;/code>, i.e. in every &lt;code>updateCoeffs()&lt;/code> and
every residual evaluation.&lt;/li>
&lt;li>&lt;strong>&lt;code>diffusivityName()&lt;/code>&lt;/strong>: hard-coded to &lt;code>k&lt;/code>. The &lt;code>diffusivity&lt;/code> keyword is
read by the base class but ignored. &lt;code>diffCoeff()&lt;/code> takes a &lt;code>volScalarField k&lt;/code>
of the local region if one is registered, otherwise the uniform &lt;code>k&lt;/code> 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>, &lt;code>updateCoeffs()&lt;/code> first calls the interface&amp;rsquo;s
&lt;code>update()&lt;/code>. This runs &lt;code>massTransferInterface::correct()&lt;/code> → &lt;code>updateMDotS()&lt;/code>,
which recomputes $q_{sat}$ from copies of both &lt;code>T&lt;/code> fields with the interface
patches set to $T_{sat}$ (and sets $\dot m$ to zero at time index 1). The
jump-side partner triggers the same update. The BC then &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>, adds $q_{sat}$, divides by $k_B$,
relaxes and fixes the gradient. The flux residual
$|k_B g_B + \mathcal{I}(q_A) - q_{sat}|$ 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>regionCoupledPhaseChangeHeatFlux&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>massTransferInterface&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>Read by the base class but &lt;strong>ignored&lt;/strong> (&lt;code>k&lt;/code> is always used)&lt;/td>
&lt;td>no&lt;/td>
&lt;td>—&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;p>The interface parameters ($T_{sat}$, $h_{lv}$) are read from
&lt;code>massTransferInterfaceCoeffs&lt;/code> in &lt;code>constant/regionInterfaceProperties&lt;/code>; see
&lt;code>docs/interfaces/massTransferInterface.md&lt;/code>.&lt;/p>
&lt;h2 id="usage">Usage&lt;/h2>
&lt;p>There is no tutorial. Entry pattern (from
&lt;code>docs/interfaces/massTransferInterface.md&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">// 0/fluidB/T
&lt;/span>&lt;/span>&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 regionCoupledPhaseChangeHeatFlux;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (massTransferInterface);
&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 uniform 373.15;
&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 on the other region (&lt;em>inferred&lt;/em>: the class only requires a
&lt;code>genericRegionCoupledJump&amp;lt;scalar&amp;gt;&lt;/code>-derived BC):&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">// 0/fluidA/T
&lt;/span>&lt;/span>&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 regionCoupledScalarJump;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> interfaceType (massTransferInterface);
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> diffusivity &amp;#34;k&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"> value uniform 373.15;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Both regions need a uniform &lt;code>k&lt;/code> in their &lt;code>transportProperties&lt;/code> (read by the
interface and by this BC). The patch pair is declared in
&lt;code>partitionedCoupledPatches&lt;/code> with &lt;code>interfaceType (... massTransferInterface)&lt;/code>,
&lt;code>coupledFields (T ...)&lt;/code> and a &lt;code>massTransferInterfaceCoeffs&lt;/code> sub-dictionary.&lt;/p>
&lt;h2 id="known-limitations">Known Limitations&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>No tutorial; untested.&lt;/strong> No case uses this BC or &lt;code>massTransferInterface&lt;/code>.
The &lt;code>interTrackFluid&lt;/code> region type it was written for is commented out in
&lt;code>src/multiRegionSystem/Make/files&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Needs &lt;code>massTransferInterface&lt;/code> first&lt;/strong> in &lt;code>interfaceType&lt;/code>; any other type
aborts in &lt;code>fluxJump()&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Conformal patches assumed.&lt;/strong> $q_{sat}$ lives on the finite-area mesh of
the interface (built on side A) and is returned without mapping. If this BC
is on side B, the result is only correct when both patches have the same
faces in the same order (&lt;em>inferred&lt;/em>). Otherwise the field sizes do not
match.&lt;/li>
&lt;li>&lt;strong>Diffusivity name fixed to &lt;code>k&lt;/code>.&lt;/strong> The &lt;code>diffusivity&lt;/code> keyword is ignored,
yet &lt;code>write()&lt;/code> writes &lt;code>diffusivity k;&lt;/code>. A registered &lt;code>volScalarField k&lt;/code> takes
precedence over the &lt;code>transportProperties&lt;/code> entry. In a turbulent region that
field is the turbulent kinetic energy, not the conductivity (&lt;em>inferred&lt;/em>).&lt;/li>
&lt;li>&lt;strong>Interface update on every call.&lt;/strong> The interface&amp;rsquo;s &lt;code>correct()&lt;/code>
(recomputing $q_{sat}$ and $\dot m$, with an &lt;code>Info&lt;/code> line) runs in every
&lt;code>updateCoeffs()&lt;/code> of every BC coupled through this interface.&lt;/li>
&lt;li>&lt;strong>$T_{sat}$ is not imposed&lt;/strong> on the interface temperature; it only enters
$q_{sat}$.&lt;/li>
&lt;li>Inherited from &lt;code>genericRegionCoupledFlux&lt;/code>: partner must be a jump BC,
&lt;code>value&lt;/code> ignored on input, &lt;code>gradient&lt;/code> not written, first relaxation uses
the patch values as reference, &lt;code>neighbourFieldName&lt;/code> unused, &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;/td>
&lt;td>No tutorial uses &lt;code>regionCoupledPhaseChangeHeatFlux&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>