diff --git a/src/TurbulenceModels/turbulenceModels/Make/files b/src/TurbulenceModels/turbulenceModels/Make/files
index 2123e373e8..315ba24226 100644
--- a/src/TurbulenceModels/turbulenceModels/Make/files
+++ b/src/TurbulenceModels/turbulenceModels/Make/files
@@ -40,6 +40,7 @@ $(nutWallFunctions)/nutkWallFunction/nutkWallFunctionFvPatchScalarField.C
$(nutWallFunctions)/nutkRoughWallFunction/nutkRoughWallFunctionFvPatchScalarField.C
$(nutWallFunctions)/nutkAtmRoughWallFunction/nutkAtmRoughWallFunctionFvPatchScalarField.C
+$(nutWallFunctions)/nutUBlendedWallFunction/nutUBlendedWallFunctionFvPatchScalarField.C
$(nutWallFunctions)/nutUWallFunction/nutUWallFunctionFvPatchScalarField.C
$(nutWallFunctions)/nutUSpaldingWallFunction/nutUSpaldingWallFunctionFvPatchScalarField.C
$(nutWallFunctions)/nutUTabulatedWallFunction/nutUTabulatedWallFunctionFvPatchScalarField.C
diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUBlendedWallFunction/nutUBlendedWallFunctionFvPatchScalarField.C b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUBlendedWallFunction/nutUBlendedWallFunctionFvPatchScalarField.C
new file mode 100644
index 0000000000..81f1d10a25
--- /dev/null
+++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUBlendedWallFunction/nutUBlendedWallFunctionFvPatchScalarField.C
@@ -0,0 +1,225 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2016 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 "nutUBlendedWallFunctionFvPatchScalarField.H"
+#include "turbulenceModel.H"
+#include "fvPatchFieldMapper.H"
+#include "volFields.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
+
+Foam::tmp
+Foam::nutUBlendedWallFunctionFvPatchScalarField::calcNut() const
+{
+ const label patchi = patch().index();
+
+ const turbulenceModel& turbModel = db().lookupObject
+ (
+ IOobject::groupName
+ (
+ turbulenceModel::propertiesName,
+ internalField().group()
+ )
+ );
+ const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi];
+ const scalarField magGradU(mag(Uw.snGrad()));
+ const tmp tnuw = turbModel.nu(patchi);
+ const scalarField& nuw = tnuw();
+
+ return max
+ (
+ scalar(0),
+ sqr(calcUTau(magGradU))/(magGradU + ROOTVSMALL) - nuw
+ );
+}
+
+
+Foam::tmp
+Foam::nutUBlendedWallFunctionFvPatchScalarField::calcUTau
+(
+ const scalarField& magGradU
+) const
+{
+ const label patchi = patch().index();
+
+ const turbulenceModel& turbModel = db().lookupObject
+ (
+ IOobject::groupName
+ (
+ turbulenceModel::propertiesName,
+ internalField().group()
+ )
+ );
+
+ const scalarField& y = turbModel.y()[patchi];
+
+ const tmp tnuw = turbModel.nu(patchi);
+ const scalarField& nuw = tnuw();
+
+ const vectorField n(patch().nf());
+ const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi];
+ vectorField Up(Uw.patchInternalField() - Uw);
+ Up -= n*(n & Up);
+ const scalarField magUp(mag(Up));
+
+ tmp tuTaup(new scalarField(patch().size(), 0.0));
+ scalarField& uTaup = tuTaup.ref();
+
+ const scalarField& nutw = *this;
+
+ forAll(uTaup, facei)
+ {
+ scalar ut = sqrt((nutw[facei] + nuw[facei])*magGradU[facei]);
+ scalar error = GREAT;
+ label iter = 0;
+ while (iter++ < 10 && error > 0.001)
+ {
+ scalar yPlus = y[facei]*ut/nuw[facei];
+ scalar uTauVis = magUp[facei]/yPlus;
+ scalar uTauLog = kappa_*magUp[facei]/log(E_*yPlus);
+
+ scalar utNew = pow(pow(uTauVis, n_) + pow(uTauLog, n_), 1.0/n_);
+ error = mag(ut - utNew)/(ut + ROOTVSMALL);
+ ut = 0.5*(ut + utNew);
+ }
+ uTaup[facei] = ut;
+ }
+
+ return tuTaup;
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::nutUBlendedWallFunctionFvPatchScalarField::
+nutUBlendedWallFunctionFvPatchScalarField
+(
+ const fvPatch& p,
+ const DimensionedField& iF
+)
+:
+ nutWallFunctionFvPatchScalarField(p, iF),
+ n_(4)
+{}
+
+
+Foam::nutUBlendedWallFunctionFvPatchScalarField::
+nutUBlendedWallFunctionFvPatchScalarField
+(
+ const nutUBlendedWallFunctionFvPatchScalarField& ptf,
+ const fvPatch& p,
+ const DimensionedField& iF,
+ const fvPatchFieldMapper& mapper
+)
+:
+ nutWallFunctionFvPatchScalarField(ptf, p, iF, mapper),
+ n_(ptf.n_)
+{}
+
+
+Foam::nutUBlendedWallFunctionFvPatchScalarField::
+nutUBlendedWallFunctionFvPatchScalarField
+(
+ const fvPatch& p,
+ const DimensionedField& iF,
+ const dictionary& dict
+)
+:
+ nutWallFunctionFvPatchScalarField(p, iF, dict),
+ n_(dict.lookupOrDefault("n", 4))
+{}
+
+
+Foam::nutUBlendedWallFunctionFvPatchScalarField::
+nutUBlendedWallFunctionFvPatchScalarField
+(
+ const nutUBlendedWallFunctionFvPatchScalarField& wfpsf
+)
+:
+ nutWallFunctionFvPatchScalarField(wfpsf),
+ n_(wfpsf.n_)
+{}
+
+
+Foam::nutUBlendedWallFunctionFvPatchScalarField::
+nutUBlendedWallFunctionFvPatchScalarField
+(
+ const nutUBlendedWallFunctionFvPatchScalarField& wfpsf,
+ const DimensionedField& iF
+)
+:
+ nutWallFunctionFvPatchScalarField(wfpsf, iF),
+ n_(wfpsf.n_)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+Foam::tmp
+Foam::nutUBlendedWallFunctionFvPatchScalarField::yPlus() const
+{
+ const label patchi = patch().index();
+
+ const turbulenceModel& turbModel = db().lookupObject
+ (
+ IOobject::groupName
+ (
+ turbulenceModel::propertiesName,
+ internalField().group()
+ )
+ );
+ const scalarField& y = turbModel.y()[patchi];
+ const tmp tnuw = turbModel.nu(patchi);
+ const scalarField& nuw = tnuw();
+ const fvPatchVectorField& Uw = turbModel.U().boundaryField()[patchi];
+ const scalarField magGradU(mag(Uw.snGrad()));
+
+ return y*calcUTau(magGradU)/nuw;
+}
+
+
+void Foam::nutUBlendedWallFunctionFvPatchScalarField::write(Ostream& os) const
+{
+ fvPatchField::write(os);
+ writeLocalEntries(os);
+ writeEntry("value", os);
+ os.writeEntry("n", n_);
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ makePatchTypeField
+ (
+ fvPatchScalarField,
+ nutUBlendedWallFunctionFvPatchScalarField
+ );
+}
+
+
+// ************************************************************************* //
diff --git a/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUBlendedWallFunction/nutUBlendedWallFunctionFvPatchScalarField.H b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUBlendedWallFunction/nutUBlendedWallFunctionFvPatchScalarField.H
new file mode 100644
index 0000000000..67db5bf700
--- /dev/null
+++ b/src/TurbulenceModels/turbulenceModels/derivedFvPatchFields/wallFunctions/nutWallFunctions/nutUBlendedWallFunction/nutUBlendedWallFunctionFvPatchScalarField.H
@@ -0,0 +1,206 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2016-2017 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::nutUBlendedWallFunctionFvPatchScalarField
+
+Group
+ grpWallFunctions
+
+Description
+ This boundary condition provides a turbulent kinematic viscosity condition
+ when using wall functions, based on a blending of laminar sub-layer and
+ log region contributions.
+
+ \f[
+ uTau = (uTau_v^n + uTau_l^n)^(1/n)
+ \f]
+
+ where
+ \vartable
+ uTau | friction velocity
+ uTau_v | friction velocity in the viscous region
+ uTau_l | friction velocity in the log region
+ \endvartable
+
+
+Usage
+
+ Example of the boundary condition specification:
+ \verbatim
+ myPatch
+ {
+ type nutUBlendedWallFunction;
+ }
+ \endverbatim
+
+ Reference:
+ See the section that describes 'automatic wall treatment'
+ \verbatim
+ Menter, F., Carregal Ferreira, J., Esch, T., Konno, B. (2003).
+ The SST Turbulence Model with Improved Wall Treatment
+ for Heat Transfer Predictions in Gas Turbines.
+ Proceedings of the International Gas Turbine Congress 2003 Tokyo
+ \endverbatim
+
+Note
+ The full 'automatic wall treatment' description also requires use of the
+ Foam::omegaWallFunction with the \c blended flag set to 'on'
+
+SeeAlso
+ Foam::nutWallFunctionFvPatchScalarField
+ Foam::omegaWallFunctionFvPatchScalarField
+
+SourceFiles
+ nutUBlendedWallFunctionFvPatchScalarField.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef nutUBlendedWallFunctionFvPatchScalarField_H
+#define nutUBlendedWallFunctionFvPatchScalarField_H
+
+#include "nutWallFunctionFvPatchScalarField.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class nutUBlendedWallFunctionFvPatchScalarField Declaration
+\*---------------------------------------------------------------------------*/
+
+class nutUBlendedWallFunctionFvPatchScalarField
+:
+ public nutWallFunctionFvPatchScalarField
+{
+protected:
+
+ // Protected data
+
+ //- Model coefficient; default = 4
+ scalar n_;
+
+
+ // Protected Member Functions
+
+ //- Calculate the turbulence viscosity
+ virtual tmp calcNut() const;
+
+ //- Calculate the friction velocity
+ virtual tmp calcUTau(const scalarField& magGradU) const;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("nutUBlendedWallFunction");
+
+
+ // Constructors
+
+ //- Construct from patch and internal field
+ nutUBlendedWallFunctionFvPatchScalarField
+ (
+ const fvPatch&,
+ const DimensionedField&
+ );
+
+ //- Construct from patch, internal field and dictionary
+ nutUBlendedWallFunctionFvPatchScalarField
+ (
+ const fvPatch&,
+ const DimensionedField&,
+ const dictionary&
+ );
+
+ //- Construct by mapping given
+ // nutUBlendedWallFunctionFvPatchScalarField
+ // onto a new patch
+ nutUBlendedWallFunctionFvPatchScalarField
+ (
+ const nutUBlendedWallFunctionFvPatchScalarField&,
+ const fvPatch&,
+ const DimensionedField&,
+ const fvPatchFieldMapper&
+ );
+
+ //- Construct as copy
+ nutUBlendedWallFunctionFvPatchScalarField
+ (
+ const nutUBlendedWallFunctionFvPatchScalarField&
+ );
+
+ //- Construct and return a clone
+ virtual tmp clone() const
+ {
+ return tmp
+ (
+ new nutUBlendedWallFunctionFvPatchScalarField(*this)
+ );
+ }
+
+ //- Construct as copy setting internal field reference
+ nutUBlendedWallFunctionFvPatchScalarField
+ (
+ const nutUBlendedWallFunctionFvPatchScalarField&,
+ const DimensionedField&
+ );
+
+ //- Construct and return a clone setting internal field reference
+ virtual tmp clone
+ (
+ const DimensionedField& iF
+ ) const
+ {
+ return tmp
+ (
+ new nutUBlendedWallFunctionFvPatchScalarField(*this, iF)
+ );
+ }
+
+
+ // Member functions
+
+ // Evaluation functions
+
+ //- Calculate and return the yPlus at the boundary
+ virtual tmp yPlus() const;
+
+
+ // I-O
+
+ //- Write
+ virtual void write(Ostream& os) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //