/*---------------------------------------------------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     |
    \\  /    A nd           | www.openfoam.com
     \\/     M anipulation  |
-------------------------------------------------------------------------------
    Copyright (C) 2012-2014 OpenFOAM Foundation
    Copyright (C) 2015-2020 OpenCFD Ltd.
-------------------------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

\page pagePostProcessing Post-processing

\section secFunctionObjects Function objects

OpenFOAM includes a collection of \ref grpFunctionObjects that offer users the
opportunity to closely manage their computational analyses.  These objects can
be applied to manipulate the workflow process, and provide a mechanism to
extract predicted field and derived quantities at run-time.  Alternatively,
the actions can be executed afterwards using the \c execFlowFunctionObjects
utility.

\linebreak
The current range of features comprises of:
- \ref grpFieldFunctionObjects
- \ref grpForcesFunctionObjects
- \ref grpGraphicsFunctionObjects
- \ref grpInitialisationFunctionObjects
- \ref grpLagrangianFunctionObjects
- \ref grpSolversFunctionObjects
- \ref grpUtilitiesFunctionObjects

\linebreak
\subsection secFieldFunctionObjectUsage Using function objects

Function objects are defined by additional entries in the
$FOAM_CASE/system/controlDict input dictionary.  Each object is listed in a
\c functions sub-dictionary entry, e.g. the following shows the input options
applicable to `output' -type objects:

\verbatim
functions
{
    myFunctionObject    // user-defined name of function object entry
    {
        type                functionObjectType;
        libs                (myFunctionObjectLib);
        region              defaultRegion;
        enabled             yes;
        timeStart           0;
        timeEnd             10;
        evaluateControl     timeStep;
        evaluateInterval    1;
        writeControl        outputTime;
        writeInterval       1;
        ...
    }
}
\endverbatim

Where:
\table
    Property | Description                           | Required | Default value
    type     | type of function object               | yes      |
    libs     | libraries containing object implementation | yes |
    region   | name of region for multi-region cases | no       |
    enabled  | on/off switch                         | no       | yes
    timeStart| start time                            | no       |
    timeEnd  | end time                              | no       |
    evaluateControl | when to evaluate: either 'writeTime' or 'timeStep'| no | timeStep
    evaluateInterval| steps between evaluation when evaluateControl=timeStep | no | 1
    writeControl | when to output: either 'writeTime' or 'timeStep'| no | timeStep
    writeInterval| steps between output when writeControl=timeStep | no | 1
\endtable

The sub-dictionary name \c myFunctionObject is chosen by the user, and is
typically used as the name of the output directory for any derived data.  The
\c type entry defines the type of function object properties that follow.
Since the function objects are packaged into separate libraries, the user must
tell the code where to find the function object implementation, identified
using the \c libs entry.


\*---------------------------------------------------------------------------*/
