Commit d2bec466 authored by Andrew Heather's avatar Andrew Heather
Browse files

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
parent 9a9f32ea
......@@ -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<functionObject>::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_;
......
......@@ -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<IOdictionary> 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<functionObject>::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();
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment