diff --git a/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/Make/files b/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/Make/files
new file mode 100644
index 0000000000..dfa118ab00
--- /dev/null
+++ b/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/Make/files
@@ -0,0 +1,3 @@
+temporalInterpolate.C
+
+EXE = $(FOAM_APPBIN)/temporalInterpolate
diff --git a/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/Make/options b/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/Make/options
new file mode 100644
index 0000000000..89e52b6d52
--- /dev/null
+++ b/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/Make/options
@@ -0,0 +1,6 @@
+EXE_INC = \
+ -I$(LIB_SRC)/finiteVolume/lnInclude
+
+EXE_LIBS = \
+ -lfiniteVolume
+
diff --git a/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/temporalInterpolate.C b/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/temporalInterpolate.C
new file mode 100644
index 0000000000..f7526c0628
--- /dev/null
+++ b/applications/utilities/postProcessing/miscellaneous/temporalInterpolate/temporalInterpolate.C
@@ -0,0 +1,253 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2010-2011 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 .
+
+Description
+ Interpolate fields between time-steps e.g. for animation.
+
+\*---------------------------------------------------------------------------*/
+
+#include "argList.H"
+#include "timeSelector.H"
+
+#include "fvMesh.H"
+#include "Time.H"
+#include "volMesh.H"
+#include "surfaceMesh.H"
+#include "volFields.H"
+#include "surfaceFields.H"
+#include "pointFields.H"
+#include "ReadFields.H"
+
+using namespace Foam;
+
+class fieldInterpolator
+{
+ Time& runTime_;
+ const fvMesh& mesh_;
+ const IOobjectList& objects_;
+ const HashSet& selectedFields_;
+ instant ti_;
+ instant ti1_;
+ int divisions_;
+
+public:
+
+ fieldInterpolator
+ (
+ Time& runTime,
+ const fvMesh& mesh,
+ const IOobjectList& objects,
+ const HashSet& selectedFields,
+ const instant& ti,
+ const instant& ti1,
+ int divisions
+ )
+ :
+ runTime_(runTime),
+ mesh_(mesh),
+ objects_(objects),
+ selectedFields_(selectedFields),
+ ti_(ti),
+ ti1_(ti1),
+ divisions_(divisions)
+ {}
+
+ template
+ void interpolate();
+};
+
+
+template
+void fieldInterpolator::interpolate()
+{
+ const word& fieldClassName = GeoFieldType::typeName;
+
+ IOobjectList fields = objects_.lookupClass(fieldClassName);
+
+ if (fields.size())
+ {
+ Info<< " " << fieldClassName << "s:";
+
+ forAllConstIter(IOobjectList, fields, fieldIter)
+ {
+ if
+ (
+ selectedFields_.empty()
+ || selectedFields_.found(fieldIter()->name())
+ )
+ {
+ Info<< " " << fieldIter()->name() << '(';
+
+ GeoFieldType fieldi
+ (
+ IOobject
+ (
+ fieldIter()->name(),
+ ti_.name(),
+ fieldIter()->db(),
+ IOobject::MUST_READ,
+ IOobject::NO_WRITE,
+ false
+ ),
+ mesh_
+ );
+
+ GeoFieldType fieldi1
+ (
+ IOobject
+ (
+ fieldIter()->name(),
+ ti1_.name(),
+ fieldIter()->db(),
+ IOobject::MUST_READ,
+ IOobject::NO_WRITE,
+ false
+ ),
+ mesh_
+ );
+
+ scalar deltaT = (ti1_.value() - ti_.value())/(divisions_ + 1);
+
+ for (int j=0; jname(),
+ timej.name(),
+ fieldIter()->db(),
+ IOobject::NO_READ,
+ IOobject::NO_WRITE,
+ false
+ ),
+ (1.0 - lambda)*fieldi + lambda*fieldi1
+ );
+
+ fieldj.write();
+ }
+
+ Info<< ')';
+ }
+ }
+
+ Info<< endl;
+ }
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+// Main program:
+int main(int argc, char *argv[])
+{
+ timeSelector::addOptions();
+ argList::addOption
+ (
+ "fields",
+ "list",
+ "specify a list of fields to be interpolated. Eg, '(U T p)' - "
+ "regular expressions not currently supported"
+ );
+ argList::addOption
+ (
+ "divisions",
+ "integer",
+ "specify number of temporal sub-divisions to create (default = 1)."
+ );
+
+ #include "setRootCase.H"
+ #include "createTime.H"
+ runTime.functionObjects().off();
+
+ HashSet selectedFields;
+ if (args.optionFound("fields"))
+ {
+ args.optionLookup("fields")() >> selectedFields;
+ }
+
+ int divisions = 1;
+ if (args.optionFound("divisions"))
+ {
+ args.optionLookup("divisions")() >> divisions;
+ }
+
+ instantList timeDirs = timeSelector::select0(runTime, args);
+
+ #include "createMesh.H"
+
+ Info<< "Interpolating fields for times:" << endl;
+
+ for (label timei = 0; timei < timeDirs.size() - 1; timei++)
+ {
+ runTime.setTime(timeDirs[timei], timei);
+
+ // Read objects in time directory
+ IOobjectList objects(mesh, runTime.timeName());
+
+ fieldInterpolator interpolator
+ (
+ runTime,
+ mesh,
+ objects,
+ selectedFields,
+ timeDirs[timei],
+ timeDirs[timei+1],
+ divisions
+ );
+
+ // Interpolate vol fields
+ interpolator.interpolate();
+ interpolator.interpolate();
+ interpolator.interpolate();
+ interpolator.interpolate();
+ interpolator.interpolate();
+
+ // Interpolate surface fields
+ interpolator.interpolate();
+ interpolator.interpolate();
+ interpolator.interpolate();
+ interpolator.interpolate();
+ interpolator.interpolate();
+ }
+
+ Info<< "End\n" << endl;
+
+ return 0;
+}
+
+
+// ************************************************************************* //