diff --git a/src/functionObjects/utilities/Make/files b/src/functionObjects/utilities/Make/files index 4390ef6bf5..8a2d7f9e4b 100644 --- a/src/functionObjects/utilities/Make/files +++ b/src/functionObjects/utilities/Make/files @@ -17,6 +17,7 @@ runTimeControl/runTimeCondition/runTimeCondition/runTimeCondition.C runTimeControl/runTimeCondition/runTimeCondition/runTimeConditionNew.C runTimeControl/runTimeCondition/equationMaxIterCondition/equationMaxIterCondition.C runTimeControl/runTimeCondition/equationInitialResidualCondition/equationInitialResidualCondition.C +runTimeControl/runTimeCondition/maxDurationCondition/maxDurationCondition.C runTimeControl/runTimeCondition/minMaxCondition/minMaxCondition.C runTimeControl/runTimeCondition/averageCondition/averageCondition.C runTimeControl/runTimeCondition/minTimeStepCondition/minTimeStepCondition.C diff --git a/src/functionObjects/utilities/runTimeControl/runTimeCondition/maxDurationCondition/maxDurationCondition.C b/src/functionObjects/utilities/runTimeControl/runTimeCondition/maxDurationCondition/maxDurationCondition.C new file mode 100644 index 0000000000..86f955cb74 --- /dev/null +++ b/src/functionObjects/utilities/runTimeControl/runTimeCondition/maxDurationCondition/maxDurationCondition.C @@ -0,0 +1,110 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 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 "maxDurationCondition.H" +#include "addToRunTimeSelectionTable.H" +#include "Time.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace functionObjects +{ +namespace runTimeControls +{ + defineTypeNameAndDebug(maxDurationCondition, 0); + addToRunTimeSelectionTable + ( + runTimeCondition, + maxDurationCondition, + dictionary + ); +} +} +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::functionObjects::runTimeControls::maxDurationCondition:: +maxDurationCondition +( + const word& name, + const objectRegistry& obr, + const dictionary& dict, + stateFunctionObject& state +) +: + runTimeCondition(name, obr, dict, state), + duration_(dict.get("duration")), + startTime_(-1), + initialised_(false), + resetOnRestart_(dict.lookupOrDefault("resetOnRestart", false)) +{ + if + ( + !resetOnRestart_ + && conditionDict().readIfPresent("startTime", startTime_)) + { + initialised_ = true; + } + + duration_ = obr_.time().userTimeToTime(duration_); +} + + +// * * * * * * * * * * * * * * Public Member Functions * * * * * * * * * * * // + +bool Foam::functionObjects::runTimeControls::maxDurationCondition::apply() +{ + if (!active_) + { + return true; + } + + if (!initialised_) + { + startTime_ = obr_.time().value(); + initialised_ = true; + } + + scalar delta = obr_.time().value() - startTime_; + delta = obr_.time().timeToUserTime(delta); + + return delta >= duration_; +} + + +void Foam::functionObjects::runTimeControls::maxDurationCondition::write() +{ + if (initialised_) + { + conditionDict().set("startTime", startTime_); + } +} + + +// ************************************************************************* // diff --git a/src/functionObjects/utilities/runTimeControl/runTimeCondition/maxDurationCondition/maxDurationCondition.H b/src/functionObjects/utilities/runTimeControl/runTimeCondition/maxDurationCondition/maxDurationCondition.H new file mode 100644 index 0000000000..e508e9304d --- /dev/null +++ b/src/functionObjects/utilities/runTimeControl/runTimeCondition/maxDurationCondition/maxDurationCondition.H @@ -0,0 +1,113 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2018 OpenCFD Ltd. + \\/ 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::functionObjects::runTimeControls::maxDurationCondition + +Description + Activated after a user-specified duration + +SourceFiles + maxDurationCondition.H + maxDurationCondition.C + +\*---------------------------------------------------------------------------*/ + +#ifndef functionObjects_runTimeConditions_maxDurationCondition_H +#define functionObjects_runTimeConditions_maxDurationCondition_H + +#include "runTimeCondition.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace functionObjects +{ +namespace runTimeControls +{ + +/*---------------------------------------------------------------------------*\ + Class maxDurationCondition Declaration +\*---------------------------------------------------------------------------*/ + +class maxDurationCondition +: + public runTimeCondition +{ +protected: + + // Protected data + + //- Duration + scalar duration_; + + //- Time when the condition is activated + scalar startTime_; + + //- Initialisation flag + bool initialised_; + + //- Reset on restart (ignores any state information) + Switch resetOnRestart_; + + +public: + + //- Runtime type information + TypeName("maxDuration"); + + //- Constructor + maxDurationCondition + ( + const word& name, + const objectRegistry& obr, + const dictionary& dict, + stateFunctionObject& state + ); + + //- Destructor + virtual ~maxDurationCondition() = default; + + + // Public Member Functions + + //- Apply the condition + virtual bool apply(); + + //- Write + virtual void write(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace runTimeControls +} // End namespace functionObjects +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* //