From 8d12e080f69a96a06a93fb3047d41ceffb19e3a1 Mon Sep 17 00:00:00 2001
From: Andrew Heather <>
Date: Tue, 29 Jan 2019 13:53:56 +0000
Subject: [PATCH] ENH: new continuityError function object
Example usage:
continuityError1
{
type continuityError;
libs ("libfieldFunctionObjects.so");
...
writeToFile yes;
log yes;
phi phi;
}
---
src/functionObjects/field/Make/files | 2 +
.../field/continuityError/continuityError.C | 144 ++++++++++++++++
.../field/continuityError/continuityError.H | 162 ++++++++++++++++++
3 files changed, 308 insertions(+)
create mode 100644 src/functionObjects/field/continuityError/continuityError.C
create mode 100644 src/functionObjects/field/continuityError/continuityError.H
diff --git a/src/functionObjects/field/Make/files b/src/functionObjects/field/Make/files
index 1ca07b3766..18ec9b28db 100644
--- a/src/functionObjects/field/Make/files
+++ b/src/functionObjects/field/Make/files
@@ -2,6 +2,8 @@ AMIWeights/AMIWeights.C
columnAverage/columnAverage.C
+continuityError/continuityError.C
+
fieldAverage/fieldAverage.C
fieldAverage/fieldAverageItem/fieldAverageItem.C
fieldAverage/fieldAverageItem/fieldAverageItemIO.C
diff --git a/src/functionObjects/field/continuityError/continuityError.C b/src/functionObjects/field/continuityError/continuityError.C
new file mode 100644
index 0000000000..1bffa5a6c6
--- /dev/null
+++ b/src/functionObjects/field/continuityError/continuityError.C
@@ -0,0 +1,144 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2019 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 .
+
+\*---------------------------------------------------------------------------*/
+
+#include "continuityError.H"
+#include "volFields.H"
+#include "fvcDiv.H"
+#include "addToRunTimeSelectionTable.H"
+
+// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace functionObjects
+{
+ defineTypeNameAndDebug(continuityError, 0);
+ addToRunTimeSelectionTable(functionObject, continuityError, dictionary);
+}
+}
+
+
+// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
+
+void Foam::functionObjects::continuityError::writeFileHeader(Ostream& os)
+{
+ writeHeader(os, "Continuity error");
+
+ writeCommented(os, "Time");
+ writeCommented(os, "Local");
+ writeCommented(os, "Global");
+ writeCommented(os, "Cumulative");
+
+ os << endl;
+}
+
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+Foam::functionObjects::continuityError::continuityError
+(
+ const word& name,
+ const Time& runTime,
+ const dictionary& dict
+)
+:
+ fvMeshFunctionObject(name, runTime, dict),
+ writeFile(mesh_, name, typeName, dict),
+ phiName_("phi"),
+ cumulative_(getProperty("cumulative"))
+{
+ if (read(dict))
+ {
+ writeFileHeader(file());
+ }
+}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+bool Foam::functionObjects::continuityError::read(const dictionary& dict)
+{
+ if (fvMeshFunctionObject::read(dict) && writeFile::read(dict))
+ {
+ dict.readIfPresent("phi", phiName_);
+
+ return true;
+ }
+
+ return false;
+}
+
+
+bool Foam::functionObjects::continuityError::execute()
+{
+ return true;
+}
+
+
+bool Foam::functionObjects::continuityError::write()
+{
+ const auto phiPtr = mesh_.lookupObjectPtr(phiName_);
+
+ if (!phiPtr)
+ {
+ WarningInFunction
+ << "Unable to find flux field " << phiName_
+ << endl;
+
+ return false;
+ }
+
+ const volScalarField error(fvc::div(*phiPtr));
+ const scalar deltaT = mesh_.time().deltaTValue();
+
+ scalar local = deltaT*mag(error)().weightedAverage(mesh_.V()).value();
+ scalar global = deltaT*error.weightedAverage(mesh_.V()).value();
+ cumulative_ += global;
+
+ Ostream& os = file();
+
+ writeTime(os);
+
+ os << local << tab
+ << global << tab
+ << cumulative_ << endl;
+
+ Log << type() << " " << name() << " write:" << nl
+ << " local = " << local << nl
+ << " global = " << global << nl
+ << " cumulative = " << cumulative_ << nl
+ << endl;
+
+ setResult("local", local);
+ setResult("global", global);
+ setResult("cumulative", cumulative_);
+
+ setProperty("cumulative", cumulative_);
+
+ return true;
+}
+
+
+// ************************************************************************* //
diff --git a/src/functionObjects/field/continuityError/continuityError.H b/src/functionObjects/field/continuityError/continuityError.H
new file mode 100644
index 0000000000..7c64dfff5d
--- /dev/null
+++ b/src/functionObjects/field/continuityError/continuityError.H
@@ -0,0 +1,162 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2019 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::continuityError
+
+Group
+ grpFieldFunctionObjects
+
+Description
+ Calculates the continuity error for a flux field
+
+Usage
+ Example of function object specification:
+ \verbatim
+ continuityError1
+ {
+ type continuityError;
+ libs ("libfieldFunctionObjects.so");
+ ...
+ writeToFile yes;
+ log yes;
+ phi phi;
+ }
+ \endverbatim
+
+ Where the entries comprise:
+ \table
+ Property | Description | Required | Default value
+ type | type name: continuityError | yes |
+ writeToFile | write min/max data to file | no | yes
+ log | write min/max data to standard output | no | yes
+ phi | name of flux field | no | phi
+ \endtable
+
+ Output data is written to the file \/continuityError.dat
+
+See also
+ Foam::functionObjects::fvMeshFunctionObject
+ Foam::functionObjects::writeFile
+
+SourceFiles
+ continuityError.C
+ continuityErrorTemplates.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef functionObjects_continuityError_H
+#define functionObjects_continuityError_H
+
+#include "Switch.H"
+#include "fvMeshFunctionObject.H"
+#include "writeFile.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+namespace functionObjects
+{
+
+/*---------------------------------------------------------------------------*\
+ Class continuityError Declaration
+\*---------------------------------------------------------------------------*/
+
+class continuityError
+:
+ public fvMeshFunctionObject,
+ public writeFile
+{
+private:
+
+ // Private Member Functions
+
+ //- No copy construct
+ continuityError(const continuityError&) = delete;
+
+ //- No copy assignment
+ void operator=(const continuityError&) = delete;
+
+
+protected:
+
+ // Protected data
+
+ //- Name of the flux field; default = "phi
+ word phiName_;
+
+ //- Cumulative error
+ scalar cumulative_;
+
+
+ // Protected Member Functions
+
+ //- Output file header information
+ virtual void writeFileHeader(Ostream& os);
+
+
+public:
+
+ //- Runtime type information
+ TypeName("continuityError");
+
+
+ // Constructors
+
+ //- Construct from Time and dictionary
+ continuityError
+ (
+ const word& name,
+ const Time& runTime,
+ const dictionary& dict
+ );
+
+
+ //- Destructor
+ virtual ~continuityError() = default;
+
+
+ // Member Functions
+
+ //- Read the field min/max data
+ virtual bool read(const dictionary&);
+
+ //- Execute, currently does nothing
+ virtual bool execute();
+
+ //- Write the continuityError
+ virtual bool write();
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace functionObjects
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //