diff --git a/etc/caseDicts/postProcessing/control/stopAtFile b/etc/caseDicts/postProcessing/control/stopAtFile
new file mode 100644
index 0000000000..fcd51670f2
--- /dev/null
+++ b/etc/caseDicts/postProcessing/control/stopAtFile
@@ -0,0 +1,18 @@
+/*--------------------------------*- C++ -*----------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Version: dev
+ \\/ M anipulation |
+-------------------------------------------------------------------------------
+Description
+ Stops the run when the file "stop" is created in the case directory.
+
+\*---------------------------------------------------------------------------*/
+
+type stopAtFile;
+libs ("libutilityFunctionObjects.so");
+
+file "$FOAM_CASE/stop";
+
+// ************************************************************************* //
diff --git a/src/functionObjects/utilities/Make/files b/src/functionObjects/utilities/Make/files
index 94c6bab14f..dba261b06e 100644
--- a/src/functionObjects/utilities/Make/files
+++ b/src/functionObjects/utilities/Make/files
@@ -3,7 +3,8 @@ residuals/residuals.C
timeActivatedFileUpdate/timeActivatedFileUpdate.C
setTimeStep/setTimeStepFunctionObject.C
systemCall/systemCall.C
-abort/abort.C
+stopAt/stopAt.C
+stopAt/stopAtFile/stopAtFile.C
removeRegisteredObject/removeRegisteredObject.C
writeDictionary/writeDictionary.C
writeObjects/writeObjects.C
diff --git a/src/functionObjects/utilities/abort/abort.C b/src/functionObjects/utilities/abort/abort.C
deleted file mode 100644
index 8e14be2a51..0000000000
--- a/src/functionObjects/utilities/abort/abort.C
+++ /dev/null
@@ -1,199 +0,0 @@
-/*---------------------------------------------------------------------------*\
- ========= |
- \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
- \\ / O peration | Website: https://openfoam.org
- \\ / A nd | Copyright (C) 2011-2018 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 "abort.H"
-#include "dictionary.H"
-#include "error.H"
-#include "Time.H"
-#include "OSspecific.H"
-#include "PstreamReduceOps.H"
-#include "addToRunTimeSelectionTable.H"
-
-// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
-
-namespace Foam
-{
-namespace functionObjects
-{
- defineTypeNameAndDebug(abort, 0);
-
- addToRunTimeSelectionTable
- (
- functionObject,
- abort,
- dictionary
- );
-}
-}
-
-template<>
-const char* Foam::NamedEnum
-<
- Foam::functionObjects::abort::actionType,
- 3
->::names[] =
-{
- "noWriteNow",
- "writeNow",
- "nextWrite"
-};
-
-const Foam::NamedEnum
-<
- Foam::functionObjects::abort::actionType,
- 3
-> Foam::functionObjects::abort::actionTypeNames_;
-
-
-// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
-
-void Foam::functionObjects::abort::removeFile() const
-{
- bool hasAbort = isFile(abortFile_);
- reduce(hasAbort, orOp());
-
- if (hasAbort && Pstream::master())
- {
- // Cleanup ABORT file (on master only)
- rm(abortFile_);
- }
-}
-
-
-// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
-
-Foam::functionObjects::abort::abort
-(
- const word& name,
- const Time& runTime,
- const dictionary& dict
-)
-:
- functionObject(name),
- time_(runTime),
- abortFile_("$FOAM_CASE/" + name),
- action_(actionType::nextWrite)
-{
- abortFile_.expand();
- read(dict);
-
- // Remove any old files from previous runs
- removeFile();
-}
-
-
-// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
-
-Foam::functionObjects::abort::~abort()
-{}
-
-
-// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
-
-bool Foam::functionObjects::abort::read(const dictionary& dict)
-{
- if (dict.found("action"))
- {
- action_ = actionTypeNames_.read(dict.lookup("action"));
- }
- else
- {
- action_ = actionType::nextWrite;
- }
-
- if (dict.readIfPresent("file", abortFile_))
- {
- abortFile_.expand();
- }
-
- return true;
-}
-
-
-bool Foam::functionObjects::abort::execute()
-{
- bool hasAbort = isFile(abortFile_);
- reduce(hasAbort, orOp());
-
- if (hasAbort)
- {
- switch (action_)
- {
- case actionType::noWriteNow :
- {
- if (time_.stopAt(Time::stopAtControl::noWriteNow))
- {
- Info<< "USER REQUESTED ABORT (timeIndex="
- << time_.timeIndex()
- << "): stop without writing data"
- << endl;
- }
- break;
- }
-
- case actionType::writeNow :
- {
- if (time_.stopAt(Time::stopAtControl::writeNow))
- {
- Info<< "USER REQUESTED ABORT (timeIndex="
- << time_.timeIndex()
- << "): stop+write data"
- << endl;
- }
- break;
- }
-
- case actionType::nextWrite :
- {
- if (time_.stopAt(Time::stopAtControl::nextWrite))
- {
- Info<< "USER REQUESTED ABORT (timeIndex="
- << time_.timeIndex()
- << "): stop after next data write"
- << endl;
- }
- break;
- }
- }
- }
-
- return true;
-}
-
-
-bool Foam::functionObjects::abort::write()
-{
- return true;
-}
-
-
-bool Foam::functionObjects::abort::end()
-{
- removeFile();
- return true;
-}
-
-
-// ************************************************************************* //
diff --git a/src/functionObjects/utilities/stopAt/stopAt.C b/src/functionObjects/utilities/stopAt/stopAt.C
new file mode 100644
index 0000000000..ea38444657
--- /dev/null
+++ b/src/functionObjects/utilities/stopAt/stopAt.C
@@ -0,0 +1,168 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Copyright (C) 2020 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 "stopAt.H"
+#include "Time.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace functionObjects
+{
+ defineTypeNameAndDebug(stopAt, 0);
+}
+}
+
+template<>
+const char* Foam::NamedEnum
+<
+ Foam::functionObjects::stopAt::actionType,
+ 3
+>::names[] =
+{
+ "noWriteNow",
+ "writeNow",
+ "nextWrite"
+};
+
+const Foam::NamedEnum
+<
+ Foam::functionObjects::stopAt::actionType,
+ 3
+> Foam::functionObjects::stopAt::actionTypeNames_;
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::functionObjects::stopAt::stopAt
+(
+ const word& name,
+ const Time& runTime,
+ const dictionary& dict
+)
+:
+ functionObject(name),
+ time_(runTime),
+ action_(actionType::nextWrite),
+ stopped_(false)
+{
+ read(dict);
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+Foam::functionObjects::stopAt::~stopAt()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+bool Foam::functionObjects::stopAt::read(const dictionary& dict)
+{
+ if (dict.found("action"))
+ {
+ action_ = actionTypeNames_.read(dict.lookup("action"));
+ }
+ else
+ {
+ action_ = actionType::nextWrite;
+ }
+
+ return true;
+}
+
+
+bool Foam::functionObjects::stopAt::execute()
+{
+ if (!stopped_)
+ {
+ bool stopCondition = condition();
+ reduce(stopCondition, orOp());
+
+ if (stopCondition)
+ {
+ switch (action_)
+ {
+ case actionType::noWriteNow :
+ {
+ if (time_.stopAt(Time::stopAtControl::noWriteNow))
+ {
+ Info<< type() << "(timeIndex="
+ << time_.timeIndex()
+ << "): stopping now without writing"
+ << endl;
+ }
+ break;
+ }
+
+ case actionType::writeNow :
+ {
+ if (time_.stopAt(Time::stopAtControl::writeNow))
+ {
+ Info<< type() << "(timeIndex="
+ << time_.timeIndex()
+ << "): stopping now after writing"
+ << endl;
+ }
+ break;
+ }
+
+ case actionType::nextWrite :
+ {
+ if (time_.stopAt(Time::stopAtControl::nextWrite))
+ {
+ Info<< type() << "(timeIndex="
+ << time_.timeIndex()
+ << "): stopping after next write"
+ << endl;
+ }
+ break;
+ }
+ }
+
+ stopped_ = true;
+ }
+ }
+
+ return true;
+}
+
+
+bool Foam::functionObjects::stopAt::write()
+{
+ return true;
+}
+
+
+bool Foam::functionObjects::stopAt::end()
+{
+ return true;
+}
+
+
+// ************************************************************************* //
diff --git a/src/functionObjects/utilities/stopAt/stopAt.H b/src/functionObjects/utilities/stopAt/stopAt.H
new file mode 100644
index 0000000000..00ec2b2c68
--- /dev/null
+++ b/src/functionObjects/utilities/stopAt/stopAt.H
@@ -0,0 +1,150 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Copyright (C) 2020 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::functionObjects::stopAt
+
+Description
+ Abstract base class for stop conditions.
+
+ Currently the following actions are supported:
+ - noWriteNow
+ - writeNow
+ - nextWrite
+
+SourceFiles
+ stopAt.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef functionObjects_stopAt_H
+#define functionObjects_stopAt_H
+
+#include "functionObject.H"
+#include "NamedEnum.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace functionObjects
+{
+
+/*---------------------------------------------------------------------------*\
+ Class stopAt Declaration
+\*---------------------------------------------------------------------------*/
+
+class stopAt
+:
+ public functionObject
+{
+public:
+
+ //- Enumeration defining the type of action
+ enum class actionType
+ {
+ noWriteNow, //!< stop immediately without writing data
+ writeNow, //!< write data and stop immediately
+ nextWrite //!< stop the next time data are written
+ };
+
+
+protected:
+
+ // Protected data
+
+ //- Reference to the Time
+ const Time& time_;
+
+ //- Action type names
+ static const NamedEnum actionTypeNames_;
+
+ //- The type of action
+ actionType action_;
+
+ //- Set true when the stop action has executed
+ bool stopped_;
+
+
+ // Protected Member Functions
+
+ //- Return true when the stop condition is achieved
+ virtual bool condition() const = 0;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("stopAt");
+
+
+ // Constructors
+
+ //- Construct from Time and dictionary
+ stopAt
+ (
+ const word& name,
+ const Time& runTime,
+ const dictionary&
+ );
+
+ //- Disallow default bitwise copy construction
+ stopAt(const stopAt&) = delete;
+
+
+ //- Destructor
+ virtual ~stopAt();
+
+
+ // Member Functions
+
+ //- Read the dictionary settings
+ virtual bool read(const dictionary&);
+
+ //- Execute, check existence of stopAt file and take action
+ virtual bool execute();
+
+ //- Execute, check existence of stopAt file and take action
+ virtual bool write();
+
+ //- Execute at the final time-loop, used for cleanup
+ virtual bool end();
+
+
+ // Member Operators
+
+ //- Disallow default bitwise assignment
+ void operator=(const stopAt&) = delete;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace functionObjects
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/functionObjects/utilities/stopAt/stopAtFile/stopAtFile.C b/src/functionObjects/utilities/stopAt/stopAtFile/stopAtFile.C
new file mode 100644
index 0000000000..d37f0edb64
--- /dev/null
+++ b/src/functionObjects/utilities/stopAt/stopAtFile/stopAtFile.C
@@ -0,0 +1,119 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration | Website: https://openfoam.org
+ \\ / A nd | Copyright (C) 2011-2020 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 "stopAtFile.H"
+#include "dictionary.H"
+#include "OSspecific.H"
+#include "PstreamReduceOps.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace functionObjects
+{
+ defineTypeNameAndDebug(stopAtFile, 0);
+
+ addToRunTimeSelectionTable
+ (
+ functionObject,
+ stopAtFile,
+ dictionary
+ );
+}
+}
+
+
+// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
+
+void Foam::functionObjects::stopAtFile::removeFile() const
+{
+ bool fileExists = isFile(stopAtFileFile_);
+ reduce(fileExists, orOp());
+
+ if (fileExists && Pstream::master())
+ {
+ // Cleanup ABORT file (on master only)
+ rm(stopAtFileFile_);
+ }
+}
+
+
+bool Foam::functionObjects::stopAtFile::condition() const
+{
+ bool fileExists = isFile(stopAtFileFile_);
+ reduce(fileExists, orOp());
+ return fileExists;
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::functionObjects::stopAtFile::stopAtFile
+(
+ const word& name,
+ const Time& runTime,
+ const dictionary& dict
+)
+:
+ stopAt(name, runTime, dict),
+ stopAtFileFile_("$FOAM_CASE/" + name)
+{
+ stopAtFileFile_.expand();
+ read(dict);
+
+ // Remove any old files from previous runs
+ removeFile();
+}
+
+
+// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
+
+Foam::functionObjects::stopAtFile::~stopAtFile()
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+bool Foam::functionObjects::stopAtFile::read(const dictionary& dict)
+{
+ if (dict.readIfPresent("file", stopAtFileFile_))
+ {
+ stopAtFileFile_.expand();
+ }
+
+ return true;
+}
+
+
+bool Foam::functionObjects::stopAtFile::end()
+{
+ removeFile();
+ return true;
+}
+
+
+// ************************************************************************* //
diff --git a/src/functionObjects/utilities/abort/abort.H b/src/functionObjects/utilities/stopAt/stopAtFile/stopAtFile.H
similarity index 68%
rename from src/functionObjects/utilities/abort/abort.H
rename to src/functionObjects/utilities/stopAt/stopAtFile/stopAtFile.H
index e9cec3ba07..303b9c018b 100644
--- a/src/functionObjects/utilities/abort/abort.H
+++ b/src/functionObjects/utilities/stopAt/stopAtFile/stopAtFile.H
@@ -22,11 +22,10 @@ License
along with OpenFOAM. If not, see .
Class
- Foam::functionObjects::abort
+ Foam::functionObjects::stopAtFile
Description
- Watches for presence of the named file in the $FOAM_CASE directory
- and aborts the calculation if it is present.
+ Stops the run when the specified file is created in the case directory.
The default name of the trigger file is \c $FOAM_CASE/ where \c
is the name of the functionObject entry and the default action is \c
@@ -39,19 +38,19 @@ Description
Examples of function object specification:
\verbatim
- abort
+ stop
{
- type abort;
+ type stopAtFile;
libs ("libutilityFunctionObjects.so");
}
\endverbatim
- will stop the run at the next write after the file "abort" is created in the
+ will stop the run at the next write after the file "stop" is created in the
case directory.
\verbatim
- abort
+ stop
{
- type abort;
+ type stopAtFile;
libs ("libutilityFunctionObjects.so");
file "$FOAM_CASE/stop";
action writeNow;
@@ -63,21 +62,20 @@ Description
Usage
\table
Property | Description | Required | Default value
- type | type name: abort | yes |
+ type | type name: stopAtFile | yes |
file | Trigger file path name | no | $FOAM_CASE/
action | Action executed | no | nextWrite
\endtable
SourceFiles
- abort.C
+ stopAtFile.C
\*---------------------------------------------------------------------------*/
-#ifndef functionObjects_abort_H
-#define functionObjects_abort_H
+#ifndef functionObjects_stopAtFile_H
+#define functionObjects_stopAtFile_H
-#include "functionObject.H"
-#include "NamedEnum.H"
+#include "stopAt.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@@ -87,58 +85,38 @@ namespace functionObjects
{
/*---------------------------------------------------------------------------*\
- Class abort Declaration
+ Class stopAtFile Declaration
\*---------------------------------------------------------------------------*/
-class abort
+class stopAtFile
:
- public functionObject
+ public stopAt
{
-public:
-
- // Public data
-
- //- Enumeration defining the type of action
- enum class actionType
- {
- noWriteNow, //!< stop immediately without writing data
- writeNow, //!< write data and stop immediately
- nextWrite //!< stop the next time data are written
- };
-
-private:
-
// Private Data
- //- Reference to the Time
- const Time& time_;
-
- //- The fully-qualified name of the abort file
- fileName abortFile_;
-
- //- Action type names
- static const NamedEnum actionTypeNames_;
-
- //- The type of action
- actionType action_;
+ //- The fully-qualified name of the stopAtFile file
+ fileName stopAtFileFile_;
// Private Member Functions
- //- Remove abort file.
+ //- Remove stopAtFile file.
void removeFile() const;
+ //- Return true when the stop condition is achieved
+ virtual bool condition() const;
+
public:
//- Runtime type information
- TypeName("abort");
+ TypeName("stopAtFile");
// Constructors
//- Construct from Time and dictionary
- abort
+ stopAtFile
(
const word& name,
const Time& runTime,
@@ -146,11 +124,11 @@ public:
);
//- Disallow default bitwise copy construction
- abort(const abort&) = delete;
+ stopAtFile(const stopAtFile&) = delete;
//- Destructor
- virtual ~abort();
+ virtual ~stopAtFile();
// Member Functions
@@ -158,12 +136,6 @@ public:
//- Read the dictionary settings
virtual bool read(const dictionary&);
- //- Execute, check existence of abort file and take action
- virtual bool execute();
-
- //- Execute, check existence of abort file and take action
- virtual bool write();
-
//- Execute at the final time-loop, used for cleanup
virtual bool end();
@@ -171,7 +143,7 @@ public:
// Member Operators
//- Disallow default bitwise assignment
- void operator=(const abort&) = delete;
+ void operator=(const stopAtFile&) = delete;
};