From d8d17a0476a6bd326d34d30602b9d794d2578511 Mon Sep 17 00:00:00 2001 From: mattijs Date: Wed, 20 Nov 2013 10:36:22 +0000 Subject: [PATCH] ENH: setTimeStep: new functionObject --- .../functionObjects/utilities/Make/files | 2 + .../setTimeStep/setTimeStepFunctionObject.C | 152 +++++++++++++++++ .../setTimeStep/setTimeStepFunctionObject.H | 159 ++++++++++++++++++ 3 files changed, 313 insertions(+) create mode 100644 src/postProcessing/functionObjects/utilities/setTimeStep/setTimeStepFunctionObject.C create mode 100644 src/postProcessing/functionObjects/utilities/setTimeStep/setTimeStepFunctionObject.H diff --git a/src/postProcessing/functionObjects/utilities/Make/files b/src/postProcessing/functionObjects/utilities/Make/files index 01b4d0c4c9..f711fc0880 100644 --- a/src/postProcessing/functionObjects/utilities/Make/files +++ b/src/postProcessing/functionObjects/utilities/Make/files @@ -36,4 +36,6 @@ yPlusLES/yPlusLESFunctionObject.C yPlusRAS/yPlusRAS.C yPlusRAS/yPlusRASFunctionObject.C +setTimeStep/setTimeStepFunctionObject.C + LIB = $(FOAM_LIBBIN)/libutilityFunctionObjects diff --git a/src/postProcessing/functionObjects/utilities/setTimeStep/setTimeStepFunctionObject.C b/src/postProcessing/functionObjects/utilities/setTimeStep/setTimeStepFunctionObject.C new file mode 100644 index 0000000000..a8d540771b --- /dev/null +++ b/src/postProcessing/functionObjects/utilities/setTimeStep/setTimeStepFunctionObject.C @@ -0,0 +1,152 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see . + +\*---------------------------------------------------------------------------*/ + +#include "setTimeStepFunctionObject.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + defineTypeNameAndDebug(setTimeStepFunctionObject, 0); + + addToRunTimeSelectionTable + ( + functionObject, + setTimeStepFunctionObject, + dictionary + ); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::setTimeStepFunctionObject::setTimeStepFunctionObject +( + const word& name, + const Time& runTime, + const dictionary& dict +) +: + functionObject(name), + time_(runTime), + enabled_(true) +{ + read(dict); +} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void Foam::setTimeStepFunctionObject::on() +{ + enabled_ = true; +} + + +void Foam::setTimeStepFunctionObject::off() +{ + enabled_ = false; +} + + +bool Foam::setTimeStepFunctionObject::start() +{ + return true; +} + + +bool Foam::setTimeStepFunctionObject::execute(const bool forceWrite) +{ + return true; +} + + +bool Foam::setTimeStepFunctionObject::end() +{ + return true; +} + + +bool Foam::setTimeStepFunctionObject::timeSet() +{ + return true; +} + + +bool Foam::setTimeStepFunctionObject::adjustTimeStep() +{ + if (enabled()) + { + // Wanted timestep + scalar newDeltaT = timeStepPtr_().value(time_.timeOutputValue()); + + const_cast(time()).setDeltaT(newDeltaT, false); + + return true; + } + else + { + return false; + } +} + + +bool Foam::setTimeStepFunctionObject::read(const dictionary& dict) +{ + enabled_ = dict.lookupOrDefault("enabled", true); + + if (enabled_) + { + timeStepPtr_ = DataEntry::New("deltaT", dict); + + // Check that time has adjustTimeStep + const dictionary& controlDict = time_.controlDict(); + + Switch adjust; + if + ( + !controlDict.readIfPresent("adjustTimeStep", adjust) + || !adjust + ) + { + FatalIOErrorIn("setTimeStep::read(const dictionary&)", dict) + << "Need to have 'adjustTimeStep' true to enable external" + << " timestep control" << exit(FatalIOError); + } + } + return true; +} + + +void Foam::setTimeStepFunctionObject::updateMesh(const mapPolyMesh& mpm) +{} + + +void Foam::setTimeStepFunctionObject::movePoints(const polyMesh& mesh) +{} + + +// ************************************************************************* // diff --git a/src/postProcessing/functionObjects/utilities/setTimeStep/setTimeStepFunctionObject.H b/src/postProcessing/functionObjects/utilities/setTimeStep/setTimeStepFunctionObject.H new file mode 100644 index 0000000000..3f03f3ddcc --- /dev/null +++ b/src/postProcessing/functionObjects/utilities/setTimeStep/setTimeStepFunctionObject.H @@ -0,0 +1,159 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2013 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see . + +Class + Foam::setTimeStepFunctionObject + +Group + grpUtilitiesFunctionObjects + +Description + Overrides the timeStep. Can only be used with + solvers with adjustTimeStep control (e.g. pimpleFoam). Makes no attempt + to cooperate with other timeStep 'controllers' (maxCo, other + functionObjects). Supports 'enabled' flag but none of othe other ones + 'timeStart', 'timeEnd', 'outputControl' etc. + +SourceFiles + setTimeStepFunctionObject.C + +\*---------------------------------------------------------------------------*/ + +#ifndef setTimeStepFunctionObject_H +#define setTimeStepFunctionObject_H + +#include "functionObject.H" +#include "dictionary.H" +#include "DataEntry.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class setTimeStepFunctionObject Declaration +\*---------------------------------------------------------------------------*/ + +class setTimeStepFunctionObject +: + public functionObject +{ + // Private data + + //- Reference to the time database + const Time& time_; + + + // Optional user inputs + + //- Switch for the execution - defaults to 'yes/on' + bool enabled_; + + //- Time step + autoPtr > timeStepPtr_; + + + //- Disallow default bitwise copy construct + setTimeStepFunctionObject(const setTimeStepFunctionObject&); + + //- Disallow default bitwise assignment + void operator=(const setTimeStepFunctionObject&); + + +public: + //- Runtime type information + TypeName("setTimeStep"); + + // Constructors + + //- Construct from components + setTimeStepFunctionObject + ( + const word& name, + const Time& runTime, + const dictionary& dict + ); + + + // Member Functions + + // Access + + //- Return time database + virtual const Time& time() const + { + return time_; + } + + //- Return the enabled flag + virtual bool enabled() const + { + return enabled_; + } + + + // Function object control + + //- Switch the function object on + virtual void on(); + + //- Switch the function object off + virtual void off(); + + + //- Called at the start of the time-loop + virtual bool start(); + + //- Called at each ++ or += of the time-loop + virtual bool execute(const bool forceWrite); + + //- Called when Time::run() determines that the time-loop exits + virtual bool end(); + + //- Called when time was set at the end of the Time::operator++ + virtual bool timeSet(); + + //- Called at the end of Time::adjustDeltaT() if adjustTime is true + virtual bool adjustTimeStep(); + + //- Read and set the function object if its data have changed + virtual bool read(const dictionary&); + + //- Update for changes of mesh + virtual void updateMesh(const mapPolyMesh& mpm); + + //- Update for changes of mesh + virtual void movePoints(const polyMesh& mesh); + +}; + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* //