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