STYLE: Renamed residuals FO -> solverInfo to reflect capabilities
This commit is contained in:
parent
216616638f
commit
94070f5ee7
@ -10,7 +10,7 @@ vtkWrite/vtkWriteUpdate.C
|
||||
|
||||
removeRegisteredObject/removeRegisteredObject.C
|
||||
|
||||
residuals/residuals.C
|
||||
solverInfo/solverInfo.C
|
||||
|
||||
runTimeControl/runTimeControl.C
|
||||
runTimeControl/runTimeCondition/runTimeCondition/runTimeCondition.C
|
||||
|
@ -3,7 +3,7 @@
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2015-2016 OpenFOAM Foundation
|
||||
\\/ M anipulation | Copyright (C) 2015-2017 OpenCFD Ltd.
|
||||
\\/ M anipulation | Copyright (C) 2015-2019 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -23,7 +23,7 @@ License
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "residuals.H"
|
||||
#include "solverInfo.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
@ -32,12 +32,12 @@ namespace Foam
|
||||
{
|
||||
namespace functionObjects
|
||||
{
|
||||
defineTypeNameAndDebug(residuals, 0);
|
||||
defineTypeNameAndDebug(solverInfo, 0);
|
||||
|
||||
addToRunTimeSelectionTable
|
||||
(
|
||||
functionObject,
|
||||
residuals,
|
||||
solverInfo,
|
||||
dictionary
|
||||
);
|
||||
}
|
||||
@ -46,7 +46,7 @@ namespace functionObjects
|
||||
|
||||
// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * //
|
||||
|
||||
void Foam::functionObjects::residuals::writeFileHeader(Ostream& os)
|
||||
void Foam::functionObjects::solverInfo::writeFileHeader(Ostream& os)
|
||||
{
|
||||
if (!fieldSet_.updateSelection())
|
||||
{
|
||||
@ -59,7 +59,7 @@ void Foam::functionObjects::residuals::writeFileHeader(Ostream& os)
|
||||
}
|
||||
else
|
||||
{
|
||||
writeHeader(os, "Residuals");
|
||||
writeHeader(os, "Solver information");
|
||||
}
|
||||
|
||||
writeCommented(os, "Time");
|
||||
@ -79,9 +79,12 @@ void Foam::functionObjects::residuals::writeFileHeader(Ostream& os)
|
||||
}
|
||||
|
||||
|
||||
void Foam::functionObjects::residuals::createField(const word& fieldName)
|
||||
void Foam::functionObjects::solverInfo::createResidualField
|
||||
(
|
||||
const word& fieldName
|
||||
)
|
||||
{
|
||||
if (!writeFields_)
|
||||
if (!writeResidualFields_)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -109,7 +112,10 @@ void Foam::functionObjects::residuals::createField(const word& fieldName)
|
||||
}
|
||||
|
||||
|
||||
void Foam::functionObjects::residuals::writeField(const word& fieldName) const
|
||||
void Foam::functionObjects::solverInfo::writeResidualField
|
||||
(
|
||||
const word& fieldName
|
||||
) const
|
||||
{
|
||||
const word residualName("initialResidual:" + fieldName);
|
||||
|
||||
@ -143,7 +149,7 @@ void Foam::functionObjects::residuals::writeField(const word& fieldName) const
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::functionObjects::residuals::residuals
|
||||
Foam::functionObjects::solverInfo::solverInfo
|
||||
(
|
||||
const word& name,
|
||||
const Time& runTime,
|
||||
@ -153,28 +159,23 @@ Foam::functionObjects::residuals::residuals
|
||||
fvMeshFunctionObject(name, runTime, dict),
|
||||
writeFile(obr_, name, typeName, dict),
|
||||
fieldSet_(mesh_),
|
||||
writeFields_(false),
|
||||
writeResidualFields_(false),
|
||||
initialised_(false)
|
||||
{
|
||||
read(dict);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::functionObjects::residuals::~residuals()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
bool Foam::functionObjects::residuals::read(const dictionary& dict)
|
||||
bool Foam::functionObjects::solverInfo::read(const dictionary& dict)
|
||||
{
|
||||
if (fvMeshFunctionObject::read(dict))
|
||||
{
|
||||
fieldSet_.read(dict);
|
||||
|
||||
writeFields_ = dict.lookupOrDefault("writeFields", false);
|
||||
writeResidualFields_ =
|
||||
dict.lookupOrDefault("writeResidualFields", false);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -183,7 +184,7 @@ bool Foam::functionObjects::residuals::read(const dictionary& dict)
|
||||
}
|
||||
|
||||
|
||||
bool Foam::functionObjects::residuals::execute()
|
||||
bool Foam::functionObjects::solverInfo::execute()
|
||||
{
|
||||
// Note: delaying initialisation until after first iteration so that
|
||||
// we can find wildcard fields
|
||||
@ -191,15 +192,15 @@ bool Foam::functionObjects::residuals::execute()
|
||||
{
|
||||
writeFileHeader(file());
|
||||
|
||||
if (writeFields_)
|
||||
if (writeResidualFields_)
|
||||
{
|
||||
for (const word& fieldName : fieldSet_.selectionNames())
|
||||
{
|
||||
initialiseField<scalar>(fieldName);
|
||||
initialiseField<vector>(fieldName);
|
||||
initialiseField<sphericalTensor>(fieldName);
|
||||
initialiseField<symmTensor>(fieldName);
|
||||
initialiseField<tensor>(fieldName);
|
||||
initialiseResidualField<scalar>(fieldName);
|
||||
initialiseResidualField<vector>(fieldName);
|
||||
initialiseResidualField<sphericalTensor>(fieldName);
|
||||
initialiseResidualField<symmTensor>(fieldName);
|
||||
initialiseResidualField<tensor>(fieldName);
|
||||
}
|
||||
}
|
||||
|
||||
@ -210,17 +211,17 @@ bool Foam::functionObjects::residuals::execute()
|
||||
}
|
||||
|
||||
|
||||
bool Foam::functionObjects::residuals::write()
|
||||
bool Foam::functionObjects::solverInfo::write()
|
||||
{
|
||||
writeTime(file());
|
||||
|
||||
for (const word& fieldName : fieldSet_.selectionNames())
|
||||
{
|
||||
writeResidual<scalar>(fieldName);
|
||||
writeResidual<vector>(fieldName);
|
||||
writeResidual<sphericalTensor>(fieldName);
|
||||
writeResidual<symmTensor>(fieldName);
|
||||
writeResidual<tensor>(fieldName);
|
||||
writeSolverInfo<scalar>(fieldName);
|
||||
writeSolverInfo<vector>(fieldName);
|
||||
writeSolverInfo<sphericalTensor>(fieldName);
|
||||
writeSolverInfo<symmTensor>(fieldName);
|
||||
writeSolverInfo<tensor>(fieldName);
|
||||
}
|
||||
|
||||
file() << endl;
|
@ -3,7 +3,7 @@
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2015-2016 OpenFOAM Foundation
|
||||
\\/ M anipulation | Copyright (C) 2015-2018 OpenCFD Ltd.
|
||||
\\/ M anipulation | Copyright (C) 2015-2019 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -22,37 +22,44 @@ License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::functionObjects::residuals
|
||||
Foam::functionObjects::solverInfo
|
||||
|
||||
Group
|
||||
grpUtilitiesFunctionObjects
|
||||
|
||||
Description
|
||||
Writes out the initial residual for specified fields.
|
||||
Writes solver information for a list of user-specified fields
|
||||
|
||||
Information written to file includes:
|
||||
- residual fields
|
||||
- solver type
|
||||
- initial residual
|
||||
- final residual
|
||||
- number of solver iterations
|
||||
- convergecnce flag
|
||||
|
||||
Usage
|
||||
Example of function object specification:
|
||||
\verbatim
|
||||
residuals
|
||||
solverInfo
|
||||
{
|
||||
type residuals;
|
||||
type solverInfo;
|
||||
libs ("libutilityFunctionObjects.so");
|
||||
...
|
||||
fields (U p);
|
||||
writeResidualFields yes;
|
||||
}
|
||||
\endverbatim
|
||||
|
||||
Where the entries comprise:
|
||||
\table
|
||||
Property | Description | Required | Default value
|
||||
type | Type name: residua ls | yes |
|
||||
type | Type name: solverInfo | yes |
|
||||
fields | List of fields to process | yes |
|
||||
writeFields | Write the residual fields | no | no
|
||||
writeResidualFields | Write the residual fields | no | no
|
||||
\endtable
|
||||
|
||||
Output data is written to the dir postProcessing/residuals/\<timeDir\>/
|
||||
For vector/tensor fields, e.g. U, where an equation is solved for each
|
||||
component, the largest residual of each component is written.
|
||||
Output data is written to the dir postProcessing/solverInfo/\<timeDir\>/
|
||||
|
||||
See also
|
||||
Foam::functionObject
|
||||
@ -61,12 +68,12 @@ See also
|
||||
Foam::functionObjects::timeControl
|
||||
|
||||
SourceFiles
|
||||
residuals.C
|
||||
solverInfo.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef functionObjects_residuals_H
|
||||
#define functionObjects_residuals_H
|
||||
#ifndef functionObjects_solverInfo_H
|
||||
#define functionObjects_solverInfo_H
|
||||
|
||||
#include "fvMeshFunctionObject.H"
|
||||
#include "writeFile.H"
|
||||
@ -80,10 +87,10 @@ namespace functionObjects
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class residuals Declaration
|
||||
Class solverInfo Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class residuals
|
||||
class solverInfo
|
||||
:
|
||||
public fvMeshFunctionObject,
|
||||
public writeFile
|
||||
@ -92,11 +99,11 @@ protected:
|
||||
|
||||
// Protected data
|
||||
|
||||
//- Fields to write residuals
|
||||
//- Fields to process
|
||||
solverFieldSelection fieldSet_;
|
||||
|
||||
//- Flag to write the residual as a vol field
|
||||
bool writeFields_;
|
||||
bool writeResidualFields_;
|
||||
|
||||
//- Initialisation flag
|
||||
bool initialised_;
|
||||
@ -108,10 +115,10 @@ protected:
|
||||
void writeFileHeader(Ostream& os);
|
||||
|
||||
//- Create and store a residual field on the mesh database
|
||||
void createField(const word& fieldName);
|
||||
void createResidualField(const word& fieldName);
|
||||
|
||||
//- Write a residual field
|
||||
void writeField(const word& fieldName) const;
|
||||
void writeResidualField(const word& fieldName) const;
|
||||
|
||||
//- Output file header information per primitive type value
|
||||
template<class Type>
|
||||
@ -119,11 +126,11 @@ protected:
|
||||
|
||||
//- Initialise a residual field
|
||||
template<class Type>
|
||||
void initialiseField(const word& fieldName);
|
||||
void initialiseResidualField(const word& fieldName);
|
||||
|
||||
//- Calculate the residual
|
||||
//- Calculate the solver information
|
||||
template<class Type>
|
||||
void writeResidual(const word& fieldName);
|
||||
void writeSolverInfo(const word& fieldName);
|
||||
|
||||
|
||||
private:
|
||||
@ -131,22 +138,22 @@ private:
|
||||
// Private member functions
|
||||
|
||||
//- No copy construct
|
||||
residuals(const residuals&) = delete;
|
||||
solverInfo(const solverInfo&) = delete;
|
||||
|
||||
//- No copy assignment
|
||||
void operator=(const residuals&) = delete;
|
||||
void operator=(const solverInfo&) = delete;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("residuals");
|
||||
TypeName("solverInfo");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from Time and dictionary
|
||||
residuals
|
||||
solverInfo
|
||||
(
|
||||
const word& name,
|
||||
const Time& runTime,
|
||||
@ -155,7 +162,7 @@ public:
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~residuals();
|
||||
virtual ~solverInfo() = default;
|
||||
|
||||
|
||||
// Member Functions
|
||||
@ -166,7 +173,7 @@ public:
|
||||
//- Execute, currently does nothing
|
||||
virtual bool execute();
|
||||
|
||||
//- Write the residuals
|
||||
//- Write the solverInfo
|
||||
virtual bool write();
|
||||
};
|
||||
|
||||
@ -179,7 +186,7 @@ public:
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
#include "residualsTemplates.C"
|
||||
#include "solverInfoTemplates.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
@ -3,7 +3,7 @@
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2015-2016 OpenFOAM Foundation
|
||||
\\/ M anipulation | Copyright (C) 2015-2018 OpenCFD Ltd.
|
||||
\\/ M anipulation | Copyright (C) 2015-2019 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -23,7 +23,7 @@ License
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "residuals.H"
|
||||
#include "solverInfo.H"
|
||||
#include "volFields.H"
|
||||
#include "ListOps.H"
|
||||
#include "zeroGradientFvPatchField.H"
|
||||
@ -31,7 +31,7 @@ License
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Type>
|
||||
void Foam::functionObjects::residuals::writeFileHeader
|
||||
void Foam::functionObjects::solverInfo::writeFileHeader
|
||||
(
|
||||
Ostream& os,
|
||||
const word& fieldName
|
||||
@ -52,7 +52,7 @@ void Foam::functionObjects::residuals::writeFileHeader
|
||||
{
|
||||
if (component(validComponents, cmpt) != -1)
|
||||
{
|
||||
const word cmptName(pTraits<Type>::componentNames[cmpt]);
|
||||
const word cmptName(pTraits<Type>::componentNames[cmpt]);
|
||||
const word fieldBase(fieldName + cmptName);
|
||||
|
||||
writeTabbed(os, fieldBase + "_initial");
|
||||
@ -67,7 +67,10 @@ void Foam::functionObjects::residuals::writeFileHeader
|
||||
|
||||
|
||||
template<class Type>
|
||||
void Foam::functionObjects::residuals::initialiseField(const word& fieldName)
|
||||
void Foam::functionObjects::solverInfo::initialiseResidualField
|
||||
(
|
||||
const word& fieldName
|
||||
)
|
||||
{
|
||||
typedef GeometricField<Type, fvPatchField, volMesh> volFieldType;
|
||||
|
||||
@ -91,7 +94,7 @@ void Foam::functionObjects::residuals::initialiseField(const word& fieldName)
|
||||
fieldName + word(pTraits<Type>::componentNames[cmpt])
|
||||
);
|
||||
|
||||
createField(resultName);
|
||||
createResidualField(resultName);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -100,7 +103,7 @@ void Foam::functionObjects::residuals::initialiseField(const word& fieldName)
|
||||
|
||||
|
||||
template<class Type>
|
||||
void Foam::functionObjects::residuals::writeResidual(const word& fieldName)
|
||||
void Foam::functionObjects::solverInfo::writeSolverInfo(const word& fieldName)
|
||||
{
|
||||
typedef GeometricField<Type, fvPatchField, volMesh> volFieldType;
|
||||
typedef typename pTraits<Type>::labelType labelType;
|
||||
@ -121,7 +124,7 @@ void Foam::functionObjects::residuals::writeResidual(const word& fieldName)
|
||||
const Type& initialResidual = sp0.initialResidual();
|
||||
const Type& finalResidual = sp0.finalResidual();
|
||||
const labelType nIterations = sp0.nIterations();
|
||||
const bool converged = sp0.converged();
|
||||
const Switch converged(sp0.converged());
|
||||
|
||||
const labelType validComponents(mesh_.validComponents<Type>());
|
||||
|
||||
@ -140,13 +143,13 @@ void Foam::functionObjects::residuals::writeResidual(const word& fieldName)
|
||||
<< token::TAB << rf
|
||||
<< token::TAB << n;
|
||||
|
||||
const word cmptName(pTraits<Type>::componentNames[cmpt]);
|
||||
const word cmptName(pTraits<Type>::componentNames[cmpt]);
|
||||
const word resultName(fieldName + cmptName);
|
||||
setResult(resultName + "_initial", ri);
|
||||
setResult(resultName + "_final", rf);
|
||||
setResult(resultName + "_iters", n);
|
||||
|
||||
writeField(resultName);
|
||||
writeResidualField(resultName);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user