diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/IOcalcFvcGrad.H b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/IOcalcFvcGrad.H
new file mode 100644
index 0000000000..2e97ac6459
--- /dev/null
+++ b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/IOcalcFvcGrad.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::IOcalcFvcGrad
+
+Description
+ Instance of the generic IOOutputFilter for calcFvcGrad.
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef IOcalcFvcGrad_H
+#define IOcalcFvcGrad_H
+
+#include "calcFvcGrad.H"
+#include "IOOutputFilter.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ typedef IOOutputFilter IOcalcFvcGrad;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.C b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.C
new file mode 100644
index 0000000000..de97652e5e
--- /dev/null
+++ b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.C
@@ -0,0 +1,121 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / 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 "calcFvcGrad.H"
+#include "volFields.H"
+#include "dictionary.H"
+#include "calcFvcGrad.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+defineTypeNameAndDebug(Foam::calcFvcGrad, 0);
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::calcFvcGrad::calcFvcGrad
+(
+ const word& name,
+ const objectRegistry& obr,
+ const dictionary& dict,
+ const bool loadFromFiles
+)
+:
+ name_(name),
+ obr_(obr),
+ active_(true),
+ fieldName_("undefined-fieldName"),
+ resultName_("undefined-resultName")
+{
+ // Check if the available mesh is an fvMesh, otherwise deactivate
+ if (!isA(obr_))
+ {
+ active_ = false;
+ WarningIn
+ (
+ "calcFvcGrad::calcFvcGrad"
+ "("
+ "const word&, "
+ "const objectRegistry&, "
+ "const dictionary&, "
+ "const bool"
+ ")"
+ ) << "No fvMesh available, deactivating." << nl
+ << endl;
+ }
+
+ read(dict);
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+Foam::calcFvcGrad::~calcFvcGrad()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+void Foam::calcFvcGrad::read(const dictionary& dict)
+{
+ if (active_)
+ {
+ dict.lookup("fieldName") >> fieldName_;
+ dict.lookup("resultName") >> resultName_;
+ }
+}
+
+
+void Foam::calcFvcGrad::execute()
+{
+ // Do nothing - only valid on write
+}
+
+
+void Foam::calcFvcGrad::end()
+{
+ // Do nothing - only valid on write
+}
+
+
+void Foam::calcFvcGrad::write()
+{
+ if (active_)
+ {
+ bool processed = false;
+
+ calcGrad(fieldName_, resultName_, processed);
+ calcGrad(fieldName_, resultName_, processed);
+
+ if (!processed)
+ {
+ WarningIn("void Foam::calcFvcGrad::write()")
+ << "Unprocessed field " << fieldName_ << endl;
+ }
+ }
+}
+
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.H b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.H
new file mode 100644
index 0000000000..c7422eca4b
--- /dev/null
+++ b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGrad.H
@@ -0,0 +1,180 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / 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::calcFvcGrad
+
+Group
+ grpFVFunctionObjects
+
+Description
+ This function object calculates the gradient of a field. The operation is
+ limited to scalar and vector volume or surface fields, and the output is a
+ volume vector or tensor field.
+
+SourceFiles
+ calcFvcGrad.C
+ IOcalcFvcGrad.H
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef calcFvcGrad_H
+#define calcFvcGrad_H
+
+#include "volFieldsFwd.H"
+#include "surfaceFieldsFwd.H"
+#include "pointFieldFwd.H"
+#include "OFstream.H"
+#include "Switch.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// Forward declaration of classes
+class objectRegistry;
+class dictionary;
+class mapPolyMesh;
+class dimensionSet;
+
+/*---------------------------------------------------------------------------*\
+ Class calcFvcGrad Declaration
+\*---------------------------------------------------------------------------*/
+
+class calcFvcGrad
+{
+ // Private data
+
+ //- Name of this calcFvcGrad object
+ word name_;
+
+ //- Reference to the database
+ const objectRegistry& obr_;
+
+ //- On/off switch
+ bool active_;
+
+ //- Name of field to process
+ word fieldName_;
+
+ //- Name of result field
+ word resultName_;
+
+
+ // Private Member Functions
+
+ //- Helper function to create/store/return the gradient field
+ template
+ GeometricField
+ <
+ typename outerProduct::type,
+ fvPatchField,
+ volMesh
+ >&
+ gradField(const word& gradName, const dimensionSet& dims);
+
+ //- Helper function to calculate the gradient of different field types
+ template
+ void calcGrad
+ (
+ const word& fieldName,
+ const word& resultName,
+ bool& processed
+ );
+
+ //- Disallow default bitwise copy construct
+ calcFvcGrad(const calcFvcGrad&);
+
+ //- Disallow default bitwise assignment
+ void operator=(const calcFvcGrad&);
+
+
+public:
+
+ //- Runtime type information
+ TypeName("calcFvcGrad");
+
+
+ // Constructors
+
+ //- Construct for given objectRegistry and dictionary.
+ // Allow the possibility to load fields from files
+ calcFvcGrad
+ (
+ const word& name,
+ const objectRegistry&,
+ const dictionary&,
+ const bool loadFromFiles = false
+ );
+
+
+ //- Destructor
+ virtual ~calcFvcGrad();
+
+
+ // Member Functions
+
+ //- Return name of the set of calcFvcGrad
+ virtual const word& name() const
+ {
+ return name_;
+ }
+
+ //- Read the calcFvcGrad 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 calcFvcGrad 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
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#ifdef NoRepository
+ #include "calcFvcGradTemplates.C"
+#endif
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradFunctionObject.C b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradFunctionObject.C
new file mode 100644
index 0000000000..3e2d1e6698
--- /dev/null
+++ b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradFunctionObject.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 "calcFvcGradFunctionObject.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ defineNamedTemplateTypeNameAndDebug(calcFvcGradFunctionObject, 0);
+
+ addToRunTimeSelectionTable
+ (
+ functionObject,
+ calcFvcGradFunctionObject,
+ dictionary
+ );
+}
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradFunctionObject.H b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradFunctionObject.H
new file mode 100644
index 0000000000..0c3f580697
--- /dev/null
+++ b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradFunctionObject.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::calcFvcGradFunctionObject
+
+Description
+ FunctionObject wrapper around calcFvcGrad to allow it to be created
+ via the functions entry within controlDict.
+
+SourceFiles
+ calcFvcGradFunctionObject.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef calcFvcGradFunctionObject_H
+#define calcFvcGradFunctionObject_H
+
+#include "calcFvcGrad.H"
+#include "OutputFilterFunctionObject.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+ typedef OutputFilterFunctionObject calcFvcGradFunctionObject;
+}
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradTemplates.C b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradTemplates.C
new file mode 100644
index 0000000000..3e95bbd424
--- /dev/null
+++ b/src/postProcessing/functionObjects/fvTools/calcFvcGrad/calcFvcGradTemplates.C
@@ -0,0 +1,133 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / 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 "fvMesh.H"
+#include "fvcGrad.H"
+
+template
+Foam::GeometricField
+<
+ typename Foam::outerProduct::type,
+ Foam::fvPatchField,
+ Foam::volMesh
+>&
+Foam::calcFvcGrad::gradField(const word& gradName, const dimensionSet& dims)
+{
+ typedef typename outerProduct::type gradType;
+ typedef GeometricField vfGradType;
+
+ const fvMesh& mesh = refCast(obr_);
+
+ if (!mesh.foundObject(gradName))
+ {
+ vfGradType* gradFieldPtr
+ (
+ new vfGradType
+ (
+ IOobject
+ (
+ gradName,
+ mesh.time().timeName(),
+ mesh,
+ IOobject::NO_READ,
+ IOobject::NO_WRITE
+ ),
+ mesh,
+ dimensioned
+ (
+ "zero",
+ dims/dimLength,
+ pTraits::zero
+ )
+ )
+ );
+
+ mesh.objectRegistry::store(gradFieldPtr);
+ }
+
+ const vfGradType& field = mesh.lookupObject(gradName);
+
+ return const_cast(field);
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+template
+void Foam::calcFvcGrad::calcGrad
+(
+ const word& fieldName,
+ const word& resultName,
+ bool& processed
+)
+{
+ typedef GeometricField vfType;
+ typedef GeometricField sfType;
+
+ typedef typename outerProduct::type gradType;
+ typedef GeometricField vfGradType;
+
+ const fvMesh& mesh = refCast(obr_);
+
+ word gradName = resultName;
+ if (gradName == "none")
+ {
+ gradName = "fvc::grad(" + fieldName + ")";
+ }
+
+ if (mesh.foundObject(fieldName))
+ {
+ const vfType& vf = mesh.lookupObject(fieldName);
+
+ vfGradType& field = gradField(gradName, vf.dimensions());
+
+ field = fvc::grad(vf);
+
+ Info<< type() << " output:" << nl
+ << " writing " << field.name() << " field" << nl << endl;
+
+ field.write();
+
+ processed = true;
+ }
+ else if (mesh.foundObject(fieldName))
+ {
+ const sfType& sf = mesh.lookupObject(fieldName);
+
+ vfGradType& field = gradField(gradName, sf.dimensions());
+
+ field = fvc::grad(sf);
+
+ Info<< type() << " output:" << nl
+ << " writing " << field.name() << " field" << nl << endl;
+
+ field.write();
+
+ processed = true;
+ }
+}
+
+
+// ************************************************************************* //