diff --git a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/Make/files b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/Make/files
deleted file mode 100644
index a2ac93809c..0000000000
--- a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/Make/files
+++ /dev/null
@@ -1,4 +0,0 @@
-execFlowFunctionObjects.C
-
-EXE = $(FOAM_APPBIN)/execFlowFunctionObjects
-
diff --git a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/Make/options b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/Make/options
deleted file mode 100644
index 8f3674d513..0000000000
--- a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/Make/options
+++ /dev/null
@@ -1,26 +0,0 @@
-EXE_INC = \
- -I$(LIB_SRC)/transportModels \
- -I$(LIB_SRC)/transportModels \
- -I$(LIB_SRC)/transportModels/incompressible/singlePhaseTransportModel \
- -I$(LIB_SRC)/TurbulenceModels/turbulenceModels/lnInclude \
- -I$(LIB_SRC)/TurbulenceModels/incompressible/lnInclude \
- -I$(LIB_SRC)/TurbulenceModels/compressible/lnInclude \
- -I$(LIB_SRC)/transportModels/compressible/lnInclude \
- -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
- -I$(LIB_SRC)/finiteVolume/lnInclude \
- -I$(LIB_SRC)/meshTools/lnInclude \
- -I$(LIB_SRC)/sampling/lnInclude
-
-EXE_LIBS = \
- -lturbulenceModels \
- -lincompressibleTurbulenceModels \
- -lcompressibleTurbulenceModels \
- -lincompressibleTransportModels \
- -lcompressibleTransportModels \
- -lfluidThermophysicalModels \
- -lspecie \
- -lfiniteVolume \
- -lfvOptions \
- -lgenericPatchFields \
- -lmeshTools \
- -lsampling
diff --git a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C b/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C
deleted file mode 100644
index f3a5362b2d..0000000000
--- a/applications/utilities/postProcessing/miscellaneous/execFlowFunctionObjects/execFlowFunctionObjects.C
+++ /dev/null
@@ -1,491 +0,0 @@
-/*---------------------------------------------------------------------------*\
- ========= |
- \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
- \\ / O peration |
- \\ / A nd | Copyright (C) 2011-2016 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 .
-
-Application
- execFlowFunctionObjects
-
-Description
- Execute the set of functionObjects specified in the selected dictionary
- (which defaults to system/controlDict) for the selected set of times.
- Alternative dictionaries should be placed in the system/ directory.
-
- The flow (p-U) and optionally turbulence fields are available for the
- function objects to operate on allowing forces and other related properties
- to be calculated in addition to cutting planes etc.
-
-\*---------------------------------------------------------------------------*/
-
-#include "argList.H"
-#include "timeSelector.H"
-
-#include "volFields.H"
-#include "surfaceFields.H"
-#include "pointFields.H"
-#include "uniformDimensionedFields.H"
-#include "ReadFields.H"
-#include "fvOptions.H"
-
-#include "singlePhaseTransportModel.H"
-#include "turbulentTransportModel.H"
-#include "turbulentFluidThermoModel.H"
-
-using namespace Foam;
-
-// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
-
-// Read all fields of type. Returns names of fields read. Guarantees all
-// processors to read fields in same order.
-template
-wordList ReadUniformFields
-(
- const IOobjectList& objects,
- PtrList& fields,
- const bool syncPar
-)
-{
- // Search list of objects for wanted type
- IOobjectList fieldObjects(objects.lookupClass(GeoField::typeName));
-
- wordList masterNames(fieldObjects.names());
-
- if (syncPar && Pstream::parRun())
- {
- // Check that I have the same fields as the master
- const wordList localNames(masterNames);
- Pstream::scatter(masterNames);
-
- HashSet localNamesSet(localNames);
-
- forAll(masterNames, i)
- {
- const word& masterFld = masterNames[i];
-
- HashSet::iterator iter = localNamesSet.find(masterFld);
-
- if (iter == localNamesSet.end())
- {
- FatalErrorInFunction
- << "Fields not synchronised across processors." << endl
- << "Master has fields " << masterNames
- << " processor " << Pstream::myProcNo()
- << " has fields " << localNames << exit(FatalError);
- }
- else
- {
- localNamesSet.erase(iter);
- }
- }
-
- forAllConstIter(HashSet, localNamesSet, iter)
- {
- FatalErrorInFunction
- << "Fields not synchronised across processors." << endl
- << "Master has fields " << masterNames
- << " processor " << Pstream::myProcNo()
- << " has fields " << localNames << exit(FatalError);
- }
- }
-
-
- fields.setSize(masterNames.size());
-
- // Make sure to read in masterNames order.
-
- forAll(masterNames, i)
- {
- Info<< "Reading " << GeoField::typeName << ' ' << masterNames[i]
- << endl;
-
- const IOobject& io = *fieldObjects[masterNames[i]];
-
- fields.set
- (
- i,
- new GeoField
- (
- IOobject
- (
- io.name(),
- io.instance(),
- io.local(),
- io.db(),
- IOobject::MUST_READ,
- IOobject::AUTO_WRITE,
- io.registerObject()
- )
- )
- );
- }
- return masterNames;
-}
-
-
-void calc
-(
- const argList& args,
- const Time& runTime,
- const fvMesh& mesh,
- functionObjectList& fol
-)
-{
- if (args.optionFound("noFlow"))
- {
- Info<< " Operating in no-flow mode; no models will be loaded."
- << " All vol, surface and point fields will be loaded." << endl;
-
- // Read objects in time directory
- IOobjectList objects(mesh, runTime.timeName());
-
- // Read vol fields.
-
- PtrList vsFlds;
- ReadFields(mesh, objects, vsFlds);
-
- PtrList vvFlds;
- ReadFields(mesh, objects, vvFlds);
-
- PtrList vstFlds;
- ReadFields(mesh, objects, vstFlds);
-
- PtrList vsymtFlds;
- ReadFields(mesh, objects, vsymtFlds);
-
- PtrList vtFlds;
- ReadFields(mesh, objects, vtFlds);
-
- // Read vol-internal fields.
-
- PtrList vsiFlds;
- ReadFields(mesh, objects, vsiFlds);
-
- PtrList vviFlds;
- ReadFields(mesh, objects, vviFlds);
-
- PtrList vstiFlds;
- ReadFields(mesh, objects, vstiFlds);
-
- PtrList vsymtiFlds;
- ReadFields(mesh, objects, vsymtiFlds);
-
- PtrList vtiFlds;
- ReadFields(mesh, objects, vtiFlds);
-
- // Read surface fields.
-
- PtrList ssFlds;
- ReadFields(mesh, objects, ssFlds);
-
- PtrList svFlds;
- ReadFields(mesh, objects, svFlds);
-
- PtrList sstFlds;
- ReadFields(mesh, objects, sstFlds);
-
- PtrList ssymtFlds;
- ReadFields(mesh, objects, ssymtFlds);
-
- PtrList stFlds;
- ReadFields(mesh, objects, stFlds);
-
- // Read point fields.
- const pointMesh& pMesh = pointMesh::New(mesh);
-
- PtrList psFlds;
- ReadFields(pMesh, objects, psFlds);
-
- PtrList pvFlds;
- ReadFields(pMesh, objects, pvFlds);
-
- PtrList pstFlds;
- ReadFields(pMesh, objects, pstFlds);
-
- PtrList psymtFlds;
- ReadFields(pMesh, objects, psymtFlds);
-
- PtrList ptFlds;
- ReadFields(pMesh, objects, ptFlds);
-
- // Read uniform dimensioned fields
- IOobjectList constantObjects(mesh, runTime.constant());
-
- PtrList usFlds;
- ReadUniformFields(constantObjects, usFlds, true);
-
- PtrList uvFlds;
- ReadUniformFields(constantObjects, uvFlds, true);
-
- PtrList ustFlds;
- ReadUniformFields(constantObjects, ustFlds, true);
-
- PtrList usymmtFlds;
- ReadUniformFields(constantObjects, usymmtFlds, true);
-
- PtrList utFlds;
- ReadUniformFields(constantObjects, utFlds, true);
-
- fol.execute(true);
- }
- else
- {
- Info<< " Reading phi" << endl;
- surfaceScalarField phi
- (
- IOobject
- (
- "phi",
- runTime.timeName(),
- mesh,
- IOobject::MUST_READ
- ),
- mesh
- );
-
- Info<< " Reading U" << endl;
- volVectorField U
- (
- IOobject
- (
- "U",
- runTime.timeName(),
- mesh,
- IOobject::MUST_READ
- ),
- mesh
- );
-
- Info<< " Reading p" << endl;
- volScalarField p
- (
- IOobject
- (
- "p",
- runTime.timeName(),
- mesh,
- IOobject::MUST_READ
- ),
- mesh
- );
-
- if (phi.dimensions() == dimVolume/dimTime)
- {
- IOobject turbulencePropertiesHeader
- (
- "turbulenceProperties",
- runTime.constant(),
- mesh,
- IOobject::MUST_READ_IF_MODIFIED,
- IOobject::NO_WRITE,
- false
- );
-
- if (turbulencePropertiesHeader.headerOk())
- {
- singlePhaseTransportModel laminarTransport(U, phi);
-
- autoPtr turbulenceModel
- (
- incompressible::turbulenceModel::New
- (
- U,
- phi,
- laminarTransport
- )
- );
-
- fol.execute(true);
- }
- else
- {
- IOdictionary transportProperties
- (
- IOobject
- (
- "transportProperties",
- runTime.constant(),
- mesh,
- IOobject::MUST_READ_IF_MODIFIED,
- IOobject::NO_WRITE
- )
- );
-
- fol.execute(true);
- }
- }
- else if (phi.dimensions() == dimMass/dimTime)
- {
- autoPtr thermo(fluidThermo::New(mesh));
-
- volScalarField rho
- (
- IOobject
- (
- "rho",
- runTime.timeName(),
- mesh
- ),
- thermo->rho()
- );
-
- IOobject turbulencePropertiesHeader
- (
- "turbulenceProperties",
- runTime.constant(),
- mesh,
- IOobject::MUST_READ_IF_MODIFIED,
- IOobject::NO_WRITE,
- false
- );
-
- if (turbulencePropertiesHeader.headerOk())
- {
- autoPtr turbulenceModel
- (
- compressible::turbulenceModel::New
- (
- rho,
- U,
- phi,
- thermo()
- )
- );
-
- fol.execute(true);
- }
- else
- {
- IOdictionary transportProperties
- (
- IOobject
- (
- "transportProperties",
- runTime.constant(),
- mesh,
- IOobject::MUST_READ_IF_MODIFIED,
- IOobject::NO_WRITE
- )
- );
-
- fol.execute(true);
- }
- }
- else
- {
- FatalErrorInFunction
- << "Incorrect dimensions of phi: " << phi.dimensions()
- << nl << exit(FatalError);
- }
- }
-}
-
-
-autoPtr readFunctionObjects
-(
- const argList& args,
- const Time& runTime,
- dictionary& folDict
-)
-{
- autoPtr folPtr;
-
- if (args.optionFound("dict"))
- {
- folDict = IOdictionary
- (
- IOobject
- (
- args["dict"],
- runTime,
- IOobject::MUST_READ_IF_MODIFIED
- )
- );
- folPtr.reset(new functionObjectList(runTime, folDict));
- }
- else
- {
- folPtr.reset(new functionObjectList(runTime));
- }
- folPtr->start();
-
- return folPtr;
-}
-
-
-int main(int argc, char *argv[])
-{
- Foam::timeSelector::addOptions();
- #include "addRegionOption.H"
- Foam::argList::addBoolOption
- (
- "noFlow",
- "suppress creating flow models"
- );
- #include "addDictOption.H"
-
- #include "setRootCase.H"
- #include "createTime.H"
- Foam::instantList timeDirs = Foam::timeSelector::select0(runTime, args);
- #include "createNamedMesh.H"
-
- // Externally stored dictionary for functionObjectList
- // if not constructed from runTime
- dictionary folDict;
-
- // Construct functionObjectList
- autoPtr folPtr
- (
- readFunctionObjects(args, runTime, folDict)
- );
-
- forAll(timeDirs, timeI)
- {
- runTime.setTime(timeDirs[timeI], timeI);
-
- Info<< "Time = " << runTime.timeName() << endl;
-
- if (mesh.readUpdate() != polyMesh::UNCHANGED)
- {
- // Update functionObjectList if mesh changes
- folPtr = readFunctionObjects(args, runTime, folDict);
- }
-
- FatalIOError.throwExceptions();
-
- try
- {
- calc(args, runTime, mesh, folPtr());
- }
- catch (IOerror& err)
- {
- Warning<< err << endl;
- }
-
- Info<< endl;
- }
-
- Info<< "End\n" << endl;
-
- return 0;
-}
-
-
-// ************************************************************************* //
diff --git a/bin/execFlowFunctionObjects b/bin/execFlowFunctionObjects
new file mode 100755
index 0000000000..519f1ad5ce
--- /dev/null
+++ b/bin/execFlowFunctionObjects
@@ -0,0 +1,40 @@
+#!/bin/sh
+#------------------------------------------------------------------------------
+# ========= |
+# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+# \\ / O peration |
+# \\ / A nd | Copyright (C) 2016 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 .
+#
+# Script
+# execFlowFunctionObjects
+#
+# Description
+# Replacement execFlowFunctionObjects to suggest using the "-postProcess"
+# solver command-line option.
+#
+#------------------------------------------------------------------------------
+
+echo "execFlowFunctionObjects has been replaced by the \
+'-postProcess' solver command-line option, e.g."
+
+echo "simpleFoam -help -postProcess"
+simpleFoam -help -postProcess
+
+#------------------------------------------------------------------------------
diff --git a/src/OpenFOAM/db/functionObjects/functionObject/functionObject.H b/src/OpenFOAM/db/functionObjects/functionObject/functionObject.H
index 0af33e3817..3f25a1d518 100644
--- a/src/OpenFOAM/db/functionObjects/functionObject/functionObject.H
+++ b/src/OpenFOAM/db/functionObjects/functionObject/functionObject.H
@@ -30,7 +30,7 @@ Description
OpenFOAM includes a collection of functionObjects selected by the user at
run-time to manipulate the simulation and provide mechanisms to extract
field and derived quantities. Alternatively, the same actions can be
- executed after the simulation using the \c execFlowFunctionObjects utility.
+ executed after the simulation using the \c -postProcess command-line option.
\linebreak
\subsection secFunctionObjects Using function objects