diff --git a/src/functionObjects/utilities/writeObjects/writeObjects.C b/src/functionObjects/utilities/writeObjects/writeObjects.C index cad42b801fdcd543001c11a26014e41082f754c5..0fdc9214c7a212e12a586f670b29af87652dd9ce 100644 --- a/src/functionObjects/utilities/writeObjects/writeObjects.C +++ b/src/functionObjects/utilities/writeObjects/writeObjects.C @@ -42,9 +42,24 @@ namespace functionObjects writeObjects, dictionary ); + + template<> + const char* Foam::NamedEnum + < + Foam::functionObjects::writeObjects::writeOption, + 3 + >::names[] = + { + "autoWrite", + "noWrite", + "anyWrite" + }; } } +const Foam::NamedEnum<Foam::functionObjects::writeObjects::writeOption, 3> + Foam::functionObjects::writeObjects::writeOptionNames; + // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -63,7 +78,7 @@ Foam::functionObjects::writeObjects::writeObjects dict.lookupOrDefault("region", polyMesh::defaultRegion) ) ), - exclusiveWriting_(false), + writeOption_(ANY_WRITE), objectNames_() { read(dict); @@ -94,7 +109,14 @@ bool Foam::functionObjects::writeObjects::read(const dictionary& dict) dict.lookup("objects") >> objectNames_; } - dict.readIfPresent("exclusiveWriting", exclusiveWriting_); + if (dict.found("writeOption")) + { + writeOption_ = writeOptionNames.read(dict.lookup("writeOption")); + } + else + { + writeOption_ = ANY_WRITE; + } return true; } @@ -140,15 +162,49 @@ bool Foam::functionObjects::writeObjects::write() obr_.lookupObject<regIOobject>(allNames[i]) ); - if (exclusiveWriting_) + switch(writeOption_) { - // Switch off automatic writing to prevent double write - obj.writeOpt() = IOobject::NO_WRITE; + case AUTO_WRITE: + if (obj.writeOpt() != IOobject::AUTO_WRITE) + { + continue; + } + else + { + break; + } + + case NO_WRITE: + if (obj.writeOpt() != IOobject::NO_WRITE) + { + continue; + } + else + { + break; + } + + case ANY_WRITE: + break; + + default: + continue; } - Info<< " writing object " << obj.name() << endl; + if + ( + obj.writeOpt() == IOobject::AUTO_WRITE + && obr_.time().writeTime() + ) + { + Info<< " automatically written object " << obj.name() << endl; + } + else + { + Info<< " writing object " << obj.name() << endl; - obj.write(); + obj.write(); + } } return true; diff --git a/src/functionObjects/utilities/writeObjects/writeObjects.H b/src/functionObjects/utilities/writeObjects/writeObjects.H index dbf395637863eb172c929f1bd7b7aa57a471eac9..40cb22f95abb82dbe1ab7976ad3ddc2d87df1911 100644 --- a/src/functionObjects/utilities/writeObjects/writeObjects.H +++ b/src/functionObjects/utilities/writeObjects/writeObjects.H @@ -28,11 +28,11 @@ Group grpUtilitiesFunctionObjects Description - Allows specification of different writing frequency of objects registered to - the database. + Allows specification of different writing frequency of objects registered + to the database. It has similar functionality as the main time database through the - writeControl setting: + \c writeControl setting: - timeStep - writeTime - adjustableRunTime @@ -40,28 +40,33 @@ Description - clockTime - cpuTime + It also has the ability to write the selected objects that were defined + with the respective write mode for the requested \c writeOption, namely: + - \c autoWrite - objects set to write at output time + - \c noWrite - objects set to not write by default + - \c anyWrite - any option of the previous two + Example of function object specification: \verbatim writeObjects1 { type writeObjects; libs ("libutilityFunctionObjects.so"); - exclusiveWriting true; ... objects (obj1 obj2); + writeOption anyWrite; } \endverbatim Usage \table Property | Description | Required | Default value - type | type name: writeObjects | yes | + type | type name: writeObjects | yes | objects | objects to write | yes | - exclusiveWriting | Takes over object writing | no | yes + writeOption | only those with this write option | no | any \endtable - \c exclusiveWriting disables automatic writing (i.e through database) of the - objects to avoid duplicate writing. + Note: Regular expressions can also be used in \c objects. See also Foam::functionObject @@ -77,6 +82,7 @@ SourceFiles #include "functionObject.H" #include "wordReList.H" +#include "NamedEnum.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -97,13 +103,30 @@ class writeObjects : public functionObject { +public: + + // Public data types + + //- Re-enumeration defining the write options, based on the original + // ones at IOobject::writeOption + enum writeOption + { + AUTO_WRITE, + NO_WRITE, + ANY_WRITE + }; + + static const NamedEnum<writeOption, 3> writeOptionNames; + +private: + // Private data - //- Refererence to Db + //- Reference to Db const objectRegistry& obr_; //- Takes over the writing from Db - bool exclusiveWriting_; + writeOption writeOption_; //- Names of objects to control wordReList objectNames_;