diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseCompressibleTurbulenceModels/derivedFvPatchFields/alphatFixedDmdtWallBoilingWallFunction/alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField.C b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseCompressibleTurbulenceModels/derivedFvPatchFields/alphatFixedDmdtWallBoilingWallFunction/alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField.C
new file mode 100644
index 0000000000..a37553e338
--- /dev/null
+++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseCompressibleTurbulenceModels/derivedFvPatchFields/alphatFixedDmdtWallBoilingWallFunction/alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField.C
@@ -0,0 +1,373 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2015 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 "alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField.H"
+#include "compressibleTurbulenceModel.H"
+#include "fvPatchFieldMapper.H"
+#include "volFields.H"
+#include "addToRunTimeSelectionTable.H"
+#include "twoPhaseSystem.H"
+#include "phaseSystem.H"
+#include "ThermalPhaseChangePhaseSystem.H"
+#include "MomentumTransferPhaseSystem.H"
+#include "wallFvPatch.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace compressible
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+scalar alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField::maxExp_
+ = 50.0;
+scalar alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField::tolerance_
+ = 0.01;
+label alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField::maxIters_
+ = 10;
+
+// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
+
+void alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField::checkType()
+{
+ if (!isA(patch()))
+ {
+ FatalErrorIn
+ (
+ "alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField"
+ "::checkType()"
+ )
+ << "Patch type for patch " << patch().name() << " must be wall\n"
+ << "Current patch type is " << patch().type() << nl
+ << exit(FatalError);
+ }
+}
+
+
+tmp
+alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField::Psmooth
+(
+ const scalarField& Prat
+) const
+{
+ return 9.24*(pow(Prat, 0.75) - 1.0)*(1.0 + 0.28*exp(-0.007*Prat));
+}
+
+
+tmp
+alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField::yPlusTherm
+(
+ const scalarField& P,
+ const scalarField& Prat
+) const
+{
+
+ tmp typtf(new scalarField(this->size()));
+ scalarField& yptf = typtf();
+
+ forAll(yptf, faceI)
+ {
+ scalar ypt = 11.0;
+
+ for (int i=0; i& iF
+)
+:
+ alphatPhaseChangeWallFunctionFvPatchScalarField(p, iF),
+ Prt_(0.85),
+ Cmu_(0.09),
+ kappa_(0.41),
+ E_(9.8),
+ fixedDmdt_(0.0)
+{
+ checkType();
+}
+
+
+alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField::
+alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField
+(
+ const fvPatch& p,
+ const DimensionedField& iF,
+ const dictionary& dict
+)
+:
+ alphatPhaseChangeWallFunctionFvPatchScalarField(p, iF, dict),
+ Prt_(dict.lookupOrDefault("Prt", 0.85)),
+ Cmu_(dict.lookupOrDefault("Cmu", 0.09)),
+ kappa_(dict.lookupOrDefault("kappa", 0.41)),
+ E_(dict.lookupOrDefault("E", 9.8)),
+ fixedDmdt_(dict.lookupOrDefault("fixedDmdt", 0.0))
+{}
+
+
+alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField::
+alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField
+(
+ const alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField& ptf,
+ const fvPatch& p,
+ const DimensionedField& iF,
+ const fvPatchFieldMapper& mapper
+)
+:
+ alphatPhaseChangeWallFunctionFvPatchScalarField(ptf, p, iF, mapper),
+ Prt_(ptf.Prt_),
+ Cmu_(ptf.Cmu_),
+ kappa_(ptf.kappa_),
+ E_(ptf.E_),
+ fixedDmdt_(ptf.fixedDmdt_)
+{}
+
+
+alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField::
+alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField
+(
+ const alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField& awfpsf
+)
+:
+ alphatPhaseChangeWallFunctionFvPatchScalarField(awfpsf),
+ Prt_(awfpsf.Prt_),
+ Cmu_(awfpsf.Cmu_),
+ kappa_(awfpsf.kappa_),
+ E_(awfpsf.E_),
+ fixedDmdt_(awfpsf.fixedDmdt_)
+{}
+
+
+alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField::
+alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField
+(
+ const alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField& awfpsf,
+ const DimensionedField& iF
+)
+:
+ alphatPhaseChangeWallFunctionFvPatchScalarField(awfpsf, iF),
+ Prt_(awfpsf.Prt_),
+ Cmu_(awfpsf.Cmu_),
+ kappa_(awfpsf.kappa_),
+ E_(awfpsf.E_),
+ fixedDmdt_(awfpsf.fixedDmdt_)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+void alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField::updateCoeffs()
+{
+ if (updated())
+ {
+ return;
+ }
+
+ // Lookup the fluid model
+ const ThermalPhaseChangePhaseSystem
+ <
+ MomentumTransferPhaseSystem
+ >& fluid =
+ refCast
+ <
+ const ThermalPhaseChangePhaseSystem
+ <
+ MomentumTransferPhaseSystem
+ >
+ >
+ (
+ db().lookupObject("phaseProperties")
+ );
+
+ const phaseModel& liquid
+ (
+ fluid.phase1().name() == dimensionedInternalField().group()
+ ? fluid.phase1()
+ : fluid.phase2()
+ );
+
+ const label patchi = patch().index();
+
+ // Retrieve turbulence properties from model
+ const compressibleTurbulenceModel& turbModel =
+ db().lookupObject
+ (
+ IOobject::groupName
+ (
+ compressibleTurbulenceModel::propertiesName,
+ dimensionedInternalField().group()
+ )
+ );
+
+ const scalar Cmu25 = pow025(Cmu_);
+
+ const scalarField& y = turbModel.y()[patchi];
+
+ const tmp tmuw = turbModel.mu(patchi);
+ const scalarField& muw = tmuw();
+
+ const tmp talphaw = liquid.thermo().alpha(patchi);
+ const scalarField& alphaw = talphaw();
+
+ scalarField& alphatw = *this;
+
+ const tmp tk = turbModel.k();
+ const volScalarField& k = tk();
+ const fvPatchScalarField& kw = k.boundaryField()[patchi];
+
+ const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi];
+ const scalarField magUp(mag(Uw.patchInternalField() - Uw));
+ const scalarField magGradUw(mag(Uw.snGrad()));
+
+ const fvPatchScalarField& rhow = turbModel.rho().boundaryField()[patchi];
+ const fvPatchScalarField& hew =
+ liquid.thermo().he().boundaryField()[patchi];
+
+ const fvPatchScalarField& Tw =
+ liquid.thermo().T().boundaryField()[patchi];
+
+ scalarField Tp(Tw.patchInternalField());
+
+ // Heat flux [W/m2] - lagging alphatw
+ const scalarField qDot
+ (
+ (alphatw + alphaw)*hew.snGrad()
+ );
+
+ scalarField uTau(Cmu25*sqrt(kw));
+
+ scalarField yPlus(uTau*y/(muw/rhow));
+
+ scalarField Pr(muw/alphaw);
+
+ // Molecular-to-turbulent Prandtl number ratio
+ scalarField Prat(Pr/Prt_);
+
+ // Thermal sublayer thickness
+ scalarField P(this->Psmooth(Prat));
+
+ scalarField yPlusTherm(this->yPlusTherm(P, Prat));
+
+ scalarField alphatConv(this->size(), 0.0);
+
+ // Populate boundary values
+ forAll(alphatw, faceI)
+ {
+ // Evaluate new effective thermal diffusivity
+ scalar alphaEff = 0.0;
+ if (yPlus[faceI] < yPlusTherm[faceI])
+ {
+ scalar A = qDot[faceI]*rhow[faceI]*uTau[faceI]*y[faceI];
+ scalar B = qDot[faceI]*Pr[faceI]*yPlus[faceI];
+ scalar C = Pr[faceI]*0.5*rhow[faceI]*uTau[faceI]*sqr(magUp[faceI]);
+ alphaEff = A/(B + C + VSMALL);
+ }
+ else
+ {
+ scalar A = qDot[faceI]*rhow[faceI]*uTau[faceI]*y[faceI];
+ scalar B =
+ qDot[faceI]*Prt_*(1.0/kappa_*log(E_*yPlus[faceI]) + P[faceI]);
+ scalar magUc =
+ uTau[faceI]/kappa_*log(E_*yPlusTherm[faceI]) - mag(Uw[faceI]);
+ scalar C =
+ 0.5*rhow[faceI]*uTau[faceI]
+ *(Prt_*sqr(magUp[faceI]) + (Pr[faceI] - Prt_)*sqr(magUc));
+ alphaEff = A/(B + C + VSMALL);
+ }
+
+ // Update convective heat transfer turbulent thermal diffusivity
+ alphatConv[faceI] = max(0.0, alphaEff - alphaw[faceI]);
+ }
+
+ dmdt_ = fixedDmdt_;
+
+ operator==(alphatConv);
+
+ fixedValueFvPatchScalarField::updateCoeffs();
+}
+
+
+void alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField::write
+(
+ Ostream& os
+) const
+{
+ fvPatchField::write(os);
+ os.writeKeyword("Prt") << Prt_ << token::END_STATEMENT << nl;
+ os.writeKeyword("Cmu") << Cmu_ << token::END_STATEMENT << nl;
+ os.writeKeyword("kappa") << kappa_ << token::END_STATEMENT << nl;
+ os.writeKeyword("E") << E_ << token::END_STATEMENT << nl;
+ os.writeKeyword("fixedDmdt") << fixedDmdt_ << token::END_STATEMENT << nl;
+ dmdt_.writeEntry("dmdt", os);
+ writeEntry("value", os);
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+makePatchTypeField
+(
+ fvPatchScalarField,
+ alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField
+);
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace compressible
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseCompressibleTurbulenceModels/derivedFvPatchFields/alphatFixedDmdtWallBoilingWallFunction/alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField.H b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseCompressibleTurbulenceModels/derivedFvPatchFields/alphatFixedDmdtWallBoilingWallFunction/alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField.H
new file mode 100644
index 0000000000..bd9426fdb6
--- /dev/null
+++ b/applications/solvers/multiphase/reactingEulerFoam/reactingTwoPhaseEulerFoam/twoPhaseCompressibleTurbulenceModels/derivedFvPatchFields/alphatFixedDmdtWallBoilingWallFunction/alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField.H
@@ -0,0 +1,210 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2015 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::compressible::alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField
+
+Group
+ grpCmpWallFunctions
+
+Description
+ A simple alphatPhaseChangeWallFunctionFvPatchScalarField with a fixed
+ volumetric phase-change mass flux.
+
+SeeAlso
+ Foam::compressible::alphatPhaseChangeWallFunctionFvPatchScalarField
+
+SourceFiles
+ alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef compressibleAlphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField_H
+#define compressibleAlphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField_H
+
+#include "alphatPhaseChangeWallFunctionFvPatchScalarField.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace compressible
+{
+
+/*---------------------------------------------------------------------------*\
+ Class alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField Declaration
+\*---------------------------------------------------------------------------*/
+
+class alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField
+:
+ public alphatPhaseChangeWallFunctionFvPatchScalarField
+{
+ // Private data
+
+ //- Turbulent Prandtl number
+ scalar Prt_;
+
+ //- Cmu coefficient
+ scalar Cmu_;
+
+ //- Von Karman constant
+ scalar kappa_;
+
+ //- E coefficient
+ scalar E_;
+
+ //- E coefficient
+ scalar fixedDmdt_;
+
+
+ // Solution parameters
+
+ static scalar maxExp_;
+ static scalar tolerance_;
+ static label maxIters_;
+
+
+ // Private Member Functions
+
+ //- Check the type of the patch
+ void checkType();
+
+ //- 'P' function
+ tmp Psmooth(const scalarField& Prat) const;
+
+ //- Calculate y+ at the edge of the thermal laminar sublayer
+ tmp yPlusTherm
+ (
+ const scalarField& P,
+ const scalarField& Prat
+ ) const;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("compressible::alphatFixedDmdtWallBoilingWallFunction");
+
+
+ // Constructors
+
+ //- Construct from patch and internal field
+ alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField
+ (
+ const fvPatch&,
+ const DimensionedField&
+ );
+
+ //- Construct from patch, internal field and dictionary
+ alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField
+ (
+ const fvPatch&,
+ const DimensionedField&,
+ const dictionary&
+ );
+
+ //- Construct by mapping given
+ // alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField
+ // onto a new patch
+ alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField
+ (
+ const alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField&,
+ const fvPatch&,
+ const DimensionedField&,
+ const fvPatchFieldMapper&
+ );
+
+ //- Construct as copy
+ alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField
+ (
+ const alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField&
+ );
+
+ //- Construct and return a clone
+ virtual tmp clone() const
+ {
+ return tmp
+ (
+ new alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField
+ (
+ *this
+ )
+ );
+ }
+
+ //- Construct as copy setting internal field reference
+ alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField
+ (
+ const alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField&,
+ const DimensionedField&
+ );
+
+ //- Construct and return a clone setting internal field reference
+ virtual tmp clone
+ (
+ const DimensionedField& iF
+ ) const
+ {
+ return tmp
+ (
+ new alphatFixedDmdtWallBoilingWallFunctionFvPatchScalarField
+ (
+ *this,
+ iF
+ )
+ );
+ }
+
+
+ // Member functions
+
+ //- Return the rate of phase-change
+ virtual const scalarField& dmdt() const
+ {
+ return dmdt_;
+ }
+
+
+ // Evaluation functions
+
+ //- Update the coefficients associated with the patch field
+ virtual void updateCoeffs();
+
+
+ // I-O
+
+ //- Write
+ virtual void write(Ostream&) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace compressible
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/TurbulenceModels/compressible/Make/files b/src/TurbulenceModels/compressible/Make/files
index 1f7f2fa12d..c4aab94251 100644
--- a/src/TurbulenceModels/compressible/Make/files
+++ b/src/TurbulenceModels/compressible/Make/files
@@ -15,7 +15,6 @@ $(BCs)/convectiveHeatTransfer/convectiveHeatTransferFvPatchScalarField.C
turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatWallFunction/alphatWallFunctionFvPatchScalarField.C
turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatJayatillekeWallFunction/alphatJayatillekeWallFunctionFvPatchScalarField.C
-
-/*turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatPhaseChangeWallFunction/alphatPhaseChangeWallFunctionFvPatchScalarField.C*/
+turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatPhaseChangeWallFunction/alphatPhaseChangeWallFunctionFvPatchScalarField.C
LIB = $(FOAM_LIBBIN)/libcompressibleTurbulenceModels
diff --git a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatPhaseChangeWallFunction/alphatPhaseChangeWallFunctionFvPatchScalarField.C b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatPhaseChangeWallFunction/alphatPhaseChangeWallFunctionFvPatchScalarField.C
index 1df17993a7..0eb70aabbc 100644
--- a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatPhaseChangeWallFunction/alphatPhaseChangeWallFunctionFvPatchScalarField.C
+++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatPhaseChangeWallFunction/alphatPhaseChangeWallFunctionFvPatchScalarField.C
@@ -35,6 +35,11 @@ namespace Foam
namespace compressible
{
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(alphatPhaseChangeWallFunctionFvPatchScalarField,0);
+
+
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
alphatPhaseChangeWallFunctionFvPatchScalarField::
diff --git a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatPhaseChangeWallFunction/alphatPhaseChangeWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatPhaseChangeWallFunction/alphatPhaseChangeWallFunctionFvPatchScalarField.H
index fb424995a8..4d1dd4f15b 100644
--- a/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatPhaseChangeWallFunction/alphatPhaseChangeWallFunctionFvPatchScalarField.H
+++ b/src/TurbulenceModels/compressible/turbulentFluidThermoModels/derivedFvPatchFields/wallFunctions/alphatWallFunctions/alphatPhaseChangeWallFunction/alphatPhaseChangeWallFunctionFvPatchScalarField.H
@@ -38,8 +38,8 @@ SourceFiles
\*---------------------------------------------------------------------------*/
-#ifndef compressibleAlphatWallFunctionPhaseChangeFvPatchScalarField_H
-#define compressibleAlphatWallFunctionPhaseChangeFvPatchScalarField_H
+#ifndef compressibleAlphatPhaseChangeWallFunctionFvPatchScalarField_H
+#define compressibleAlphatPhaseChangeWallFunctionFvPatchScalarField_H
#include "fixedValueFvPatchFields.H"