with the more general and flexible 'postProcess' utility and '-postProcess' solver option
Rationale
---------
Both the 'postProcess' utility and '-postProcess' solver option use the
same extensive set of functionObjects available for data-processing
during the run avoiding the substantial code duplication necessary for
the 'foamCalc' and 'postCalc' utilities and simplifying maintenance.
Additionally consistency is guaranteed between solver data processing
and post-processing.
The functionObjects have been substantially re-written and generalized
to simplify development and encourage contribution.
Configuration
-------------
An extensive set of simple functionObject configuration files are
provided in
OpenFOAM-dev/etc/caseDicts/postProcessing
and more will be added in the future. These can either be copied into
'<case>/system' directory and included into the 'controlDict.functions'
sub-dictionary or included directly from 'etc/caseDicts/postProcessing'
using the '#includeEtc' directive or the new and more convenient
'#includeFunc' directive which searches the
'<etc>/caseDicts/postProcessing' directories for the selected
functionObject, e.g.
functions
{
#includeFunc Q
#includeFunc Lambda2
}
'#includeFunc' first searches the '<case>/system' directory in case
there is a local configuration.
Description of #includeFunc
---------------------------
Specify a functionObject dictionary file to include, expects the
functionObject name to follow (without quotes).
Search for functionObject dictionary file in
user/group/shipped directories.
The search scheme allows for version-specific and
version-independent files using the following hierarchy:
- \b user settings:
- ~/.OpenFOAM/\<VERSION\>/caseDicts/postProcessing
- ~/.OpenFOAM/caseDicts/postProcessing
- \b group (site) settings (when $WM_PROJECT_SITE is set):
- $WM_PROJECT_SITE/\<VERSION\>/caseDicts/postProcessing
- $WM_PROJECT_SITE/caseDicts/postProcessing
- \b group (site) settings (when $WM_PROJECT_SITE is not set):
- $WM_PROJECT_INST_DIR/site/\<VERSION\>/caseDicts/postProcessing
- $WM_PROJECT_INST_DIR/site/caseDicts/postProcessing
- \b other (shipped) settings:
- $WM_PROJECT_DIR/etc/caseDicts/postProcessing
An example of the \c \#includeFunc directive:
\verbatim
#includeFunc <funcName>
\endverbatim
postProcess
-----------
The 'postProcess' utility and '-postProcess' solver option provide the
same set of controls to execute functionObjects after the run either by
reading a specified set of fields to process in the case of
'postProcess' or by reading all fields and models required to start the
run in the case of '-postProcess' for each selected time:
postProcess -help
Usage: postProcess [OPTIONS]
options:
-case <dir> specify alternate case directory, default is the cwd
-constant include the 'constant/' dir in the times list
-dict <file> read control dictionary from specified location
-field <name> specify the name of the field to be processed, e.g. U
-fields <list> specify a list of fields to be processed, e.g. '(U T p)' -
regular expressions not currently supported
-func <name> specify the name of the functionObject to execute, e.g. Q
-funcs <list> specify the names of the functionObjects to execute, e.g.
'(Q div(U))'
-latestTime select the latest time
-newTimes select the new times
-noFunctionObjects
do not execute functionObjects
-noZero exclude the '0/' dir from the times list, has precedence
over the -withZero option
-parallel run in parallel
-region <name> specify alternative mesh region
-roots <(dir1 .. dirN)>
slave root directories for distributed running
-time <ranges> comma-separated time ranges - eg, ':10,20,40:70,1000:'
-srcDoc display source code in browser
-doc display application documentation in browser
-help print the usage
pimpleFoam -postProcess -help
Usage: pimpleFoam [OPTIONS]
options:
-case <dir> specify alternate case directory, default is the cwd
-constant include the 'constant/' dir in the times list
-dict <file> read control dictionary from specified location
-field <name> specify the name of the field to be processed, e.g. U
-fields <list> specify a list of fields to be processed, e.g. '(U T p)' -
regular expressions not currently supported
-func <name> specify the name of the functionObject to execute, e.g. Q
-funcs <list> specify the names of the functionObjects to execute, e.g.
'(Q div(U))'
-latestTime select the latest time
-newTimes select the new times
-noFunctionObjects
do not execute functionObjects
-noZero exclude the '0/' dir from the times list, has precedence
over the -withZero option
-parallel run in parallel
-postProcess Execute functionObjects only
-region <name> specify alternative mesh region
-roots <(dir1 .. dirN)>
slave root directories for distributed running
-time <ranges> comma-separated time ranges - eg, ':10,20,40:70,1000:'
-srcDoc display source code in browser
-doc display application documentation in browser
-help print the usage
The functionObjects to execute may be specified on the command-line
using the '-func' option for a single functionObject or '-funcs' for a
list, e.g.
postProcess -func Q
postProcess -funcs '(div(U) div(phi))'
In the case of 'Q' the default field to process is 'U' which is
specified in and read from the configuration file but this may be
overridden thus:
postProcess -func 'Q(Ua)'
as is done in the example above to calculate the two forms of the divergence of
the velocity field. Additional fields which the functionObjects may depend on
can be specified using the '-field' or '-fields' options.
The 'postProcess' utility can only be used to execute functionObjects which
process fields present in the time directories. However, functionObjects which
depend on fields obtained from models, e.g. properties derived from turbulence
models can be executed using the '-postProcess' of the appropriate solver, e.g.
pisoFoam -postProcess -func PecletNo
or
sonicFoam -postProcess -func MachNo
In this case all required fields will have already been read so the '-field' or
'-fields' options are not be needed.
Henry G. Weller
CFD Direct Ltd.
322 lines
9.6 KiB
C++
322 lines
9.6 KiB
C++
/*---------------------------------------------------------------------------*\
|
|
========= |
|
|
\\ / 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 <http://www.gnu.org/licenses/>.
|
|
|
|
Class
|
|
Foam::functionObjects::fieldAverage
|
|
|
|
Group
|
|
grpFieldFunctionObjects
|
|
|
|
Description
|
|
This function object calculates average quantities for a user-specified
|
|
selection of volumetric and surface fields. Fields are entered as a list
|
|
of sub-dictionaries, which indicate the type of averages to perform, and
|
|
can be updated during the calculation. The current options include:
|
|
- \c mean: arithmetic mean:
|
|
\f[
|
|
\overline{x} = \frac{1}{N}\displaystyle\sum\limits_{i=0}^N x_i
|
|
\f]
|
|
- \c prime2Mean: prime-squared mean
|
|
\f[
|
|
\overline{x'}^2 = \frac{1}{N}\displaystyle\sum\limits_{i=0}^N
|
|
(x_i - \overline{x})^2
|
|
\f]
|
|
- base: average over 'time', or 'iteration' (\f$N\f$ in the above)
|
|
- window: optional averaging window, specified in 'base' units
|
|
|
|
Average field names are constructed by concatenating the base field with
|
|
the averaging type, e.g. when averaging field 'U', the resultant fields
|
|
are:
|
|
- arithmetic mean field, UMean
|
|
- prime-squared field, UPrime2Mean
|
|
|
|
Information regarding the number of averaging steps, and total averaging
|
|
time are written on a per-field basis to the
|
|
\c "<functionObject name>Properties" dictionary, located in \<time\>/uniform
|
|
|
|
When restarting form a previous calculation, the averaging is continuous or
|
|
may be restarted using the \c restartOnRestart option.
|
|
|
|
The averaging process may be restarted after each calculation output time
|
|
using the \c restartOnOutput option or restarted periodically using the \c
|
|
periodicRestart option and setting \c restartPeriod to the required
|
|
averaging period.
|
|
|
|
Example of function object specification:
|
|
\verbatim
|
|
fieldAverage1
|
|
{
|
|
type fieldAverage;
|
|
libs ("libfieldFunctionObjects.so");
|
|
...
|
|
restartOnRestart false;
|
|
restartOnOutput false;
|
|
periodicRestart false;
|
|
restartPeriod 0.002;
|
|
fields
|
|
(
|
|
U
|
|
{
|
|
mean on;
|
|
prime2Mean on;
|
|
base time;
|
|
window 10.0;
|
|
windowName w1;
|
|
}
|
|
p
|
|
{
|
|
mean on;
|
|
prime2Mean on;
|
|
base time;
|
|
}
|
|
);
|
|
}
|
|
\endverbatim
|
|
|
|
\heading Function object usage
|
|
\table
|
|
Property | Description | Required | Default value
|
|
type | type name: fieldAverage | yes |
|
|
restartOnRestart | Restart the averaging on restart | no | no
|
|
restartOnOutput | Restart the averaging on output | no | no
|
|
periodicRestart | Periodically restart the averaging | no | no
|
|
restartPeriod | Periodic restart period | conditional |
|
|
fields | list of fields and averaging options | yes |
|
|
\endtable
|
|
|
|
|
|
Note
|
|
To employ the \c prime2Mean option, the \c mean option must be selecetd.
|
|
|
|
SeeAlso
|
|
Foam::functionObjects::fvMeshFunctionObject
|
|
Foam::functionObject
|
|
|
|
SourceFiles
|
|
fieldAverage.C
|
|
fieldAverageTemplates.C
|
|
fieldAverageItem.C
|
|
|
|
\*---------------------------------------------------------------------------*/
|
|
|
|
#ifndef functionObjects_fieldAverage_H
|
|
#define functionObjects_fieldAverage_H
|
|
|
|
#include "fvMeshFunctionObject.H"
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
namespace Foam
|
|
{
|
|
namespace functionObjects
|
|
{
|
|
|
|
// Forward declaration of classes
|
|
class fieldAverageItem;
|
|
|
|
/*---------------------------------------------------------------------------*\
|
|
Class fieldAverage Declaration
|
|
\*---------------------------------------------------------------------------*/
|
|
|
|
class fieldAverage
|
|
:
|
|
public fvMeshFunctionObject
|
|
{
|
|
protected:
|
|
|
|
// Protected data
|
|
|
|
//- Time at last call, prevents repeated averaging
|
|
label prevTimeIndex_;
|
|
|
|
//- Restart the averaging process on restart
|
|
Switch restartOnRestart_;
|
|
|
|
//- Restart the averaging process on output
|
|
Switch restartOnOutput_;
|
|
|
|
//- Periodically restart the averaging process
|
|
Switch periodicRestart_;
|
|
|
|
//- Restart period
|
|
scalar restartPeriod_;
|
|
|
|
//- Initialised flag
|
|
bool initialised_;
|
|
|
|
//- List of field average items, describing what averages to be
|
|
// calculated and output
|
|
List<fieldAverageItem> faItems_;
|
|
|
|
// Counters
|
|
|
|
//- Iteration steps counter
|
|
List<label> totalIter_;
|
|
|
|
//- Total time counter
|
|
List<scalar> totalTime_;
|
|
|
|
//- Index for periodic restart
|
|
label periodIndex_;
|
|
|
|
|
|
// Private Member Functions
|
|
|
|
// Initialisation routines
|
|
|
|
//- Checkout fields (causes deletion) from the database
|
|
// and reset lists
|
|
void resetFields();
|
|
|
|
//- Reset lists (clear existing values) and initialize averaging.
|
|
// Check requested field averages are valid, populate field lists
|
|
void initialize();
|
|
|
|
//- Restart averaging for restartOnOutput
|
|
void restart();
|
|
|
|
//- Add mean average field to database
|
|
template<class Type>
|
|
void addMeanFieldType(const label fieldi);
|
|
|
|
//- Add mean average field to database
|
|
template<class Type>
|
|
void addMeanField(const label fieldi);
|
|
|
|
//- Add prime-squared average field to database
|
|
template<class Type1, class Type2>
|
|
void addPrime2MeanFieldType(const label fieldi);
|
|
|
|
//- Add prime-squared average field to database
|
|
template<class Type1, class Type2>
|
|
void addPrime2MeanField(const label fieldi);
|
|
|
|
|
|
// Calculation functions
|
|
|
|
//- Main calculation routine
|
|
virtual void calcAverages();
|
|
|
|
//- Calculate mean average fields
|
|
template<class Type>
|
|
void calculateMeanFieldType(const label fieldi) const;
|
|
|
|
//- Calculate mean average fields
|
|
template<class Type>
|
|
void calculateMeanFields() const;
|
|
|
|
//- Calculate prime-squared average fields
|
|
template<class Type1, class Type2>
|
|
void calculatePrime2MeanFieldType(const label fieldi) const;
|
|
|
|
//- Calculate prime-squared average fields
|
|
template<class Type1, class Type2>
|
|
void calculatePrime2MeanFields() const;
|
|
|
|
//- Add mean-squared field value to prime-squared mean field
|
|
template<class Type1, class Type2>
|
|
void addMeanSqrToPrime2MeanType(const label fieldi) const;
|
|
|
|
//- Add mean-squared field value to prime-squared mean field
|
|
template<class Type1, class Type2>
|
|
void addMeanSqrToPrime2Mean() const;
|
|
|
|
|
|
// I-O
|
|
|
|
//- Write averages
|
|
virtual void writeAverages() const;
|
|
|
|
//- Write fields
|
|
template<class Type>
|
|
void writeFieldType(const word& fieldName) const;
|
|
|
|
//- Write fields
|
|
template<class Type>
|
|
void writeFields() const;
|
|
|
|
//- Write averaging properties - steps and time
|
|
void writeAveragingProperties() const;
|
|
|
|
//- Read averaging properties - steps and time
|
|
void readAveragingProperties();
|
|
|
|
|
|
//- Disallow default bitwise copy construct
|
|
fieldAverage(const fieldAverage&);
|
|
|
|
//- Disallow default bitwise assignment
|
|
void operator=(const fieldAverage&);
|
|
|
|
|
|
public:
|
|
|
|
//- Runtime type information
|
|
TypeName("fieldAverage");
|
|
|
|
|
|
// Constructors
|
|
|
|
//- Construct from Time and dictionary
|
|
fieldAverage
|
|
(
|
|
const word& name,
|
|
const Time& runTime,
|
|
const dictionary&
|
|
);
|
|
|
|
|
|
//- Destructor
|
|
virtual ~fieldAverage();
|
|
|
|
|
|
// Member Functions
|
|
|
|
//- Read the field average data
|
|
virtual bool read(const dictionary&);
|
|
|
|
//- Calculate the field averages
|
|
virtual bool execute(const bool postProcess = false);
|
|
|
|
//- Write the field averages
|
|
virtual bool write(const bool postProcess = false);
|
|
};
|
|
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
} // End namespace functionObjects
|
|
} // End namespace Foam
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
#ifdef NoRepository
|
|
#include "fieldAverageTemplates.C"
|
|
#endif
|
|
|
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
|
|
|
#endif
|
|
|
|
// ************************************************************************* //
|