From b3142ffb54f37895826e9e7fb0e41e465a73fe05 Mon Sep 17 00:00:00 2001 From: Andrew Heather <> Date: Tue, 23 Mar 2021 20:28:22 +0000 Subject: [PATCH] ENH: runTimeControl - added option to trigger a fatal error on exit (#2042) - useful when used in a batch process to trap the exit signal, e.g. stop the run when the velocity magnitude exceeds a given threshold: runTimeControl { type runTimeControl; libs ("libutilityFunctionObjects.so"); nWriteStep 1; // Optional end 'action' satisfiedAction abort; // end; // setTrigger conditions { maxU { type minMax; functionObject MinMax; fields ("max(mag(U))"); value 1e6; mode maximum; } } } --- .../utilities/runTimeControl/runTimeControl.C | 11 ++++++++++- .../utilities/runTimeControl/runTimeControl.H | 7 ++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/functionObjects/utilities/runTimeControl/runTimeControl.C b/src/functionObjects/utilities/runTimeControl/runTimeControl.C index 840ed4d9683..e300301664f 100644 --- a/src/functionObjects/utilities/runTimeControl/runTimeControl.C +++ b/src/functionObjects/utilities/runTimeControl/runTimeControl.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015 OpenFOAM Foundation - Copyright (C) 2015-2020 OpenCFD Ltd. + Copyright (C) 2015-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -53,6 +53,7 @@ Foam::Enum > Foam::functionObjects::runTimeControls::runTimeControl::satisfiedActionNames { + { satisfiedAction::ABORT, "abort"}, { satisfiedAction::END, "end"}, { satisfiedAction::SET_TRIGGER, "setTrigger"}, }; @@ -251,6 +252,7 @@ bool Foam::functionObjects::runTimeControls::runTimeControl::execute() switch (satisfiedAction_) { + case satisfiedAction::ABORT: case satisfiedAction::END: { // Set to write a data dump or finalise the calculation @@ -284,6 +286,13 @@ bool Foam::functionObjects::runTimeControls::runTimeControl::execute() // Trigger any function objects time.run(); + + if (satisfiedAction_ == satisfiedAction::ABORT) + { + FatalErrorInFunction + << "Abort triggered" + << exit(FatalError); + } } break; } diff --git a/src/functionObjects/utilities/runTimeControl/runTimeControl.H b/src/functionObjects/utilities/runTimeControl/runTimeControl.H index 3b014bf7c1f..66d09222ed4 100644 --- a/src/functionObjects/utilities/runTimeControl/runTimeControl.H +++ b/src/functionObjects/utilities/runTimeControl/runTimeControl.H @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015-2016 OpenFOAM Foundation - Copyright (C) 2016-2018 OpenCFD Ltd. + Copyright (C) 2016-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -76,8 +76,9 @@ public: enum class satisfiedAction { - END, - SET_TRIGGER + ABORT, //!< "abort" - write and emit a FatalError + END, //!< "end" - write and exit cleanly + SET_TRIGGER //!< "setTrigger" - trigger another condition }; static Enum<satisfiedAction> satisfiedActionNames; -- GitLab