ENH: function objects - apply scoped name when registering objects

This commit is contained in:
Andrew Heather 2021-11-19 11:30:08 +00:00 committed by Mark Olesen
parent 9194cd5203
commit c233961d45
23 changed files with 116 additions and 69 deletions

View File

@ -48,15 +48,25 @@ Foam::word Foam::functionObject::outputPrefix("postProcessing");
Foam::word Foam::functionObject::scopedName(const word& name) const
{
return name_ + ":" + name;
if (scopedNames_)
{
return IOobject::scopedName(name_, name);
}
return name_;
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::functionObject::functionObject(const word& name)
Foam::functionObject::functionObject
(
const word& name,
const bool scopedNames
)
:
name_(name),
scopedNames_(scopedNames),
log(postProcess)
{}
@ -128,16 +138,23 @@ Foam::autoPtr<Foam::functionObject> Foam::functionObject::New
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
const Foam::word& Foam::functionObject::name() const
const Foam::word& Foam::functionObject::name() const noexcept
{
return name_;
}
bool Foam::functionObject::scopedNames() const noexcept
{
return scopedNames_;
}
bool Foam::functionObject::read(const dictionary& dict)
{
if (!postProcess)
{
scopedNames_ = dict.getOrDefault("scopedNames", true);
log = dict.getOrDefault("log", true);
}

View File

@ -6,7 +6,7 @@
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2016 OpenFOAM Foundation
Copyright (C) 2017-2020 OpenCFD Ltd.
Copyright (C) 2017-2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -221,6 +221,9 @@ class functionObject
//- Name
const word name_;
//- Flag to indicate that names should be scoped
bool scopedNames_;
protected:
@ -266,7 +269,11 @@ public:
// Constructors
//- Construct from components
functionObject(const word& name);
explicit functionObject
(
const word& name,
const bool scopedNames = true
);
//- Return clone
autoPtr<functionObject> clone() const
@ -294,7 +301,10 @@ public:
// Member Functions
//- Return the name of this functionObject
const word& name() const;
const word& name() const noexcept;
//- Return the scoped names flag
bool scopedNames() const noexcept;
//- Read and set the function object if its data have changed
virtual bool read(const dictionary& dict);
@ -347,7 +357,7 @@ class functionObject::unavailableFunctionObject
protected:
//- Construct with name
unavailableFunctionObject(const word& name);
explicit unavailableFunctionObject(const word& name);
//- Report it is unavailable, emitting a FatalError for try/catch
//- in the caller

View File

@ -68,7 +68,7 @@ Foam::functionObjects::DESModelRegions::DESModelRegions
:
fvMeshFunctionObject(name, runTime, dict),
writeFile(obr_, name, typeName, dict),
resultName_(name)
resultName_(scopedName("regions"))
{
read(dict);

View File

@ -74,20 +74,17 @@ bool Foam::functionObjects::XiReactionRate::execute()
bool Foam::functionObjects::XiReactionRate::write()
{
const volScalarField& b =
mesh_.lookupObject<volScalarField>("b");
const volScalarField& b = mesh_.lookupObject<volScalarField>("b");
const volScalarField& Su =
mesh_.lookupObject<volScalarField>("Su");
const volScalarField& Su = mesh_.lookupObject<volScalarField>("Su");
const volScalarField& Xi =
mesh_.lookupObject<volScalarField>("Xi");
const volScalarField& Xi = mesh_.lookupObject<volScalarField>("Xi");
const volScalarField St
(
IOobject
(
"St",
scopedName("St"),
time_.timeName(),
mesh_
),
@ -103,7 +100,7 @@ bool Foam::functionObjects::XiReactionRate::write()
(
IOobject
(
"wdot",
scopedName("wdot"),
time_.timeName(),
mesh_
),

View File

@ -5,7 +5,7 @@
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2018-2020 OpenCFD Ltd.
Copyright (C) 2018-2021 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
@ -113,7 +113,7 @@ const Foam::word Foam::functionObjects::columnAverage::averageName
const word& fieldName
) const
{
return name() + ":columnAverage(" + fieldName + ")";
return scopedName("columnAverage(" + fieldName + ")");
}

View File

@ -310,6 +310,12 @@ bool Foam::functionObjects::fieldAverage::read(const dictionary& dict)
dict.readIfPresent("periodicRestart", periodicRestart_);
dict.readEntry("fields", faItems_);
for (auto& item : faItems_)
{
item.setMeanFieldName(scopedName(item.meanFieldName()));
item.setPrime2MeanFieldName(scopedName(item.prime2MeanFieldName()));
}
const scalar currentTime = obr().time().value();
if (periodicRestart_)

View File

@ -236,6 +236,9 @@ public:
//- Return const access to the mean field name
inline const word& meanFieldName() const;
//- Set the mean field name
inline void setMeanFieldName(const word& name);
//- Return const access to the prime-squared mean flag
inline bool prime2Mean() const;
@ -245,6 +248,9 @@ public:
//- Return const access to the prime-squared mean field name
inline const word& prime2MeanFieldName() const;
//- Set the prime-squared mean field name
inline void setPrime2MeanFieldName(const word& name);
//- Return averaging base type name
inline const word& base() const;

View File

@ -64,6 +64,15 @@ Foam::functionObjects::fieldAverageItem::meanFieldName() const
}
void Foam::functionObjects::fieldAverageItem::setMeanFieldName
(
const word& name
)
{
meanFieldName_ = name;
}
bool Foam::functionObjects::fieldAverageItem::prime2Mean() const
{
return prime2Mean_;
@ -76,12 +85,22 @@ bool& Foam::functionObjects::fieldAverageItem::prime2Mean()
}
const Foam::word& Foam::functionObjects::fieldAverageItem::prime2MeanFieldName() const
const Foam::word&
Foam::functionObjects::fieldAverageItem::prime2MeanFieldName() const
{
return prime2MeanFieldName_;
}
void Foam::functionObjects::fieldAverageItem::setPrime2MeanFieldName
(
const word& name
)
{
prime2MeanFieldName_ = name;
}
const Foam::word& Foam::functionObjects::fieldAverageItem::base() const
{
return baseTypeNames_[base_];

View File

@ -63,6 +63,8 @@ void Foam::functionObjects::fieldExpression::setResultName
{
resultName_ = typeName;
}
resultName_ = scopedName(resultName_);
}
}

View File

@ -55,8 +55,7 @@ void Foam::functionObjects::fieldExtents::calcFieldExtents
{
typedef GeometricField<Type, fvPatchField, volMesh> VolFieldType;
const VolFieldType* fieldPtr =
obr_.findObject<VolFieldType>(fieldName);
const VolFieldType* fieldPtr = obr_.findObject<VolFieldType>(fieldName);
if (!fieldPtr)
{

View File

@ -71,7 +71,7 @@ Foam::functionObjects::heatTransferCoeff::heatTransferCoeff
{
read(dict);
setResultName(typeName, name + ":htc:" + htcModelPtr_->type());
setResultName(typeName, "htc:" + htcModelPtr_->type());
auto* heatTransferCoeffPtr =
new volScalarField

View File

@ -120,7 +120,7 @@ bool Foam::functionObjects::particleDistribution::write()
(
IOobject
(
name() & "CloudRegistry",
scopedName("CloudRegistry"),
mesh_.time().timeName(),
cloud::prefix,
mesh_.time(),

View File

@ -236,7 +236,7 @@ Foam::tmp<Foam::volScalarField> Foam::functionObjects::pressure::calcPressure
(
IOobject
(
name() + ":p",
scopedName("p"),
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ

View File

@ -56,7 +56,7 @@ bool Foam::functionObjects::randomise::calcTemplate()
{
const auto& field = *fieldPtr;
resultName_ = fieldName_ & "Random";
resultName_ = scopedName(fieldName_ & "Random");
auto trfield = tmp<VolFieldType>::New(field);
auto& rfield = trfield.ref();

View File

@ -95,7 +95,7 @@ void Foam::functionObjects::regionSizeDistribution::writeAlphaFields
(
IOobject
(
alphaName_ + "_liquidCore",
scopedName(alphaName_ + "_liquidCore"),
obr_.time().timeName(),
obr_,
IOobject::NO_READ
@ -108,7 +108,7 @@ void Foam::functionObjects::regionSizeDistribution::writeAlphaFields
(
IOobject
(
alphaName_ + "_background",
scopedName(alphaName_ + "_background"),
obr_.time().timeName(),
obr_,
IOobject::NO_READ

View File

@ -114,7 +114,7 @@ Foam::functionObjects::wallHeatFlux::wallHeatFlux
(
IOobject
(
type(),
scopedName(typeName),
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
@ -194,7 +194,7 @@ bool Foam::functionObjects::wallHeatFlux::read(const dictionary& dict)
bool Foam::functionObjects::wallHeatFlux::execute()
{
volScalarField& wallHeatFlux = lookupObjectRef<volScalarField>(type());
auto& wallHeatFlux = lookupObjectRef<volScalarField>(scopedName(typeName));
if
(
@ -284,7 +284,8 @@ bool Foam::functionObjects::wallHeatFlux::execute()
bool Foam::functionObjects::wallHeatFlux::write()
{
const volScalarField& wallHeatFlux = lookupObject<volScalarField>(type());
const auto& wallHeatFlux =
lookupObject<volScalarField>(scopedName(typeName));
Log << type() << " " << name() << " write:" << nl
<< " writing field " << wallHeatFlux.name() << endl;

View File

@ -102,7 +102,7 @@ Foam::functionObjects::wallShearStress::wallShearStress
(
IOobject
(
typeName,
scopedName(typeName),
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
@ -176,8 +176,8 @@ bool Foam::functionObjects::wallShearStress::read(const dictionary& dict)
bool Foam::functionObjects::wallShearStress::execute()
{
volVectorField& wallShearStress =
mesh_.lookupObjectRef<volVectorField>(type());
auto& wallShearStress =
mesh_.lookupObjectRef<volVectorField>(scopedName(typeName));
// Compressible
{
@ -217,8 +217,8 @@ bool Foam::functionObjects::wallShearStress::execute()
bool Foam::functionObjects::wallShearStress::write()
{
const volVectorField& wallShearStress =
obr_.lookupObject<volVectorField>(type());
const auto& wallShearStress =
obr_.lookupObject<volVectorField>(scopedName(typeName));
Log << type() << " " << name() << " write:" << nl
<< " writing field " << wallShearStress.name() << endl;

View File

@ -83,7 +83,7 @@ Foam::functionObjects::yPlus::yPlus
(
IOobject
(
typeName,
scopedName(typeName),
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
@ -115,8 +115,7 @@ bool Foam::functionObjects::yPlus::read(const dictionary& dict)
bool Foam::functionObjects::yPlus::execute()
{
volScalarField& yPlus =
lookupObjectRef<volScalarField>(typeName);
auto& yPlus = lookupObjectRef<volScalarField>(scopedName(typeName));
if (foundObject<turbulenceModel>(turbulenceModel::propertiesName))
{
@ -192,8 +191,7 @@ bool Foam::functionObjects::yPlus::execute()
bool Foam::functionObjects::yPlus::write()
{
const volScalarField& yPlus =
obr_.lookupObject<volScalarField>(type());
const auto& yPlus = obr_.lookupObject<volScalarField>(scopedName(typeName));
Log << type() << " " << name() << " write:" << nl
<< " writing field " << yPlus.name() << endl;

View File

@ -113,7 +113,8 @@ bool Foam::functionObjects::zeroGradient::read(const dictionary& dict)
Info<< type() << " fields: " << selectFields_ << nl;
resultName_ = dict.getOrDefault<word>("result", type() + "(@@)");
resultName_ =
dict.getOrDefault<word>("result", scopedName(type() + "(@@)"));
// Require '@@' token for result, unless a single (non-regex) source field
return

View File

@ -287,7 +287,7 @@ bool Foam::functionObjects::forceCoeffs::read(const dictionary& dict)
(
IOobject
(
fieldName("forceCoeff"),
scopedName("forceCoeff"),
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
@ -306,7 +306,7 @@ bool Foam::functionObjects::forceCoeffs::read(const dictionary& dict)
(
IOobject
(
fieldName("momentCoeff"),
scopedName("momentCoeff"),
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
@ -467,16 +467,16 @@ bool Foam::functionObjects::forceCoeffs::execute()
if (writeFields_)
{
const volVectorField& force =
lookupObject<volVectorField>(fieldName("force"));
lookupObject<volVectorField>(scopedName("force"));
const volVectorField& moment =
lookupObject<volVectorField>(fieldName("moment"));
lookupObject<volVectorField>(scopedName("moment"));
volVectorField& forceCoeff =
lookupObjectRef<volVectorField>(fieldName("forceCoeff"));
lookupObjectRef<volVectorField>(scopedName("forceCoeff"));
volVectorField& momentCoeff =
lookupObjectRef<volVectorField>(fieldName("momentCoeff"));
lookupObjectRef<volVectorField>(scopedName("momentCoeff"));
dimensionedScalar f0("f0", dimForce, Aref_*pDyn);
dimensionedScalar m0("m0", dimForce*dimLength, Aref_*lRef_*pDyn);
@ -494,10 +494,10 @@ bool Foam::functionObjects::forceCoeffs::write()
if (writeFields_)
{
const volVectorField& forceCoeff =
lookupObject<volVectorField>(fieldName("forceCoeff"));
lookupObject<volVectorField>(scopedName("forceCoeff"));
const volVectorField& momentCoeff =
lookupObject<volVectorField>(fieldName("momentCoeff"));
lookupObject<volVectorField>(scopedName("momentCoeff"));
forceCoeff.write();
momentCoeff.write();

View File

@ -48,12 +48,6 @@ namespace functionObjects
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
Foam::word Foam::functionObjects::forces::fieldName(const word& name) const
{
return this->name() + ":" + name;
}
void Foam::functionObjects::forces::createFiles()
{
// Note: Only possible to create bin files after bins have been initialised
@ -332,12 +326,12 @@ void Foam::functionObjects::forces::resetFields()
if (writeFields_)
{
volVectorField& force =
lookupObjectRef<volVectorField>(fieldName("force"));
lookupObjectRef<volVectorField>(scopedName("force"));
force == dimensionedVector(force.dimensions(), Zero);
volVectorField& moment =
lookupObjectRef<volVectorField>(fieldName("moment"));
lookupObjectRef<volVectorField>(scopedName("moment"));
moment == dimensionedVector(moment.dimensions(), Zero);
}
@ -526,11 +520,11 @@ void Foam::functionObjects::forces::addToFields
return;
}
auto& force = lookupObjectRef<volVectorField>(fieldName("force"));
auto& force = lookupObjectRef<volVectorField>(scopedName("force"));
vectorField& pf = force.boundaryFieldRef()[patchi];
pf += fN + fT + fP;
auto& moment = lookupObjectRef<volVectorField>(fieldName("moment"));
auto& moment = lookupObjectRef<volVectorField>(scopedName("moment"));
vectorField& pm = moment.boundaryFieldRef()[patchi];
pm = Md^pf;
}
@ -550,8 +544,8 @@ void Foam::functionObjects::forces::addToFields
return;
}
auto& force = lookupObjectRef<volVectorField>(fieldName("force"));
auto& moment = lookupObjectRef<volVectorField>(fieldName("moment"));
auto& force = lookupObjectRef<volVectorField>(scopedName("force"));
auto& moment = lookupObjectRef<volVectorField>(scopedName("moment"));
forAll(cellIDs, i)
{
@ -913,7 +907,7 @@ bool Foam::functionObjects::forces::read(const dictionary& dict)
(
IOobject
(
fieldName("force"),
scopedName("force"),
time_.timeName(),
mesh_,
IOobject::NO_READ,
@ -932,7 +926,7 @@ bool Foam::functionObjects::forces::read(const dictionary& dict)
(
IOobject
(
fieldName("moment"),
scopedName("moment"),
time_.timeName(),
mesh_,
IOobject::NO_READ,
@ -1120,8 +1114,8 @@ bool Foam::functionObjects::forces::write()
{
if (writeFields_)
{
lookupObject<volVectorField>(fieldName("force")).write();
lookupObject<volVectorField>(fieldName("moment")).write();
lookupObject<volVectorField>(scopedName("force")).write();
lookupObject<volVectorField>(scopedName("moment")).write();
}
return true;

View File

@ -256,9 +256,6 @@ protected:
// Protected Member Functions
//- Create a field name
word fieldName(const word& name) const;
//- Create the output files
void createFiles();

View File

@ -137,7 +137,7 @@ Foam::functionObjects::reactingEulerHtcModel::reactingEulerHtcModel
{
read(dict);
setResultName(typeName, name + ":htc:" + htcModelPtr_->type());
setResultName(typeName, "htc:" + htcModelPtr_->type());
volScalarField* htcPtr =
new volScalarField