diff --git a/src/postProcessing/functionObjects/utilities/Make/files b/src/postProcessing/functionObjects/utilities/Make/files
index f6e23536e0..e6fcedbb0d 100644
--- a/src/postProcessing/functionObjects/utilities/Make/files
+++ b/src/postProcessing/functionObjects/utilities/Make/files
@@ -12,6 +12,9 @@ staticPressure/staticPressureFunctionObject.C
timeActivatedFileUpdate/timeActivatedFileUpdate.C
timeActivatedFileUpdate/timeActivatedFileUpdateFunctionObject.C
+wallShearStress/wallShearStress.C
+wallShearStress/wallShearStressFunctionObject.C
+
yPlusLES/yPlusLES.C
yPlusLES/yPlusLESFunctionObject.C
diff --git a/src/postProcessing/functionObjects/utilities/wallShearStress/IOwallShearStress.H b/src/postProcessing/functionObjects/utilities/wallShearStress/IOwallShearStress.H
new file mode 100644
index 0000000000..c7e453b1d8
--- /dev/null
+++ b/src/postProcessing/functionObjects/utilities/wallShearStress/IOwallShearStress.H
@@ -0,0 +1,49 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2012 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 .
+
+Typedef
+ Foam::IOwallShearStress
+
+Description
+ Instance of the generic IOOutputFilter for wallShearStress.
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef IOwallShearStress_H
+#define IOwallShearStress_H
+
+#include "wallShearStress.H"
+#include "IOOutputFilter.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ typedef IOOutputFilter IOwallShearStress;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C
new file mode 100644
index 0000000000..c495cd97d1
--- /dev/null
+++ b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.C
@@ -0,0 +1,251 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2012 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 "wallShearStress.H"
+#include "volFields.H"
+#include "surfaceFields.H"
+#include "incompressible/turbulenceModel/turbulenceModel.H"
+#include "compressible/turbulenceModel/turbulenceModel.H"
+#include "wallPolyPatch.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(Foam::wallShearStress, 0);
+
+
+// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
+
+void Foam::wallShearStress::makeFile()
+{
+ // Create the output file if not already created
+ if (outputFilePtr_.empty())
+ {
+ if (debug)
+ {
+ Info<< "Creating output file." << endl;
+ }
+
+ // File update
+ if (Pstream::master())
+ {
+ fileName outputDir;
+ word startTimeName =
+ obr_.time().timeName(obr_.time().startTime().value());
+
+ if (Pstream::parRun())
+ {
+ // Put in undecomposed case (Note: gives problems for
+ // distributed data running)
+ outputDir =
+ obr_.time().path()/".."/name_/startTimeName;
+ }
+ else
+ {
+ outputDir = obr_.time().path()/name_/startTimeName;
+ }
+
+ // Create directory if does not exist
+ mkDir(outputDir);
+
+ // Open new file at start up
+ outputFilePtr_.reset(new OFstream(outputDir/(type() + ".dat")));
+
+ // Add headers to output data
+ outputFilePtr_() << "# Wall shear stress" << nl
+ << "# time " << token::TAB << "patch" << token::TAB
+ << "min" << token::TAB << "max" << endl;
+ }
+ }
+}
+
+
+void Foam::wallShearStress::calcShearStress
+(
+ const fvMesh& mesh,
+ const volSymmTensorField& Reff,
+ volVectorField& shearStress
+)
+{
+ forAll(shearStress.boundaryField(), patchI)
+ {
+ const polyPatch& pp = mesh.boundaryMesh()[patchI];
+
+ if (isA(pp))
+ {
+ vectorField& ssp = shearStress.boundaryField()[patchI];
+ const vectorField& Sfp = mesh.Sf().boundaryField()[patchI];
+ const scalarField& magSfp = mesh.magSf().boundaryField()[patchI];
+ const symmTensorField& Reffp = Reff.boundaryField()[patchI];
+
+ ssp = (-Sfp/magSfp) & Reffp;
+
+ vector minSsp = min(ssp);
+ vector maxSsp = max(ssp);
+
+ outputFilePtr_() << mesh.time().timeName() << token::TAB
+ << pp.name() << token::TAB << minSsp
+ << token::TAB << maxSsp << endl;
+
+ if (log_)
+ {
+ Info<< " min/max(" << pp.name() << ") = "
+ << minSsp << ", " << maxSsp << endl;
+ }
+ }
+ }
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::wallShearStress::wallShearStress
+(
+ const word& name,
+ const objectRegistry& obr,
+ const dictionary& dict,
+ const bool loadFromFiles
+)
+:
+ name_(name),
+ obr_(obr),
+ active_(true),
+ log_(false),
+ phiName_("phi"),
+ outputFilePtr_(NULL)
+{
+ // Check if the available mesh is an fvMesh, otherwise deactivate
+ if (!isA(obr_))
+ {
+ active_ = false;
+ WarningIn
+ (
+ "wallShearStress::wallShearStress"
+ "("
+ "const word&, "
+ "const objectRegistry&, "
+ "const dictionary&, "
+ "const bool"
+ ")"
+ ) << "No fvMesh available, deactivating." << nl
+ << endl;
+ }
+
+ makeFile();
+
+ read(dict);
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+Foam::wallShearStress::~wallShearStress()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+void Foam::wallShearStress::read(const dictionary& dict)
+{
+ if (active_)
+ {
+ log_ = dict.lookupOrDefault("log", false);
+ phiName_ = dict.lookupOrDefault("phiName", "phi");
+ }
+}
+
+
+void Foam::wallShearStress::execute()
+{
+ // Do nothing - only valid on write
+}
+
+
+void Foam::wallShearStress::end()
+{
+ // Do nothing - only valid on write
+}
+
+
+void Foam::wallShearStress::write()
+{
+ typedef compressible::turbulenceModel cmpModel;
+ typedef incompressible::turbulenceModel icoModel;
+
+ if (active_)
+ {
+ const fvMesh& mesh = refCast(obr_);
+
+ volVectorField wallShearStress
+ (
+ IOobject
+ (
+ "wallShearStress",
+ mesh.time().timeName(),
+ mesh,
+ IOobject::NO_READ
+ ),
+ mesh,
+ dimensionedVector("0", sqr(dimLength)/sqr(dimTime), vector::zero)
+ );
+
+ if (log_)
+ {
+ Info<< type() << " output:" << nl;
+ }
+
+
+ const surfaceScalarField& phi =
+ obr_.lookupObject(phiName_);
+
+ tmp Reff;
+ if (phi.dimensions() == dimMass/dimTime)
+ {
+ const cmpModel& model =
+ mesh.lookupObject("turbulenceModel");
+
+ Reff = model.devRhoReff();
+ }
+ else
+ {
+ const icoModel& model =
+ mesh.lookupObject("turbulenceModel");
+
+ Reff = model.devReff();
+ }
+
+
+ calcShearStress(mesh, Reff(), wallShearStress);
+
+ if (log_)
+ {
+ Info<< endl;
+ }
+
+ wallShearStress.write();
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.H b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.H
new file mode 100644
index 0000000000..b2cff373be
--- /dev/null
+++ b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStress.H
@@ -0,0 +1,163 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2012 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::wallShearStress
+
+Description
+ Evaluates and outputs wall shear stress. Values written to time folders
+ as field 'wallShearStress'
+
+SourceFiles
+ wallShearStress.C
+ IOwallShearStress.H
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef wallShearStress_H
+#define wallShearStress_H
+
+#include "volFieldsFwd.H"
+#include "pointFieldFwd.H"
+#include "Switch.H"
+#include "OFstream.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// Forward declaration of classes
+class objectRegistry;
+class dictionary;
+class mapPolyMesh;
+class fvMesh;
+
+/*---------------------------------------------------------------------------*\
+ Class wallShearStress Declaration
+\*---------------------------------------------------------------------------*/
+
+class wallShearStress
+{
+ // Private data
+
+ //- Name of this set of wallShearStress object
+ word name_;
+
+ const objectRegistry& obr_;
+
+ //- on/off switch
+ bool active_;
+
+ //- Switch to send output to Info as well as to file
+ Switch log_;
+
+ //- Name of mass/volume flux field (optional, default = phi)
+ word phiName_;
+
+ //- Output file pointer
+ autoPtr outputFilePtr_;
+
+
+ // Private Member Functions
+
+ //- Make the output file
+ virtual void makeFile();
+
+ //- Calculate the shear stress
+ void calcShearStress
+ (
+ const fvMesh& mesh,
+ const volSymmTensorField& Reff,
+ volVectorField& shearStress
+ );
+
+ //- Disallow default bitwise copy construct
+ wallShearStress(const wallShearStress&);
+
+ //- Disallow default bitwise assignment
+ void operator=(const wallShearStress&);
+
+
+public:
+
+ //- Runtime type information
+ TypeName("wallShearStress");
+
+
+ // Constructors
+
+ //- Construct for given objectRegistry and dictionary.
+ // Allow the possibility to load fields from files
+ wallShearStress
+ (
+ const word& name,
+ const objectRegistry&,
+ const dictionary&,
+ const bool loadFromFiles = false
+ );
+
+
+ //- Destructor
+ virtual ~wallShearStress();
+
+
+ // Member Functions
+
+ //- Return name of the set of wallShearStress
+ virtual const word& name() const
+ {
+ return name_;
+ }
+
+ //- Read the wallShearStress data
+ virtual void read(const dictionary&);
+
+ //- Execute, currently does nothing
+ virtual void execute();
+
+ //- Execute at the final time-loop, currently does nothing
+ virtual void end();
+
+ //- Calculate the wallShearStress and write
+ virtual void write();
+
+ //- Update for changes of mesh
+ virtual void updateMesh(const mapPolyMesh&)
+ {}
+
+ //- Update for changes of mesh
+ virtual void movePoints(const pointField&)
+ {}
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStressFunctionObject.C b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStressFunctionObject.C
new file mode 100644
index 0000000000..871e6b0373
--- /dev/null
+++ b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStressFunctionObject.C
@@ -0,0 +1,42 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2012 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 "wallShearStressFunctionObject.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ defineNamedTemplateTypeNameAndDebug(wallShearStressFunctionObject, 0);
+
+ addToRunTimeSelectionTable
+ (
+ functionObject,
+ wallShearStressFunctionObject,
+ dictionary
+ );
+}
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStressFunctionObject.H b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStressFunctionObject.H
new file mode 100644
index 0000000000..75e6eba8b4
--- /dev/null
+++ b/src/postProcessing/functionObjects/utilities/wallShearStress/wallShearStressFunctionObject.H
@@ -0,0 +1,53 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2012 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 .
+
+Typedef
+ Foam::wallShearStressFunctionObject
+
+Description
+ FunctionObject wrapper around wallShearStress to allow it to be created
+ via the functions entry within controlDict.
+
+SourceFiles
+ wallShearStressFunctionObject.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef wallShearStressFunctionObject_H
+#define wallShearStressFunctionObject_H
+
+#include "wallShearStress.H"
+#include "OutputFilterFunctionObject.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ typedef OutputFilterFunctionObject wallShearStressFunctionObject;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //