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
This commit is contained in:
Andrew Heather
2015-10-06 11:47:58 +01:00
parent 9a9f32ead8
commit d2bec46656
2 changed files with 84 additions and 4 deletions

View File

@ -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_;