diff --git a/applications/solvers/modules/isothermalFilm/Allwclean b/applications/solvers/modules/isothermalFilm/Allwclean
index e533300cc8..632cade7c1 100755
--- a/applications/solvers/modules/isothermalFilm/Allwclean
+++ b/applications/solvers/modules/isothermalFilm/Allwclean
@@ -3,5 +3,6 @@ cd ${0%/*} || exit 1 # Run from this directory
wclean libso filmCompressibleMomentumTransportModels
wclean
+wclean libso fvModels/filmVoFTransfer
#------------------------------------------------------------------------------
diff --git a/applications/solvers/modules/isothermalFilm/Allwmake b/applications/solvers/modules/isothermalFilm/Allwmake
index d53d5cd901..ebeddb9bb4 100755
--- a/applications/solvers/modules/isothermalFilm/Allwmake
+++ b/applications/solvers/modules/isothermalFilm/Allwmake
@@ -6,5 +6,6 @@ cd ${0%/*} || exit 1 # Run from this directory
wmake $targetType filmCompressibleMomentumTransportModels
wmake $targetType
+wmake $targetType fvModels/filmVoFTransfer
#------------------------------------------------------------------------------
diff --git a/applications/solvers/modules/isothermalFilm/Make/options b/applications/solvers/modules/isothermalFilm/Make/options
index 2f7950a8e4..a6e885b01c 100644
--- a/applications/solvers/modules/isothermalFilm/Make/options
+++ b/applications/solvers/modules/isothermalFilm/Make/options
@@ -5,8 +5,6 @@ EXE_INC = \
-I$(LIB_SRC)/MomentumTransportModels/momentumTransportModels/lnInclude \
-I$(LIB_SRC)/MomentumTransportModels/compressible/lnInclude \
-I$(LIB_SRC)/twoPhaseModels/interfaceProperties/lnInclude \
- -I$(LIB_SRC)/lagrangian/distributionModels/lnInclude \
- -I$(LIB_SRC)/finiteVolume/cfdTools \
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude
diff --git a/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/Make/files b/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/Make/files
new file mode 100644
index 0000000000..f8529a6b4e
--- /dev/null
+++ b/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/Make/files
@@ -0,0 +1,4 @@
+filmToVoFTransfer.C
+VoFtoFilmTransfer.C
+
+LIB = $(FOAM_LIBBIN)/libfilmVoFTransfer
diff --git a/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/Make/options b/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/Make/options
new file mode 100644
index 0000000000..13fc074e1a
--- /dev/null
+++ b/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/Make/options
@@ -0,0 +1,29 @@
+EXE_INC = -ggdb3 \
+ -I$(FOAM_SOLVERS)/modules/isothermalFilm/lnInclude \
+ -I$(FOAM_SOLVERS)/modules/isothermalFilm/filmCompressibleMomentumTransportModels/lnInclude \
+ -I$(LIB_SRC)/physicalProperties/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
+ -I$(LIB_SRC)/MomentumTransportModels/momentumTransportModels/lnInclude \
+ -I$(LIB_SRC)/MomentumTransportModels/compressible/lnInclude \
+ -I$(LIB_SRC)/twoPhaseModels/interfaceProperties/lnInclude \
+ \
+ -I$(FOAM_SOLVERS)/modules/compressibleVoF/lnInclude \
+ -I$(FOAM_SOLVERS)/modules/twoPhaseVoFSolver/lnInclude \
+ -I$(FOAM_SOLVERS)/modules/VoFSolver/lnInclude \
+ -I$(FOAM_SOLVERS)/modules/fluidSolver/lnInclude \
+ -I$(LIB_SRC)/twoPhaseModels/VoF \
+ -I$(LIB_SRC)/twoPhaseModels/interfaceCompression/lnInclude \
+ -I$(LIB_SRC)/twoPhaseModels/interfaceProperties/lnInclude \
+ -I$(LIB_SRC)/twoPhaseModels/twoPhaseMixture/lnInclude \
+ -I$(LIB_SRC)/twoPhaseModels/compressibleTwoPhases/lnInclude \
+ -I$(LIB_SRC)/MomentumTransportModels/momentumTransportModels/lnInclude \
+ -I$(LIB_SRC)/MomentumTransportModels/compressible/lnInclude \
+ -I$(LIB_SRC)/MomentumTransportModels/phaseCompressible/lnInclude \
+ -I$(LIB_SRC)/ThermophysicalTransportModels/thermophysicalTransportModel/lnInclude \
+ \
+ -I$(LIB_SRC)/finiteVolume/lnInclude \
+ -I$(LIB_SRC)/meshTools/lnInclude \
+
+LIB_LIBS = \
+ -lisothermalFilm \
+ -lcompressibleVoF
diff --git a/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/VoFtoFilmTransfer.C b/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/VoFtoFilmTransfer.C
new file mode 100644
index 0000000000..ffb9d058d5
--- /dev/null
+++ b/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/VoFtoFilmTransfer.C
@@ -0,0 +1,428 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Copyright (C) 2023 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+\*---------------------------------------------------------------------------*/
+
+#include "VoFtoFilmTransfer.H"
+#include "filmToVoFTransfer.H"
+#include "mappedPatchBase.H"
+#include "fvmSup.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+namespace Foam
+{
+ namespace fv
+ {
+ defineTypeNameAndDebug(VoFtoFilmTransfer, 0);
+
+ addToRunTimeSelectionTable
+ (
+ fvModel,
+ VoFtoFilmTransfer,
+ dictionary
+ );
+ }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::fv::VoFtoFilmTransfer::VoFtoFilmTransfer
+(
+ const word& sourceName,
+ const word& modelType,
+ const fvMesh& mesh,
+ const dictionary& dict
+)
+:
+ fvModel(sourceName, modelType, mesh, dict),
+ VoF_(mesh.lookupObject(solver::typeName)),
+ filmPatchName_(dict.lookup("filmPatch")),
+ filmPatchi_(mesh.boundaryMesh().findPatchID(filmPatchName_)),
+ phaseName_(dict.lookup("phase")),
+ thermo_
+ (
+ phaseName_ == VoF_.mixture.phase1Name()
+ ? VoF_.mixture.thermo1()
+ : VoF_.mixture.thermo2()
+ ),
+ alpha_
+ (
+ phaseName_ == VoF_.mixture.phase1Name()
+ ? VoF_.mixture.alpha1()
+ : VoF_.mixture.alpha2()
+ ),
+ curTimeIndex_(-1),
+ deltaFactorToFilm_
+ (
+ dict.lookupOrDefault("deltaFactorToFilm", 0.5)
+ ),
+ alphaToFilm_
+ (
+ dict.lookupOrDefault("alphaToFilm", 0.1)
+ ),
+ transferRateCoeff_
+ (
+ dict.lookupOrDefault("transferRateCoeff", 0.1)
+ ),
+ transferRate_
+ (
+ volScalarField::Internal::New
+ (
+ "transferRate",
+ mesh,
+ dimensionedScalar(dimless/dimTime, 0)
+ )
+ )
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+Foam::wordList Foam::fv::VoFtoFilmTransfer::addSupFields() const
+{
+ return wordList
+ (
+ {
+ alpha_.name(),
+ thermo_.rho()().name(),
+ thermo_.he().name(),
+ VoF_.U.name()
+ }
+ );
+}
+
+
+void Foam::fv::VoFtoFilmTransfer::correct()
+{
+ if (curTimeIndex_ == mesh().time().timeIndex())
+ {
+ return;
+ }
+
+ curTimeIndex_ = mesh().time().timeIndex();
+
+
+ const scalar deltaT = mesh().time().deltaTValue();
+
+ const polyPatch& VoFFilmPatch = mesh().boundaryMesh()[filmPatchi_];
+
+
+ // VoF properties
+
+ const scalarField& alpha = alpha_.boundaryField()[filmPatchi_];
+
+ const scalarField& deltaCoeffs =
+ mesh().boundary()[filmPatchi_].deltaCoeffs();
+
+ const labelList& faceCells = mesh().boundary()[filmPatchi_].faceCells();
+
+
+ // Film properties
+
+ const mappedPatchBase& VoFFilmPatchMap = refCast
+ (
+ VoFFilmPatch
+ );
+
+ const solvers::isothermalFilm& film_
+ (
+ VoFFilmPatchMap.nbrMesh().lookupObject
+ (
+ solver::typeName
+ )
+ );
+
+ const label filmVoFPatchi = VoFFilmPatchMap.nbrPolyPatch().index();
+
+ const scalarField delta
+ (
+ VoFFilmPatchMap.fromNeigbour
+ (
+ film_.delta.boundaryField()[filmVoFPatchi]
+ )
+ );
+
+ transferRate_ = Zero;
+
+ forAll(faceCells, facei)
+ {
+ const label celli = faceCells[facei];
+
+ if
+ (
+ alpha[facei] > 0
+ && delta[facei] < 2*deltaFactorToFilm_/deltaCoeffs[facei]
+ && alpha[facei] < alphaToFilm_
+ )
+ {
+ transferRate_[celli] = -transferRateCoeff_/deltaT;
+ }
+ }
+}
+
+
+template
+Foam::tmp>
+inline Foam::fv::VoFtoFilmTransfer::filmToVoFTransferRate
+(
+ TransferRateFunc transferRateFunc,
+ const dimensionSet& dimProp
+) const
+{
+ const mappedPatchBase& VoFFilmPatchMap = refCast
+ (
+ mesh().boundaryMesh()[filmPatchi_]
+ );
+
+ const Foam::fvModels& fvModels
+ (
+ fvModels::New
+ (
+ refCast(VoFFilmPatchMap.nbrMesh())
+ )
+ );
+
+ const filmToVoFTransfer* filmToVoFPtr = nullptr;
+
+ forAll(fvModels, i)
+ {
+ if (isType(fvModels[i]))
+ {
+ filmToVoFPtr = &refCast(fvModels[i]);
+ }
+ }
+
+ if (!filmToVoFPtr)
+ {
+ FatalErrorInFunction
+ << "Cannot find filmToVoFTransfer fvModel for the film region "
+ << VoFFilmPatchMap.nbrMesh().name()
+ << exit(FatalError);
+ }
+
+ tmp> tSu
+ (
+ VolInternalField::New
+ (
+ "Su",
+ mesh(),
+ dimensioned(dimProp/dimTime, Zero)
+ )
+ );
+
+ UIndirectList(tSu.ref(), mesh().boundary()[filmPatchi_].faceCells()) =
+ VoFFilmPatchMap.fromNeigbour
+ (
+ (filmToVoFPtr->*transferRateFunc)()
+ );
+
+ return tSu/mesh().V();
+}
+
+
+void Foam::fv::VoFtoFilmTransfer::addSup
+(
+ fvMatrix& eqn,
+ const word& fieldName
+) const
+{
+ if (debug)
+ {
+ Info<< type() << ": applying source to " << eqn.psi().name() << endl;
+ }
+
+ if (fieldName == alpha_.name())
+ {
+ eqn +=
+ filmToVoFTransferRate
+ (
+ &filmToVoFTransfer::transferRate,
+ dimVolume
+ )
+ + fvm::Sp(transferRate_, eqn.psi());
+ }
+ else
+ {
+ FatalErrorInFunction
+ << "Support for field " << fieldName << " is not implemented"
+ << exit(FatalError);
+ }
+}
+
+
+void Foam::fv::VoFtoFilmTransfer::addSup
+(
+ const volScalarField& alpha,
+ fvMatrix& eqn,
+ const word& fieldName
+) const
+{
+ if (debug)
+ {
+ Info<< type() << ": applying source to " << eqn.psi().name() << endl;
+ }
+
+ if (fieldName == thermo_.rho()().name())
+ {
+ eqn +=
+ filmToVoFTransferRate
+ (
+ &filmToVoFTransfer::rhoTransferRate,
+ dimMass
+ )
+ + fvm::Sp(alpha()*transferRate_, eqn.psi());
+ }
+ else
+ {
+ FatalErrorInFunction
+ << "Support for field " << fieldName << " is not implemented"
+ << exit(FatalError);
+ }
+}
+
+
+void Foam::fv::VoFtoFilmTransfer::addSup
+(
+ const volScalarField& alpha,
+ const volScalarField& rho,
+ fvMatrix& eqn,
+ const word& fieldName
+) const
+{
+ if (debug)
+ {
+ Info<< type() << ": applying source to " << eqn.psi().name() << endl;
+ }
+
+ if (fieldName == thermo_.he().name())
+ {
+ eqn +=
+ filmToVoFTransferRate
+ (
+ &filmToVoFTransfer::heTransferRate,
+ dimEnergy
+ )
+ + fvm::Sp(alpha()*rho()*transferRate_, eqn.psi());
+ }
+ else
+ {
+ FatalErrorInFunction
+ << "Support for field " << fieldName << " is not implemented"
+ << exit(FatalError);
+ }
+}
+
+
+void Foam::fv::VoFtoFilmTransfer::addSup
+(
+ const volScalarField& rho,
+ fvMatrix& eqn,
+ const word& fieldName
+) const
+{
+ if (debug)
+ {
+ Info<< type() << ": applying source to " << eqn.psi().name() << endl;
+ }
+
+ eqn +=
+ filmToVoFTransferRate
+ (
+ &filmToVoFTransfer::UTransferRate,
+ dimMass*dimVelocity
+ )
+ + fvm::Sp(alpha_()*thermo_.rho()()*transferRate_, eqn.psi());
+}
+
+
+template
+inline Foam::tmp> Foam::fv::VoFtoFilmTransfer::TransferRate
+(
+ const FieldType& f
+) const
+{
+ const labelList& faceCells = mesh().boundary()[filmPatchi_].faceCells();
+
+ return tmp>
+ (
+ new Field
+ (
+ UIndirectList
+ (
+ -alpha_()*transferRate_*mesh().V()*f,
+ faceCells
+ )
+ )
+ );
+}
+
+
+Foam::tmp
+Foam::fv::VoFtoFilmTransfer::rhoTransferRate() const
+{
+ return TransferRate(thermo_.rho()());
+}
+
+
+Foam::tmp
+Foam::fv::VoFtoFilmTransfer::heTransferRate() const
+{
+ return TransferRate(thermo_.rho()()*thermo_.he()());
+}
+
+
+Foam::tmp
+Foam::fv::VoFtoFilmTransfer::UTransferRate() const
+{
+ return TransferRate(thermo_.rho()()*VoF_.U());
+}
+
+
+void Foam::fv::VoFtoFilmTransfer::topoChange(const polyTopoChangeMap&)
+{
+ transferRate_.setSize(mesh().nCells());
+}
+
+
+void Foam::fv::VoFtoFilmTransfer::mapMesh(const polyMeshMap& map)
+{
+ transferRate_.setSize(mesh().nCells());
+}
+
+
+void Foam::fv::VoFtoFilmTransfer::distribute(const polyDistributionMap&)
+{
+ transferRate_.setSize(mesh().nCells());
+}
+
+
+bool Foam::fv::VoFtoFilmTransfer::movePoints()
+{
+ return true;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/VoFtoFilmTransfer.H b/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/VoFtoFilmTransfer.H
new file mode 100644
index 0000000000..a6218d0878
--- /dev/null
+++ b/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/VoFtoFilmTransfer.H
@@ -0,0 +1,244 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Copyright (C) 2023 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+Class
+ Foam::fv::VoFtoFilmTransfer
+
+Description
+ Film<->VoF transfer model
+
+Usage
+ Example usage:
+ \verbatim
+ VoFtoFilmTransfer
+ {
+ type VoFtoFilmTransfer;
+ phase water;
+ }
+ \endverbatim
+
+SourceFiles
+ VoFtoFilmTransfer.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef VoFtoFilmTransfer_H
+#define VoFtoFilmTransfer_H
+
+#include "fvModel.H"
+#include "compressibleVoF.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace fv
+{
+
+/*---------------------------------------------------------------------------*\
+ Class VoFtoFilmTransfer Declaration
+\*---------------------------------------------------------------------------*/
+
+class VoFtoFilmTransfer
+:
+ public fvModel
+{
+ // Private Data
+
+ //- The VoF model
+ const solvers::compressibleVoF& VoF_;
+
+ //- Film patch name
+ word filmPatchName_;
+
+ const label filmPatchi_;
+
+ //- The name of the transferred phase
+ word phaseName_;
+
+ //- Reference to the transferred phase thermo
+ const rhoThermo& thermo_;
+
+ //- Reference to the transferred phase volume fraction
+ const volScalarField& alpha_;
+
+ //- Current time index (used for updating)
+ mutable label curTimeIndex_;
+
+ //- Factor of the cell height below which the VoF may be transferred
+ // to the film
+ scalar deltaFactorToFilm_;
+
+ //- VoF limit below which the VoF may be transferred to the film
+ scalar alphaToFilm_;
+
+ //- Transfer rate coefficient
+ scalar transferRateCoeff_;
+
+ volScalarField::Internal transferRate_;
+
+
+ // Private Member Functions
+
+ //- Return the transfer rate from the film transferRateFunc
+ template
+ inline tmp> filmToVoFTransferRate
+ (
+ TransferRateFunc transferRateFunc,
+ const dimensionSet& dimProp
+ ) const;
+
+ //- Return the transfer rate of field f
+ template
+ inline tmp> TransferRate(const FieldType& f) const;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("VoFtoFilmTransfer");
+
+
+ // Constructors
+
+ //- Construct from explicit source name and mesh
+ VoFtoFilmTransfer
+ (
+ const word& sourceName,
+ const word& modelType,
+ const fvMesh& mesh,
+ const dictionary& dict
+ );
+
+ //- Disallow default bitwise copy construction
+ VoFtoFilmTransfer
+ (
+ const VoFtoFilmTransfer&
+ ) = delete;
+
+
+ // Member Functions
+
+ label filmPatchIndex() const
+ {
+ return filmPatchi_;
+ }
+
+ const volScalarField& alpha() const
+ {
+ return alpha_;
+ }
+
+
+ // Checks
+
+ //- Return the list of fields for which the option adds source term
+ // to the transport equation
+ virtual wordList addSupFields() const;
+
+
+ // Correct
+
+ //- Solve the film and update the sources
+ virtual void correct();
+
+
+ // Add explicit and implicit contributions to compressible equation
+
+ //- Add implicit contribution to phase-fraction equation
+ virtual void addSup
+ (
+ fvMatrix& eqn,
+ const word& fieldName
+ ) const;
+
+ //- Add implicit contribution to phase density equation
+ virtual void addSup
+ (
+ const volScalarField& alpha,
+ fvMatrix& eqn,
+ const word& fieldName
+ ) const;
+
+ //- Add implicit contribution to phase energy equation
+ virtual void addSup
+ (
+ const volScalarField& alpha,
+ const volScalarField& rho,
+ fvMatrix& eqn,
+ const word& fieldName
+ ) const;
+
+ //- Add implicit contribution to mixture momentum equation
+ virtual void addSup
+ (
+ const volScalarField& rho,
+ fvMatrix& eqn,
+ const word& fieldName
+ ) const;
+
+
+ // Transfer to film
+
+ //- Return the mass transfer rate
+ tmp rhoTransferRate() const;
+
+ //- Return the energy transfer rate
+ tmp heTransferRate() const;
+
+ //- Return the momentum transfer rate
+ tmp UTransferRate() const;
+
+
+ // Mesh changes
+
+ //- Update topology using the given map
+ virtual void topoChange(const polyTopoChangeMap&);
+
+ //- Update from another mesh using the given map
+ virtual void mapMesh(const polyMeshMap&);
+
+ //- Redistribute or update using the given distribution map
+ virtual void distribute(const polyDistributionMap&);
+
+ //- Update for mesh motion
+ virtual bool movePoints();
+
+
+ // Member Operators
+
+ //- Disallow default bitwise assignment
+ void operator=(const VoFtoFilmTransfer&) = delete;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace fv
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/filmToVoFTransfer.C b/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/filmToVoFTransfer.C
new file mode 100644
index 0000000000..f2475583d8
--- /dev/null
+++ b/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/filmToVoFTransfer.C
@@ -0,0 +1,399 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Copyright (C) 2023 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+\*---------------------------------------------------------------------------*/
+
+#include "filmToVoFTransfer.H"
+#include "VoFtoFilmTransfer.H"
+#include "mappedPatchBase.H"
+#include "compressibleVoF.H"
+#include "fvmSup.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * //
+
+namespace Foam
+{
+ namespace fv
+ {
+ defineTypeNameAndDebug(filmToVoFTransfer, 0);
+
+ addToRunTimeSelectionTable
+ (
+ fvModel,
+ filmToVoFTransfer,
+ dictionary
+ );
+ }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::fv::filmToVoFTransfer::filmToVoFTransfer
+(
+ const word& sourceName,
+ const word& modelType,
+ const fvMesh& mesh,
+ const dictionary& dict
+)
+:
+ fvModel(sourceName, modelType, mesh, dict),
+ film_(mesh.lookupObject(solver::typeName)),
+ curTimeIndex_(-1),
+ deltaFactorToVoF_
+ (
+ dict.lookupOrDefault("deltaFactorToVoF", 1.0)
+ ),
+ alphaToVoF_
+ (
+ dict.lookupOrDefault("alphaToVoF", 0.5)
+ ),
+ transferRateCoeff_
+ (
+ dict.lookupOrDefault("transferRateCoeff", 0.1)
+ ),
+ transferRate_
+ (
+ volScalarField::Internal::New
+ (
+ "transferRate",
+ mesh,
+ dimensionedScalar(dimless/dimTime, 0)
+ )
+ )
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+Foam::wordList Foam::fv::filmToVoFTransfer::addSupFields() const
+{
+ return wordList
+ (
+ {
+ film_.alpha.name(),
+ film_.thermo.he().name(),
+ film_.U.name()
+ }
+ );
+}
+
+
+void Foam::fv::filmToVoFTransfer::correct()
+{
+ if (curTimeIndex_ == mesh().time().timeIndex())
+ {
+ return;
+ }
+
+ curTimeIndex_ = mesh().time().timeIndex();
+
+ const scalar deltaT = mesh().time().deltaTValue();
+
+
+ // Film properties
+
+ const labelList& faceCells = film_.surfacePatch().faceCells();
+ const scalarField& delta = film_.delta();
+
+
+ // VoF properties
+
+ const solvers::compressibleVoF& VoF_
+ (
+ film_.surfacePatchMap().nbrMesh().lookupObject
+ (
+ solver::typeName
+ )
+ );
+
+ const label patchiVoF = film_.surfacePatchMap().nbrPolyPatch().index();
+
+ const VoFtoFilmTransfer& VoFtoFilm
+ (
+ refCast(VoF_.fvModels()[0])
+ );
+
+ const scalarField alphaVoF
+ (
+ film_.surfacePatchMap().fromNeigbour
+ (
+ VoFtoFilm.alpha().boundaryField()[patchiVoF]
+ )
+ );
+
+ const scalarField deltaCoeffsVoF
+ (
+ film_.surfacePatchMap().fromNeigbour
+ (
+ VoF_.mesh.boundary()[patchiVoF].deltaCoeffs()
+ )
+ );
+
+ // Reset the transfer rate
+ transferRate_ = Zero;
+
+ forAll(faceCells, facei)
+ {
+ const label celli = faceCells[facei];
+
+ if
+ (
+ delta[celli] > 2*deltaFactorToVoF_/deltaCoeffsVoF[facei]
+ || alphaVoF[facei] > alphaToVoF_
+ )
+ {
+ transferRate_[celli] = -transferRateCoeff_/deltaT;
+ }
+ }
+}
+
+
+template
+Foam::tmp>
+inline Foam::fv::filmToVoFTransfer::VoFToFilmTransferRate
+(
+ TransferRateFunc transferRateFunc,
+ const dimensionSet& dimProp
+) const
+{
+ const Foam::fvModels& fvModels
+ (
+ fvModels::New
+ (
+ refCast(film_.surfacePatchMap().nbrMesh())
+ )
+ );
+
+ const VoFtoFilmTransfer* VoFtoFilmPtr = nullptr;
+
+ forAll(fvModels, i)
+ {
+ if (isType(fvModels[i]))
+ {
+ const VoFtoFilmTransfer& VoFtoFilm
+ (
+ refCast(fvModels[i])
+ );
+
+ if
+ (
+ VoFtoFilm.filmPatchIndex()
+ == film_.surfacePatchMap().nbrPolyPatch().index()
+ )
+ {
+ VoFtoFilmPtr = &VoFtoFilm;
+ }
+ }
+ }
+
+ if (!VoFtoFilmPtr)
+ {
+ FatalErrorInFunction
+ << "Cannot find VoFtoFilmTransfer fvModel for this film "
+ "in VoF region " << film_.surfacePatchMap().nbrMesh().name()
+ << exit(FatalError);
+ }
+
+ tmp> tSu
+ (
+ VolInternalField::New
+ (
+ "Su",
+ mesh(),
+ dimensioned(dimProp/dimTime, Zero)
+ )
+ );
+
+ UIndirectList(tSu.ref(), film_.surfacePatch().faceCells()) =
+ film_.surfacePatchMap().fromNeigbour
+ (
+ (VoFtoFilmPtr->*transferRateFunc)()
+ );
+
+ return tSu/mesh().V();
+}
+
+
+void Foam::fv::filmToVoFTransfer::addSup
+(
+ const volScalarField& rho,
+ fvMatrix& eqn,
+ const word& fieldName
+) const
+{
+ if (debug)
+ {
+ Info<< type() << ": applying source to " << eqn.psi().name() << endl;
+ }
+
+ if (fieldName == film_.alpha.name())
+ {
+ eqn +=
+ VoFToFilmTransferRate
+ (
+ &VoFtoFilmTransfer::rhoTransferRate,
+ dimMass
+ )
+ + fvm::Sp(transferRate_*rho(), eqn.psi());
+ }
+ else
+ {
+ FatalErrorInFunction
+ << "Support for field " << fieldName << " is not implemented"
+ << exit(FatalError);
+ }
+}
+
+
+void Foam::fv::filmToVoFTransfer::addSup
+(
+ const volScalarField& alpha,
+ const volScalarField& rho,
+ fvMatrix& eqn,
+ const word& fieldName
+) const
+{
+ if (debug)
+ {
+ Info<< type() << ": applying source to " << eqn.psi().name() << endl;
+ }
+
+ if (fieldName == film_.thermo.he().name())
+ {
+ eqn +=
+ VoFToFilmTransferRate
+ (
+ &VoFtoFilmTransfer::heTransferRate,
+ dimEnergy
+ )
+ + fvm::Sp(alpha()*rho()*transferRate_, eqn.psi());
+ }
+ else
+ {
+ FatalErrorInFunction
+ << "Support for field " << fieldName << " is not implemented"
+ << exit(FatalError);
+ }
+}
+
+
+void Foam::fv::filmToVoFTransfer::addSup
+(
+ const volScalarField& alpha,
+ const volScalarField& rho,
+ fvMatrix& eqn,
+ const word& fieldName
+) const
+{
+ if (debug)
+ {
+ Info<< type() << ": applying source to " << eqn.psi().name() << endl;
+ }
+
+ eqn +=
+ VoFToFilmTransferRate
+ (
+ &VoFtoFilmTransfer::UTransferRate,
+ dimMass*dimVelocity
+ )
+ + fvm::Sp(alpha()*rho()*transferRate_, eqn.psi());
+}
+
+
+template
+inline Foam::tmp> Foam::fv::filmToVoFTransfer::TransferRate
+(
+ const FieldType& f
+) const
+{
+ const labelList& faceCells = film_.surfacePatch().faceCells();
+
+ return tmp>
+ (
+ new Field
+ (
+ UIndirectList
+ (
+ -film_.alpha()*transferRate_*mesh().V()*f,
+ faceCells
+ )
+ )
+ );
+}
+
+
+Foam::tmp
+Foam::fv::filmToVoFTransfer::transferRate() const
+{
+ return TransferRate(oneField());
+}
+
+
+Foam::tmp
+Foam::fv::filmToVoFTransfer::rhoTransferRate() const
+{
+ return TransferRate(film_.thermo.rho()());
+}
+
+
+Foam::tmp
+Foam::fv::filmToVoFTransfer::heTransferRate() const
+{
+ return TransferRate(film_.thermo.rho()()*film_.thermo.he()());
+}
+
+
+Foam::tmp
+Foam::fv::filmToVoFTransfer::UTransferRate() const
+{
+ return TransferRate(film_.thermo.rho()()*film_.U());
+}
+
+
+void Foam::fv::filmToVoFTransfer::topoChange(const polyTopoChangeMap&)
+{
+ transferRate_.setSize(mesh().nCells());
+}
+
+
+void Foam::fv::filmToVoFTransfer::mapMesh(const polyMeshMap& map)
+{
+ transferRate_.setSize(mesh().nCells());
+}
+
+
+void Foam::fv::filmToVoFTransfer::distribute(const polyDistributionMap&)
+{
+ transferRate_.setSize(mesh().nCells());
+}
+
+
+bool Foam::fv::filmToVoFTransfer::movePoints()
+{
+ return true;
+}
+
+
+// ************************************************************************* //
diff --git a/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/filmToVoFTransfer.H b/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/filmToVoFTransfer.H
new file mode 100644
index 0000000000..3edbed5a94
--- /dev/null
+++ b/applications/solvers/modules/isothermalFilm/fvModels/filmVoFTransfer/filmToVoFTransfer.H
@@ -0,0 +1,216 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Copyright (C) 2023 OpenFOAM Foundation
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+License
+ This file is part of OpenFOAM.
+
+ OpenFOAM is free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with OpenFOAM. If not, see .
+
+Class
+ Foam::fv::filmToVoFTransfer
+
+Description
+ Film<->VoF transfer model
+
+Usage
+ Example usage:
+ \verbatim
+ filmToVoFTransfer
+ {
+ type filmToVoFTransfer;
+ }
+ \endverbatim
+
+SourceFiles
+ filmToVoFTransfer.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef filmToVoFTransfer_H
+#define filmToVoFTransfer_H
+
+#include "fvModel.H"
+#include "isothermalFilm.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace fv
+{
+
+/*---------------------------------------------------------------------------*\
+ Class filmToVoFTransfer Declaration
+\*---------------------------------------------------------------------------*/
+
+class filmToVoFTransfer
+:
+ public fvModel
+{
+ // Private Data
+
+ //- The film model
+ const solvers::isothermalFilm& film_;
+
+ //- Current time index (used for updating)
+ mutable label curTimeIndex_;
+
+ //- Factor of the cell height above which the film is transferred
+ // to the VoF
+ scalar deltaFactorToVoF_;
+
+ //- VoF limit above which all of the film is transferred to the VoF
+ scalar alphaToVoF_;
+
+ //- Transfer rate coefficient
+ scalar transferRateCoeff_;
+
+ //- Cached transfer rate
+ volScalarField::Internal transferRate_;
+
+
+ // Private Member Functions
+
+ //- Return the transfer rate from the VoF transferRateFunc
+ template
+ inline tmp> VoFToFilmTransferRate
+ (
+ TransferRateFunc transferRateFunc,
+ const dimensionSet& dimProp
+ ) const;
+
+ //- Return the transfer rate of field f
+ template
+ inline tmp> TransferRate(const FieldType& f) const;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("filmToVoFTransfer");
+
+
+ // Constructors
+
+ //- Construct from explicit source name and mesh
+ filmToVoFTransfer
+ (
+ const word& sourceName,
+ const word& modelType,
+ const fvMesh& mesh,
+ const dictionary& dict
+ );
+
+ //- Disallow default bitwise copy construction
+ filmToVoFTransfer
+ (
+ const filmToVoFTransfer&
+ ) = delete;
+
+
+ // Member Functions
+
+ // Checks
+
+ //- Return the list of fields for which the option adds source term
+ // to the transport equation
+ virtual wordList addSupFields() const;
+
+
+ // Correct
+
+ //- Solve the film and update the sources
+ virtual void correct();
+
+
+ // Add explicit and implicit contributions to compressible equation
+
+ //- Add explicit contribution to phase continuity
+ virtual void addSup
+ (
+ const volScalarField& alpha,
+ fvMatrix& eqn,
+ const word& fieldName
+ ) const;
+
+ //- Add explicit contribution to phase energy equation
+ virtual void addSup
+ (
+ const volScalarField& alpha,
+ const volScalarField& rho,
+ fvMatrix& eqn,
+ const word& fieldName
+ ) const;
+
+ //- Add implicit contribution to mixture momentum equation
+ virtual void addSup
+ (
+ const volScalarField& alpha,
+ const volScalarField& rho,
+ fvMatrix& eqn,
+ const word& fieldName
+ ) const;
+
+
+ // Transfer to VoF
+
+ //- Return the volume transfer rate
+ tmp transferRate() const;
+
+ //- Return the mass transfer rate
+ tmp rhoTransferRate() const;
+
+ //- Return the energy transfer rate
+ tmp heTransferRate() const;
+
+ //- Return the momentum transfer rate
+ tmp UTransferRate() const;
+
+
+ // Mesh changes
+
+ //- Update topology using the given map
+ virtual void topoChange(const polyTopoChangeMap&);
+
+ //- Update from another mesh using the given map
+ virtual void mapMesh(const polyMeshMap&);
+
+ //- Redistribute or update using the given distribution map
+ virtual void distribute(const polyDistributionMap&);
+
+ //- Update for mesh motion
+ virtual bool movePoints();
+
+
+ // Member Operators
+
+ //- Disallow default bitwise assignment
+ void operator=(const filmToVoFTransfer&) = delete;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace fv
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/0/VoF/T b/tutorials/modules/CHT/VoFToFilm/0/VoF/T
new file mode 100644
index 0000000000..a03ccd04f2
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/0/VoF/T
@@ -0,0 +1,43 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class volScalarField;
+ object T;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [0 0 0 1 0 0 0];
+
+internalField uniform 300;
+
+boundaryField
+{
+ film
+ {
+ type coupledTemperature;
+ value $internalField;
+ }
+
+ bottom
+ {
+ type inletOutlet;
+ inletValue $internalField;
+ }
+
+ atmosphere
+ {
+ type inletOutlet;
+ inletValue $internalField;
+ }
+
+ #includeEtc "caseDicts/setConstraintTypes"
+}
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/0/VoF/T.air b/tutorials/modules/CHT/VoFToFilm/0/VoF/T.air
new file mode 100644
index 0000000000..e02f9229b6
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/0/VoF/T.air
@@ -0,0 +1,53 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class volScalarField;
+ location "0/VoF";
+ object T.air;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [0 0 0 1 0 0 0];
+
+internalField uniform 300;
+
+boundaryField
+{
+ film
+ {
+ type calculated;
+ value uniform 300;
+ }
+ vessel
+ {
+ type symmetryPlane;
+ }
+ bottom
+ {
+ type calculated;
+ value uniform 300;
+ }
+ atmosphere
+ {
+ type calculated;
+ value uniform 300;
+ }
+ back
+ {
+ type empty;
+ }
+ front
+ {
+ type empty;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/0/VoF/T.liquid b/tutorials/modules/CHT/VoFToFilm/0/VoF/T.liquid
new file mode 100644
index 0000000000..d538b4c2e3
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/0/VoF/T.liquid
@@ -0,0 +1,53 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class volScalarField;
+ location "0/VoF";
+ object T.liquid;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [0 0 0 1 0 0 0];
+
+internalField uniform 300;
+
+boundaryField
+{
+ film
+ {
+ type calculated;
+ value uniform 300;
+ }
+ vessel
+ {
+ type symmetryPlane;
+ }
+ bottom
+ {
+ type calculated;
+ value uniform 300;
+ }
+ atmosphere
+ {
+ type calculated;
+ value uniform 300;
+ }
+ back
+ {
+ type empty;
+ }
+ front
+ {
+ type empty;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/0/VoF/U b/tutorials/modules/CHT/VoFToFilm/0/VoF/U
new file mode 100644
index 0000000000..40f7e9ee5a
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/0/VoF/U
@@ -0,0 +1,46 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class volVectorField;
+ location "0";
+ object U;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [0 1 -1 0 0 0 0];
+
+internalField uniform (0 0 0);
+
+boundaryField
+{
+ film
+ {
+ type mappedValue;
+ value $internalField;
+ }
+
+ bottom
+ {
+ type flowRateOutletVelocity;
+ volumetricFlowRate 2e-6;
+ value $internalField;
+ }
+
+ atmosphere
+ {
+ type pressureInletOutletVelocity;
+ value $internalField;
+ }
+
+ #includeEtc "caseDicts/setConstraintTypes"
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/0/VoF/alpha.liquid.orig b/tutorials/modules/CHT/VoFToFilm/0/VoF/alpha.liquid.orig
new file mode 100644
index 0000000000..982f2bf062
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/0/VoF/alpha.liquid.orig
@@ -0,0 +1,41 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class volScalarField;
+ object alpha.liquid;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [0 0 0 0 0 0 0];
+
+internalField uniform 0;
+
+boundaryField
+{
+ film
+ {
+ type zeroGradient;
+ }
+
+ bottom
+ {
+ type zeroGradient;
+ }
+
+ atmosphere
+ {
+ type inletOutlet;
+ inletValue $internalField;
+ }
+
+ #includeEtc "caseDicts/setConstraintTypes"
+}
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/0/VoF/p b/tutorials/modules/CHT/VoFToFilm/0/VoF/p
new file mode 100644
index 0000000000..0a80a6941c
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/0/VoF/p
@@ -0,0 +1,43 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class volScalarField;
+ object p;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [1 -1 -2 0 0 0 0];
+
+internalField uniform 1e5;
+
+boundaryField
+{
+ film
+ {
+ type calculated;
+ value $internalField;
+ }
+
+ bottom
+ {
+ type calculated;
+ value $internalField;
+ }
+
+ atmosphere
+ {
+ type calculated;
+ value $internalField;
+ }
+
+ #includeEtc "caseDicts/setConstraintTypes"
+}
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/0/VoF/p_rgh b/tutorials/modules/CHT/VoFToFilm/0/VoF/p_rgh
new file mode 100644
index 0000000000..f5bb813d8e
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/0/VoF/p_rgh
@@ -0,0 +1,41 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class volScalarField;
+ object p_rgh;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [1 -1 -2 0 0 0 0];
+
+internalField uniform 1e5;
+
+boundaryField
+{
+ film
+ {
+ type fixedFluxPressure;
+ }
+
+ bottom
+ {
+ type fixedFluxPressure;
+ }
+
+ atmosphere
+ {
+ type prghTotalPressure;
+ p0 $internalField;
+ }
+
+ #includeEtc "caseDicts/setConstraintTypes"
+}
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/0/film/T b/tutorials/modules/CHT/VoFToFilm/0/film/T
new file mode 100644
index 0000000000..1a86948b03
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/0/film/T
@@ -0,0 +1,50 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class volScalarField;
+ object T;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [0 0 0 1 0 0 0];
+
+internalField uniform 300;
+
+boundaryField
+{
+ #includeEtc "caseDicts/setConstraintTypes"
+
+ wall
+ {
+ type fixedValue;
+ value $internalField;
+ }
+
+ surface
+ {
+ type coupledTemperature;
+ value $internalField;
+ }
+
+ bottom
+ {
+ type inletOutlet;
+ inletValue $internalField;
+ }
+
+ atmosphere
+ {
+ type inletOutlet;
+ inletValue $internalField;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/0/film/U b/tutorials/modules/CHT/VoFToFilm/0/film/U
new file mode 100644
index 0000000000..d05ec8fb96
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/0/film/U
@@ -0,0 +1,48 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class volVectorField;
+ object U;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [0 1 -1 0 0 0 0];
+
+internalField uniform (0 0 0);
+
+boundaryField
+{
+ #includeEtc "caseDicts/setConstraintTypes"
+
+ wall
+ {
+ type noSlip;
+ }
+
+ surface
+ {
+ type filmSurfaceVelocity;
+ value $internalField;
+ }
+
+ bottom
+ {
+ type zeroGradient;
+ }
+
+ atmosphere
+ {
+ type fixedValue;
+ value $internalField;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/0/film/delta b/tutorials/modules/CHT/VoFToFilm/0/film/delta
new file mode 100644
index 0000000000..8d347ca4a0
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/0/film/delta
@@ -0,0 +1,48 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class volScalarField;
+ object delta;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [0 1 0 0 0 0 0];
+
+internalField uniform 0;
+
+boundaryField
+{
+ #includeEtc "caseDicts/setConstraintTypes"
+
+ wall
+ {
+ type zeroGradient;
+ }
+
+ surface
+ {
+ type zeroGradient;
+ }
+
+ bottom
+ {
+ type inletOutlet;
+ inletValue $internalField;
+ }
+
+ atmosphere
+ {
+ type inletOutlet;
+ inletValue $internalField;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/0/film/p b/tutorials/modules/CHT/VoFToFilm/0/film/p
new file mode 100644
index 0000000000..05d9b2fe8d
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/0/film/p
@@ -0,0 +1,47 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class volScalarField;
+ object p;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [1 -1 -2 0 0 0 0];
+
+internalField uniform 1e5;
+
+boundaryField
+{
+ #includeEtc "caseDicts/setConstraintTypes"
+
+ wall
+ {
+ type zeroGradient;
+ }
+
+ surface
+ {
+ type mappedFilmPressure;
+ value $internalField;
+ }
+
+ bottom
+ {
+ type zeroGradient;
+ }
+
+ atmosphere
+ {
+ type zeroGradient;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/Allclean b/tutorials/modules/CHT/VoFToFilm/Allclean
new file mode 100755
index 0000000000..657ecefef2
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/Allclean
@@ -0,0 +1,12 @@
+#!/bin/sh
+cd ${0%/*} || exit 1 # Run from this directory
+
+# Source tutorial clean functions
+. $WM_PROJECT_DIR/bin/tools/CleanFunctions
+
+cleanCase
+
+rm -rf constant/VoF/polyMesh
+rm -rf constant/film/polyMesh
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/modules/CHT/VoFToFilm/Allrun b/tutorials/modules/CHT/VoFToFilm/Allrun
new file mode 100755
index 0000000000..49d0a02db4
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/Allrun
@@ -0,0 +1,18 @@
+#!/bin/sh
+cd ${0%/*} || exit 1 # Run from this directory
+
+# Source tutorial run functions
+. $WM_PROJECT_DIR/bin/tools/RunFunctions
+
+runApplication -s VoF blockMesh -region VoF
+runApplication -s film blockMesh -region film
+
+runApplication setFields -region VoF
+
+printf "\n%s\n" "Creating files for paraview post-processing"
+paraFoam -touchAll
+echo
+
+runApplication $(getApplication)
+
+#------------------------------------------------------------------------------
diff --git a/tutorials/modules/CHT/VoFToFilm/constant/VoF/fvModels b/tutorials/modules/CHT/VoFToFilm/constant/VoF/fvModels
new file mode 100644
index 0000000000..6d82eabeb4
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/constant/VoF/fvModels
@@ -0,0 +1,32 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ location "constant";
+ object fvModels;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+VoFToFilmTransfer
+{
+ type VoFtoFilmTransfer;
+
+ libs ("libfilmVoFTransfer.so");
+
+ filmPatch film;
+ phase liquid;
+
+ deltaFactorToFilm 0.9;
+ alphaToFilm 0.86;
+
+ transferRateCoeff 0.1;
+}
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/constant/VoF/g b/tutorials/modules/CHT/VoFToFilm/constant/VoF/g
new file mode 100644
index 0000000000..770a56192e
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/constant/VoF/g
@@ -0,0 +1,21 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class uniformDimensionedVectorField;
+ location "constant";
+ object g;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [0 1 -2 0 0 0 0];
+value (0 -9.81 0);
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/constant/VoF/momentumTransport b/tutorials/modules/CHT/VoFToFilm/constant/VoF/momentumTransport
new file mode 100644
index 0000000000..8278c989ec
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/constant/VoF/momentumTransport
@@ -0,0 +1,20 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ location "constant";
+ object momentumTransport;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+simulationType laminar;
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/constant/VoF/phaseProperties b/tutorials/modules/CHT/VoFToFilm/constant/VoF/phaseProperties
new file mode 100644
index 0000000000..d1d9770ced
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/constant/VoF/phaseProperties
@@ -0,0 +1,23 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ location "constant";
+ object phaseProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+phases (liquid air);
+
+pMin 10000;
+
+sigma 0.0309;
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/constant/VoF/physicalProperties.air b/tutorials/modules/CHT/VoFToFilm/constant/VoF/physicalProperties.air
new file mode 100644
index 0000000000..38b4a41461
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/constant/VoF/physicalProperties.air
@@ -0,0 +1,51 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ location "constant";
+ object physicalProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+thermoType
+{
+ type heRhoThermo;
+ mixture pureMixture;
+ transport const;
+ thermo hConst;
+ equationOfState rhoConst;
+ specie specie;
+ energy sensibleInternalEnergy;
+}
+
+mixture
+{
+ specie
+ {
+ molWeight 28.9;
+ }
+ equationOfState
+ {
+ rho 1.2;
+ }
+ thermodynamics
+ {
+ Cp 1007;
+ Hf 0;
+ }
+ transport
+ {
+ mu 1.84e-05;
+ Pr 0.7;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/constant/VoF/physicalProperties.liquid b/tutorials/modules/CHT/VoFToFilm/constant/VoF/physicalProperties.liquid
new file mode 100644
index 0000000000..33ee248244
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/constant/VoF/physicalProperties.liquid
@@ -0,0 +1,31 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ location "constant";
+ object physicalProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+thermoType
+{
+ type heRhoThermo;
+ mixture pureMixture;
+ properties liquid;
+ energy sensibleInternalEnergy;
+}
+
+mixture
+{
+ H2O;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/constant/film/fvModels b/tutorials/modules/CHT/VoFToFilm/constant/film/fvModels
new file mode 100644
index 0000000000..773c0fea4a
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/constant/film/fvModels
@@ -0,0 +1,29 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ location "constant";
+ object fvModels;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+filmToVoFTransfer
+{
+ type filmToVoFTransfer;
+
+ libs ("libfilmVoFTransfer.so");
+
+ deltaFactorToVoF 1.5;
+ alphaToVoF 0.9;
+
+ transferRateCoeff 0.1;
+}
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/constant/film/g b/tutorials/modules/CHT/VoFToFilm/constant/film/g
new file mode 100644
index 0000000000..770a56192e
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/constant/film/g
@@ -0,0 +1,21 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class uniformDimensionedVectorField;
+ location "constant";
+ object g;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+dimensions [0 1 -2 0 0 0 0];
+value (0 -9.81 0);
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/constant/film/momentumTransport b/tutorials/modules/CHT/VoFToFilm/constant/film/momentumTransport
new file mode 100644
index 0000000000..8278c989ec
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/constant/film/momentumTransport
@@ -0,0 +1,20 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ location "constant";
+ object momentumTransport;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+simulationType laminar;
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/constant/film/physicalProperties b/tutorials/modules/CHT/VoFToFilm/constant/film/physicalProperties
new file mode 100644
index 0000000000..e131771292
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/constant/film/physicalProperties
@@ -0,0 +1,39 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ location "constant";
+ object physicalProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+thermoType
+{
+ type heRhoThermo;
+ mixture pureMixture;
+ properties liquid;
+ energy sensibleInternalEnergy;
+}
+
+mixture
+{
+ H2O;
+}
+
+sigma
+{
+ type constant;
+ sigma 0.07;
+}
+
+deltaWet 1e-8;
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/constant/surfaceFilmProperties b/tutorials/modules/CHT/VoFToFilm/constant/surfaceFilmProperties
new file mode 100644
index 0000000000..d56f951895
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/constant/surfaceFilmProperties
@@ -0,0 +1,71 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ location "constant";
+ object SurfaceFilmProperties;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+regionName plate;
+
+phase liquid;
+
+viscosity
+{
+ model Newtonian;
+}
+
+sigma 0.07;
+
+deltaWet 1e-12;
+
+hydrophilic no;
+
+transfer
+{
+ VoFPatchTransfer
+ {
+ deltaFactorToVoF 1.5;
+ alphaToVoF 0.9;
+
+ deltaFactorToFilm 0.9;
+ alphaToFilm 0.86;
+
+ transferRateCoeff 0.1;
+ }
+}
+
+momentumTransport
+{
+ model laminar;
+ Cf 0.001;
+}
+
+upperSurfaceModels
+{
+ heatTransfer
+ {
+ model constant;
+ c0 1;
+ }
+}
+
+lowerSurfaceModels
+{
+ heatTransfer
+ {
+ model constant;
+ c0 1;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/system/VoF/blockMeshDict b/tutorials/modules/CHT/VoFToFilm/system/VoF/blockMeshDict
new file mode 100644
index 0000000000..6b10612459
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/system/VoF/blockMeshDict
@@ -0,0 +1,113 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ object blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+convertToMeters 0.001;
+
+w 50;
+h 100;
+
+wCells 80;
+hCells 80;
+
+wGrading
+(
+ (0.1 1 1)
+ (0.9 2.25 10)
+);
+
+vertices
+(
+ (0 0 -1)
+ ($w 0 -1)
+ (0 $h -1)
+ ($w $h -1)
+
+ (0 0 0)
+ ($w 0 0)
+ (0 $h 0)
+ ($w $h 0)
+
+);
+
+blocks
+(
+ hex (0 1 3 2 4 5 7 6)
+ ($wCells $hCells 1)
+ simpleGrading ($wGrading 1 1)
+);
+
+boundary
+(
+ film
+ {
+ type mappedExtrudedWall;
+ neighbourRegion film;
+ neighbourPatch surface;
+ transformType none;
+
+ faces
+ (
+ (0 2 6 4)
+ );
+ }
+
+ vessel
+ {
+ type symmetryPlane;
+ faces
+ (
+ (1 3 7 5)
+ );
+ }
+
+ bottom
+ {
+ type patch;
+ faces
+ (
+ (0 1 5 4)
+ );
+ }
+
+ atmosphere
+ {
+ type patch;
+ faces
+ (
+ (2 3 7 6)
+ );
+ }
+
+ back
+ {
+ type empty;
+ faces
+ (
+ (0 2 3 1)
+ );
+ }
+
+ front
+ {
+ type empty;
+ faces
+ (
+ (4 5 7 6)
+ );
+ }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/system/VoF/extrudeToRegionMeshDict b/tutorials/modules/CHT/VoFToFilm/system/VoF/extrudeToRegionMeshDict
new file mode 100644
index 0000000000..35b6160c55
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/system/VoF/extrudeToRegionMeshDict
@@ -0,0 +1,49 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ object extrudeToRegionMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+region film;
+
+patches (film);
+
+extrudeModel linearDirection;
+
+adaptMesh no;
+
+patchTypes (mappedExtrudedWall);
+patchNames (film);
+
+regionPatchTypes (filmWall);
+regionPatchNames (wall);
+
+regionOppositePatchTypes (mappedFilmSurface);
+regionOppositePatchNames (surface);
+
+nLayers 1;
+
+expansionRatio 1;
+
+linearNormalCoeffs
+{
+ thickness 0.001;
+}
+
+linearDirectionCoeffs
+{
+ direction (1 0 0);
+ thickness 0.001;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/system/VoF/fvSchemes b/tutorials/modules/CHT/VoFToFilm/system/VoF/fvSchemes
new file mode 100644
index 0000000000..76856d7176
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/system/VoF/fvSchemes
@@ -0,0 +1,58 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ location "system";
+ object fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ddtSchemes
+{
+ default Euler;
+}
+
+gradSchemes
+{
+ default Gauss linear;
+}
+
+divSchemes
+{
+ div(phi,alpha) Gauss interfaceCompression vanLeer 1;
+
+ div(rhoPhi,U) Gauss linearUpwindV grad(U);
+
+ div(alphaRhoPhi,e) Gauss linearUpwind grad(e);
+ div(alphaRhoPhi,T) Gauss upwind;
+
+ div(phi,p) Gauss upwind;
+ div(rhoPhi,K) Gauss upwind;
+
+ div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
+}
+
+laplacianSchemes
+{
+ default Gauss linear corrected;
+}
+
+interpolationSchemes
+{
+ default linear;
+}
+
+snGradSchemes
+{
+ default corrected;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/system/VoF/fvSolution b/tutorials/modules/CHT/VoFToFilm/system/VoF/fvSolution
new file mode 100644
index 0000000000..6373124736
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/system/VoF/fvSolution
@@ -0,0 +1,89 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ location "system";
+ object fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{
+ "alpha.liquid.*"
+ {
+ nAlphaCorr 2;
+ nAlphaSubCycles 1;
+
+ MULESCorr yes;
+ nLimiterIter 5;
+
+ solver smoothSolver;
+ smoother symGaussSeidel;
+ tolerance 1e-8;
+ relTol 0;
+ }
+
+ "pcorr.*"
+ {
+ solver PCG;
+ preconditioner DIC;
+ tolerance 1e-5;
+ relTol 0;
+ }
+
+ p_rgh
+ {
+ solver PCG;
+ preconditioner DIC;
+ tolerance 1e-9;
+ relTol 0.05;
+ }
+
+ p_rghFinal
+ {
+ $p_rgh;
+ relTol 0;
+ }
+
+ "U.*"
+ {
+ solver PBiCGStab;
+ preconditioner DILU;
+ tolerance 1e-6;
+ relTol 0;
+ }
+
+ "(T|k|B|nuTilda|sigma).*"
+ {
+ solver PBiCGStab;
+ preconditioner DILU;
+ tolerance 1e-8;
+ relTol 0;
+ }
+}
+
+PIMPLE
+{
+ momentumPredictor no;
+ nOuterCorrectors 1;
+ nCorrectors 2;
+ nNonOrthogonalCorrectors 0;
+}
+
+relaxationFactors
+{
+ equations
+ {
+ ".*" 1;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/system/VoF/setFieldsDict b/tutorials/modules/CHT/VoFToFilm/system/VoF/setFieldsDict
new file mode 100644
index 0000000000..de2b3b91a8
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/system/VoF/setFieldsDict
@@ -0,0 +1,35 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ location "system";
+ object setFieldsDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+defaultFieldValues
+(
+ volScalarFieldValue alpha.liquid 0
+);
+
+regions
+(
+ boxToCell
+ {
+ box (0 0 -1) (1 0.08 1);
+ fieldValues
+ (
+ volScalarFieldValue alpha.liquid 1
+ );
+ }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/system/controlDict b/tutorials/modules/CHT/VoFToFilm/system/controlDict
new file mode 100644
index 0000000000..1d23dd0ce8
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/system/controlDict
@@ -0,0 +1,60 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ location "system";
+ object controlDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+application foamMultiRun;
+
+regionSolvers
+{
+ film film;
+ VoF compressibleVoF;
+}
+
+startFrom startTime;
+
+startTime 0;
+
+stopAt endTime;
+
+endTime 5;
+
+deltaT 1e-3;
+
+writeControl adjustableRunTime;
+
+writeInterval 0.1;
+
+purgeWrite 0;
+
+writeFormat ascii;
+
+writePrecision 10;
+
+writeCompression off;
+
+timeFormat general;
+
+timePrecision 6;
+
+runTimeModifiable yes;
+
+adjustTimeStep no;
+
+maxCo 1;
+maxAlphaCo 1;
+
+maxDeltaT 1;
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/system/film/blockMeshDict b/tutorials/modules/CHT/VoFToFilm/system/film/blockMeshDict
new file mode 100644
index 0000000000..e108eb0f91
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/system/film/blockMeshDict
@@ -0,0 +1,115 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ object blockMeshDict;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+convertToMeters 0.001;
+
+w 1;
+h 100;
+
+wCells 1;
+hCells 80;
+
+wGrading 1;
+
+vertices
+(
+ (0 0 -1)
+ ($w 0 -1)
+ (0 $h -1)
+ ($w $h -1)
+
+ (0 0 0)
+ ($w 0 0)
+ (0 $h 0)
+ ($w $h 0)
+
+);
+
+blocks
+(
+ hex (0 1 3 2 4 5 7 6)
+ ($wCells $hCells 1)
+ simpleGrading ($wGrading 1 1)
+);
+
+boundary
+(
+ wall
+ {
+ type filmWall;
+
+ neighbourRegion VoF;
+ neighbourPatch film;
+
+ faces
+ (
+ (0 2 6 4)
+ );
+ }
+
+ surface
+ {
+ type mappedFilmSurface;
+
+ neighbourRegion VoF;
+ neighbourPatch film;
+ oppositePatch wall;
+ transformType none;
+
+ faces
+ (
+ (1 3 7 5)
+ );
+ }
+
+ bottom
+ {
+ type patch;
+ faces
+ (
+ (0 1 5 4)
+ );
+ }
+
+ atmosphere
+ {
+ type patch;
+ faces
+ (
+ (2 3 7 6)
+ );
+ }
+
+ back
+ {
+ type empty;
+ faces
+ (
+ (0 2 3 1)
+ );
+ }
+
+ front
+ {
+ type empty;
+ faces
+ (
+ (4 5 7 6)
+ );
+ }
+);
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/system/film/fvSchemes b/tutorials/modules/CHT/VoFToFilm/system/film/fvSchemes
new file mode 100644
index 0000000000..10a28677c0
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/system/film/fvSchemes
@@ -0,0 +1,47 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ location "system";
+ object fvSchemes;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+ddtSchemes
+{
+ default Euler;
+}
+
+gradSchemes
+{
+ default filmGauss linear;
+}
+
+divSchemes
+{
+ default none;
+
+ div(phid,alpha) Gauss upwind; // vanLeer;
+ div(alphaRhoPhi,U) Gauss upwind;
+ div(alphaRhoPhi,e) Gauss upwind;
+}
+
+laplacianSchemes
+{
+ default Gauss linear orthogonal;
+}
+
+snGradSchemes
+{
+ default orthogonal;
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/system/film/fvSolution b/tutorials/modules/CHT/VoFToFilm/system/film/fvSolution
new file mode 100644
index 0000000000..2b66db28a9
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/system/film/fvSolution
@@ -0,0 +1,55 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ location "system";
+ object fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+solvers
+{
+ "alpha.*"
+ {
+ solver PBiCGStab;
+ preconditioner DILU;
+
+ tolerance 1e-10;
+ relTol 0;
+ }
+
+ "(U|e).*"
+ {
+ solver PBiCGStab;
+ preconditioner DILU;
+
+ tolerance 1e-10;
+ relTol 0;
+ }
+}
+
+PIMPLE
+{
+ momentumPredictor yes;
+ nOuterCorrectors 2;
+ nCorrectors 1;
+ nNonOrthogonalCorrectors 0;
+}
+
+relaxationFactors
+{
+ equations
+ {
+ ".*" 1;
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/tutorials/modules/CHT/VoFToFilm/system/fvSolution b/tutorials/modules/CHT/VoFToFilm/system/fvSolution
new file mode 100644
index 0000000000..f1497eb3b5
--- /dev/null
+++ b/tutorials/modules/CHT/VoFToFilm/system/fvSolution
@@ -0,0 +1,21 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+\*---------------------------------------------------------------------------*/
+FoamFile
+{
+ format ascii;
+ class dictionary;
+ object fvSolution;
+}
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+PIMPLE
+{
+ nOuterCorrectors 1;
+}
+
+// ************************************************************************* //