From b8d15ba459a577aeecc95586bda5d4ff73e9dabc Mon Sep 17 00:00:00 2001 From: Henry Date: Sun, 31 May 2015 16:38:01 +0100 Subject: [PATCH] fvOptions: Separate options for all cells, cellSets and inter-region coupling by introducing rational base-classes rather than using the hideous 'switch' statement. Further rationalization of the cell-selection mechanism will be implemented via an appropriate class hierarchy to replace the remaining 'switch' statement. Mesh-motion is currently handled very inefficiently for cellSets and not at all for inter-region coupling. The former will be improved when the cell-selection classes are written and the latter by making the meshToMesh class a MeshObject after it has been corrected for mapFields. --- src/fvOptions/Make/files | 29 +- src/fvOptions/cellSetOption/cellSetOption.C | 237 +++++++ src/fvOptions/cellSetOption/cellSetOption.H | 222 +++++++ src/fvOptions/cellSetOption/cellSetOptionI.H | 91 +++ .../cellSetOptionIO.C} | 30 +- .../fixedTemperatureConstraint.C | 4 +- .../fixedTemperatureConstraint.H | 6 +- .../temperatureLimitsConstraint.C | 4 +- .../temperatureLimitsConstraint.H | 6 +- .../explicitSetValue/ExplicitSetValue.C | 4 +- .../explicitSetValue/ExplicitSetValue.H | 6 +- .../{fvOptions => fvOption}/fvIOoptionList.C | 2 +- .../{fvOptions => fvOption}/fvIOoptionList.H | 2 +- src/fvOptions/fvOption/fvOption.C | 335 ++++++++++ .../{fvOptions => fvOption}/fvOption.H | 111 +--- .../{fvOptions => fvOption}/fvOptionI.H | 86 +-- src/fvOptions/fvOption/fvOptionIO.C | 58 ++ .../{fvOptions => fvOption}/fvOptionList.C | 0 .../{fvOptions => fvOption}/fvOptionList.H | 0 .../fvOptionListTemplates.C | 2 +- .../{fvOptions => fvOption}/makeFvOption.H | 0 src/fvOptions/fvOptions/fvOption.C | 613 ------------------ .../interRegionOption/interRegionOption.C | 121 ++++ .../interRegionOption/interRegionOption.H | 132 ++++ .../interRegionOption/interRegionOptionI.H | 52 ++ .../interRegionOption/interRegionOptionIO.C | 52 ++ .../actuationDiskSource/actuationDiskSource.C | 4 +- .../actuationDiskSource/actuationDiskSource.H | 6 +- .../effectivenessHeatExchangerSource.C | 4 +- .../effectivenessHeatExchangerSource.H | 13 +- .../explicitPorositySource.C | 4 +- .../explicitPorositySource.H | 4 +- .../pressureGradientExplicitSource.C | 4 +- .../pressureGradientExplicitSource.H | 6 +- .../derived/rotorDiskSource/rotorDiskSource.C | 4 +- .../derived/rotorDiskSource/rotorDiskSource.H | 6 +- .../rotorDiskSourceTemplates.C | 3 +- .../solidificationMeltingSource.C | 4 +- .../solidificationMeltingSource.H | 13 +- .../tabulatedAccelerationSource.H | 4 +- .../sources/general/codedSource/CodedSource.C | 4 +- .../sources/general/codedSource/CodedSource.H | 9 +- .../semiImplicitSource/SemiImplicitSource.C | 4 +- .../semiImplicitSource/SemiImplicitSource.H | 6 +- .../interRegionExplicitPorositySource.C | 4 +- .../interRegionExplicitPorositySource.H | 6 +- .../constantHeatTransfer.C | 2 +- .../constantHeatTransfer.H | 2 +- .../interRegionHeatTransferModel.C | 48 +- .../interRegionHeatTransferModel.H | 29 +- .../interRegionHeatTransferModelI.H | 26 +- .../interRegionHeatTransferModelIO.C | 54 ++ .../interRegionHeatTransferModelTemplates.C | 2 +- .../tabulatedHeatTransfer.C | 2 +- .../tabulatedHeatTransfer.H | 2 +- .../variableHeatTransfer.C | 0 .../variableHeatTransfer.H | 2 +- .../angledDuct/constant/fvOptions | 7 +- .../ras/angledDuct/constant/fvOptions | 7 +- .../ras/angledDuct/constant/polyMesh/boundary | 6 +- .../ras/mixerVessel2D/constant/fvOptions | 5 +- .../mixerVessel2D/constant/polyMesh/boundary | 4 + .../angledDuct/constant/fvOptions | 7 +- .../angledDuctImplicit/constant/fvOptions | 7 +- .../constant/polyMesh/boundary | 2 +- .../constant/fvOptions | 12 +- .../heatExchanger/constant/air/fvOptions | 18 +- .../heatExchanger/constant/porous/fvOptions | 11 +- .../pimpleFoam/channel395/constant/fvOptions | 9 +- .../turbineSiting/constant/fvOptions | 37 +- .../simplifiedSiwek/constant/fvOptions | 11 +- .../filter/constant/fvOptions | 58 +- .../ras/angledDuct/constant/fvOptions | 7 +- .../laminar/injection/0/p_rgh | 9 +- .../laminar/injection/constant/fvOptions | 12 +- 75 files changed, 1647 insertions(+), 1068 deletions(-) create mode 100644 src/fvOptions/cellSetOption/cellSetOption.C create mode 100644 src/fvOptions/cellSetOption/cellSetOption.H create mode 100644 src/fvOptions/cellSetOption/cellSetOptionI.H rename src/fvOptions/{fvOptions/fvOptionIO.C => cellSetOption/cellSetOptionIO.C} (80%) rename src/fvOptions/{fvOptions => fvOption}/fvIOoptionList.C (97%) rename src/fvOptions/{fvOptions => fvOption}/fvIOoptionList.H (97%) create mode 100644 src/fvOptions/fvOption/fvOption.C rename src/fvOptions/{fvOptions => fvOption}/fvOption.H (79%) rename src/fvOptions/{fvOptions => fvOption}/fvOptionI.H (54%) create mode 100644 src/fvOptions/fvOption/fvOptionIO.C rename src/fvOptions/{fvOptions => fvOption}/fvOptionList.C (100%) rename src/fvOptions/{fvOptions => fvOption}/fvOptionList.H (100%) rename src/fvOptions/{fvOptions => fvOption}/fvOptionListTemplates.C (98%) rename src/fvOptions/{fvOptions => fvOption}/makeFvOption.H (100%) delete mode 100644 src/fvOptions/fvOptions/fvOption.C create mode 100644 src/fvOptions/interRegionOption/interRegionOption.C create mode 100644 src/fvOptions/interRegionOption/interRegionOption.H create mode 100644 src/fvOptions/interRegionOption/interRegionOptionI.H create mode 100644 src/fvOptions/interRegionOption/interRegionOptionIO.C rename src/fvOptions/sources/interRegion/{interRegionHeatTransferModel => interRegionHeatTransfer}/constantHeatTransfer/constantHeatTransfer.C (98%) rename src/fvOptions/sources/interRegion/{interRegionHeatTransferModel => interRegionHeatTransfer}/constantHeatTransfer/constantHeatTransfer.H (97%) rename src/fvOptions/sources/interRegion/{interRegionHeatTransferModel => interRegionHeatTransfer}/interRegionHeatTransferModel/interRegionHeatTransferModel.C (86%) rename src/fvOptions/sources/interRegion/{interRegionHeatTransferModel => interRegionHeatTransfer}/interRegionHeatTransferModel/interRegionHeatTransferModel.H (94%) rename src/fvOptions/sources/interRegion/{interRegionHeatTransferModel => interRegionHeatTransfer}/interRegionHeatTransferModel/interRegionHeatTransferModelI.H (78%) create mode 100644 src/fvOptions/sources/interRegion/interRegionHeatTransfer/interRegionHeatTransferModel/interRegionHeatTransferModelIO.C rename src/fvOptions/sources/interRegion/{interRegionHeatTransferModel => interRegionHeatTransfer}/interRegionHeatTransferModel/interRegionHeatTransferModelTemplates.C (97%) rename src/fvOptions/sources/interRegion/{interRegionHeatTransferModel => interRegionHeatTransfer}/tabulatedHeatTransfer/tabulatedHeatTransfer.C (98%) rename src/fvOptions/sources/interRegion/{interRegionHeatTransferModel => interRegionHeatTransfer}/tabulatedHeatTransfer/tabulatedHeatTransfer.H (98%) rename src/fvOptions/sources/interRegion/{interRegionHeatTransferModel => interRegionHeatTransfer}/variableHeatTransfer/variableHeatTransfer.C (100%) rename src/fvOptions/sources/interRegion/{interRegionHeatTransferModel => interRegionHeatTransfer}/variableHeatTransfer/variableHeatTransfer.H (98%) diff --git a/src/fvOptions/Make/files b/src/fvOptions/Make/files index d16c8f6b9..ee2371113 100644 --- a/src/fvOptions/Make/files +++ b/src/fvOptions/Make/files @@ -1,10 +1,16 @@ -fvOptions/fvOption.C -fvOptions/fvOptionIO.C -fvOptions/fvOptionList.C -fvOptions/fvIOoptionList.C +fvOption/fvOption.C +fvOption/fvOptionIO.C +fvOption/fvOptionList.C +fvOption/fvIOoptionList.C + +cellSetOption/cellSetOption.C +cellSetOption/cellSetOptionIO.C + +interRegionOption/interRegionOption.C +interRegionOption/interRegionOptionIO.C -/* sources */ +/* Sources */ generalSources=sources/general $(generalSources)/codedSource/codedSource.C @@ -32,16 +38,17 @@ $(derivedSources)/solidificationMeltingSource/solidificationMeltingSourceIO.C $(derivedSources)/tabulatedAccelerationSource/tabulatedAccelerationSource.C $(derivedSources)/tabulatedAccelerationSource/tabulated6DoFAcceleration/tabulated6DoFAcceleration.C + interRegion = sources/interRegion -$(interRegion)/interRegionHeatTransferModel/constantHeatTransfer/constantHeatTransfer.C -$(interRegion)/interRegionHeatTransferModel/interRegionHeatTransferModel/interRegionHeatTransferModel.C -$(interRegion)/interRegionHeatTransferModel/tabulatedHeatTransfer/tabulatedHeatTransfer.C -$(interRegion)/interRegionHeatTransferModel/variableHeatTransfer/variableHeatTransfer.C +$(interRegion)/interRegionHeatTransfer/interRegionHeatTransferModel/interRegionHeatTransferModel.C +$(interRegion)/interRegionHeatTransfer/interRegionHeatTransferModel/interRegionHeatTransferModelIO.C +$(interRegion)/interRegionHeatTransfer/constantHeatTransfer/constantHeatTransfer.C +$(interRegion)/interRegionHeatTransfer/tabulatedHeatTransfer/tabulatedHeatTransfer.C +$(interRegion)/interRegionHeatTransfer/variableHeatTransfer/variableHeatTransfer.C $(interRegion)/interRegionExplicitPorositySource/interRegionExplicitPorositySource.C - -/* constraints */ +/* Constraints */ generalConstraints=constraints/general $(generalConstraints)/explicitSetValue/explicitSetValue.C diff --git a/src/fvOptions/cellSetOption/cellSetOption.C b/src/fvOptions/cellSetOption/cellSetOption.C new file mode 100644 index 000000000..0711348e8 --- /dev/null +++ b/src/fvOptions/cellSetOption/cellSetOption.C @@ -0,0 +1,237 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2011-2015 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 "cellSetOption.H" +#include "volFields.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +namespace Foam +{ + namespace fv + { + defineTypeNameAndDebug(cellSetOption, 0); + } + + template<> const char* NamedEnum + < + fv::cellSetOption::selectionModeType, + 4 + >::names[] = + { + "points", + "cellSet", + "cellZone", + "all" + }; + + const NamedEnum + fv::cellSetOption::selectionModeTypeNames_; +} + + +// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // + +void Foam::fv::cellSetOption::setSelection(const dictionary& dict) +{ + switch (selectionMode_) + { + case smPoints: + { + dict.lookup("points") >> points_; + break; + } + case smCellSet: + { + dict.lookup("cellSet") >> cellSetName_; + break; + } + case smCellZone: + { + dict.lookup("cellZone") >> cellSetName_; + break; + } + case smAll: + { + break; + } + default: + { + FatalErrorIn("::setSelection(const dictionary&)") + << "Unknown selectionMode " + << selectionModeTypeNames_[selectionMode_] + << ". Valid selectionMode types are" << selectionModeTypeNames_ + << exit(FatalError); + } + } +} + + +void Foam::fv::cellSetOption::setCellSet() +{ + switch (selectionMode_) + { + case smPoints: + { + Info<< indent << "- selecting cells using points" << endl; + + labelHashSet selectedCells; + + forAll(points_, i) + { + label cellI = mesh_.findCell(points_[i]); + if (cellI >= 0) + { + selectedCells.insert(cellI); + } + + label globalCellI = returnReduce(cellI, maxOp