From e8a70cd06666372a06ce970d22d41f35b1f56527 Mon Sep 17 00:00:00 2001 From: andy Date: Tue, 16 Sep 2008 10:49:03 +0100 Subject: [PATCH] improved output handling --- .../fieldAverage/fieldAverage/fieldAverage.C | 15 ++- .../fieldAverage/fieldAverage/fieldAverage.H | 3 + .../forces/forceCoeffs/forceCoeffs.C | 6 + .../forces/forceCoeffs/forceCoeffs.H | 5 +- src/postProcessing/forces/forces/forces.C | 5 + src/postProcessing/forces/forces/forces.H | 5 +- src/sampling/Make/files | 2 + .../IOOutputFilter/IOOutputFilter.H | 2 +- .../OutputFilterFunctionObject.C | 24 ++-- .../OutputFilterFunctionObject.H | 9 +- .../outputFilterOutputControl.C | 119 ++++++++++++++++ .../outputFilterOutputControl.H | 127 ++++++++++++++++++ src/sampling/probes/probes.C | 6 + src/sampling/probes/probes.H | 3 + .../sampledSet/sampledSets/sampledSets.C | 6 + .../sampledSet/sampledSets/sampledSets.H | 3 + .../sampledSurfaces/sampledSurfaces.C | 6 + .../sampledSurfaces/sampledSurfaces.H | 6 +- 18 files changed, 328 insertions(+), 24 deletions(-) create mode 100644 src/sampling/outputFilters/outputFilterOutputControl/outputFilterOutputControl.C create mode 100644 src/sampling/outputFilters/outputFilterOutputControl/outputFilterOutputControl.H diff --git a/src/postProcessing/fieldAverage/fieldAverage/fieldAverage.C b/src/postProcessing/fieldAverage/fieldAverage/fieldAverage.C index dcb00c06d6..925668871d 100644 --- a/src/postProcessing/fieldAverage/fieldAverage/fieldAverage.C +++ b/src/postProcessing/fieldAverage/fieldAverage/fieldAverage.C @@ -226,18 +226,21 @@ void Foam::fieldAverage::read(const dictionary& dict) } -void Foam::fieldAverage::write() +void Foam::fieldAverage::execute() { if (active_) { calcAverages(); + } +} - if (obr_.time().outputTime()) - { - writeAverages(); - writeAveragingProperties(); - } +void Foam::fieldAverage::write() +{ + if (active_) + { + writeAverages(); + writeAveragingProperties(); } } diff --git a/src/postProcessing/fieldAverage/fieldAverage/fieldAverage.H b/src/postProcessing/fieldAverage/fieldAverage/fieldAverage.H index 7d7b22af82..898390539e 100644 --- a/src/postProcessing/fieldAverage/fieldAverage/fieldAverage.H +++ b/src/postProcessing/fieldAverage/fieldAverage/fieldAverage.H @@ -279,6 +279,9 @@ public: //- Read the field average data virtual void read(const dictionary&); + //- Execute the averaging + virtual void execute(); + //- Calculate the field average data and write virtual void write(); }; diff --git a/src/postProcessing/forces/forceCoeffs/forceCoeffs.C b/src/postProcessing/forces/forceCoeffs/forceCoeffs.C index 86de02eb9b..5950c9d3d6 100644 --- a/src/postProcessing/forces/forceCoeffs/forceCoeffs.C +++ b/src/postProcessing/forces/forceCoeffs/forceCoeffs.C @@ -98,6 +98,12 @@ void Foam::forceCoeffs::writeFileHeader() } +void Foam::forceCoeffs::execute() +{ + // Do nothing - only valid on write +} + + void Foam::forceCoeffs::write() { if (active_) diff --git a/src/postProcessing/forces/forceCoeffs/forceCoeffs.H b/src/postProcessing/forces/forceCoeffs/forceCoeffs.H index 0ec0389a94..75ed61ea45 100644 --- a/src/postProcessing/forces/forceCoeffs/forceCoeffs.H +++ b/src/postProcessing/forces/forceCoeffs/forceCoeffs.H @@ -126,7 +126,10 @@ public: //- Read the forces data virtual void read(const dictionary&); - //- Calculate the forces and write + //- Execute + virtual void execute(); + + //- Write the forces virtual void write(); }; diff --git a/src/postProcessing/forces/forces/forces.C b/src/postProcessing/forces/forces/forces.C index 433ef1e1bf..17254aec3d 100644 --- a/src/postProcessing/forces/forces/forces.C +++ b/src/postProcessing/forces/forces/forces.C @@ -267,6 +267,11 @@ void Foam::forces::writeFileHeader() } +void Foam::forces::execute() +{ + // Do nothing - only valid on write +} + void Foam::forces::write() { if (active_) diff --git a/src/postProcessing/forces/forces/forces.H b/src/postProcessing/forces/forces/forces.H index 7b03805b9c..285a0acea1 100644 --- a/src/postProcessing/forces/forces/forces.H +++ b/src/postProcessing/forces/forces/forces.H @@ -200,7 +200,10 @@ public: //- Read the forces data virtual void read(const dictionary&); - //- Calculate the forces and write + //- Execute + virtual void execute(); + + //- Write the forces virtual void write(); //- Calculate and return forces and moment diff --git a/src/sampling/Make/files b/src/sampling/Make/files index 3029668f86..b5f1a258c6 100644 --- a/src/sampling/Make/files +++ b/src/sampling/Make/files @@ -38,6 +38,8 @@ graphField/writePatchGraph.C graphField/writeCellGraph.C graphField/makeGraph.C +outputFilters/outputFilterOutputControl/outputFilterOutputControl.C + meshToMesh = meshToMeshInterpolation/meshToMesh $(meshToMesh)/meshToMesh.C $(meshToMesh)/calculateMeshToMeshAddressing.C diff --git a/src/sampling/outputFilters/IOOutputFilter/IOOutputFilter.H b/src/sampling/outputFilters/IOOutputFilter/IOOutputFilter.H index bd69a5f3d3..d166a9ea19 100644 --- a/src/sampling/outputFilters/IOOutputFilter/IOOutputFilter.H +++ b/src/sampling/outputFilters/IOOutputFilter/IOOutputFilter.H @@ -49,7 +49,7 @@ namespace Foam class mapPolyMesh; /*---------------------------------------------------------------------------*\ - Class probes Declaration + Class IOOutputFilter Declaration \*---------------------------------------------------------------------------*/ template diff --git a/src/sampling/outputFilters/OutputFilterFunctionObject/OutputFilterFunctionObject.C b/src/sampling/outputFilters/OutputFilterFunctionObject/OutputFilterFunctionObject.C index ee7c3c6ef1..605b946d7c 100644 --- a/src/sampling/outputFilters/OutputFilterFunctionObject/OutputFilterFunctionObject.C +++ b/src/sampling/outputFilters/OutputFilterFunctionObject/OutputFilterFunctionObject.C @@ -36,8 +36,7 @@ void Foam::OutputFilterFunctionObject::readDict() { dict_.readIfPresent("region", regionName_); dict_.readIfPresent("dictionary", dictName_); - dict_.readIfPresent("interval", interval_); - dict_.readIfPresent("enabled", execution_); + dict_.readIfPresent("enabled", enabled_); } @@ -57,8 +56,8 @@ Foam::OutputFilterFunctionObject::OutputFilterFunctionObject dict_(dict), regionName_(polyMesh::defaultRegion), dictName_(), - interval_(0), - execution_(true) + enabled_(true), + outputControl_(t, dict) { readDict(); } @@ -71,7 +70,7 @@ bool Foam::OutputFilterFunctionObject::start() { readDict(); - if (execution_) + if (enabled_) { if (dictName_.size()) { @@ -105,9 +104,14 @@ bool Foam::OutputFilterFunctionObject::start() template bool Foam::OutputFilterFunctionObject::execute() { - if (execution_ && (interval_ <= 1 || !(time_.timeIndex() % interval_)) ) + if (enabled_) { - ptr_->write(); + ptr_->execute(); + + if (enabled_ && outputControl_.output()) + { + ptr_->write(); + } } return true; @@ -117,14 +121,14 @@ bool Foam::OutputFilterFunctionObject::execute() template void Foam::OutputFilterFunctionObject::on() { - execution_ = true; + enabled_ = true; } template void Foam::OutputFilterFunctionObject::off() { - execution_ = false; + enabled_ = false; } @@ -137,6 +141,8 @@ bool Foam::OutputFilterFunctionObject::read if (dict != dict_) { dict_ = dict; + outputControl_.read(dict); + return start(); } else diff --git a/src/sampling/outputFilters/OutputFilterFunctionObject/OutputFilterFunctionObject.H b/src/sampling/outputFilters/OutputFilterFunctionObject/OutputFilterFunctionObject.H index 62834c67e2..ce0acaf1ce 100644 --- a/src/sampling/outputFilters/OutputFilterFunctionObject/OutputFilterFunctionObject.H +++ b/src/sampling/outputFilters/OutputFilterFunctionObject/OutputFilterFunctionObject.H @@ -45,6 +45,7 @@ SourceFiles #include "functionObject.H" #include "dictionary.H" +#include "outputFilterOutputControl.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -68,12 +69,10 @@ class OutputFilterFunctionObject word regionName_; word dictName_; - //- the execution interval (in time steps) - // a value <= 1 means execute at every time step - label interval_; - //- Switch for the execution of the functionObjects - bool execution_; + bool enabled_; + + outputFilterOutputControl outputControl_; autoPtr ptr_; diff --git a/src/sampling/outputFilters/outputFilterOutputControl/outputFilterOutputControl.C b/src/sampling/outputFilters/outputFilterOutputControl/outputFilterOutputControl.C new file mode 100644 index 0000000000..6921267cde --- /dev/null +++ b/src/sampling/outputFilters/outputFilterOutputControl/outputFilterOutputControl.C @@ -0,0 +1,119 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2008 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +\*---------------------------------------------------------------------------*/ + +#include "outputFilterOutputControl.H" + +// * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * * // + +template<> +const char* Foam::NamedEnum +< + Foam::outputFilterOutputControl::outputControls, + 2 +>::names[] = +{ + "timeStep", + "outputTime" +}; + +const Foam::NamedEnum + Foam::outputFilterOutputControl::outputControlNames_; + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::outputFilterOutputControl::outputFilterOutputControl +( + const Time& time, + const dictionary& dict +) +: + time_(time), + outputControl_(ocTimeStep), + outputInterval_(0) +{ + read(dict); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::outputFilterOutputControl::~outputFilterOutputControl() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::outputFilterOutputControl::read(const dictionary& dict) +{ + outputControl_ = outputControlNames_.read(dict.lookup("outputControl")); + + switch (outputControl_) + { + case ocTimeStep: + { + dict.lookup("outputInterval") >> outputInterval_; + } + default: + { + // do nothing + } + } +} + + +bool Foam::outputFilterOutputControl::output() const +{ + switch (outputControl_) + { + case ocTimeStep: + { + return + ( + !(time_.timeIndex() % outputInterval_) + || (outputInterval_ <= 1) + ); + break; + } + case ocOutputTime: + { + return time_.outputTime(); + break; + } + default: + { + FatalErrorIn("bool Foam::outputFilterOutputControl::output()") + << "Unknown output control: " + << outputControlNames_[outputControl_] << nl + << abort(FatalError); + } + } + + return false; +} + + +// ************************************************************************* // diff --git a/src/sampling/outputFilters/outputFilterOutputControl/outputFilterOutputControl.H b/src/sampling/outputFilters/outputFilterOutputControl/outputFilterOutputControl.H new file mode 100644 index 0000000000..2a2e3406e9 --- /dev/null +++ b/src/sampling/outputFilters/outputFilterOutputControl/outputFilterOutputControl.H @@ -0,0 +1,127 @@ +/*---------------------------------------------------------------------------* \ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 1991-2008 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 2 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, write to the Free Software Foundation, + Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Class + Foam::outputFilterOutputControl + +Description + +SourceFiles + outputFilterOutputControl.C + +\*---------------------------------------------------------------------------*/ + +#ifndef outputFilterOutputControl_H +#define outputFilterOutputControl_H + +#include "dictionary.H" +#include "Time.H" +#include "NamedEnum.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class outputFilterOutputControl Declaration +\*---------------------------------------------------------------------------*/ + +class outputFilterOutputControl +{ +public: + + enum outputControls + { + ocTimeStep, + ocOutputTime + }; + + +private: + + // Private data + + //- Time object + const Time& time_; + + //- String representation of outputControls enums + static const NamedEnum outputControlNames_; + + //- Type of output + outputControls outputControl_; + + //- The execution interval (in time steps) when using TIMESTEP mode + // a value <= 1 means execute at every time step + label outputInterval_; + + + // Private Member Functions + + //- Disallow default bitwise copy construct and assignment + outputFilterOutputControl(const outputFilterOutputControl&); + void operator=(const outputFilterOutputControl&); + + +public: + + // Constructors + + //- Construct from dictionary and Time object + outputFilterOutputControl + ( + const Time& time, + const dictionary& dict + ); + + + // Destructor + ~outputFilterOutputControl(); + + + // Member Functions + + //- Read from dictionary + void read(const dictionary& dict); + + //- Return const access to the Time object + const Time& time() const + { + return time_; + } + + //- Flag to indicate whether to output + bool output() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/sampling/probes/probes.C b/src/sampling/probes/probes.C index d4fe336116..e0576b6034 100644 --- a/src/sampling/probes/probes.C +++ b/src/sampling/probes/probes.C @@ -298,6 +298,12 @@ Foam::probes::~probes() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +void Foam::probes::execute() +{ + // Do nothing - only valid on write +} + + void Foam::probes::write() { if (probeLocations_.size() && checkFieldTypes()) diff --git a/src/sampling/probes/probes.H b/src/sampling/probes/probes.H index 8e57bac54d..dd9b745577 100644 --- a/src/sampling/probes/probes.H +++ b/src/sampling/probes/probes.H @@ -200,6 +200,9 @@ public: //- Read the probes virtual void read(const dictionary&); + //- Execute + virtual void execute(); + //- Update for changes of mesh virtual void updateMesh(const mapPolyMesh&) {} diff --git a/src/sampling/sampledSet/sampledSets/sampledSets.C b/src/sampling/sampledSet/sampledSets/sampledSets.C index 7c1e86fd01..eb31a2cabd 100644 --- a/src/sampling/sampledSet/sampledSets/sampledSets.C +++ b/src/sampling/sampledSet/sampledSets/sampledSets.C @@ -269,6 +269,12 @@ void Foam::sampledSets::verbose(const bool verbosity) } +void::Foam::sampledSets::execute() +{ + // Do nothing - only valid on write +} + + void Foam::sampledSets::write() { if (size() && checkFieldTypes()) diff --git a/src/sampling/sampledSet/sampledSets/sampledSets.H b/src/sampling/sampledSet/sampledSets/sampledSets.H index d4e8b1dd98..2885c61f93 100644 --- a/src/sampling/sampledSet/sampledSets/sampledSets.H +++ b/src/sampling/sampledSet/sampledSets/sampledSets.H @@ -278,6 +278,9 @@ public: //- set verbosity level void verbose(const bool verbosity = true); + //- Execute + virtual void execute(); + //- Sample and write virtual void write(); diff --git a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C index 4fb6b6c43b..059be18833 100644 --- a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C +++ b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.C @@ -309,6 +309,12 @@ void Foam::sampledSurfaces::verbose(const bool verbosity) } +void::Foam::sampledSurfaces::execute() +{ + // Do nothing - only valid on write +} + + void Foam::sampledSurfaces::write() { if (size() && checkFieldTypes()) diff --git a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H index 15515533be..cbe665674b 100644 --- a/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H +++ b/src/sampling/sampledSurface/sampledSurfaces/sampledSurfaces.H @@ -86,7 +86,8 @@ class sampledSurfaces formatter(surfaceWriter::New(writeFormat)) {} - //- Construct for a particular surface format and a list of field names + //- Construct for a particular surface format and a list of field + // names fieldGroup ( const word& writeFormat, @@ -250,6 +251,9 @@ public: //- set verbosity level void verbose(const bool verbosity = true); + //- Execute + virtual void execute(); + //- Sample and write virtual void write();