diff --git a/src/turbulenceModels/incompressible/RAS/Make/files b/src/turbulenceModels/incompressible/RAS/Make/files
index 3712d227bd..372f25257b 100644
--- a/src/turbulenceModels/incompressible/RAS/Make/files
+++ b/src/turbulenceModels/incompressible/RAS/Make/files
@@ -36,7 +36,10 @@ omegaWallFunctions = $(wallFunctions)/omegaWallFunctions
$(omegaWallFunctions)/omegaWallFunction/omegaWallFunctionFvPatchScalarField.C
kqRWallFunctions = $(wallFunctions)/kqRWallFunctions
-$(kqRWallFunctions)/kqRWallFunction/kqRWallFunctionFvPatchFields.C
+$(kqRWakappatWallFunctions = $(wallFunctions)/kappatWallFunctions
+
+$(kappatWallFunctions)/kappatJayatillekeWallFunction/kappatJayatillekeWallFunctionFvPatchScalarField.C
+llFunctions)/kqRWallFunction/kqRWallFunctionFvPatchFields.C
/* Patch fields */
diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kappatWallFunctions/kappatJayatillekeWallFunction/kappatJayatillekeWallFunctionFvPatchScalarField.C b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kappatWallFunctions/kappatJayatillekeWallFunction/kappatJayatillekeWallFunctionFvPatchScalarField.C
new file mode 100644
index 0000000000..fc32eaf94f
--- /dev/null
+++ b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kappatWallFunctions/kappatJayatillekeWallFunction/kappatJayatillekeWallFunctionFvPatchScalarField.C
@@ -0,0 +1,274 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2010-2010 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 "kappatJayatillekeWallFunctionFvPatchScalarField.H"
+#include "RASModel.H"
+#include "fvPatchFieldMapper.H"
+#include "volFields.H"
+#include "wallFvPatch.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace incompressible
+{
+namespace RASModels
+{
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+scalar kappatJayatillekeWallFunctionFvPatchScalarField::tolerance_ = 0.01;
+label kappatJayatillekeWallFunctionFvPatchScalarField::maxIters_ = 10;
+
+// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
+
+void kappatJayatillekeWallFunctionFvPatchScalarField::checkType()
+{
+ if (!isA(patch()))
+ {
+ FatalErrorIn
+ (
+ "kappatJayatillekeWallFunctionFvPatchScalarField::checkType()"
+ ) << "Invalid wall function specification" << nl
+ << " Patch type for patch " << patch().name()
+ << " must be wall" << nl
+ << " Current patch type is " << patch().type() << nl << endl
+ << abort(FatalError);
+ }
+}
+
+
+scalar kappatJayatillekeWallFunctionFvPatchScalarField::Psmooth
+(
+ const scalar Prat
+) const
+{
+ return 9.24*(pow(Prat, 0.75) - 1.0)*(1.0 + 0.28*exp(-0.007*Prat));
+}
+
+
+scalar kappatJayatillekeWallFunctionFvPatchScalarField::yPlusTherm
+(
+ const scalar P,
+ const scalar Prat
+) const
+{
+ scalar ypt = 11.0;
+
+ for (int i=0; i& iF
+)
+:
+ fixedValueFvPatchScalarField(p, iF),
+ Prt_(0.85),
+ Cmu_(0.09),
+ kappa_(0.41),
+ E_(9.8)
+{
+ checkType();
+}
+
+
+kappatJayatillekeWallFunctionFvPatchScalarField::
+kappatJayatillekeWallFunctionFvPatchScalarField
+(
+ const kappatJayatillekeWallFunctionFvPatchScalarField& ptf,
+ const fvPatch& p,
+ const DimensionedField& iF,
+ const fvPatchFieldMapper& mapper
+)
+:
+ fixedValueFvPatchScalarField(ptf, p, iF, mapper),
+ Prt_(ptf.Prt_),
+ Cmu_(ptf.Cmu_),
+ kappa_(ptf.kappa_),
+ E_(ptf.E_)
+{
+ checkType();
+}
+
+
+kappatJayatillekeWallFunctionFvPatchScalarField::
+kappatJayatillekeWallFunctionFvPatchScalarField
+(
+ const fvPatch& p,
+ const DimensionedField& iF,
+ const dictionary& dict
+)
+:
+ fixedValueFvPatchScalarField(p, iF, dict),
+ Prt_(readScalar(dict.lookup("Prt"))), // force read to avoid ambiguity
+ Cmu_(dict.lookupOrDefault("Cmu", 0.09)),
+ kappa_(dict.lookupOrDefault("kappa", 0.41)),
+ E_(dict.lookupOrDefault("E", 9.8))
+{
+ checkType();
+}
+
+
+kappatJayatillekeWallFunctionFvPatchScalarField::
+kappatJayatillekeWallFunctionFvPatchScalarField
+(
+ const kappatJayatillekeWallFunctionFvPatchScalarField& wfpsf
+)
+:
+ fixedValueFvPatchScalarField(wfpsf),
+ Prt_(wfpsf.Prt_),
+ Cmu_(wfpsf.Cmu_),
+ kappa_(wfpsf.kappa_),
+ E_(wfpsf.E_)
+{
+ checkType();
+}
+
+
+kappatJayatillekeWallFunctionFvPatchScalarField::
+kappatJayatillekeWallFunctionFvPatchScalarField
+(
+ const kappatJayatillekeWallFunctionFvPatchScalarField& wfpsf,
+ const DimensionedField& iF
+)
+:
+ fixedValueFvPatchScalarField(wfpsf, iF),
+ Prt_(wfpsf.Prt_),
+ Cmu_(wfpsf.Cmu_),
+ kappa_(wfpsf.kappa_),
+ E_(wfpsf.E_)
+{
+ checkType();
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+void kappatJayatillekeWallFunctionFvPatchScalarField::updateCoeffs()
+{
+ if (updated())
+ {
+ return;
+ }
+
+ const label patchI = patch().index();
+
+ // Retrieve turbulence properties from model
+ const RASModel& rasModel = db().lookupObject("RASProperties");
+ const scalar Cmu25 = pow(Cmu_, 0.25);
+ const scalarField& y = rasModel.y()[patchI];
+ const scalarField& nuw = rasModel.nu().boundaryField()[patchI];
+ const tmp tk = rasModel.k();
+ const volScalarField& k = tk();
+
+ // Molecular Prandtl number
+ const scalar
+ Pr(dimensionedScalar(rasModel.transport().lookup("Pr")).value());
+
+ // Populate boundary values
+ scalarField& kappatw = *this;
+ forAll(kappatw, faceI)
+ {
+ label faceCellI = patch().faceCells()[faceI];
+
+ // y+
+ scalar yPlus = Cmu25*sqrt(k[faceCellI])*y[faceI]/nuw[faceI];
+
+ // Molecular-to-turbulent Prandtl number ratio
+ scalar Prat = Pr/Prt_;
+
+ // Thermal sublayer thickness
+ scalar P = Psmooth(Prat);
+ scalar yPlusTherm = this->yPlusTherm(P, Prat);
+
+ // Evaluate new effective thermal diffusivity
+ scalar kappaEff = 0.0;
+ if (yPlus < yPlusTherm)
+ {
+ kappaEff = Pr*yPlus;
+ }
+ else
+ {
+ kappaEff = nuw[faceI]*yPlus/(Prt_/kappa_*log(E_*yPlusTherm) + P);
+ }
+
+ // Update turbulent thermal diffusivity
+ kappatw[faceI] = max(0.0, kappaEff - nuw[faceI]/Pr);
+ }
+
+ fixedValueFvPatchField::updateCoeffs();
+}
+
+
+void kappatJayatillekeWallFunctionFvPatchScalarField::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;
+ writeEntry("value", os);
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+makePatchTypeField(fvPatchScalarField, kappatJayatillekeWallFunctionFvPatchScalarField);
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace RASModels
+} // End namespace incompressible
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kappatWallFunctions/kappatJayatillekeWallFunction/kappatJayatillekeWallFunctionFvPatchScalarField.H b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kappatWallFunctions/kappatJayatillekeWallFunction/kappatJayatillekeWallFunctionFvPatchScalarField.H
new file mode 100644
index 0000000000..185ab9f221
--- /dev/null
+++ b/src/turbulenceModels/incompressible/RAS/derivedFvPatchFields/wallFunctions/kappatWallFunctions/kappatJayatillekeWallFunction/kappatJayatillekeWallFunctionFvPatchScalarField.H
@@ -0,0 +1,194 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2010-2010 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::incompressible::RASModels::
+ kappatJayatillekeWallFunctionFvPatchScalarField
+
+Description
+ Boundary condition for (kinematic) turbulent thermal conductivity when
+ using wall functions, using Jayatilleke P function.
+
+ Units of m2/s
+
+SourceFiles
+ kappatJayatillekeWallFunctionFvPatchScalarField.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef kappatJayatillekeWallFunctionFvPatchScalarField_H
+#define kappatJayatillekeWallFunctionFvPatchScalarField_H
+
+#include "fixedValueFvPatchFields.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace incompressible
+{
+namespace RASModels
+{
+
+/*---------------------------------------------------------------------------*\
+ Class kappatJayatillekeWallFunctionFvPatchScalarField Declaration
+\*---------------------------------------------------------------------------*/
+
+class kappatJayatillekeWallFunctionFvPatchScalarField
+:
+ public fixedValueFvPatchScalarField
+{
+protected:
+
+ // Protected data
+
+ //- Turbulent Prandtl number
+ scalar Prt_;
+
+ //- Cmu coefficient
+ scalar Cmu_;
+
+ //- Von Karman constant
+ scalar kappa_;
+
+ //- E coefficient
+ scalar E_;
+
+
+ // Solution parameters
+
+ static scalar tolerance_;
+ static label maxIters_;
+
+
+ // Protected member functions
+
+ //- Check the type of the patch
+ virtual void checkType();
+
+ //- `P' function
+ scalar Psmooth(const scalar Prat) const;
+
+ //- Calculate y+ at the edge of the thermal laminar sublayer
+ scalar yPlusTherm
+ (
+ const scalar P,
+ const scalar Prat
+ ) const;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("kappatJayatillekeWallFunction");
+
+
+ // Constructors
+
+ //- Construct from patch and internal field
+ kappatJayatillekeWallFunctionFvPatchScalarField
+ (
+ const fvPatch&,
+ const DimensionedField&
+ );
+
+ //- Construct from patch, internal field and dictionary
+ kappatJayatillekeWallFunctionFvPatchScalarField
+ (
+ const fvPatch&,
+ const DimensionedField&,
+ const dictionary&
+ );
+
+ //- Construct by mapping given
+ // kappatJayatillekeWallFunctionFvPatchScalarField
+ // onto a new patch
+ kappatJayatillekeWallFunctionFvPatchScalarField
+ (
+ const kappatJayatillekeWallFunctionFvPatchScalarField&,
+ const fvPatch&,
+ const DimensionedField&,
+ const fvPatchFieldMapper&
+ );
+
+ //- Construct as copy
+ kappatJayatillekeWallFunctionFvPatchScalarField
+ (
+ const kappatJayatillekeWallFunctionFvPatchScalarField&
+ );
+
+ //- Construct and return a clone
+ virtual tmp clone() const
+ {
+ return tmp
+ (
+ new kappatJayatillekeWallFunctionFvPatchScalarField(*this)
+ );
+ }
+
+ //- Construct as copy setting internal field reference
+ kappatJayatillekeWallFunctionFvPatchScalarField
+ (
+ const kappatJayatillekeWallFunctionFvPatchScalarField&,
+ const DimensionedField&
+ );
+
+ //- Construct and return a clone setting internal field reference
+ virtual tmp clone
+ (
+ const DimensionedField& iF
+ ) const
+ {
+ return tmp
+ (
+ new kappatJayatillekeWallFunctionFvPatchScalarField(*this, iF)
+ );
+ }
+
+
+ // Member functions
+
+ // Evaluation functions
+
+ //- Update the coefficients associated with the patch field
+ virtual void updateCoeffs();
+
+
+ // I-O
+
+ //- Write
+ virtual void write(Ostream&) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace RASModels
+} // End namespace incompressible
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //