mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
functionObjects: Added regionFunctionObject and fvMeshFunctionObject intermediate base-classes
to simplify writing common functionObjects and avoid unnecessary code duplication
This commit is contained in:
@ -47,9 +47,7 @@ Foam::volScalarField& Foam::functionObjects::div::divField
|
||||
const dimensionSet& dims
|
||||
)
|
||||
{
|
||||
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
||||
|
||||
if (!mesh.foundObject<volScalarField>(divName))
|
||||
if (!mesh_.foundObject<volScalarField>(divName))
|
||||
{
|
||||
volScalarField* divFieldPtr
|
||||
(
|
||||
@ -58,20 +56,20 @@ Foam::volScalarField& Foam::functionObjects::div::divField
|
||||
IOobject
|
||||
(
|
||||
divName,
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
mesh_,
|
||||
dimensionedScalar("zero", dims/dimLength, 0.0)
|
||||
)
|
||||
);
|
||||
|
||||
mesh.objectRegistry::store(divFieldPtr);
|
||||
mesh_.objectRegistry::store(divFieldPtr);
|
||||
}
|
||||
|
||||
const volScalarField& field = mesh.lookupObject<volScalarField>(divName);
|
||||
const volScalarField& field = mesh_.lookupObject<volScalarField>(divName);
|
||||
|
||||
return const_cast<volScalarField&>(field);
|
||||
}
|
||||
@ -86,23 +84,8 @@ Foam::functionObjects::div::div
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
functionObject(name),
|
||||
obr_
|
||||
(
|
||||
runTime.lookupObject<objectRegistry>
|
||||
(
|
||||
dict.lookupOrDefault("region", polyMesh::defaultRegion)
|
||||
)
|
||||
),
|
||||
fieldName_("undefined-fieldName"),
|
||||
resultName_("undefined-resultName")
|
||||
fvMeshFunctionObject(name, runTime, dict)
|
||||
{
|
||||
if (!isA<fvMesh>(obr_))
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "objectRegistry is not an fvMesh" << exit(FatalError);
|
||||
}
|
||||
|
||||
read(dict);
|
||||
}
|
||||
|
||||
|
||||
@ -40,7 +40,7 @@ SourceFiles
|
||||
#ifndef functionObjects_div_H
|
||||
#define functionObjects_div_H
|
||||
|
||||
#include "functionObject.H"
|
||||
#include "fvMeshFunctionObject.H"
|
||||
#include "volFieldsFwd.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -49,7 +49,6 @@ namespace Foam
|
||||
{
|
||||
|
||||
// Forward declaration of classes
|
||||
class objectRegistry;
|
||||
class dimensionSet;
|
||||
|
||||
namespace functionObjects
|
||||
@ -61,13 +60,10 @@ namespace functionObjects
|
||||
|
||||
class div
|
||||
:
|
||||
public functionObject
|
||||
public fvMeshFunctionObject
|
||||
{
|
||||
// Private data
|
||||
|
||||
//- Reference to the objectRegistry
|
||||
const objectRegistry& obr_;
|
||||
|
||||
//- Name of field to process
|
||||
word fieldName_;
|
||||
|
||||
|
||||
@ -36,11 +36,9 @@ void Foam::functionObjects::div::calcDiv
|
||||
bool& processed
|
||||
)
|
||||
{
|
||||
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
||||
|
||||
if (mesh.foundObject<FieldType>(fieldName))
|
||||
if (mesh_.foundObject<FieldType>(fieldName))
|
||||
{
|
||||
const FieldType& vf = mesh.lookupObject<FieldType>(fieldName);
|
||||
const FieldType& vf = mesh_.lookupObject<FieldType>(fieldName);
|
||||
|
||||
volScalarField& field = divField(resultName, vf.dimensions());
|
||||
|
||||
|
||||
@ -48,23 +48,8 @@ Foam::functionObjects::grad::grad
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
functionObject(name),
|
||||
obr_
|
||||
(
|
||||
runTime.lookupObject<objectRegistry>
|
||||
(
|
||||
dict.lookupOrDefault("region", polyMesh::defaultRegion)
|
||||
)
|
||||
),
|
||||
fieldName_("undefined-fieldName"),
|
||||
resultName_("undefined-resultName")
|
||||
fvMeshFunctionObject(name, runTime, dict)
|
||||
{
|
||||
if (!isA<fvMesh>(obr_))
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "objectRegistry is not an fvMesh" << exit(FatalError);
|
||||
}
|
||||
|
||||
read(dict);
|
||||
}
|
||||
|
||||
|
||||
@ -40,7 +40,7 @@ SourceFiles
|
||||
#ifndef functionObjects_grad_H
|
||||
#define functionObjects_grad_H
|
||||
|
||||
#include "functionObject.H"
|
||||
#include "fvMeshFunctionObject.H"
|
||||
#include "volFieldsFwd.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -49,7 +49,6 @@ namespace Foam
|
||||
{
|
||||
|
||||
// Forward declaration of classes
|
||||
class objectRegistry;
|
||||
class dimensionSet;
|
||||
|
||||
namespace functionObjects
|
||||
@ -61,13 +60,10 @@ namespace functionObjects
|
||||
|
||||
class grad
|
||||
:
|
||||
public functionObject
|
||||
public fvMeshFunctionObject
|
||||
{
|
||||
// Private data
|
||||
|
||||
//- Reference to the objectRegistry
|
||||
const objectRegistry& obr_;
|
||||
|
||||
//- Name of field to process
|
||||
word fieldName_;
|
||||
|
||||
|
||||
@ -46,9 +46,7 @@ Foam::functionObjects::grad::gradField
|
||||
typedef typename outerProduct<vector, Type>::type gradType;
|
||||
typedef GeometricField<gradType, fvPatchField, volMesh> vfGradType;
|
||||
|
||||
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
||||
|
||||
if (!mesh.foundObject<vfGradType>(gradName))
|
||||
if (!mesh_.foundObject<vfGradType>(gradName))
|
||||
{
|
||||
vfGradType* gradFieldPtr
|
||||
(
|
||||
@ -57,12 +55,12 @@ Foam::functionObjects::grad::gradField
|
||||
IOobject
|
||||
(
|
||||
gradName,
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
mesh_,
|
||||
dimensioned<gradType>
|
||||
(
|
||||
"zero",
|
||||
@ -72,10 +70,10 @@ Foam::functionObjects::grad::gradField
|
||||
)
|
||||
);
|
||||
|
||||
mesh.objectRegistry::store(gradFieldPtr);
|
||||
mesh_.objectRegistry::store(gradFieldPtr);
|
||||
}
|
||||
|
||||
const vfGradType& field = mesh.lookupObject<vfGradType>(gradName);
|
||||
const vfGradType& field = mesh_.lookupObject<vfGradType>(gradName);
|
||||
|
||||
return const_cast<vfGradType&>(field);
|
||||
}
|
||||
@ -95,12 +93,9 @@ void Foam::functionObjects::grad::calcGrad
|
||||
typedef typename outerProduct<vector, Type>::type gradType;
|
||||
typedef GeometricField<gradType, fvPatchField, volMesh> vfGradType;
|
||||
|
||||
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
||||
|
||||
|
||||
if (mesh.foundObject<vfType>(fieldName))
|
||||
if (mesh_.foundObject<vfType>(fieldName))
|
||||
{
|
||||
const vfType& vf = mesh.lookupObject<vfType>(fieldName);
|
||||
const vfType& vf = mesh_.lookupObject<vfType>(fieldName);
|
||||
|
||||
vfGradType& field = gradField<Type>(resultName, vf.dimensions());
|
||||
|
||||
@ -109,9 +104,9 @@ void Foam::functionObjects::grad::calcGrad
|
||||
|
||||
processed = true;
|
||||
}
|
||||
else if (mesh.foundObject<sfType>(fieldName))
|
||||
else if (mesh_.foundObject<sfType>(fieldName))
|
||||
{
|
||||
const sfType& sf = mesh.lookupObject<sfType>(fieldName);
|
||||
const sfType& sf = mesh_.lookupObject<sfType>(fieldName);
|
||||
|
||||
vfGradType& field = gradField<Type>(resultName, sf.dimensions());
|
||||
|
||||
|
||||
@ -48,23 +48,8 @@ Foam::functionObjects::mag::mag
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
functionObject(name),
|
||||
obr_
|
||||
(
|
||||
runTime.lookupObject<objectRegistry>
|
||||
(
|
||||
dict.lookupOrDefault("region", polyMesh::defaultRegion)
|
||||
)
|
||||
),
|
||||
fieldName_("undefined-fieldName"),
|
||||
resultName_("undefined-resultName")
|
||||
fvMeshFunctionObject(name, runTime, dict)
|
||||
{
|
||||
if (!isA<fvMesh>(obr_))
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "objectRegistry is not an fvMesh" << exit(FatalError);
|
||||
}
|
||||
|
||||
read(dict);
|
||||
}
|
||||
|
||||
|
||||
@ -40,7 +40,7 @@ SourceFiles
|
||||
#ifndef functionObjects_mag_H
|
||||
#define functionObjects_mag_H
|
||||
|
||||
#include "functionObject.H"
|
||||
#include "fvMeshFunctionObject.H"
|
||||
#include "volFieldsFwd.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -49,7 +49,6 @@ namespace Foam
|
||||
{
|
||||
|
||||
// Forward declaration of classes
|
||||
class objectRegistry;
|
||||
class dimensionSet;
|
||||
|
||||
namespace functionObjects
|
||||
@ -61,13 +60,10 @@ namespace functionObjects
|
||||
|
||||
class mag
|
||||
:
|
||||
public functionObject
|
||||
public fvMeshFunctionObject
|
||||
{
|
||||
// Private data
|
||||
|
||||
//- Reference to the objectRegistry
|
||||
const objectRegistry& obr_;
|
||||
|
||||
//- Name of field to process
|
||||
word fieldName_;
|
||||
|
||||
|
||||
@ -35,9 +35,7 @@ FieldType& Foam::functionObjects::mag::magField
|
||||
const dimensionSet& dims
|
||||
)
|
||||
{
|
||||
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
||||
|
||||
if (!mesh.foundObject<FieldType>(magName))
|
||||
if (!mesh_.foundObject<FieldType>(magName))
|
||||
{
|
||||
FieldType* magFieldPtr
|
||||
(
|
||||
@ -46,20 +44,20 @@ FieldType& Foam::functionObjects::mag::magField
|
||||
IOobject
|
||||
(
|
||||
magName,
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
mesh_,
|
||||
dimensionedScalar("zero", dims, 0.0)
|
||||
)
|
||||
);
|
||||
|
||||
mesh.objectRegistry::store(magFieldPtr);
|
||||
mesh_.objectRegistry::store(magFieldPtr);
|
||||
}
|
||||
|
||||
const FieldType& f = mesh.lookupObject<FieldType>(magName);
|
||||
const FieldType& f = mesh_.lookupObject<FieldType>(magName);
|
||||
|
||||
return const_cast<FieldType&>(f);
|
||||
}
|
||||
@ -78,11 +76,9 @@ void Foam::functionObjects::mag::calc
|
||||
typedef GeometricField<Type, fvPatchField, volMesh> vfType;
|
||||
typedef GeometricField<Type, fvsPatchField, surfaceMesh> sfType;
|
||||
|
||||
const fvMesh& mesh = refCast<const fvMesh>(obr_);
|
||||
|
||||
if (mesh.foundObject<vfType>(fieldName))
|
||||
if (mesh_.foundObject<vfType>(fieldName))
|
||||
{
|
||||
const vfType& vf = mesh.lookupObject<vfType>(fieldName);
|
||||
const vfType& vf = mesh_.lookupObject<vfType>(fieldName);
|
||||
|
||||
volScalarField& field =
|
||||
magField<volScalarField>(resultName_, vf.dimensions());
|
||||
@ -91,9 +87,9 @@ void Foam::functionObjects::mag::calc
|
||||
|
||||
processed = true;
|
||||
}
|
||||
else if (mesh.foundObject<sfType>(fieldName))
|
||||
else if (mesh_.foundObject<sfType>(fieldName))
|
||||
{
|
||||
const sfType& sf = mesh.lookupObject<sfType>(fieldName);
|
||||
const sfType& sf = mesh_.lookupObject<sfType>(fieldName);
|
||||
|
||||
surfaceScalarField& field =
|
||||
magField<surfaceScalarField>(resultName_, sf.dimensions());
|
||||
|
||||
Reference in New Issue
Block a user