From 7b788f0922235034db0846071bf7d176d8dd3dfd Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Thu, 11 Aug 2016 15:11:19 +0100 Subject: [PATCH] functionObjects::volRegion: General base-class to handle vol (cell) region processing Renamed the original volRegion -> volFieldValue to clarify the purpose of this class to process vol fields on a volRegion. --- .../postProcessing/minMax/cellMinMax.cfg | 2 +- src/finiteVolume/Make/files | 3 +- .../fvMeshFunctionObject.C | 0 .../fvMeshFunctionObject.H | 0 .../functionObjects/volRegion/volRegion.C | 189 ++++++++++++++++++ .../functionObjects/volRegion/volRegion.H | 185 +++++++++++++++++ .../functionObjects}/volRegion/volRegionI.H | 16 +- src/functionObjects/field/Make/files | 4 +- .../field/fieldValues/fieldValue/fieldValue.H | 2 +- .../surfaceFieldValue.C} | 53 ++--- .../surfaceFieldValue.H} | 46 ++--- .../surfaceFieldValueI.H} | 14 +- .../surfaceFieldValueTemplates.C} | 17 +- .../volFieldValue.C} | 38 ++-- .../volFieldValue.H} | 38 ++-- .../volFieldValue/volFieldValueI.H | 44 ++++ .../volFieldValueTemplates.C} | 12 +- .../regionSizeDistribution.C | 2 +- 18 files changed, 539 insertions(+), 126 deletions(-) rename src/finiteVolume/{fvMesh => functionObjects}/fvMeshFunctionObject/fvMeshFunctionObject.C (100%) rename src/finiteVolume/{fvMesh => functionObjects}/fvMeshFunctionObject/fvMeshFunctionObject.H (100%) create mode 100644 src/finiteVolume/functionObjects/volRegion/volRegion.C create mode 100644 src/finiteVolume/functionObjects/volRegion/volRegion.H rename src/{functionObjects/field/fieldValues => finiteVolume/functionObjects}/volRegion/volRegionI.H (78%) rename src/functionObjects/field/fieldValues/{surfaceRegion/surfaceRegion.C => surfaceFieldValue/surfaceFieldValue.C} (91%) rename src/functionObjects/field/fieldValues/{surfaceRegion/surfaceRegion.H => surfaceFieldValue/surfaceFieldValue.H} (92%) rename src/functionObjects/field/fieldValues/{surfaceRegion/surfaceRegionI.H => surfaceFieldValue/surfaceFieldValueI.H} (77%) rename src/functionObjects/field/fieldValues/{surfaceRegion/surfaceRegionTemplates.C => surfaceFieldValue/surfaceFieldValueTemplates.C} (95%) rename src/functionObjects/field/fieldValues/{volRegion/volRegion.C => volFieldValue/volFieldValue.C} (84%) rename src/functionObjects/field/fieldValues/{volRegion/volRegion.H => volFieldValue/volFieldValue.H} (90%) create mode 100644 src/functionObjects/field/fieldValues/volFieldValue/volFieldValueI.H rename src/functionObjects/field/fieldValues/{volRegion/volRegionTemplates.C => volFieldValue/volFieldValueTemplates.C} (93%) diff --git a/etc/caseDicts/postProcessing/minMax/cellMinMax.cfg b/etc/caseDicts/postProcessing/minMax/cellMinMax.cfg index 383fe224d3..881093ef31 100644 --- a/etc/caseDicts/postProcessing/minMax/cellMinMax.cfg +++ b/etc/caseDicts/postProcessing/minMax/cellMinMax.cfg @@ -6,7 +6,7 @@ | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ -type volRegion; +type volFieldValue; libs ("libfieldFunctionObjects.so"); writeControl timeStep; diff --git a/src/finiteVolume/Make/files b/src/finiteVolume/Make/files index 2f4ed7e376..20ef3e4f13 100644 --- a/src/finiteVolume/Make/files +++ b/src/finiteVolume/Make/files @@ -91,7 +91,8 @@ $(faceToCell)/extendedFaceToCellStencil.C $(faceToCell)/extendedCentredFaceToCellStencil.C $(faceToCell)/MeshObjects/centredCFCFaceToCellStencilObject.C -fvMesh/fvMeshFunctionObject/fvMeshFunctionObject.C +functionObjects/fvMeshFunctionObject/fvMeshFunctionObject.C +functionObjects/volRegion/volRegion.C fvPatchFields = fields/fvPatchFields $(fvPatchFields)/fvPatchField/fvPatchFields.C diff --git a/src/finiteVolume/fvMesh/fvMeshFunctionObject/fvMeshFunctionObject.C b/src/finiteVolume/functionObjects/fvMeshFunctionObject/fvMeshFunctionObject.C similarity index 100% rename from src/finiteVolume/fvMesh/fvMeshFunctionObject/fvMeshFunctionObject.C rename to src/finiteVolume/functionObjects/fvMeshFunctionObject/fvMeshFunctionObject.C diff --git a/src/finiteVolume/fvMesh/fvMeshFunctionObject/fvMeshFunctionObject.H b/src/finiteVolume/functionObjects/fvMeshFunctionObject/fvMeshFunctionObject.H similarity index 100% rename from src/finiteVolume/fvMesh/fvMeshFunctionObject/fvMeshFunctionObject.H rename to src/finiteVolume/functionObjects/fvMeshFunctionObject/fvMeshFunctionObject.H diff --git a/src/finiteVolume/functionObjects/volRegion/volRegion.C b/src/finiteVolume/functionObjects/volRegion/volRegion.C new file mode 100644 index 0000000000..be2bca5e83 --- /dev/null +++ b/src/finiteVolume/functionObjects/volRegion/volRegion.C @@ -0,0 +1,189 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation + \\/ M anipulation | +------------------------------------------------------------------------------- +License + This file is part of OpenFOAM. + + OpenFOAM is free software: you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OpenFOAM is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with OpenFOAM. If not, see . + +\*---------------------------------------------------------------------------*/ + +#include "volRegion.H" +#include "volMesh.H" +#include "globalMeshData.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ +namespace functionObjects +{ + defineTypeNameAndDebug(volRegion, 0); +} +} + +template<> +const char* +Foam::NamedEnum +< + Foam::functionObjects::volRegion::regionTypes, + 2 +>::names[] = {"cellZone", "all"}; + +const Foam::NamedEnum +< + Foam::functionObjects::volRegion::regionTypes, + 2 +> Foam::functionObjects::volRegion::regionTypeNames_; + + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +void Foam::functionObjects::volRegion::writeFileHeader +( + const writeFile& wf, + Ostream& file +) +{ + wf.writeCommented(file, "Region : "); + file << regionTypeNames_[regionType_] << " " << regionName_ << endl; + wf.writeHeaderValue(file, "Cells", nCells()); + wf.writeHeaderValue(file, "Volume", V()); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::functionObjects::volRegion::volRegion +( + const fvMesh& mesh, + const dictionary& dict +) +: + mesh_(mesh), + regionType_ + ( + dict.found("regionType") + ? regionTypeNames_.read(dict.lookup("regionType")) + : vrtAll + ), + regionID_(-1) +{ + read(dict); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::functionObjects::volRegion::~volRegion() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +bool Foam::functionObjects::volRegion::read +( + const dictionary& dict +) +{ + switch (regionType_) + { + case vrtCellZone: + { + dict.lookup("name") >> regionName_; + + regionID_ = mesh_.cellZones().findZoneID(regionName_); + + if (regionID_ < 0) + { + FatalIOErrorInFunction(dict) + << "Unknown cell zone name: " << regionName_ + << ". Valid cell zones are: " << mesh_.cellZones().names() + << exit(FatalIOError); + } + + if (nCells() == 0) + { + FatalIOErrorInFunction(dict) + << regionTypeNames_[regionType_] + << "(" << regionName_ << "):" << nl + << " Region has no cells" + << exit(FatalIOError); + } + + break; + } + + case vrtAll: + { + break; + } + + default: + { + FatalIOErrorInFunction(dict) + << "Unknown region type. Valid region types are:" + << regionTypeNames_ + << exit(FatalIOError); + } + } + + return true; +} + + +const Foam::labelList& Foam::functionObjects::volRegion::cellIDs() const +{ + if (regionType_ == vrtAll) + { + return labelList::null(); + } + else + { + return mesh_.cellZones()[regionID_]; + } +} + + +Foam::label Foam::functionObjects::volRegion::nCells() const +{ + if (regionType_ == vrtAll) + { + return mesh_.globalData().nTotalCells(); + } + else + { + return returnReduce(cellIDs().size(), sumOp