functionObjects: Simply functionObjects requiring access to the fvMesh using fvMeshFunctionObject

This commit is contained in:
Henry Weller
2016-05-16 16:21:06 +01:00
parent 151631c5e4
commit 4ba3463052
31 changed files with 174 additions and 425 deletions

View File

@ -47,27 +47,13 @@ namespace functionObjects
Foam::functionObjects::writeVTK::writeVTK
(
const word& name,
const Time& t,
const Time& runTime,
const dictionary& dict
)
:
functionObject(name),
time_(t),
obr_
(
time_.lookupObject<objectRegistry>
(
dict.lookupOrDefault("region", polyMesh::defaultRegion)
)
),
fvMeshFunctionObject(name, runTime, dict),
objectNames_()
{
if (!isA<fvMesh>(obr_))
{
FatalErrorInFunction
<< "objectRegistry is not an fvMesh" << exit(FatalError);
}
read(dict);
}
@ -98,20 +84,16 @@ bool Foam::functionObjects::writeVTK::write(const bool postProcess)
{
Info<< type() << " " << name() << " output:" << nl;
fvMesh& mesh = const_cast<fvMesh&>(refCast<const fvMesh>(obr_));
Info<< "Time: " << time_.timeName() << endl;
const Time& runTime = mesh.time();
Info<< "Time: " << runTime.timeName() << endl;
word timeDesc = runTime.timeName();
word timeDesc = time_.timeName();
// VTK/ directory in the case
fileName fvPath(runTime.path()/"VTK");
fileName fvPath(time_.path()/"VTK");
mkDir(fvPath);
string vtkName = runTime.caseName();
string vtkName = time_.caseName();
if (Pstream::parRun())
{
@ -135,7 +117,7 @@ bool Foam::functionObjects::writeVTK::write(const bool postProcess)
Info<< " Internal : " << vtkFileName << endl;
vtkMesh vMesh(mesh);
vtkMesh vMesh(const_cast<fvMesh&>(mesh_));
// Write mesh
internalWriter writer(vMesh, false, vtkFileName);

View File

@ -54,7 +54,7 @@ Description
\endtable
SeeAlso
Foam::functionObject
Foam::functionObjects::fvMeshFunctionObject
Foam::functionObjects::timeControl
SourceFiles
@ -66,18 +66,13 @@ SourceFiles
#ifndef functionObjects_writeVTK_H
#define functionObjects_writeVTK_H
#include "functionObject.H"
#include "fvMeshFunctionObject.H"
#include "wordReList.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward declaration of classes
class Time;
class objectRegistry;
namespace functionObjects
{
@ -87,16 +82,10 @@ namespace functionObjects
class writeVTK
:
public functionObject
public fvMeshFunctionObject
{
// Private data
//- Reference to the Time
const Time& time_;
//- Refererence to objectRegistry
const objectRegistry& obr_;
//- Names of objects
wordReList objectNames_;

View File

@ -131,10 +131,10 @@ bool Foam::functionObjects::div::execute(const bool postProcess)
bool Foam::functionObjects::div::write(const bool postProcess)
{
if (obr_.foundObject<regIOobject>(resultName_))
if (mesh_.foundObject<regIOobject>(resultName_))
{
const regIOobject& field =
obr_.lookupObject<regIOobject>(resultName_);
mesh_.lookupObject<regIOobject>(resultName_);
Info<< type() << " " << name() << " output:" << nl
<< " writing field " << field.name() << nl << endl;

View File

@ -32,6 +32,9 @@ Description
limited to surfaceScalarFields and volVectorFields, and the output is a
volScalarField.
SeeAlso
Foam::functionObjects::fvMeshFunctionObject
SourceFiles
div.C
@ -62,7 +65,7 @@ class div
:
public fvMeshFunctionObject
{
// Private data
// Private member data
//- Name of field to process
word fieldName_;

View File

@ -32,6 +32,9 @@ Description
limited to scalar and vector volume or surface fields, and the output is a
volume vector or tensor field.
SeeAlso
Foam::functionObjects::fvMeshFunctionObject
SourceFiles
grad.C

View File

@ -32,6 +32,9 @@ Description
can be applied to any volume or surface fieldsm and the output is a
volume or surface scalar field.
SeeAlso
Foam::functionObjects::fvMeshFunctionObject
SourceFiles
mag.C

View File

@ -46,14 +46,12 @@ namespace functionObjects
void Foam::functionObjects::nearWallFields::calcAddressing()
{
const fvMesh& mesh = refCast<const fvMesh>(obr_);
// Count number of faces
label nPatchFaces = 0;
forAllConstIter(labelHashSet, patchSet_, iter)
{
label patchi = iter.key();
nPatchFaces += mesh.boundary()[patchi].size();
nPatchFaces += mesh_.boundary()[patchi].size();
}
// Global indexing
@ -65,7 +63,7 @@ void Foam::functionObjects::nearWallFields::calcAddressing()
}
// Construct cloud
Cloud<findCellParticle> cloud(mesh, IDLList<findCellParticle>());
Cloud<findCellParticle> cloud(mesh_, IDLList<findCellParticle>());
// Add particles to track to sample locations
nPatchFaces = 0;
@ -73,7 +71,7 @@ void Foam::functionObjects::nearWallFields::calcAddressing()
forAllConstIter(labelHashSet, patchSet_, iter)
{
label patchi = iter.key();
const fvPatch& patch = mesh.boundary()[patchi];
const fvPatch& patch = mesh_.boundary()[patchi];
vectorField nf(patch.nf());
vectorField faceCellCentres(patch.patch().faceCellCentres());
@ -88,7 +86,7 @@ void Foam::functionObjects::nearWallFields::calcAddressing()
(
mappedPatchBase::facePoint
(
mesh,
mesh_,
meshFacei,
polyMesh::FACE_DIAG_TRIS
)
@ -112,14 +110,14 @@ void Foam::functionObjects::nearWallFields::calcAddressing()
label celli = -1;
label tetFacei = -1;
label tetPtI = -1;
mesh.findCellFacePt(start, celli, tetFacei, tetPtI);
mesh_.findCellFacePt(start, celli, tetFacei, tetPtI);
// Add to cloud. Add originating face as passive data
cloud.addParticle
(
new findCellParticle
(
mesh,
mesh_,
start,
celli,
tetFacei,
@ -140,8 +138,8 @@ void Foam::functionObjects::nearWallFields::calcAddressing()
// Dump particles
OBJstream str
(
mesh.time().path()
/"wantedTracks_" + mesh.time().timeName() + ".obj"
mesh_.time().path()
/"wantedTracks_" + mesh_.time().timeName() + ".obj"
);
InfoInFunction << "Dumping tracks to " << str.name() << endl;
@ -155,14 +153,14 @@ void Foam::functionObjects::nearWallFields::calcAddressing()
// Per cell: empty or global wall index and end location
cellToWalls_.setSize(mesh.nCells());
cellToSamples_.setSize(mesh.nCells());
cellToWalls_.setSize(mesh_.nCells());
cellToSamples_.setSize(mesh_.nCells());
// Database to pass into findCellParticle::move
findCellParticle::trackingData td(cloud, cellToWalls_, cellToSamples_);
// Track all particles to their end position.
scalar maxTrackLen = 2.0*mesh.bounds().mag();
scalar maxTrackLen = 2.0*mesh_.bounds().mag();
//Debug: collect start points
@ -202,8 +200,8 @@ void Foam::functionObjects::nearWallFields::calcAddressing()
{
OBJstream str
(
mesh.time().path()
/"obtainedTracks_" + mesh.time().timeName() + ".obj"
mesh_.time().path()
/"obtainedTracks_" + mesh_.time().timeName() + ".obj"
);
InfoInFunction << "Dumping obtained to " << str.name() << endl;
@ -230,22 +228,9 @@ Foam::functionObjects::nearWallFields::nearWallFields
const dictionary& dict
)
:
functionObject(name),
obr_
(
runTime.lookupObject<objectRegistry>
(
dict.lookupOrDefault("region", polyMesh::defaultRegion)
)
),
fvMeshFunctionObject(name, runTime, dict),
fieldSet_()
{
if (!isA<fvMesh>(obr_))
{
FatalErrorInFunction
<< "objectRegistry is not an fvMesh" << exit(FatalError);
}
read(dict);
}
@ -270,11 +255,9 @@ bool Foam::functionObjects::nearWallFields::read(const dictionary& dict)
InfoInFunction << endl;
}
const fvMesh& mesh = refCast<const fvMesh>(obr_);
dict.lookup("fields") >> fieldSet_;
patchSet_ =
mesh.boundaryMesh().patchSet(wordReList(dict.lookup("patches")));
mesh_.boundaryMesh().patchSet(wordReList(dict.lookup("patches")));
distance_ = readScalar(dict.lookup("distance"));
@ -343,7 +326,7 @@ bool Foam::functionObjects::nearWallFields::execute(const bool postProcess)
Info<< type() << " " << name() << " output:" << nl;
Info<< " Sampling fields to " << obr_.time().timeName()
Info<< " Sampling fields to " << time_.timeName()
<< endl;
sampleFields(vsf_);
@ -363,7 +346,7 @@ bool Foam::functionObjects::nearWallFields::write(const bool postProcess)
InfoInFunction << endl;
}
Info<< " Writing sampled fields to " << obr_.time().timeName()
Info<< " Writing sampled fields to " << time_.timeName()
<< endl;
forAll(vsf_, i)

View File

@ -61,7 +61,7 @@ Description
\endtable
SeeAlso
Foam::functionObject
Foam::functionObjects::fvMeshFunctionObject
SourceFiles
nearWallFields.C
@ -71,7 +71,7 @@ SourceFiles
#ifndef functionObjects_nearWallFields_H
#define functionObjects_nearWallFields_H
#include "functionObject.H"
#include "fvMeshFunctionObject.H"
#include "volFields.H"
#include "Tuple2.H"
#include "interpolationCellPoint.H"
@ -80,10 +80,6 @@ SourceFiles
namespace Foam
{
// Forward declaration of classes
class objectRegistry;
namespace functionObjects
{
@ -93,14 +89,11 @@ namespace functionObjects
class nearWallFields
:
public functionObject
public fvMeshFunctionObject
{
protected:
// Protected data
//- Reference to the objectRegistry
const objectRegistry& obr_;
// Protected member data
// Read from dictionary

View File

@ -48,25 +48,10 @@ Foam::functionObjects::processorField::processorField
const dictionary& dict
)
:
functionObject(name),
obr_
(
runTime.lookupObject<objectRegistry>
(
dict.lookupOrDefault("region", polyMesh::defaultRegion)
)
)
fvMeshFunctionObject(name, runTime, dict)
{
if (!isA<fvMesh>(obr_))
{
FatalErrorInFunction
<< "objectRegistry is not an fvMesh" << exit(FatalError);
}
read(dict);
const fvMesh& mesh = refCast<const fvMesh>(obr_);
volScalarField* procFieldPtr
(
new volScalarField
@ -74,17 +59,17 @@ Foam::functionObjects::processorField::processorField
IOobject
(
"processorID",
mesh.time().timeName(),
mesh,
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
mesh_,
dimensionedScalar("0", dimless, 0.0)
)
);
mesh.objectRegistry::store(procFieldPtr);
mesh_.objectRegistry::store(procFieldPtr);
}
@ -105,7 +90,7 @@ bool Foam::functionObjects::processorField::read(const dictionary& dict)
bool Foam::functionObjects::processorField::execute(const bool postProcess)
{
const volScalarField& procField =
obr_.lookupObject<volScalarField>("processorID");
mesh_.lookupObject<volScalarField>("processorID");
const_cast<volScalarField&>(procField) ==
dimensionedScalar("proci", dimless, Pstream::myProcNo());
@ -117,7 +102,7 @@ bool Foam::functionObjects::processorField::execute(const bool postProcess)
bool Foam::functionObjects::processorField::write(const bool postProcess)
{
const volScalarField& procField =
obr_.lookupObject<volScalarField>("processorID");
mesh_.lookupObject<volScalarField>("processorID");
procField.write();

View File

@ -48,7 +48,7 @@ Description
\endtable
SeeAlso
Foam::functionObject
Foam::functionObjects::fvMeshFunctionObject
SourceFiles
processorField.C
@ -58,16 +58,12 @@ SourceFiles
#ifndef functionObjects_processorField_H
#define functionObjects_processorField_H
#include "functionObject.H"
#include "fvMeshFunctionObject.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward declaration of classes
class objectRegistry;
namespace functionObjects
{
@ -77,18 +73,8 @@ namespace functionObjects
class processorField
:
public functionObject
public fvMeshFunctionObject
{
protected:
// Protected data
//- Reference to the objectRegistry
const objectRegistry& obr_;
private:
// Private member functions
//- Disallow default bitwise copy construct

View File

@ -49,22 +49,9 @@ Foam::functionObjects::readFields::readFields
const dictionary& dict
)
:
functionObject(name),
obr_
(
runTime.lookupObject<objectRegistry>
(
dict.lookupOrDefault("region", polyMesh::defaultRegion)
)
),
fvMeshFunctionObject(name, runTime, dict),
fieldSet_()
{
if (!isA<fvMesh>(obr_))
{
FatalErrorInFunction
<< "objectRegistry is not an fvMesh" << exit(FatalError);
}
read(dict);
}

View File

@ -54,7 +54,7 @@ Description
\endtable
SeeAlso
Foam::functionObject
Foam::functionObjects::fvMeshFunctionObject
SourceFiles
readFields.C
@ -64,7 +64,7 @@ SourceFiles
#ifndef functionObjects_readFields_H
#define functionObjects_readFields_H
#include "functionObject.H"
#include "fvMeshFunctionObject.H"
#include "volFieldsFwd.H"
#include "surfaceFieldsFwd.H"
@ -72,10 +72,6 @@ SourceFiles
namespace Foam
{
// Forward declaration of classes
class objectRegistry;
namespace functionObjects
{
@ -85,15 +81,12 @@ namespace functionObjects
class readFields
:
public functionObject
public fvMeshFunctionObject
{
protected:
// Protected data
//- Reference to the objectRegistry
const objectRegistry& obr_;
//- Fields to load
wordList fieldSet_;

View File

@ -59,13 +59,11 @@ void Foam::functionObjects::readFields::loadField
}
else
{
const fvMesh& mesh = refCast<const fvMesh>(obr_);
IOobject fieldHeader
(
fieldName,
mesh.time().timeName(),
mesh,
mesh_.time().timeName(),
mesh_,
IOobject::MUST_READ,
IOobject::NO_WRITE
);
@ -80,7 +78,7 @@ void Foam::functionObjects::readFields::loadField
Info<< " Reading " << fieldName << endl;
label sz = vflds.size();
vflds.setSize(sz+1);
vflds.set(sz, new vfType(fieldHeader, mesh));
vflds.set(sz, new vfType(fieldHeader, mesh_));
}
else if
(
@ -92,7 +90,7 @@ void Foam::functionObjects::readFields::loadField
Info<< " Reading " << fieldName << endl;
label sz = sflds.size();
sflds.setSize(sz+1);
sflds.set(sz, new sfType(fieldHeader, mesh));
sflds.set(sz, new sfType(fieldHeader, mesh_));
}
}
}

View File

@ -129,8 +129,6 @@ Foam::tmp<Foam::volScalarField> Foam::functionObjects::pressureTools::pDyn
const volScalarField& p
) const
{
const fvMesh& mesh = refCast<const fvMesh>(obr_);
tmp<volScalarField> tpDyn
(
new volScalarField
@ -138,12 +136,12 @@ Foam::tmp<Foam::volScalarField> Foam::functionObjects::pressureTools::pDyn
IOobject
(
"pDyn",
mesh.time().timeName(),
mesh,
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
mesh_,
dimensionedScalar("zero", dimPressure, 0.0)
)
);
@ -191,14 +189,7 @@ Foam::functionObjects::pressureTools::pressureTools
const dictionary& dict
)
:
functionObject(name),
obr_
(
runTime.lookupObject<objectRegistry>
(
dict.lookupOrDefault("region", polyMesh::defaultRegion)
)
),
fvMeshFunctionObject(name, runTime, dict),
pName_("p"),
UName_("U"),
rhoName_("rho"),
@ -209,12 +200,6 @@ Foam::functionObjects::pressureTools::pressureTools
UInf_(Zero),
rhoInf_(0.0)
{
if (!isA<fvMesh>(obr_))
{
FatalErrorInFunction
<< "objectRegistry is not an fvMesh" << exit(FatalError);
}
read(dict);
dimensionSet pDims(dimPressure);
@ -224,8 +209,6 @@ Foam::functionObjects::pressureTools::pressureTools
pDims /= dimPressure;
}
const fvMesh& mesh = refCast<const fvMesh>(obr_);
volScalarField* pPtr
(
new volScalarField
@ -233,17 +216,17 @@ Foam::functionObjects::pressureTools::pressureTools
IOobject
(
pName(),
mesh.time().timeName(),
mesh,
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
mesh_,
dimensionedScalar("0", pDims, 0.0)
)
);
mesh.objectRegistry::store(pPtr);
mesh_.objectRegistry::store(pPtr);
}

View File

@ -100,6 +100,9 @@ Description
rhoInf | Freestream density for coefficient calculation | no |
\endtable
SeeAlso
Foam::functionObjects::fvMeshFunctionObject
SourceFiles
pressureTools.C
@ -108,7 +111,7 @@ SourceFiles
#ifndef functionObjects_pressureTools_H
#define functionObjects_pressureTools_H
#include "functionObject.H"
#include "fvMeshFunctionObject.H"
#include "volFieldsFwd.H"
#include "dimensionedScalar.H"
@ -116,10 +119,6 @@ SourceFiles
namespace Foam
{
// Forward declaration of classes
class objectRegistry;
namespace functionObjects
{
@ -129,13 +128,10 @@ namespace functionObjects
class pressureTools
:
public functionObject
public fvMeshFunctionObject
{
// Private data
//- Reference to the objectRegistry
const objectRegistry& obr_;
//- Name of pressure field, default is "p"
word pName_;

View File

@ -75,27 +75,10 @@ Foam::functionObjects::CourantNo::CourantNo
const dictionary& dict
)
:
functionObject(name),
obr_
(
runTime.lookupObject<objectRegistry>
(
dict.lookupOrDefault("region", polyMesh::defaultRegion)
)
),
phiName_("phi"),
rhoName_("rho")
fvMeshFunctionObject(name, runTime, dict)
{
if (!isA<fvMesh>(obr_))
{
FatalErrorInFunction
<< "objectRegistry is not an fvMesh" << exit(FatalError);
}
read(dict);
const fvMesh& mesh = refCast<const fvMesh>(obr_);
volScalarField* CourantNoPtr
(
new volScalarField
@ -103,18 +86,18 @@ Foam::functionObjects::CourantNo::CourantNo
IOobject
(
type(),
mesh.time().timeName(),
mesh,
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
mesh_,
dimensionedScalar("0", dimless, 0.0),
zeroGradientFvPatchScalarField::typeName
)
);
mesh.objectRegistry::store(CourantNoPtr);
mesh_.objectRegistry::store(CourantNoPtr);
}
@ -137,21 +120,19 @@ bool Foam::functionObjects::CourantNo::read(const dictionary& dict)
bool Foam::functionObjects::CourantNo::execute(const bool postProcess)
{
const fvMesh& mesh = refCast<const fvMesh>(obr_);
const surfaceScalarField& phi =
mesh.lookupObject<surfaceScalarField>(phiName_);
mesh_.lookupObject<surfaceScalarField>(phiName_);
volScalarField& Co = const_cast<volScalarField&>
(
mesh.lookupObject<volScalarField>(type())
mesh_.lookupObject<volScalarField>(type())
);
Co.ref() = byRho
(
(0.5*mesh.time().deltaT())
(0.5*mesh_.time().deltaT())
*fvc::surfaceSum(mag(phi))()()
/mesh.V()
/mesh_.V()
);
Co.correctBoundaryConditions();

View File

@ -32,6 +32,9 @@ Description
volScalarField. The field is stored on the mesh database so that it can
be retrieved and used for other applications.
SeeAlso
Foam::functionObjects::fvMeshFunctionObject
SourceFiles
CourantNo.C
@ -40,7 +43,7 @@ SourceFiles
#ifndef functionObjects_CourantNo_H
#define functionObjects_CourantNo_H
#include "functionObject.H"
#include "fvMeshFunctionObject.H"
#include "volFields.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -56,13 +59,10 @@ namespace functionObjects
class CourantNo
:
public functionObject
public fvMeshFunctionObject
{
// Private data
//- Reference to the database
const objectRegistry& obr_;
//- Name of flux field, default is "phi"
word phiName_;

View File

@ -56,26 +56,10 @@ Foam::functionObjects::Lambda2::Lambda2
const dictionary& dict
)
:
functionObject(name),
obr_
(
runTime.lookupObject<objectRegistry>
(
dict.lookupOrDefault("region", polyMesh::defaultRegion)
)
),
UName_("U")
fvMeshFunctionObject(name, runTime, dict)
{
if (!isA<fvMesh>(obr_))
{
FatalErrorInFunction
<< "objectRegistry is not an fvMesh" << exit(FatalError);
}
read(dict);
const fvMesh& mesh = refCast<const fvMesh>(obr_);
volScalarField* Lambda2Ptr
(
new volScalarField
@ -83,17 +67,17 @@ Foam::functionObjects::Lambda2::Lambda2
IOobject
(
type(),
mesh.time().timeName(),
mesh,
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
mesh_,
dimensionedScalar("0", dimless/sqr(dimTime), 0.0)
)
);
mesh.objectRegistry::store(Lambda2Ptr);
mesh_.objectRegistry::store(Lambda2Ptr);
}
@ -115,10 +99,8 @@ bool Foam::functionObjects::Lambda2::read(const dictionary& dict)
bool Foam::functionObjects::Lambda2::execute(const bool postProcess)
{
const fvMesh& mesh = refCast<const fvMesh>(obr_);
const volVectorField& U =
mesh.lookupObject<volVectorField>(UName_);
mesh_.lookupObject<volVectorField>(UName_);
const volTensorField gradU(fvc::grad(U));
@ -131,7 +113,7 @@ bool Foam::functionObjects::Lambda2::execute(const bool postProcess)
volScalarField& Lambda2 =
const_cast<volScalarField&>
(
mesh.lookupObject<volScalarField>(type())
mesh_.lookupObject<volScalarField>(type())
);
Lambda2 = -eigenValues(SSplusWW)().component(vector::Y);

View File

@ -32,6 +32,9 @@ Description
of the sum of the square of the symmetrical and anti-symmetrical parts of
the velocity gradient tensor.
SeeAlso
Foam::functionObjects::fvMeshFunctionObject
SourceFiles
Lambda2.C
@ -40,17 +43,13 @@ SourceFiles
#ifndef functionObjects_Lambda2_H
#define functionObjects_Lambda2_H
#include "functionObject.H"
#include "fvMeshFunctionObject.H"
#include "volFieldsFwd.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward declaration of classes
class objectRegistry;
namespace functionObjects
{
@ -60,13 +59,10 @@ namespace functionObjects
class Lambda2
:
public functionObject
public fvMeshFunctionObject
{
// Private data
//- Reference to the database
const objectRegistry& obr_;
//- Name of velocity field, default is "U"
word UName_;

View File

@ -59,27 +59,10 @@ Foam::functionObjects::Peclet::Peclet
const dictionary& dict
)
:
functionObject(name),
obr_
(
runTime.lookupObject<objectRegistry>
(
dict.lookupOrDefault("region", polyMesh::defaultRegion)
)
),
phiName_("phi"),
rhoName_("rho")
fvMeshFunctionObject(name, runTime, dict)
{
if (!isA<fvMesh>(obr_))
{
FatalErrorInFunction
<< "objectRegistry is not an fvMesh" << exit(FatalError);
}
read(dict);
const fvMesh& mesh = refCast<const fvMesh>(obr_);
surfaceScalarField* PecletPtr
(
new surfaceScalarField
@ -87,17 +70,17 @@ Foam::functionObjects::Peclet::Peclet
IOobject
(
type(),
mesh.time().timeName(),
mesh,
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
mesh_,
dimensionedScalar("0", dimless, 0.0)
)
);
mesh.objectRegistry::store(PecletPtr);
mesh_.objectRegistry::store(PecletPtr);
}
@ -123,39 +106,37 @@ bool Foam::functionObjects::Peclet::execute(const bool postProcess)
typedef compressible::turbulenceModel cmpTurbModel;
typedef incompressible::turbulenceModel icoTurbModel;
const fvMesh& mesh = refCast<const fvMesh>(obr_);
tmp<volScalarField> nuEff;
if (mesh.foundObject<cmpTurbModel>(turbulenceModel::propertiesName))
if (mesh_.foundObject<cmpTurbModel>(turbulenceModel::propertiesName))
{
const cmpTurbModel& model =
mesh.lookupObject<cmpTurbModel>
mesh_.lookupObject<cmpTurbModel>
(
turbulenceModel::propertiesName
);
const volScalarField& rho =
mesh.lookupObject<volScalarField>(rhoName_);
mesh_.lookupObject<volScalarField>(rhoName_);
nuEff = model.muEff()/rho;
}
else if
(
mesh.foundObject<icoTurbModel>(turbulenceModel::propertiesName)
mesh_.foundObject<icoTurbModel>(turbulenceModel::propertiesName)
)
{
const icoTurbModel& model =
mesh.lookupObject<icoTurbModel>
mesh_.lookupObject<icoTurbModel>
(
turbulenceModel::propertiesName
);
nuEff = model.nuEff();
}
else if (mesh.foundObject<dictionary>("transportProperties"))
else if (mesh_.foundObject<dictionary>("transportProperties"))
{
const dictionary& model =
mesh.lookupObject<dictionary>("transportProperties");
mesh_.lookupObject<dictionary>("transportProperties");
nuEff =
tmp<volScalarField>
@ -165,12 +146,12 @@ bool Foam::functionObjects::Peclet::execute(const bool postProcess)
IOobject
(
"nuEff",
mesh.time().timeName(),
mesh,
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
mesh_,
dimensionedScalar(model.lookup("nu"))
)
);
@ -183,19 +164,19 @@ bool Foam::functionObjects::Peclet::execute(const bool postProcess)
}
const surfaceScalarField& phi =
mesh.lookupObject<surfaceScalarField>(phiName_);
mesh_.lookupObject<surfaceScalarField>(phiName_);
surfaceScalarField& Peclet =
const_cast<surfaceScalarField&>
(
mesh.lookupObject<surfaceScalarField>(type())
mesh_.lookupObject<surfaceScalarField>(type())
);
Peclet =
mag(phi)
/(
mesh.magSf()
*mesh.surfaceInterpolation::deltaCoeffs()
mesh_.magSf()
*mesh_.surfaceInterpolation::deltaCoeffs()
*fvc::interpolate(nuEff)
);
@ -206,7 +187,7 @@ bool Foam::functionObjects::Peclet::execute(const bool postProcess)
bool Foam::functionObjects::Peclet::write(const bool postProcess)
{
const surfaceScalarField& Peclet =
obr_.lookupObject<surfaceScalarField>(type());
mesh_.lookupObject<surfaceScalarField>(type());
Info<< type() << " " << name() << " output:" << nl
<< " writing field " << Peclet.name() << nl

View File

@ -31,6 +31,9 @@ Description
This function object calculates and outputs the Peclet number as a
surfaceScalarField.
SeeAlso
Foam::functionObjects::fvMeshFunctionObject
SourceFiles
Peclet.C
@ -39,17 +42,13 @@ SourceFiles
#ifndef functionObjects_Peclet_H
#define functionObjects_Peclet_H
#include "functionObject.H"
#include "fvMeshFunctionObject.H"
#include "volFieldsFwd.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward declaration of classes
class objectRegistry;
namespace functionObjects
{
@ -59,13 +58,10 @@ namespace functionObjects
class Peclet
:
public functionObject
public fvMeshFunctionObject
{
// Private data
//- Reference to the database
const objectRegistry& obr_;
//- Name of flux field, default is "phi"
word phiName_;

View File

@ -55,26 +55,10 @@ Foam::functionObjects::Q::Q
const dictionary& dict
)
:
functionObject(name),
obr_
(
runTime.lookupObject<objectRegistry>
(
dict.lookupOrDefault("region", polyMesh::defaultRegion)
)
),
UName_("U")
fvMeshFunctionObject(name, runTime, dict)
{
if (!isA<fvMesh>(obr_))
{
FatalErrorInFunction
<< "objectRegistry is not an fvMesh" << exit(FatalError);
}
read(dict);
const fvMesh& mesh = refCast<const fvMesh>(obr_);
volScalarField* QPtr
(
new volScalarField
@ -82,17 +66,17 @@ Foam::functionObjects::Q::Q
IOobject
(
type(),
mesh.time().timeName(),
mesh,
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
mesh_,
dimensionedScalar("0", dimless/sqr(dimTime), 0.0)
)
);
mesh.objectRegistry::store(QPtr);
mesh_.objectRegistry::store(QPtr);
}
@ -114,17 +98,15 @@ bool Foam::functionObjects::Q::read(const dictionary& dict)
bool Foam::functionObjects::Q::execute(const bool postProcess)
{
const fvMesh& mesh = refCast<const fvMesh>(obr_);
const volVectorField& U =
mesh.lookupObject<volVectorField>(UName_);
mesh_.lookupObject<volVectorField>(UName_);
const volTensorField gradU(fvc::grad(U));
volScalarField& Q =
const_cast<volScalarField&>
(
mesh.lookupObject<volScalarField>(type())
mesh_.lookupObject<volScalarField>(type())
);
Q = 0.5*(sqr(tr(gradU)) - tr(((gradU) & (gradU))));
@ -136,7 +118,7 @@ bool Foam::functionObjects::Q::execute(const bool postProcess)
bool Foam::functionObjects::Q::write(const bool postProcess)
{
const volScalarField& Q =
obr_.lookupObject<volScalarField>(type());
mesh_.lookupObject<volScalarField>(type());
Info<< type() << " " << name() << " output:" << nl
<< " writing field " << Q.name() << nl

View File

@ -35,6 +35,9 @@ Description
Q = 0.5(sqr(tr(\nabla U)) - tr(((\nabla U) \cdot (\nabla U))))
\f]
SeeAlso
Foam::functionObjects::fvMeshFunctionObject
SourceFiles
Q.C
@ -43,17 +46,13 @@ SourceFiles
#ifndef functionObjects_Q_H
#define functionObjects_Q_H
#include "functionObject.H"
#include "fvMeshFunctionObject.H"
#include "volFieldsFwd.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward declaration of classes
class objectRegistry;
namespace functionObjects
{
@ -63,13 +62,10 @@ namespace functionObjects
class Q
:
public functionObject
public fvMeshFunctionObject
{
// Private data
//- Reference to the database
const objectRegistry& obr_;
//- Name of velocity field, default is "U"
word UName_;

View File

@ -33,8 +33,7 @@ Description
value is calculated via the maximum blending factor for any cell face.
SeeAlso
Foam::fvMeshFunctionObject
Foam::functionObject
Foam::functionObjects::fvMeshFunctionObject
SourceFiles
blendingFactor.C

View File

@ -38,22 +38,20 @@ Foam::volScalarField& Foam::functionObjects::blendingFactor::factor
{
const word fieldName = "blendingFactor:" + field.name();
if (!obr_.foundObject<volScalarField>(fieldName))
if (!mesh_.foundObject<volScalarField>(fieldName))
{
const fvMesh& mesh = refCast<const fvMesh>(obr_);
volScalarField* factorPtr =
new volScalarField
(
IOobject
(
fieldName,
mesh.time().timeName(),
mesh,
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
mesh_,
dimensionedScalar("0", dimless, 0.0),
zeroGradientFvPatchScalarField::typeName
);
@ -64,7 +62,7 @@ Foam::volScalarField& Foam::functionObjects::blendingFactor::factor
return
const_cast<volScalarField&>
(
obr_.lookupObject<volScalarField>(fieldName)
mesh_.lookupObject<volScalarField>(fieldName)
);
}
@ -74,23 +72,21 @@ void Foam::functionObjects::blendingFactor::calc()
{
typedef GeometricField<Type, fvPatchField, volMesh> fieldType;
if (!obr_.foundObject<fieldType>(fieldName_))
if (!mesh_.foundObject<fieldType>(fieldName_))
{
return;
}
const fvMesh& mesh = refCast<const fvMesh>(obr_);
const fieldType& field = mesh.lookupObject<fieldType>(fieldName_);
const fieldType& field = mesh_.lookupObject<fieldType>(fieldName_);
const word divScheme("div(" + phiName_ + ',' + fieldName_ + ')');
ITstream& its = mesh.divScheme(divScheme);
ITstream& its = mesh_.divScheme(divScheme);
const surfaceScalarField& phi =
mesh.lookupObject<surfaceScalarField>(phiName_);
mesh_.lookupObject<surfaceScalarField>(phiName_);
tmp<fv::convectionScheme<Type>> cs =
fv::convectionScheme<Type>::New(mesh, phi, its);
fv::convectionScheme<Type>::New(mesh_, phi, its);
const fv::gaussConvectionScheme<Type>& gcs =
refCast<const fv::gaussConvectionScheme<Type>>(cs());

View File

@ -157,25 +157,9 @@ Foam::functionObjects::scalarTransport::scalarTransport
const dictionary& dict
)
:
functionObject(name),
mesh_
(
refCast<const fvMesh>
(
runTime.lookupObject<objectRegistry>
(
dict.lookupOrDefault("region", polyMesh::defaultRegion)
)
)
),
phiName_(dict.lookupOrDefault<word>("phiName", "phi")),
UName_(dict.lookupOrDefault<word>("UName", "U")),
rhoName_(dict.lookupOrDefault<word>("rhoName", "rho")),
fvMeshFunctionObject(name, runTime, dict),
DT_(0.0),
userDT_(false),
resetOnStartUp_(false),
nCorr_(0),
autoSchemes_(false),
fvOptions_(mesh_),
T_
(

View File

@ -39,6 +39,9 @@ Description
- the diffusivity can be set manually using the DT entry, or retrieved
from the turbulence model (if applicable)
SeeAlso
Foam::functionObjects::fvMeshFunctionObject
SourceFiles
scalarTransport.C
@ -47,7 +50,7 @@ SourceFiles
#ifndef functionObjects_scalarTransport_H
#define functionObjects_scalarTransport_H
#include "functionObject.H"
#include "fvMeshFunctionObject.H"
#include "volFields.H"
#include "surfaceFieldsFwd.H"
#include "fvOptionList.H"
@ -56,10 +59,6 @@ SourceFiles
namespace Foam
{
// Forward declaration of classes
class objectRegistry;
namespace functionObjects
{
@ -69,13 +68,10 @@ namespace functionObjects
class scalarTransport
:
public functionObject
public fvMeshFunctionObject
{
// Private data
//- Reference to the mesh database
const fvMesh& mesh_;
//- Name of flux field (optional)
word phiName_;

View File

@ -55,27 +55,11 @@ Foam::functionObjects::vorticity::vorticity
const dictionary& dict
)
:
functionObject(name),
obr_
(
runTime.lookupObject<objectRegistry>
(
dict.lookupOrDefault("region", polyMesh::defaultRegion)
)
),
UName_("U"),
fvMeshFunctionObject(name, runTime, dict),
outputName_(typeName)
{
if (!isA<fvMesh>(obr_))
{
FatalErrorInFunction
<< "objectRegistry is not an fvMesh" << exit(FatalError);
}
read(dict);
const fvMesh& mesh = refCast<const fvMesh>(obr_);
volVectorField* vorticityPtr
(
new volVectorField
@ -83,17 +67,17 @@ Foam::functionObjects::vorticity::vorticity
IOobject
(
outputName_,
mesh.time().timeName(),
mesh,
mesh_.time().timeName(),
mesh_,
IOobject::NO_READ,
IOobject::NO_WRITE
),
mesh,
mesh_,
dimensionedVector("0", dimless/dimTime, Zero)
)
);
mesh.objectRegistry::store(vorticityPtr);
mesh_.objectRegistry::store(vorticityPtr);
}
@ -119,11 +103,11 @@ bool Foam::functionObjects::vorticity::read(const dictionary& dict)
bool Foam::functionObjects::vorticity::execute(const bool postProcess)
{
const volVectorField& U = obr_.lookupObject<volVectorField>(UName_);
const volVectorField& U = mesh_.lookupObject<volVectorField>(UName_);
volVectorField& vorticity = const_cast<volVectorField&>
(
obr_.lookupObject<volVectorField>(outputName_)
mesh_.lookupObject<volVectorField>(outputName_)
);
vorticity = fvc::curl(U);
@ -135,7 +119,7 @@ bool Foam::functionObjects::vorticity::execute(const bool postProcess)
bool Foam::functionObjects::vorticity::write(const bool postProcess)
{
const volVectorField& vorticity =
obr_.lookupObject<volVectorField>(outputName_);
mesh_.lookupObject<volVectorField>(outputName_);
Info<< type() << " " << name() << " output:" << nl
<< " writing field " << vorticity.name() << nl

View File

@ -30,6 +30,9 @@ Group
Description
This function object calculates the vorticity, the curl of the velocity.
SeeAlso
Foam::functionObjects::fvMeshFunctionObject
SourceFiles
vorticity.C
@ -38,17 +41,13 @@ SourceFiles
#ifndef functionObjects_vorticity_H
#define functionObjects_vorticity_H
#include "functionObject.H"
#include "fvMeshFunctionObject.H"
#include "volFieldsFwd.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward declaration of classes
class objectRegistry;
namespace functionObjects
{
@ -58,13 +57,10 @@ namespace functionObjects
class vorticity
:
public functionObject
public fvMeshFunctionObject
{
// Private data
//- Reference to the database
const objectRegistry& obr_;
//- Name of velocity field, default is "U"
word UName_;

View File

@ -51,12 +51,11 @@ template<class ThermoType>
Foam::moleFractions<ThermoType>::moleFractions
(
const word& name,
const Time& t,
const Time& runTime,
const dictionary& dict
)
:
writeFiles(name, t, dict, typeName),
mesh_(refCast<const fvMesh>(obr_))
fvMeshFunctionObject(name, runTime, dict)
{
if (mesh_.foundObject<ThermoType>(basicThermo::dictName))
{

View File

@ -49,7 +49,7 @@ Description
depending on the thermodynamics package used in the solver.
SeeAlso
Foam::functionObject
Foam::functionObjects::fvMeshFunctionObject
SourceFiles
moleFractions.C
@ -59,8 +59,8 @@ SourceFiles
#ifndef moleFractions_H
#define moleFractions_H
#include "writeFiles.H"
#include "volFields.H"
#include "fvMeshFunctionObject.H"
#include "volFieldsFwd.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -74,13 +74,10 @@ namespace Foam
template<class ThermoType>
class moleFractions
:
public functionObjects::writeFiles
public functionObjects::fvMeshFunctionObject
{
// Private data
//- Reference to the mesh
const fvMesh& mesh_;
//- Species mole fractions
PtrList<volScalarField> X_;