diff --git a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C index 4e3bf3fad6..5c9b96fe68 100644 --- a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C +++ b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.C @@ -37,8 +37,43 @@ void Foam::OutputFilterFunctionObject::readDict() dict_.readIfPresent("region", regionName_); dict_.readIfPresent("dictionary", dictName_); dict_.readIfPresent("enabled", enabled_); + dict_.readIfPresent("storeFilter", storeFilter_); } +template +void Foam::OutputFilterFunctionObject::allocateFilter() +{ + if (dictName_.size()) + { + ptr_.reset + ( + new IOOutputFilter + ( + name(), + time_.lookupObject(regionName_), + dictName_ + ) + ); + } + else + { + ptr_.reset + ( + new OutputFilter + ( + name(), + time_.lookupObject(regionName_), + dict_ + ) + ); + } +} + +template +void Foam::OutputFilterFunctionObject::destroyFilter() +{ + ptr_.reset(); +} // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -56,6 +91,7 @@ Foam::OutputFilterFunctionObject::OutputFilterFunctionObject regionName_(polyMesh::defaultRegion), dictName_(), enabled_(true), + storeFilter_(true), outputControl_(t, dict) { readDict(); @@ -83,32 +119,9 @@ bool Foam::OutputFilterFunctionObject::start() { readDict(); - if (enabled_) + if (enabled_&&storeFilter_) { - if (dictName_.size()) - { - ptr_.reset - ( - new IOOutputFilter - ( - name(), - time_.lookupObject(regionName_), - dictName_ - ) - ); - } - else - { - ptr_.reset - ( - new OutputFilter - ( - name(), - time_.lookupObject(regionName_), - dict_ - ) - ); - } + allocateFilter(); } return true; @@ -120,12 +133,22 @@ bool Foam::OutputFilterFunctionObject::execute() { if (enabled_) { + if (!storeFilter_) + { + allocateFilter(); + } + ptr_->execute(); if (enabled_ && outputControl_.output()) { ptr_->write(); } + + if (!storeFilter_) + { + destroyFilter(); + } } return true; @@ -137,12 +160,22 @@ bool Foam::OutputFilterFunctionObject::end() { if (enabled_) { + if (!storeFilter_) + { + allocateFilter(); + } + ptr_->end(); if (enabled_ && outputControl_.output()) { ptr_->write(); } + + if (!storeFilter_) + { + destroyFilter(); + } } return true; diff --git a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H index f6c183e803..47009d2643 100644 --- a/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H +++ b/src/OpenFOAM/db/functionObjects/OutputFilterFunctionObject/OutputFilterFunctionObject.H @@ -78,6 +78,10 @@ class OutputFilterFunctionObject //- Switch for the execution of the functionObject bool enabled_; + //- Switch to store filter in between writes or use on-the-fly + // construction + bool storeFilter_; + //- Output controls outputFilterOutputControl outputControl_; @@ -89,6 +93,12 @@ class OutputFilterFunctionObject //- Read relevant dictionary entries void readDict(); + + //- Creates most of the data associated with this object. + void allocateFilter(); + + //- Destroys most of the data associated with this object. + void destroyFilter(); //- Disallow default bitwise copy construct OutputFilterFunctionObject(const OutputFilterFunctionObject&);