mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: add surfField support to various field function objects
- fieldAverage - mag - magSqr - readFields - fieldsExpression (add, subtract)
This commit is contained in:
@ -48,17 +48,17 @@ void Foam::functionObjects::fieldAverage::resetFields()
|
||||
{
|
||||
if (faItems_[i].mean())
|
||||
{
|
||||
if (obr_.found(faItems_[i].meanFieldName()))
|
||||
if (obr().found(faItems_[i].meanFieldName()))
|
||||
{
|
||||
obr_.checkOut(*obr_[faItems_[i].meanFieldName()]);
|
||||
obr().checkOut(*obr()[faItems_[i].meanFieldName()]);
|
||||
}
|
||||
}
|
||||
|
||||
if (faItems_[i].prime2Mean())
|
||||
{
|
||||
if (obr_.found(faItems_[i].prime2MeanFieldName()))
|
||||
if (obr().found(faItems_[i].prime2MeanFieldName()))
|
||||
{
|
||||
obr_.checkOut(*obr_[faItems_[i].prime2MeanFieldName()]);
|
||||
obr().checkOut(*obr()[faItems_[i].prime2MeanFieldName()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -108,14 +108,14 @@ void Foam::functionObjects::fieldAverage::initialize()
|
||||
|
||||
void Foam::functionObjects::fieldAverage::restart()
|
||||
{
|
||||
Log << " Restarting averaging at time " << obr_.time().timeName()
|
||||
Log << " Restarting averaging at time " << obr().time().timeName()
|
||||
<< nl << endl;
|
||||
|
||||
totalIter_.clear();
|
||||
totalIter_.setSize(faItems_.size(), 1);
|
||||
|
||||
totalTime_.clear();
|
||||
totalTime_.setSize(faItems_.size(), obr_.time().deltaTValue());
|
||||
totalTime_.setSize(faItems_.size(), obr().time().deltaTValue());
|
||||
|
||||
initialize();
|
||||
}
|
||||
@ -128,8 +128,8 @@ void Foam::functionObjects::fieldAverage::calcAverages()
|
||||
initialize();
|
||||
}
|
||||
|
||||
const label currentTimeIndex = obr_.time().timeIndex();
|
||||
const scalar currentTime = obr_.time().value();
|
||||
const label currentTimeIndex = obr().time().timeIndex();
|
||||
const scalar currentTime = obr().time().value();
|
||||
|
||||
if (prevTimeIndex_ == currentTimeIndex)
|
||||
{
|
||||
@ -176,7 +176,7 @@ void Foam::functionObjects::fieldAverage::calcAverages()
|
||||
forAll(faItems_, fieldi)
|
||||
{
|
||||
totalIter_[fieldi]++;
|
||||
totalTime_[fieldi] += obr_.time().deltaTValue();
|
||||
totalTime_[fieldi] += obr().time().deltaTValue();
|
||||
}
|
||||
|
||||
Log << endl;
|
||||
@ -217,11 +217,11 @@ void Foam::functionObjects::fieldAverage::readAveragingProperties()
|
||||
totalIter_.setSize(faItems_.size(), 1);
|
||||
|
||||
totalTime_.clear();
|
||||
totalTime_.setSize(faItems_.size(), obr_.time().deltaTValue());
|
||||
totalTime_.setSize(faItems_.size(), obr().time().deltaTValue());
|
||||
|
||||
if (restartOnRestart_ || restartOnOutput_)
|
||||
{
|
||||
Info<< " Starting averaging at time " << obr_.time().timeName()
|
||||
Info<< " Starting averaging at time " << obr().time().timeName()
|
||||
<< nl;
|
||||
}
|
||||
else
|
||||
@ -248,7 +248,7 @@ void Foam::functionObjects::fieldAverage::readAveragingProperties()
|
||||
{
|
||||
Info<< " " << fieldName
|
||||
<< ": starting averaging at time "
|
||||
<< obr_.time().timeName() << endl;
|
||||
<< obr().time().timeName() << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -30,6 +30,7 @@ Group
|
||||
Description
|
||||
Calculates average quantities for a user-specified selection of volumetric
|
||||
and surface fields.
|
||||
With the %subRegion option, also supports fields on a surfMesh.
|
||||
|
||||
Fields are entered as a list of sub-dictionaries, which indicate the type of
|
||||
averages to perform, and can be updated during the calculation. The current
|
||||
@ -108,6 +109,7 @@ Usage
|
||||
restartPeriod | Periodic restart period | conditional |
|
||||
restartTime | One-shot reset of the averaging | no | great
|
||||
fields | list of fields and averaging options | yes |
|
||||
subRegion | name of a sub-region such as a surface name | no |
|
||||
\endtable
|
||||
|
||||
|
||||
@ -272,10 +274,10 @@ protected:
|
||||
|
||||
|
||||
//- Disallow default bitwise copy construct
|
||||
fieldAverage(const fieldAverage&);
|
||||
fieldAverage(const fieldAverage&) = delete;
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const fieldAverage&);
|
||||
void operator=(const fieldAverage&) = delete;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
|
||||
\\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
|
||||
\\/ M anipulation | Copyright (C) 2015-2016 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -26,6 +26,7 @@ License
|
||||
#include "fieldAverageItem.H"
|
||||
#include "volFields.H"
|
||||
#include "surfaceFields.H"
|
||||
#include "surfFields.H"
|
||||
#include "OFstream.H"
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
@ -41,11 +42,11 @@ void Foam::functionObjects::fieldAverage::addMeanFieldType(const label fieldi)
|
||||
|
||||
Log << " Reading/initialising field " << meanFieldName << endl;
|
||||
|
||||
if (obr_.foundObject<Type>(meanFieldName))
|
||||
if (foundObject<Type>(meanFieldName))
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
else if (obr_.found(meanFieldName))
|
||||
else if (obr().found(meanFieldName))
|
||||
{
|
||||
Log << " Cannot allocate average field " << meanFieldName
|
||||
<< " since an object with that name already exists."
|
||||
@ -55,18 +56,18 @@ void Foam::functionObjects::fieldAverage::addMeanFieldType(const label fieldi)
|
||||
}
|
||||
else
|
||||
{
|
||||
const Type& baseField = obr_.lookupObject<Type>(fieldName);
|
||||
const Type& baseField = lookupObject<Type>(fieldName);
|
||||
|
||||
// Store on registry
|
||||
obr_.store
|
||||
obr().store
|
||||
(
|
||||
new Type
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
meanFieldName,
|
||||
obr_.time().timeName(obr_.time().startTime().value()),
|
||||
obr_,
|
||||
obr().time().timeName(obr().time().startTime().value()),
|
||||
obr(),
|
||||
restartOnOutput_
|
||||
? IOobject::NO_READ
|
||||
: IOobject::READ_IF_PRESENT,
|
||||
@ -82,24 +83,26 @@ void Foam::functionObjects::fieldAverage::addMeanFieldType(const label fieldi)
|
||||
template<class Type>
|
||||
void Foam::functionObjects::fieldAverage::addMeanField(const label fieldi)
|
||||
{
|
||||
typedef GeometricField<Type, fvPatchField, volMesh> VolFieldType;
|
||||
typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfaceFieldType;
|
||||
typedef DimensionedField<Type, surfGeoMesh> SurfFieldType;
|
||||
|
||||
if (faItems_[fieldi].mean())
|
||||
{
|
||||
typedef GeometricField<Type, fvPatchField, volMesh>
|
||||
VolFieldType;
|
||||
|
||||
typedef GeometricField<Type, fvsPatchField, surfaceMesh>
|
||||
SurfaceFieldType;
|
||||
|
||||
const word& fieldName = faItems_[fieldi].fieldName();
|
||||
|
||||
if (obr_.foundObject<VolFieldType>(fieldName))
|
||||
if (foundObject<VolFieldType>(fieldName))
|
||||
{
|
||||
addMeanFieldType<VolFieldType>(fieldi);
|
||||
}
|
||||
else if (obr_.foundObject<SurfaceFieldType>(fieldName))
|
||||
else if (foundObject<SurfaceFieldType>(fieldName))
|
||||
{
|
||||
addMeanFieldType<SurfaceFieldType>(fieldi);
|
||||
}
|
||||
else if (foundObject<SurfFieldType>(fieldName))
|
||||
{
|
||||
addMeanFieldType<SurfFieldType>(fieldi);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -116,11 +119,11 @@ void Foam::functionObjects::fieldAverage::addPrime2MeanFieldType
|
||||
|
||||
Log << " Reading/initialising field " << prime2MeanFieldName << nl;
|
||||
|
||||
if (obr_.foundObject<Type2>(prime2MeanFieldName))
|
||||
if (foundObject<Type2>(prime2MeanFieldName))
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
else if (obr_.found(prime2MeanFieldName))
|
||||
else if (obr().found(prime2MeanFieldName))
|
||||
{
|
||||
Log << " Cannot allocate average field " << prime2MeanFieldName
|
||||
<< " since an object with that name already exists."
|
||||
@ -130,19 +133,19 @@ void Foam::functionObjects::fieldAverage::addPrime2MeanFieldType
|
||||
}
|
||||
else
|
||||
{
|
||||
const Type1& baseField = obr_.lookupObject<Type1>(fieldName);
|
||||
const Type1& meanField = obr_.lookupObject<Type1>(meanFieldName);
|
||||
const Type1& baseField = lookupObject<Type1>(fieldName);
|
||||
const Type1& meanField = lookupObject<Type1>(meanFieldName);
|
||||
|
||||
// Store on registry
|
||||
obr_.store
|
||||
obr().store
|
||||
(
|
||||
new Type2
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
prime2MeanFieldName,
|
||||
obr_.time().timeName(obr_.time().startTime().value()),
|
||||
obr_,
|
||||
obr().time().timeName(obr().time().startTime().value()),
|
||||
obr(),
|
||||
restartOnOutput_
|
||||
? IOobject::NO_READ
|
||||
: IOobject::READ_IF_PRESENT,
|
||||
@ -160,9 +163,11 @@ void Foam::functionObjects::fieldAverage::addPrime2MeanField(const label fieldi)
|
||||
{
|
||||
typedef GeometricField<Type1, fvPatchField, volMesh> VolFieldType1;
|
||||
typedef GeometricField<Type1, fvsPatchField, surfaceMesh> SurfaceFieldType1;
|
||||
typedef DimensionedField<Type1, surfGeoMesh> SurfFieldType1;
|
||||
|
||||
typedef GeometricField<Type2, fvPatchField, volMesh> VolFieldType2;
|
||||
typedef GeometricField<Type2, fvsPatchField, surfaceMesh> SurfaceFieldType2;
|
||||
typedef DimensionedField<Type2, surfGeoMesh> SurfFieldType2;
|
||||
|
||||
if (faItems_[fieldi].prime2Mean())
|
||||
{
|
||||
@ -176,17 +181,24 @@ void Foam::functionObjects::fieldAverage::addPrime2MeanField(const label fieldi)
|
||||
<< fieldName << nl << exit(FatalError);
|
||||
}
|
||||
|
||||
if (obr_.foundObject<VolFieldType1>(fieldName))
|
||||
if (foundObject<VolFieldType1>(fieldName))
|
||||
{
|
||||
addPrime2MeanFieldType<VolFieldType1, VolFieldType2>(fieldi);
|
||||
}
|
||||
else if (obr_.foundObject<SurfaceFieldType1>(fieldName))
|
||||
else if (foundObject<SurfaceFieldType1>(fieldName))
|
||||
{
|
||||
addPrime2MeanFieldType<SurfaceFieldType1, SurfaceFieldType2>
|
||||
(
|
||||
fieldi
|
||||
);
|
||||
}
|
||||
else if (foundObject<SurfFieldType1>(fieldName))
|
||||
{
|
||||
addPrime2MeanFieldType<SurfFieldType1, SurfFieldType2>
|
||||
(
|
||||
fieldi
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -199,16 +211,16 @@ void Foam::functionObjects::fieldAverage::calculateMeanFieldType
|
||||
{
|
||||
const word& fieldName = faItems_[fieldi].fieldName();
|
||||
|
||||
if (obr_.foundObject<Type>(fieldName))
|
||||
if (foundObject<Type>(fieldName))
|
||||
{
|
||||
const Type& baseField = obr_.lookupObject<Type>(fieldName);
|
||||
const Type& baseField = lookupObject<Type>(fieldName);
|
||||
|
||||
Type& meanField = const_cast<Type&>
|
||||
(
|
||||
obr_.lookupObject<Type>(faItems_[fieldi].meanFieldName())
|
||||
lookupObject<Type>(faItems_[fieldi].meanFieldName())
|
||||
);
|
||||
|
||||
scalar dt = obr_.time().deltaTValue();
|
||||
scalar dt = obr().time().deltaTValue();
|
||||
scalar Dt = totalTime_[fieldi];
|
||||
|
||||
if (faItems_[fieldi].iterBase())
|
||||
@ -239,6 +251,7 @@ void Foam::functionObjects::fieldAverage::calculateMeanFields() const
|
||||
{
|
||||
typedef GeometricField<Type, fvPatchField, volMesh> VolFieldType;
|
||||
typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfaceFieldType;
|
||||
typedef DimensionedField<Type, surfGeoMesh> SurfFieldType;
|
||||
|
||||
forAll(faItems_, i)
|
||||
{
|
||||
@ -246,6 +259,7 @@ void Foam::functionObjects::fieldAverage::calculateMeanFields() const
|
||||
{
|
||||
calculateMeanFieldType<VolFieldType>(i);
|
||||
calculateMeanFieldType<SurfaceFieldType>(i);
|
||||
calculateMeanFieldType<SurfFieldType>(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -259,18 +273,16 @@ void Foam::functionObjects::fieldAverage::calculatePrime2MeanFieldType
|
||||
{
|
||||
const word& fieldName = faItems_[fieldi].fieldName();
|
||||
|
||||
if (obr_.foundObject<Type1>(fieldName))
|
||||
if (foundObject<Type1>(fieldName))
|
||||
{
|
||||
const Type1& baseField = obr_.lookupObject<Type1>(fieldName);
|
||||
const Type1& baseField = lookupObject<Type1>(fieldName);
|
||||
const Type1& meanField =
|
||||
obr_.lookupObject<Type1>(faItems_[fieldi].meanFieldName());
|
||||
lookupObject<Type1>(faItems_[fieldi].meanFieldName());
|
||||
|
||||
Type2& prime2MeanField = const_cast<Type2&>
|
||||
(
|
||||
obr_.lookupObject<Type2>(faItems_[fieldi].prime2MeanFieldName())
|
||||
);
|
||||
Type2& prime2MeanField =
|
||||
lookupObjectRef<Type2>(faItems_[fieldi].prime2MeanFieldName());
|
||||
|
||||
scalar dt = obr_.time().deltaTValue();
|
||||
scalar dt = obr().time().deltaTValue();
|
||||
scalar Dt = totalTime_[fieldi];
|
||||
|
||||
if (faItems_[fieldi].iterBase())
|
||||
@ -304,9 +316,11 @@ void Foam::functionObjects::fieldAverage::calculatePrime2MeanFields() const
|
||||
{
|
||||
typedef GeometricField<Type1, fvPatchField, volMesh> VolFieldType1;
|
||||
typedef GeometricField<Type1, fvsPatchField, surfaceMesh> SurfaceFieldType1;
|
||||
typedef DimensionedField<Type1, surfGeoMesh> SurfFieldType1;
|
||||
|
||||
typedef GeometricField<Type2, fvPatchField, volMesh> VolFieldType2;
|
||||
typedef GeometricField<Type2, fvsPatchField, surfaceMesh> SurfaceFieldType2;
|
||||
typedef DimensionedField<Type2, surfGeoMesh> SurfFieldType2;
|
||||
|
||||
forAll(faItems_, i)
|
||||
{
|
||||
@ -317,6 +331,11 @@ void Foam::functionObjects::fieldAverage::calculatePrime2MeanFields() const
|
||||
(
|
||||
i
|
||||
);
|
||||
|
||||
calculatePrime2MeanFieldType<SurfFieldType1, SurfFieldType2>
|
||||
(
|
||||
i
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -330,15 +349,13 @@ void Foam::functionObjects::fieldAverage::addMeanSqrToPrime2MeanType
|
||||
{
|
||||
const word& fieldName = faItems_[fieldi].fieldName();
|
||||
|
||||
if (obr_.foundObject<Type1>(fieldName))
|
||||
if (foundObject<Type1>(fieldName))
|
||||
{
|
||||
const Type1& meanField =
|
||||
obr_.lookupObject<Type1>(faItems_[fieldi].meanFieldName());
|
||||
lookupObject<Type1>(faItems_[fieldi].meanFieldName());
|
||||
|
||||
Type2& prime2MeanField = const_cast<Type2&>
|
||||
(
|
||||
obr_.lookupObject<Type2>(faItems_[fieldi].prime2MeanFieldName())
|
||||
);
|
||||
Type2& prime2MeanField =
|
||||
lookupObjectRef<Type2>(faItems_[fieldi].prime2MeanFieldName());
|
||||
|
||||
prime2MeanField += sqr(meanField);
|
||||
}
|
||||
@ -350,9 +367,11 @@ void Foam::functionObjects::fieldAverage::addMeanSqrToPrime2Mean() const
|
||||
{
|
||||
typedef GeometricField<Type1, fvPatchField, volMesh> VolFieldType1;
|
||||
typedef GeometricField<Type1, fvsPatchField, surfaceMesh> SurfaceFieldType1;
|
||||
typedef DimensionedField<Type1, surfGeoMesh> SurfFieldType1;
|
||||
|
||||
typedef GeometricField<Type2, fvPatchField, volMesh> VolFieldType2;
|
||||
typedef GeometricField<Type2, fvsPatchField, surfaceMesh> SurfaceFieldType2;
|
||||
typedef DimensionedField<Type2, surfGeoMesh> SurfFieldType2;
|
||||
|
||||
forAll(faItems_, i)
|
||||
{
|
||||
@ -360,6 +379,7 @@ void Foam::functionObjects::fieldAverage::addMeanSqrToPrime2Mean() const
|
||||
{
|
||||
addMeanSqrToPrime2MeanType<VolFieldType1, VolFieldType2>(i);
|
||||
addMeanSqrToPrime2MeanType<SurfaceFieldType1, SurfaceFieldType2>(i);
|
||||
addMeanSqrToPrime2MeanType<SurfFieldType1, SurfFieldType2>(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -371,9 +391,9 @@ void Foam::functionObjects::fieldAverage::writeFieldType
|
||||
const word& fieldName
|
||||
) const
|
||||
{
|
||||
if (obr_.foundObject<Type>(fieldName))
|
||||
if (foundObject<Type>(fieldName))
|
||||
{
|
||||
const Type& f = obr_.lookupObject<Type>(fieldName);
|
||||
const Type& f = lookupObject<Type>(fieldName);
|
||||
f.write();
|
||||
}
|
||||
}
|
||||
@ -384,6 +404,7 @@ void Foam::functionObjects::fieldAverage::writeFields() const
|
||||
{
|
||||
typedef GeometricField<Type, fvPatchField, volMesh> VolFieldType;
|
||||
typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfaceFieldType;
|
||||
typedef DimensionedField<Type, surfGeoMesh> SurfFieldType;
|
||||
|
||||
forAll(faItems_, i)
|
||||
{
|
||||
@ -392,12 +413,14 @@ void Foam::functionObjects::fieldAverage::writeFields() const
|
||||
const word& fieldName = faItems_[i].meanFieldName();
|
||||
writeFieldType<VolFieldType>(fieldName);
|
||||
writeFieldType<SurfaceFieldType>(fieldName);
|
||||
writeFieldType<SurfFieldType>(fieldName);
|
||||
}
|
||||
if (faItems_[i].prime2Mean())
|
||||
{
|
||||
const word& fieldName = faItems_[i].prime2MeanFieldName();
|
||||
writeFieldType<VolFieldType>(fieldName);
|
||||
writeFieldType<SurfaceFieldType>(fieldName);
|
||||
writeFieldType<SurfFieldType>(fieldName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2016 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -25,6 +25,7 @@ License
|
||||
|
||||
#include "volFields.H"
|
||||
#include "surfaceFields.H"
|
||||
#include "surfFields.H"
|
||||
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
@ -33,6 +34,7 @@ bool Foam::functionObjects::fieldsExpression::calcFieldTypes(FOType& fo)
|
||||
{
|
||||
typedef GeometricField<Type, fvPatchField, volMesh> VolFieldType;
|
||||
typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfaceFieldType;
|
||||
typedef DimensionedField<Type, surfGeoMesh> SurfFieldType;
|
||||
|
||||
if (foundObject<VolFieldType>(fieldNames_[0]))
|
||||
{
|
||||
@ -50,6 +52,14 @@ bool Foam::functionObjects::fieldsExpression::calcFieldTypes(FOType& fo)
|
||||
fo.template calcFieldType<SurfaceFieldType>()
|
||||
);
|
||||
}
|
||||
else if (foundObject<SurfFieldType>(fieldNames_[0]))
|
||||
{
|
||||
return store
|
||||
(
|
||||
resultName_,
|
||||
fo.template calcFieldType<SurfFieldType>()
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
|
||||
@ -32,6 +32,7 @@ Description
|
||||
|
||||
The operation can be applied to any volume or surface fields generating a
|
||||
volume or surface scalar field.
|
||||
With the %subRegion option, also supports fields on a surfMesh.
|
||||
|
||||
See also
|
||||
Foam::functionObjects::fvMeshFunctionObject
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2012-2016 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -25,6 +25,7 @@ License
|
||||
|
||||
#include "volFields.H"
|
||||
#include "surfaceFields.H"
|
||||
#include "surfFields.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
@ -33,6 +34,7 @@ bool Foam::functionObjects::mag::calcMag()
|
||||
{
|
||||
typedef GeometricField<Type, fvPatchField, volMesh> VolFieldType;
|
||||
typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfaceFieldType;
|
||||
typedef DimensionedField<Type, surfGeoMesh> SurfFieldType;
|
||||
|
||||
if (foundObject<VolFieldType>(fieldName_))
|
||||
{
|
||||
@ -50,6 +52,14 @@ bool Foam::functionObjects::mag::calcMag()
|
||||
Foam::mag(lookupObject<SurfaceFieldType>(fieldName_))
|
||||
);
|
||||
}
|
||||
else if (foundObject<SurfFieldType>(fieldName_))
|
||||
{
|
||||
return store
|
||||
(
|
||||
resultName_,
|
||||
Foam::mag(lookupObject<SurfFieldType>(fieldName_))
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2016 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -32,6 +32,7 @@ Description
|
||||
|
||||
The operation can be applied to any volume or surface field generating a
|
||||
volume or surface scalar field.
|
||||
With the %subRegion option, also supports fields on a surfMesh.
|
||||
|
||||
See also
|
||||
Foam::functionObjects::fvMeshFunctionObject
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2016 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
\\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
@ -25,6 +25,7 @@ License
|
||||
|
||||
#include "volFields.H"
|
||||
#include "surfaceFields.H"
|
||||
#include "surfFields.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
@ -33,6 +34,7 @@ bool Foam::functionObjects::magSqr::calcMagSqr()
|
||||
{
|
||||
typedef GeometricField<Type, fvPatchField, volMesh> VolFieldType;
|
||||
typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfaceFieldType;
|
||||
typedef DimensionedField<Type, surfGeoMesh> SurfFieldType;
|
||||
|
||||
if (foundObject<VolFieldType>(fieldName_))
|
||||
{
|
||||
@ -50,6 +52,14 @@ bool Foam::functionObjects::magSqr::calcMagSqr()
|
||||
Foam::magSqr(lookupObject<SurfaceFieldType>(fieldName_))
|
||||
);
|
||||
}
|
||||
else if (foundObject<SurfFieldType>(fieldName_))
|
||||
{
|
||||
return store
|
||||
(
|
||||
resultName_,
|
||||
Foam::magSqr(lookupObject<SurfFieldType>(fieldName_))
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
|
||||
@ -26,6 +26,7 @@ License
|
||||
#include "readFields.H"
|
||||
#include "volFields.H"
|
||||
#include "surfaceFields.H"
|
||||
#include "surfFields.H"
|
||||
#include "Time.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -35,6 +36,7 @@ bool Foam::functionObjects::readFields::loadField(const word& fieldName)
|
||||
{
|
||||
typedef GeometricField<Type, fvPatchField, volMesh> VolFieldType;
|
||||
typedef GeometricField<Type, fvsPatchField, surfaceMesh> SurfaceFieldType;
|
||||
typedef DimensionedField<Type, surfGeoMesh> SurfFieldType;
|
||||
|
||||
if (foundObject<VolFieldType>(fieldName))
|
||||
{
|
||||
@ -49,6 +51,12 @@ bool Foam::functionObjects::readFields::loadField(const word& fieldName)
|
||||
<< " " << fieldName << " already exists in database"
|
||||
<< " already in database" << endl;
|
||||
}
|
||||
else if (foundObject<SurfFieldType>(fieldName))
|
||||
{
|
||||
DebugInfo<< "readFields: " << SurfFieldType::typeName
|
||||
<< " " << fieldName << " already exists in database"
|
||||
<< " already in database" << endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
IOobject fieldHeader
|
||||
@ -76,6 +84,23 @@ bool Foam::functionObjects::readFields::loadField(const word& fieldName)
|
||||
mesh_.objectRegistry::store(sfPtr);
|
||||
return true;
|
||||
}
|
||||
else if (fieldHeader.typeHeaderOk<SurfFieldType>(true))
|
||||
{
|
||||
if (isA<surfMesh>(obr()))
|
||||
{
|
||||
const surfMesh& s = dynamicCast<const surfMesh>(obr());
|
||||
|
||||
// Store field on surfMesh database
|
||||
Log << " Reading " << fieldName << endl;
|
||||
SurfFieldType* sfPtr(new SurfFieldType(fieldHeader, s));
|
||||
s.store(sfPtr);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user