From d2bec4665662dc0651fad1beeb654207ea807a35 Mon Sep 17 00:00:00 2001 From: Andrew Heather Date: Tue, 6 Oct 2015 11:47:58 +0100 Subject: [PATCH] ENH: Added state dictionary to functionObjectList Note: added as a pointer since the list operates in multiple modes, e.g. as constructed by the Time database and 'outside' by execFlowFunctionObjects --- .../functionObjectList/functionObjectList.C | 71 ++++++++++++++++++- .../functionObjectList/functionObjectList.H | 17 ++++- 2 files changed, 84 insertions(+), 4 deletions(-) diff --git a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C index 0c44dbbfbd..61df42b667 100644 --- a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C +++ b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.C @@ -2,8 +2,8 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation - \\/ M anipulation | + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\/ M anipulation | Copyright (C) 2011-2014 OpenCFD Ltd ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -29,6 +29,28 @@ License // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // +void Foam::functionObjectList::createStateDict() const +{ + // Cannot set the state dictionary on construction since Time has not + // been fully initialised + stateDictPtr_.reset + ( + new IOdictionary + ( + IOobject + ( + "functionObjectProperties", + time_.timeName(), + "uniform"/word("functionObjects"), + time_, + IOobject::READ_IF_PRESENT, + IOobject::NO_WRITE + ) + ) + ); +} + + Foam::functionObject* Foam::functionObjectList::remove ( const word& key, @@ -70,6 +92,7 @@ Foam::functionObjectList::functionObjectList indices_(), time_(t), parentDict_(t.controlDict()), + stateDictPtr_(), execution_(execution), updated_(false) {} @@ -87,6 +110,7 @@ Foam::functionObjectList::functionObjectList indices_(), time_(t), parentDict_(parentDict), + stateDictPtr_(), execution_(execution), updated_(false) {} @@ -100,6 +124,28 @@ Foam::functionObjectList::~functionObjectList() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // +Foam::IOdictionary& Foam::functionObjectList::stateDict() +{ + if (!stateDictPtr_.valid()) + { + createStateDict(); + } + + return stateDictPtr_(); +} + + +const Foam::IOdictionary& Foam::functionObjectList::stateDict() const +{ + if (!stateDictPtr_.valid()) + { + createStateDict(); + } + + return stateDictPtr_(); +} + + void Foam::functionObjectList::clear() { PtrList::clear(); @@ -165,6 +211,22 @@ bool Foam::functionObjectList::execute(const bool forceWrite) } } + // Force writing of state dictionary after function object execution + if (time_.outputTime()) + { + label oldPrecision = IOstream::precision_; + IOstream::precision_ = 16; + + stateDictPtr_->writeObject + ( + IOstream::ASCII, + IOstream::currentVersion, + time_.writeCompression() + ); + + IOstream::precision_ = oldPrecision; + } + return ok; } @@ -234,6 +296,11 @@ bool Foam::functionObjectList::adjustTimeStep() bool Foam::functionObjectList::read() { + if (!stateDictPtr_.valid()) + { + createStateDict(); + } + bool ok = true; updated_ = execution_; diff --git a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.H b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.H index 126a1f18bb..681e135d0f 100644 --- a/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.H +++ b/src/OpenFOAM/db/functionObjects/functionObjectList/functionObjectList.H @@ -2,8 +2,8 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation - \\/ M anipulation | + \\ / A nd | Copyright (C) 2011-2014 OpenFOAM Foundation + \\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -43,6 +43,7 @@ SourceFiles #include "functionObject.H" #include "SHA1Digest.H" #include "HashTable.H" +#include "IOdictionary.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -74,6 +75,9 @@ class functionObjectList // functionObject specifications. const dictionary& parentDict_; + //- Function object properties - stores state information + mutable autoPtr stateDictPtr_; + //- Switch for the execution of the functionObjects bool execution_; @@ -83,6 +87,9 @@ class functionObjectList // Private Member Functions + //- Create state dictionary + void createStateDict() const; + //- Remove and return the function object pointer by name, // and returns the old index via the parameter. // Returns a NULL pointer (and index -1) if it didn't exist. @@ -136,6 +143,12 @@ public: //- Access to the functionObjects using PtrList::operator[]; + //- Return the state dictionary + IOdictionary& stateDict(); + + //- Return const access to the state dictionary + const IOdictionary& stateDict() const; + //- Clear the list of function objects virtual void clear();