diff --git a/src/regionModels/Allwmake b/src/regionModels/Allwmake
index b5074c5001..5c97cae02b 100755
--- a/src/regionModels/Allwmake
+++ b/src/regionModels/Allwmake
@@ -7,7 +7,7 @@ wmake $makeType regionModel
wmake $makeType pyrolysisModels
wmake $makeType surfaceFilmModels
wmake $makeType thermoBaffleModels
-#wmake $makeType regionCoupling
+wmake $makeType regionCoupling
# ----------------------------------------------------------------- end-of-file
diff --git a/src/regionModels/regionCoupling/Make/files b/src/regionModels/regionCoupling/Make/files
new file mode 100644
index 0000000000..d9d961e3a5
--- /dev/null
+++ b/src/regionModels/regionCoupling/Make/files
@@ -0,0 +1,5 @@
+derivedFvPatchFields/filmPyrolysisVelocityCoupled/filmPyrolysisVelocityCoupledFvPatchVectorField.C
+derivedFvPatchFields/filmPyrolysisTemperatureCoupled/filmPyrolysisTemperatureCoupledFvPatchScalarField.C
+
+
+LIB = $(FOAM_LIBBIN)/libregionCoupling
diff --git a/src/regionModels/regionCoupling/Make/options b/src/regionModels/regionCoupling/Make/options
new file mode 100644
index 0000000000..40d7a67126
--- /dev/null
+++ b/src/regionModels/regionCoupling/Make/options
@@ -0,0 +1,29 @@
+
+EXE_INC = \
+ -I$(LIB_SRC)/finiteVolume/lnInclude \
+ -I$(LIB_SRC)/meshTools/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/chemistryModel/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/solid/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/basicSolidThermo/lnInclude \
+ -I$(LIB_SRC)/thermophysicalModels/solidChemistryModel/lnInclude \
+ -I$(LIB_SRC)/turbulenceModels \
+ -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel/lnInclude \
+ -I$(LIB_SRC)/turbulenceModels/compressible/RAS/lnInclude \
+ -I$(LIB_SRC)/turbulenceModels/compressible/LES/lnInclude \
+ -I$(LIB_SRC)/turbulenceModels/LES/LESdeltas/lnInclude \
+ -I$(LIB_SRC)/regionModels/regionModel/lnInclude \
+ -I$(LIB_SRC)/regionModels/pyrolysisModels/lnInclude \
+ -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \
+
+
+EXE_LIBS = \
+ -lregionModels \
+ -lpyrolysisModels \
+ -lsurfaceFilmModels \
+ -lsolidChemistryModel \
+ -lfiniteVolume \
+ -lmeshTools \
+ -lcompressibleRASModels \
+ -lcompressibleLESModels
diff --git a/src/regionModels/regionCoupling/derivedFvPatchFields/filmPyrolysisTemperatureCoupled/filmPyrolysisTemperatureCoupledFvPatchScalarField.C b/src/regionModels/regionCoupling/derivedFvPatchFields/filmPyrolysisTemperatureCoupled/filmPyrolysisTemperatureCoupledFvPatchScalarField.C
new file mode 100644
index 0000000000..fa63e8980b
--- /dev/null
+++ b/src/regionModels/regionCoupling/derivedFvPatchFields/filmPyrolysisTemperatureCoupled/filmPyrolysisTemperatureCoupledFvPatchScalarField.C
@@ -0,0 +1,213 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd.
+ \\/ 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 "filmPyrolysisTemperatureCoupledFvPatchScalarField.H"
+#include "addToRunTimeSelectionTable.H"
+#include "surfaceFields.H"
+#include "pyrolysisModel.H"
+#include "surfaceFilmModel.H"
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::filmPyrolysisTemperatureCoupledFvPatchScalarField::
+filmPyrolysisTemperatureCoupledFvPatchScalarField
+(
+ const fvPatch& p,
+ const DimensionedField& iF
+)
+:
+ fixedValueFvPatchScalarField(p, iF),
+ phiName_("phi"),
+ rhoName_("rho"),
+ deltaWet_(1e-6)
+{}
+
+
+Foam::filmPyrolysisTemperatureCoupledFvPatchScalarField::
+filmPyrolysisTemperatureCoupledFvPatchScalarField
+(
+ const filmPyrolysisTemperatureCoupledFvPatchScalarField& ptf,
+ const fvPatch& p,
+ const DimensionedField& iF,
+ const fvPatchFieldMapper& mapper
+)
+:
+ fixedValueFvPatchScalarField(ptf, p, iF, mapper),
+ phiName_(ptf.phiName_),
+ rhoName_(ptf.rhoName_),
+ deltaWet_(ptf.deltaWet_)
+{}
+
+
+Foam::filmPyrolysisTemperatureCoupledFvPatchScalarField::
+filmPyrolysisTemperatureCoupledFvPatchScalarField
+(
+ const fvPatch& p,
+ const DimensionedField& iF,
+ const dictionary& dict
+)
+:
+ fixedValueFvPatchScalarField(p, iF),
+ phiName_(dict.lookupOrDefault("phi", "phi")),
+ rhoName_(dict.lookupOrDefault("rho", "rho")),
+ deltaWet_(dict.lookupOrDefault("deltaWet", 1e-6))
+{
+ fvPatchScalarField::operator=(scalarField("value", dict, p.size()));
+}
+
+
+Foam::filmPyrolysisTemperatureCoupledFvPatchScalarField::
+filmPyrolysisTemperatureCoupledFvPatchScalarField
+(
+ const filmPyrolysisTemperatureCoupledFvPatchScalarField& fptpsf
+)
+:
+ fixedValueFvPatchScalarField(fptpsf),
+ phiName_(fptpsf.phiName_),
+ rhoName_(fptpsf.rhoName_),
+ deltaWet_(fptpsf.deltaWet_)
+{}
+
+
+Foam::filmPyrolysisTemperatureCoupledFvPatchScalarField::
+filmPyrolysisTemperatureCoupledFvPatchScalarField
+(
+ const filmPyrolysisTemperatureCoupledFvPatchScalarField& fptpsf,
+ const DimensionedField& iF
+)
+:
+ fixedValueFvPatchScalarField(fptpsf, iF),
+ phiName_(fptpsf.phiName_),
+ rhoName_(fptpsf.rhoName_),
+ deltaWet_(fptpsf.deltaWet_)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+void Foam::filmPyrolysisTemperatureCoupledFvPatchScalarField::updateCoeffs()
+{
+ if (updated())
+ {
+ return;
+ }
+
+ typedef regionModels::surfaceFilmModels::surfaceFilmModel filmModelType;
+ typedef regionModels::pyrolysisModels::pyrolysisModel pyrModelType;
+
+ bool filmOk =
+ db().objectRegistry::foundObject
+ (
+ "surfaceFilmProperties"
+ );
+
+
+ bool pyrOk =
+ db().objectRegistry::foundObject
+ (
+ "pyrolysisProperties"
+ );
+
+ if (!filmOk || !pyrOk)
+ {
+ // do nothing on construction - film model doesn't exist yet
+ return;
+ }
+
+ scalarField& Tp = *this;
+
+ const label patchI = patch().index();
+
+ // Retrieve film model
+ const filmModelType& filmModel =
+ db().lookupObject("surfaceFilmProperties");
+
+ const label filmPatchI = filmModel.regionPatchID(patchI);
+
+ const mapDistribute& filmMap = filmModel.mappedPatches()[filmPatchI].map();
+
+ scalarField deltaFilm = filmModel.delta().boundaryField()[filmPatchI];
+ filmMap.distribute(deltaFilm);
+
+ scalarField TFilm = filmModel.Ts().boundaryField()[filmPatchI];
+ filmMap.distribute(TFilm);
+
+
+ // Retrieve pyrolysis model
+ const pyrModelType& pyrModel =
+ db().lookupObject("pyrolysisProperties");
+
+ const label pyrPatchI = pyrModel.regionPatchID(patchI);
+
+ const mapDistribute& pyrMap = pyrModel.mappedPatches()[pyrPatchI].map();
+
+ scalarField TPyr = pyrModel.T().boundaryField()[pyrPatchI];
+ pyrMap.distribute(TPyr);
+
+
+ forAll(deltaFilm, i)
+ {
+ if (deltaFilm[i] > deltaWet_)
+ {
+ // temperature set by film
+ Tp[i] = TFilm[i];
+ }
+ else
+ {
+ // temperature set by pyrolysis model
+ Tp[i] = TPyr[i];
+ }
+ }
+
+ fixedValueFvPatchScalarField::updateCoeffs();
+}
+
+
+void Foam::filmPyrolysisTemperatureCoupledFvPatchScalarField::write
+(
+ Ostream& os
+) const
+{
+ fvPatchScalarField::write(os);
+ writeEntryIfDifferent(os, "phi", "phi", phiName_);
+ writeEntryIfDifferent(os, "rho", "rho", rhoName_);
+ os.writeKeyword("deltaWet") << deltaWet_ << token::END_STATEMENT << nl;
+ writeEntry("value", os);
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ makePatchTypeField
+ (
+ fvPatchScalarField,
+ filmPyrolysisTemperatureCoupledFvPatchScalarField
+ );
+}
+
+
+// ************************************************************************* //
diff --git a/src/regionModels/regionCoupling/derivedFvPatchFields/filmPyrolysisTemperatureCoupled/filmPyrolysisTemperatureCoupledFvPatchScalarField.H b/src/regionModels/regionCoupling/derivedFvPatchFields/filmPyrolysisTemperatureCoupled/filmPyrolysisTemperatureCoupledFvPatchScalarField.H
new file mode 100644
index 0000000000..35864435fa
--- /dev/null
+++ b/src/regionModels/regionCoupling/derivedFvPatchFields/filmPyrolysisTemperatureCoupled/filmPyrolysisTemperatureCoupledFvPatchScalarField.H
@@ -0,0 +1,183 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd.
+ \\/ 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::filmPyrolysisTemperatureCoupledFvPatchScalarField
+
+Description
+ Temperature boundary condition for patches on the primary region:
+
+ - where the film height > height threshold value:
+ apply film surface temperature values
+ - else
+ apply pyrolysis surface temperature values
+
+SourceFiles
+ filmPyrolysisTemperatureCoupledFvPatchScalarField.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef filmPyrolysisTemperatureCoupledFvPatchScalarField_H
+#define filmPyrolysisTemperatureCoupledFvPatchScalarField_H
+
+#include "fixedValueFvPatchFields.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class filmPyrolysisTemperatureCoupledFvPatchScalarField Declaration
+\*---------------------------------------------------------------------------*/
+
+class filmPyrolysisTemperatureCoupledFvPatchScalarField
+:
+ public fixedValueFvPatchScalarField
+{
+ // Private data
+
+ //- Name of flux field
+ word phiName_;
+
+ //- Name of density field
+ word rhoName_;
+
+ //- Film height threshold beyond which it is considered 'wet'
+ scalar deltaWet_;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("filmPyrolysisTemperatureCoupled");
+
+
+ // Constructors
+
+ //- Construct from patch and internal field
+ filmPyrolysisTemperatureCoupledFvPatchScalarField
+ (
+ const fvPatch&,
+ const DimensionedField&
+ );
+
+ //- Construct from patch, internal field and dictionary
+ filmPyrolysisTemperatureCoupledFvPatchScalarField
+ (
+ const fvPatch&,
+ const DimensionedField&,
+ const dictionary&
+ );
+
+ //- Construct by mapping given
+ // filmPyrolysisTemperatureCoupledFvPatchScalarField onto a new patch
+ filmPyrolysisTemperatureCoupledFvPatchScalarField
+ (
+ const filmPyrolysisTemperatureCoupledFvPatchScalarField&,
+ const fvPatch&,
+ const DimensionedField&,
+ const fvPatchFieldMapper&
+ );
+
+ //- Construct as copy
+ filmPyrolysisTemperatureCoupledFvPatchScalarField
+ (
+ const filmPyrolysisTemperatureCoupledFvPatchScalarField&
+ );
+
+ //- Construct and return a clone
+ virtual tmp clone() const
+ {
+ return tmp
+ (
+ new filmPyrolysisTemperatureCoupledFvPatchScalarField(*this)
+ );
+ }
+
+ //- Construct as copy setting internal field reference
+ filmPyrolysisTemperatureCoupledFvPatchScalarField
+ (
+ const filmPyrolysisTemperatureCoupledFvPatchScalarField&,
+ const DimensionedField&
+ );
+
+ //- Construct and return a clone setting internal field reference
+ virtual tmp clone
+ (
+ const DimensionedField& iF
+ ) const
+ {
+ return tmp
+ (
+ new filmPyrolysisTemperatureCoupledFvPatchScalarField(*this, iF)
+ );
+ }
+
+
+ // Member functions
+
+ // Access
+
+ //- Return the name of phi
+ const word& phiName() const
+ {
+ return phiName_;
+ }
+
+ //- Return reference to the name of phi to allow adjustment
+ word& phiName()
+ {
+ return phiName_;
+ }
+
+ //- Return the name of rho
+ const word& rhoName() const
+ {
+ return rhoName_;
+ }
+
+ //- Return reference to the name of rho to allow adjustment
+ word& rhoName()
+ {
+ return rhoName_;
+ }
+
+
+ //- Update the coefficients associated with the patch field
+ virtual void updateCoeffs();
+
+ //- Write
+ virtual void write(Ostream&) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/regionModels/regionCoupling/derivedFvPatchFields/filmPyrolysisVelocityCoupled/filmPyrolysisVelocityCoupledFvPatchVectorField.C b/src/regionModels/regionCoupling/derivedFvPatchFields/filmPyrolysisVelocityCoupled/filmPyrolysisVelocityCoupledFvPatchVectorField.C
new file mode 100644
index 0000000000..57955d166c
--- /dev/null
+++ b/src/regionModels/regionCoupling/derivedFvPatchFields/filmPyrolysisVelocityCoupled/filmPyrolysisVelocityCoupledFvPatchVectorField.C
@@ -0,0 +1,248 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd.
+ \\/ 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 "filmPyrolysisVelocityCoupledFvPatchVectorField.H"
+#include "addToRunTimeSelectionTable.H"
+#include "surfaceFields.H"
+#include "pyrolysisModel.H"
+#include "surfaceFilmModel.H"
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::filmPyrolysisVelocityCoupledFvPatchVectorField::
+filmPyrolysisVelocityCoupledFvPatchVectorField
+(
+ const fvPatch& p,
+ const DimensionedField& iF
+)
+:
+ fixedValueFvPatchVectorField(p, iF),
+ phiName_("phi"),
+ rhoName_("rho"),
+ deltaWet_(1e-6)
+{}
+
+
+Foam::filmPyrolysisVelocityCoupledFvPatchVectorField::
+filmPyrolysisVelocityCoupledFvPatchVectorField
+(
+ const filmPyrolysisVelocityCoupledFvPatchVectorField& ptf,
+ const fvPatch& p,
+ const DimensionedField& iF,
+ const fvPatchFieldMapper& mapper
+)
+:
+ fixedValueFvPatchVectorField(ptf, p, iF, mapper),
+ phiName_(ptf.phiName_),
+ rhoName_(ptf.rhoName_),
+ deltaWet_(ptf.deltaWet_)
+{}
+
+
+Foam::filmPyrolysisVelocityCoupledFvPatchVectorField::
+filmPyrolysisVelocityCoupledFvPatchVectorField
+(
+ const fvPatch& p,
+ const DimensionedField& iF,
+ const dictionary& dict
+)
+:
+ fixedValueFvPatchVectorField(p, iF),
+ phiName_(dict.lookupOrDefault("phi", "phi")),
+ rhoName_(dict.lookupOrDefault("rho", "rho")),
+ deltaWet_(dict.lookupOrDefault("deltaWet", 1e-6))
+{
+ fvPatchVectorField::operator=(vectorField("value", dict, p.size()));
+}
+
+
+Foam::filmPyrolysisVelocityCoupledFvPatchVectorField::
+filmPyrolysisVelocityCoupledFvPatchVectorField
+(
+ const filmPyrolysisVelocityCoupledFvPatchVectorField& fpvpvf
+)
+:
+ fixedValueFvPatchVectorField(fpvpvf),
+ phiName_(fpvpvf.phiName_),
+ rhoName_(fpvpvf.rhoName_),
+ deltaWet_(fpvpvf.deltaWet_)
+{}
+
+
+Foam::filmPyrolysisVelocityCoupledFvPatchVectorField::
+filmPyrolysisVelocityCoupledFvPatchVectorField
+(
+ const filmPyrolysisVelocityCoupledFvPatchVectorField& fpvpvf,
+ const DimensionedField& iF
+)
+:
+ fixedValueFvPatchVectorField(fpvpvf, iF),
+ phiName_(fpvpvf.phiName_),
+ rhoName_(fpvpvf.rhoName_),
+ deltaWet_(fpvpvf.deltaWet_)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+void Foam::filmPyrolysisVelocityCoupledFvPatchVectorField::updateCoeffs()
+{
+ if (updated())
+ {
+ return;
+ }
+
+ typedef regionModels::surfaceFilmModels::surfaceFilmModel filmModelType;
+ typedef regionModels::pyrolysisModels::pyrolysisModel pyrModelType;
+
+ bool filmOk =
+ db().objectRegistry::foundObject
+ (
+ "surfaceFilmProperties"
+ );
+
+
+ bool pyrOk =
+ db().objectRegistry::foundObject
+ (
+ "pyrolysisProperties"
+ );
+
+ if (!filmOk || !pyrOk)
+ {
+ // do nothing on construction - film model doesn't exist yet
+ return;
+ }
+
+ vectorField& Up = *this;
+
+ const label patchI = patch().index();
+
+ // Retrieve film model
+ const filmModelType& filmModel =
+ db().objectRegistry::lookupObject
+ (
+ "surfaceFilmProperties"
+ );
+
+ const label filmPatchI = filmModel.regionPatchID(patchI);
+
+ const mapDistribute& filmMap = filmModel.mappedPatches()[filmPatchI].map();
+
+ scalarField deltaFilm = filmModel.delta().boundaryField()[filmPatchI];
+ filmMap.distribute(deltaFilm);
+
+ vectorField UFilm = filmModel.Us().boundaryField()[filmPatchI];
+ filmMap.distribute(UFilm);
+
+
+ // Retrieve pyrolysis model
+ const pyrModelType& pyrModel =
+ db().objectRegistry::lookupObject
+ (
+ "pyrolysisProperties"
+ );
+
+ const label pyrPatchI = pyrModel.regionPatchID(patchI);
+
+ const mapDistribute& pyrMap = pyrModel.mappedPatches()[pyrPatchI].map();
+
+ scalarField phiPyr = pyrModel.phiGas().boundaryField()[pyrPatchI];
+ pyrMap.distribute(phiPyr);
+
+
+ const surfaceScalarField& phi =
+ db().lookupObject(phiName_);
+
+ if (phi.dimensions() == dimVelocity*dimArea)
+ {
+ // do nothing
+ }
+ else if (phi.dimensions() == dimDensity*dimVelocity*dimArea)
+ {
+ const fvPatchField& rhop =
+ patch().lookupPatchField(rhoName_);
+ phiPyr /= rhop;
+ }
+ else
+ {
+ FatalErrorIn
+ (
+ "filmPyrolysisVelocityCoupledFvPatchVectorField::updateCoeffs()"
+ ) << "Unable to process flux field phi with dimensions "
+ << phi.dimensions() << nl
+ << " on patch " << patch().name()
+ << " of field " << dimensionedInternalField().name()
+ << " in file " << dimensionedInternalField().objectPath()
+ << exit(FatalError);
+ }
+
+ const scalarField UAvePyr = -phiPyr/patch().magSf();
+ const vectorField& nf = patch().nf();
+
+ forAll(deltaFilm, i)
+ {
+ if (deltaFilm[i] > deltaWet_)
+ {
+ // velocity set by film
+ Up[i] = UFilm[i];
+ }
+ else
+ {
+ // velocity set by pyrolysis model
+ Up[i] = UAvePyr[i]*nf[i];
+ }
+ }
+
+ fixedValueFvPatchVectorField::updateCoeffs();
+}
+
+
+void Foam::filmPyrolysisVelocityCoupledFvPatchVectorField::write
+(
+ Ostream& os
+) const
+{
+ fvPatchVectorField::write(os);
+ writeEntryIfDifferent(os, "phi", "phi", phiName_);
+ writeEntryIfDifferent(os, "rho", "rho", rhoName_);
+ os.writeKeyword("deltaWet") << deltaWet_ << token::END_STATEMENT << nl;
+ writeEntry("value", os);
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ makePatchTypeField
+ (
+ fvPatchVectorField,
+ filmPyrolysisVelocityCoupledFvPatchVectorField
+ );
+}
+
+
+// ************************************************************************* //
diff --git a/src/regionModels/regionCoupling/derivedFvPatchFields/filmPyrolysisVelocityCoupled/filmPyrolysisVelocityCoupledFvPatchVectorField.H b/src/regionModels/regionCoupling/derivedFvPatchFields/filmPyrolysisVelocityCoupled/filmPyrolysisVelocityCoupledFvPatchVectorField.H
new file mode 100644
index 0000000000..c06dbda902
--- /dev/null
+++ b/src/regionModels/regionCoupling/derivedFvPatchFields/filmPyrolysisVelocityCoupled/filmPyrolysisVelocityCoupledFvPatchVectorField.H
@@ -0,0 +1,183 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2010-2011 OpenCFD Ltd.
+ \\/ 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::filmPyrolysisVelocityCoupledFvPatchVectorField
+
+Description
+ Velocity boundary condition for patches on the primary region:
+
+ - where the film height > height threshold value:
+ apply film surface velocity values
+ - else
+ apply pyrolysis out-gassing velocity values
+
+SourceFiles
+ filmPyrolysisVelocityCoupledFvPatchVectorField.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef filmPyrolysisVelocityCoupledFvPatchVectorField_H
+#define filmPyrolysisVelocityCoupledFvPatchVectorField_H
+
+#include "fixedValueFvPatchFields.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class filmPyrolysisVelocityCoupledFvPatchVectorField Declaration
+\*---------------------------------------------------------------------------*/
+
+class filmPyrolysisVelocityCoupledFvPatchVectorField
+:
+ public fixedValueFvPatchVectorField
+{
+ // Private data
+
+ //- Name of flux field
+ word phiName_;
+
+ //- Name of density field
+ word rhoName_;
+
+ //- Film height threshold beyond which it is considered 'wet'
+ scalar deltaWet_;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("filmPyrolysisVelocityCoupled");
+
+
+ // Constructors
+
+ //- Construct from patch and internal field
+ filmPyrolysisVelocityCoupledFvPatchVectorField
+ (
+ const fvPatch&,
+ const DimensionedField&
+ );
+
+ //- Construct from patch, internal field and dictionary
+ filmPyrolysisVelocityCoupledFvPatchVectorField
+ (
+ const fvPatch&,
+ const DimensionedField&,
+ const dictionary&
+ );
+
+ //- Construct by mapping given
+ // filmPyrolysisVelocityCoupledFvPatchVectorField onto a new patch
+ filmPyrolysisVelocityCoupledFvPatchVectorField
+ (
+ const filmPyrolysisVelocityCoupledFvPatchVectorField&,
+ const fvPatch&,
+ const DimensionedField&,
+ const fvPatchFieldMapper&
+ );
+
+ //- Construct as copy
+ filmPyrolysisVelocityCoupledFvPatchVectorField
+ (
+ const filmPyrolysisVelocityCoupledFvPatchVectorField&
+ );
+
+ //- Construct and return a clone
+ virtual tmp clone() const
+ {
+ return tmp
+ (
+ new filmPyrolysisVelocityCoupledFvPatchVectorField(*this)
+ );
+ }
+
+ //- Construct as copy setting internal field reference
+ filmPyrolysisVelocityCoupledFvPatchVectorField
+ (
+ const filmPyrolysisVelocityCoupledFvPatchVectorField&,
+ const DimensionedField&
+ );
+
+ //- Construct and return a clone setting internal field reference
+ virtual tmp clone
+ (
+ const DimensionedField& iF
+ ) const
+ {
+ return tmp
+ (
+ new filmPyrolysisVelocityCoupledFvPatchVectorField(*this, iF)
+ );
+ }
+
+
+ // Member functions
+
+ // Access
+
+ //- Return the name of phi
+ const word& phiName() const
+ {
+ return phiName_;
+ }
+
+ //- Return reference to the name of phi to allow adjustment
+ word& phiName()
+ {
+ return phiName_;
+ }
+
+ //- Return the name of rho
+ const word& rhoName() const
+ {
+ return rhoName_;
+ }
+
+ //- Return reference to the name of rho to allow adjustment
+ word& rhoName()
+ {
+ return rhoName_;
+ }
+
+
+ //- Update the coefficients associated with the patch field
+ virtual void updateCoeffs();
+
+ //- Write
+ virtual void write(Ostream&) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //