<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>multiPhysicsFoam – Mass-Transfer</title><link>https://multiphysicsfoam.com/tags/mass-transfer/</link><description>Recent content in Mass-Transfer on multiPhysicsFoam</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://multiphysicsfoam.com/tags/mass-transfer/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></channel></rss>