From 3b6761afed8d71a47177578d4482fcafcdeca6f2 Mon Sep 17 00:00:00 2001 From: Mark Olesen Date: Sun, 24 Apr 2022 15:06:40 +0200 Subject: [PATCH 1/8] ENH: code modernization for decompose/reconstruct - simplify procAddressing read/write - avoid accessing points in faMeshReconstructor. Can rely on the patch meshPoints (labelList), which does not need access to a pointField - report number of points on decomposed mesh. Can be useful additional information. Additional statistics for finite area decomposition - provide bundled reconstructAllFields for various reconstructors - remove reconstructPar checks for very old face addressing (from foam2.0 - ie, older than OpenFOAM itself) - bundle all reading into fieldsDistributor tools, where it can be reused by various utilities as required. - combine decomposition fields as respective fieldsCache which eliminates most of the clutter from decomposePar and similfies reuse in the future. STYLE: remove old wordHashSet selection (deprecated in 2018) BUG: incorrect face flip handling for faMeshReconstructor - a latent bug which is not yet triggered since the faMesh faces are currently only definable on boundary faces (which never flip) --- .../finiteArea/makeFaMesh/decomposeFaFields.H | 73 +-- .../finiteArea/makeFaMesh/makeFaMesh.C | 1 + .../decomposePar/Make/files | 2 - .../decomposePar/decomposePar.C | 404 ++-------------- .../decomposePar/domainDecomposition.C | 198 ++++---- .../decomposePar/readFields.C | 90 ---- .../reconstructPar/checkFaceAddressingComp.H | 48 -- .../reconstructPar/reconstructPar.C | 286 ++--------- .../reconstructParMesh/reconstructParMesh.C | 11 +- .../redistributePar/redistributePar.C | 323 ++++--------- .../fieldsDistributor/fieldsDistributor.H | 82 +++- .../fieldsDistributorTemplates.C | 330 +++++++++++++ src/parallel/decompose/decompose/Make/files | 7 + .../decompose/decompose/dimFieldDecomposer.H | 8 +- ...Fields.C => dimFieldDecomposerTemplates.C} | 4 +- .../decompose/decompose/fvFieldDecomposer.C | 9 +- .../decompose/decompose/fvFieldDecomposer.H | 100 +++- .../decompose/fvFieldDecomposerCache.C | 228 +++++++++ ...rFields.C => fvFieldDecomposerTemplates.C} | 18 +- .../decompose}/lagrangianFieldDecomposer.C | 2 +- .../decompose}/lagrangianFieldDecomposer.H | 108 ++++- .../lagrangianFieldDecomposerCache.C | 241 ++++++++++ .../lagrangianFieldDecomposerReadFields.C | 108 +++++ .../lagrangianFieldDecomposerTemplates.C | 122 +---- .../decompose/pointFieldDecomposer.H | 94 +++- .../decompose/pointFieldDecomposerCache.C | 208 ++++++++ ...elds.C => pointFieldDecomposerTemplates.C} | 4 +- src/parallel/decompose/faDecompose/Make/files | 2 + .../decompose/faDecompose/faFieldDecomposer.H | 94 +++- .../faDecompose/faFieldDecomposerCache.C | 221 +++++++++ .../faDecompose/faFieldDecomposerReadFields.C | 92 ---- ...rFields.C => faFieldDecomposerTemplates.C} | 12 +- .../faDecompose/faMeshDecomposition.C | 320 ++++++------- .../faDecompose/faMeshDecomposition.H | 4 +- .../faReconstruct/faFieldReconstructor.C | 44 +- .../faReconstruct/faFieldReconstructor.H | 96 +++- ...elds.C => faFieldReconstructorTemplates.C} | 292 ++++++++---- .../faReconstruct/faMeshReconstructor.C | 16 +- .../faReconstruct/processorFaMeshes.C | 159 +++---- .../faReconstruct/processorFaMeshes.H | 24 +- .../reconstruct/fvFieldReconstructor.C | 42 ++ .../reconstruct/fvFieldReconstructor.H | 91 ++-- ...elds.C => fvFieldReconstructorTemplates.C} | 446 ++++++++---------- .../reconstruct/lagrangianReconstructor.C | 47 +- .../reconstruct/lagrangianReconstructor.H | 35 +- ...s.C => lagrangianReconstructorTemplates.C} | 103 ++-- .../reconstruct/pointFieldReconstructor.C | 27 ++ .../reconstruct/pointFieldReconstructor.H | 59 ++- ...s.C => pointFieldReconstructorTemplates.C} | 162 ++++--- .../reconstruct/reconstruct/processorMeshes.C | 195 +++----- .../reconstruct/reconstruct/processorMeshes.H | 21 +- 51 files changed, 3270 insertions(+), 2443 deletions(-) delete mode 100644 applications/utilities/parallelProcessing/decomposePar/readFields.C delete mode 100644 applications/utilities/parallelProcessing/reconstructPar/checkFaceAddressingComp.H rename applications/utilities/parallelProcessing/decomposePar/readFields.H => src/OpenFOAM/parallel/fieldsDistributor/fieldsDistributor.H (52%) create mode 100644 src/OpenFOAM/parallel/fieldsDistributor/fieldsDistributorTemplates.C rename src/parallel/decompose/decompose/{dimFieldDecomposerFields.C => dimFieldDecomposerTemplates.C} (96%) create mode 100644 src/parallel/decompose/decompose/fvFieldDecomposerCache.C rename src/parallel/decompose/decompose/{fvFieldDecomposerFields.C => fvFieldDecomposerTemplates.C} (96%) rename {applications/utilities/parallelProcessing/decomposePar => src/parallel/decompose/decompose}/lagrangianFieldDecomposer.C (99%) rename {applications/utilities/parallelProcessing/decomposePar => src/parallel/decompose/decompose}/lagrangianFieldDecomposer.H (64%) create mode 100644 src/parallel/decompose/decompose/lagrangianFieldDecomposerCache.C create mode 100644 src/parallel/decompose/decompose/lagrangianFieldDecomposerReadFields.C rename applications/utilities/parallelProcessing/decomposePar/lagrangianFieldDecomposerFields.C => src/parallel/decompose/decompose/lagrangianFieldDecomposerTemplates.C (52%) create mode 100644 src/parallel/decompose/decompose/pointFieldDecomposerCache.C rename src/parallel/decompose/decompose/{pointFieldDecomposerFields.C => pointFieldDecomposerTemplates.C} (97%) create mode 100644 src/parallel/decompose/faDecompose/faFieldDecomposerCache.C delete mode 100644 src/parallel/decompose/faDecompose/faFieldDecomposerReadFields.C rename src/parallel/decompose/faDecompose/{faFieldDecomposerFields.C => faFieldDecomposerTemplates.C} (95%) rename src/parallel/reconstruct/faReconstruct/{faFieldReconstructorFields.C => faFieldReconstructorTemplates.C} (80%) rename src/parallel/reconstruct/reconstruct/{fvFieldReconstructorFields.C => fvFieldReconstructorTemplates.C} (75%) rename src/parallel/reconstruct/reconstruct/{lagrangianReconstructorFields.C => lagrangianReconstructorTemplates.C} (77%) rename src/parallel/reconstruct/reconstruct/{pointFieldReconstructorFields.C => pointFieldReconstructorTemplates.C} (69%) diff --git a/applications/utilities/finiteArea/makeFaMesh/decomposeFaFields.H b/applications/utilities/finiteArea/makeFaMesh/decomposeFaFields.H index 703f72e28c..373d5c71e1 100644 --- a/applications/utilities/finiteArea/makeFaMesh/decomposeFaFields.H +++ b/applications/utilities/finiteArea/makeFaMesh/decomposeFaFields.H @@ -25,11 +25,7 @@ if (doDecompose && Pstream::parRun()) // Handle area fields // ------------------ - PtrList areaScalarFields; - PtrList areaVectorFields; - PtrList areaSphTensorFields; - PtrList areaSymmTensorFields; - PtrList areaTensorFields; + faFieldDecomposer::fieldsCache areaFieldsCache; const faMesh& fullMesh = reconstructor.mesh(); @@ -51,26 +47,7 @@ if (doDecompose && Pstream::parRun()) IOobjectList objects(fullMesh.time(), runTime.timeName()); - faFieldDecomposer::readFields - ( - fullMesh, objects, areaScalarFields - ); - faFieldDecomposer::readFields - ( - fullMesh, objects, areaVectorFields - ); - faFieldDecomposer::readFields - ( - fullMesh, objects, areaSphTensorFields - ); - faFieldDecomposer::readFields - ( - fullMesh, objects, areaSymmTensorFields - ); - faFieldDecomposer::readFields - ( - fullMesh, objects, areaTensorFields - ); + areaFieldsCache.readAllFields(fullMesh, objects); // Restore old settings if (oldHandler) @@ -81,14 +58,7 @@ if (doDecompose && Pstream::parRun()) } } - const label nAreaFields = - ( - areaScalarFields.size() - + areaVectorFields.size() - + areaSphTensorFields.size() - + areaSymmTensorFields.size() - + areaTensorFields.size() - ); + const label nAreaFields = areaFieldsCache.size(); if (nAreaFields) { @@ -103,41 +73,8 @@ if (doDecompose && Pstream::parRun()) reconstructor.boundaryProcAddressing() ); - if (areaScalarFields.size()) - { - Info<< " scalars: " - << flatOutput(PtrListOps::names(areaScalarFields)) << nl; - fieldDecomposer.decomposeFields(areaScalarFields); - } - - if (areaVectorFields.size()) - { - Info<< " vectors: " - << flatOutput(PtrListOps::names(areaVectorFields)) << nl; - fieldDecomposer.decomposeFields(areaVectorFields); - } - - if (areaSphTensorFields.size()) - { - Info<< " sphTensors: " - << flatOutput(PtrListOps::names(areaSphTensorFields)) << nl; - fieldDecomposer.decomposeFields(areaSphTensorFields); - } - - if (areaSymmTensorFields.size()) - { - Info<< " symmTensors: " - << flatOutput(PtrListOps::names(areaSymmTensorFields)) << nl; - fieldDecomposer.decomposeFields(areaSymmTensorFields); - } - - if (areaTensorFields.size()) - { - Info<< " tensors: " - << flatOutput(PtrListOps::names(areaTensorFields)) << nl; - fieldDecomposer.decomposeFields(areaTensorFields); - } - + // Report + areaFieldsCache.decomposeAllFields(fieldDecomposer, true); Info<< endl; } } diff --git a/applications/utilities/finiteArea/makeFaMesh/makeFaMesh.C b/applications/utilities/finiteArea/makeFaMesh/makeFaMesh.C index 5470eb5fb2..ca6c56eca3 100644 --- a/applications/utilities/finiteArea/makeFaMesh/makeFaMesh.C +++ b/applications/utilities/finiteArea/makeFaMesh/makeFaMesh.C @@ -46,6 +46,7 @@ Original Authors #include "IOobjectList.H" #include "areaFields.H" +#include "edgeFields.H" #include "faFieldDecomposer.H" #include "faMeshReconstructor.H" #include "PtrListOps.H" diff --git a/applications/utilities/parallelProcessing/decomposePar/Make/files b/applications/utilities/parallelProcessing/decomposePar/Make/files index d8bc47a315..138a14c9ca 100644 --- a/applications/utilities/parallelProcessing/decomposePar/Make/files +++ b/applications/utilities/parallelProcessing/decomposePar/Make/files @@ -8,6 +8,4 @@ domainDecompositionWrite.C domainDecompositionDryRun.C domainDecompositionDryRunWrite.C -lagrangianFieldDecomposer.C - EXE = $(FOAM_APPBIN)/decomposePar diff --git a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C index 07744ddebd..7157fa89dd 100644 --- a/applications/utilities/parallelProcessing/decomposePar/decomposePar.C +++ b/applications/utilities/parallelProcessing/decomposePar/decomposePar.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2017 OpenFOAM Foundation - Copyright (C) 2016-2021 OpenCFD Ltd. + Copyright (C) 2016-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -150,29 +150,19 @@ Usage #include "domainDecomposition.H" #include "domainDecompositionDryRun.H" -#include "labelIOField.H" -#include "labelFieldIOField.H" -#include "scalarIOField.H" -#include "scalarFieldIOField.H" -#include "vectorIOField.H" -#include "vectorFieldIOField.H" -#include "sphericalTensorIOField.H" -#include "sphericalTensorFieldIOField.H" -#include "symmTensorIOField.H" -#include "symmTensorFieldIOField.H" -#include "tensorIOField.H" -#include "tensorFieldIOField.H" -#include "pointFields.H" #include "regionProperties.H" -#include "readFields.H" +#include "fieldsDistributor.H" + #include "fvFieldDecomposer.H" +#include "pointFields.H" #include "pointFieldDecomposer.H" + #include "lagrangianFieldDecomposer.H" #include "emptyFaPatch.H" -#include "faMeshDecomposition.H" #include "faFieldDecomposer.H" +#include "faMeshDecomposition.H" // * * * * * * * * * * * * * * * Local Functions * * * * * * * * * * * * * * // @@ -838,58 +828,14 @@ int main(int argc, char *argv[]) } - // Vol fields - // ~~~~~~~~~~ - PtrList volScalarFields; - PtrList volVectorFields; - PtrList volSphTensorFields; - PtrList volSymmTensorFields; - PtrList volTensorFields; + // Volume/surface/internal fields + // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + fvFieldDecomposer::fieldsCache volumeFieldCache; if (doDecompFields) { - readFields(mesh, objects, volScalarFields, false); - readFields(mesh, objects, volVectorFields, false); - readFields(mesh, objects, volSphTensorFields, false); - readFields(mesh, objects, volSymmTensorFields, false); - readFields(mesh, objects, volTensorFields, false); - } - - // Internal fields - // ~~~~~~~~~~~~~~~ - PtrList> dimScalarFields; - PtrList> dimVectorFields; - PtrList> - dimSphTensorFields; - PtrList> - dimSymmTensorFields; - PtrList> dimTensorFields; - - if (doDecompFields) - { - readFields(mesh, objects, dimScalarFields); - readFields(mesh, objects, dimVectorFields); - readFields(mesh, objects, dimSphTensorFields); - readFields(mesh, objects, dimSymmTensorFields); - readFields(mesh, objects, dimTensorFields); - } - - // Surface fields - // ~~~~~~~~~~~~~~ - PtrList surfaceScalarFields; - PtrList surfaceVectorFields; - PtrList - surfaceSphTensorFields; - PtrList surfaceSymmTensorFields; - PtrList surfaceTensorFields; - - if (doDecompFields) - { - readFields(mesh, objects, surfaceScalarFields, false); - readFields(mesh, objects, surfaceVectorFields, false); - readFields(mesh, objects, surfaceSphTensorFields, false); - readFields(mesh, objects, surfaceSymmTensorFields, false); - readFields(mesh, objects, surfaceTensorFields, false); + volumeFieldCache.readAllFields(mesh, objects); } @@ -897,19 +843,11 @@ int main(int argc, char *argv[]) // ~~~~~~~~~~~~ const pointMesh& pMesh = pointMesh::New(mesh); - PtrList pointScalarFields; - PtrList pointVectorFields; - PtrList pointSphTensorFields; - PtrList pointSymmTensorFields; - PtrList pointTensorFields; + pointFieldDecomposer::fieldsCache pointFieldCache; if (doDecompFields) { - readFields(pMesh, objects, pointScalarFields, false); - readFields(pMesh, objects, pointVectorFields, false); - readFields(pMesh, objects, pointSphTensorFields, false); - readFields(pMesh, objects, pointSymmTensorFields, false); - readFields(pMesh, objects, pointTensorFields, false); + pointFieldCache.readAllFields(pMesh, objects); } @@ -938,63 +876,10 @@ int main(int argc, char *argv[]) cloudDirs.size() ); - PtrList> lagrangianLabelFields + lagrangianFieldDecomposer::fieldsCache lagrangianFieldCache ( cloudDirs.size() ); - PtrList> - lagrangianLabelFieldFields - ( - cloudDirs.size() - ); - PtrList> lagrangianScalarFields - ( - cloudDirs.size() - ); - PtrList> - lagrangianScalarFieldFields - ( - cloudDirs.size() - ); - PtrList> lagrangianVectorFields - ( - cloudDirs.size() - ); - PtrList> - lagrangianVectorFieldFields - ( - cloudDirs.size() - ); - PtrList> - lagrangianSphTensorFields - ( - cloudDirs.size() - ); - PtrList> - lagrangianSphTensorFieldFields - ( - cloudDirs.size() - ); - PtrList> - lagrangianSymmTensorFields - ( - cloudDirs.size() - ); - PtrList> - lagrangianSymmTensorFieldFields - ( - cloudDirs.size() - ); - PtrList> lagrangianTensorFields - ( - cloudDirs.size() - ); - PtrList> - lagrangianTensorFieldFields - ( - cloudDirs.size() - ); - label cloudI = 0; @@ -1095,88 +980,10 @@ int main(int argc, char *argv[]) false ); - lagrangianFieldDecomposer::readFields + lagrangianFieldCache.readAllFields ( cloudI, - lagrangianObjects, - lagrangianLabelFields - ); - - lagrangianFieldDecomposer::readFieldFields - ( - cloudI, - lagrangianObjects, - lagrangianLabelFieldFields - ); - - lagrangianFieldDecomposer::readFields - ( - cloudI, - lagrangianObjects, - lagrangianScalarFields - ); - - lagrangianFieldDecomposer::readFieldFields - ( - cloudI, - lagrangianObjects, - lagrangianScalarFieldFields - ); - - lagrangianFieldDecomposer::readFields - ( - cloudI, - lagrangianObjects, - lagrangianVectorFields - ); - - lagrangianFieldDecomposer::readFieldFields - ( - cloudI, - lagrangianObjects, - lagrangianVectorFieldFields - ); - - lagrangianFieldDecomposer::readFields - ( - cloudI, - lagrangianObjects, - lagrangianSphTensorFields - ); - - lagrangianFieldDecomposer::readFieldFields - ( - cloudI, - lagrangianObjects, - lagrangianSphTensorFieldFields - ); - - lagrangianFieldDecomposer::readFields - ( - cloudI, - lagrangianObjects, - lagrangianSymmTensorFields - ); - - lagrangianFieldDecomposer::readFieldFields - ( - cloudI, - lagrangianObjects, - lagrangianSymmTensorFieldFields - ); - - lagrangianFieldDecomposer::readFields - ( - cloudI, - lagrangianObjects, - lagrangianTensorFields - ); - - lagrangianFieldDecomposer::readFieldFields - ( - cloudI, - lagrangianObjects, - lagrangianTensorFieldFields + lagrangianObjects ); ++cloudI; @@ -1185,18 +992,7 @@ int main(int argc, char *argv[]) lagrangianPositions.resize(cloudI); cellParticles.resize(cloudI); - lagrangianLabelFields.resize(cloudI); - lagrangianLabelFieldFields.resize(cloudI); - lagrangianScalarFields.resize(cloudI); - lagrangianScalarFieldFields.resize(cloudI); - lagrangianVectorFields.resize(cloudI); - lagrangianVectorFieldFields.resize(cloudI); - lagrangianSphTensorFields.resize(cloudI); - lagrangianSphTensorFieldFields.resize(cloudI); - lagrangianSymmTensorFields.resize(cloudI); - lagrangianSymmTensorFieldFields.resize(cloudI); - lagrangianTensorFields.resize(cloudI); - lagrangianTensorFieldFields.resize(cloudI); + lagrangianFieldCache.resize(cloudI); Info<< endl; @@ -1291,35 +1087,11 @@ int main(int argc, char *argv[]) ) ); } - const fvFieldDecomposer& fieldDecomposer = - fieldDecomposerList[proci]; - // Vol fields - fieldDecomposer.decomposeFields(volScalarFields); - fieldDecomposer.decomposeFields(volVectorFields); - fieldDecomposer.decomposeFields(volSphTensorFields); - fieldDecomposer.decomposeFields(volSymmTensorFields); - fieldDecomposer.decomposeFields(volTensorFields); - - // Surface fields - fieldDecomposer.decomposeFields(surfaceScalarFields); - fieldDecomposer.decomposeFields(surfaceVectorFields); - fieldDecomposer.decomposeFields + volumeFieldCache.decomposeAllFields ( - surfaceSphTensorFields + fieldDecomposerList[proci] ); - fieldDecomposer.decomposeFields - ( - surfaceSymmTensorFields - ); - fieldDecomposer.decomposeFields(surfaceTensorFields); - - // internal fields - fieldDecomposer.decomposeFields(dimScalarFields); - fieldDecomposer.decomposeFields(dimVectorFields); - fieldDecomposer.decomposeFields(dimSphTensorFields); - fieldDecomposer.decomposeFields(dimSymmTensorFields); - fieldDecomposer.decomposeFields(dimTensorFields); if (times.size() == 1) { @@ -1330,14 +1102,7 @@ int main(int argc, char *argv[]) // Point fields - if - ( - pointScalarFields.size() - || pointVectorFields.size() - || pointSphTensorFields.size() - || pointSymmTensorFields.size() - || pointTensorFields.size() - ) + if (!pointFieldCache.empty()) { const labelIOList& pointProcAddressing = procAddressing ( @@ -1363,15 +1128,11 @@ int main(int argc, char *argv[]) ) ); } - const pointFieldDecomposer& pointDecomposer = - pointFieldDecomposerList[proci]; - - pointDecomposer.decomposeFields(pointScalarFields); - pointDecomposer.decomposeFields(pointVectorFields); - pointDecomposer.decomposeFields(pointSphTensorFields); - pointDecomposer.decomposeFields(pointSymmTensorFields); - pointDecomposer.decomposeFields(pointTensorFields); + pointFieldCache.decomposeAllFields + ( + pointFieldDecomposerList[proci] + ); if (times.size() == 1) { @@ -1382,9 +1143,9 @@ int main(int argc, char *argv[]) // If there is lagrangian data write it out - forAll(lagrangianPositions, cloudI) + forAll(lagrangianPositions, cloudi) { - if (lagrangianPositions[cloudI].size()) + if (lagrangianPositions[cloudi].size()) { lagrangianFieldDecomposer fieldDecomposer ( @@ -1392,74 +1153,18 @@ int main(int argc, char *argv[]) procMesh, faceProcAddressing, cellProcAddressing, - cloudDirs[cloudI], - lagrangianPositions[cloudI], - cellParticles[cloudI] + cloudDirs[cloudi], + lagrangianPositions[cloudi], + cellParticles[cloudi] ); // Lagrangian fields - { - fieldDecomposer.decomposeFields - ( - cloudDirs[cloudI], - lagrangianLabelFields[cloudI] - ); - fieldDecomposer.decomposeFieldFields - ( - cloudDirs[cloudI], - lagrangianLabelFieldFields[cloudI] - ); - fieldDecomposer.decomposeFields - ( - cloudDirs[cloudI], - lagrangianScalarFields[cloudI] - ); - fieldDecomposer.decomposeFieldFields - ( - cloudDirs[cloudI], - lagrangianScalarFieldFields[cloudI] - ); - fieldDecomposer.decomposeFields - ( - cloudDirs[cloudI], - lagrangianVectorFields[cloudI] - ); - fieldDecomposer.decomposeFieldFields - ( - cloudDirs[cloudI], - lagrangianVectorFieldFields[cloudI] - ); - fieldDecomposer.decomposeFields - ( - cloudDirs[cloudI], - lagrangianSphTensorFields[cloudI] - ); - fieldDecomposer.decomposeFieldFields - ( - cloudDirs[cloudI], - lagrangianSphTensorFieldFields[cloudI] - ); - fieldDecomposer.decomposeFields - ( - cloudDirs[cloudI], - lagrangianSymmTensorFields[cloudI] - ); - fieldDecomposer.decomposeFieldFields - ( - cloudDirs[cloudI], - lagrangianSymmTensorFieldFields[cloudI] - ); - fieldDecomposer.decomposeFields - ( - cloudDirs[cloudI], - lagrangianTensorFields[cloudI] - ); - fieldDecomposer.decomposeFieldFields - ( - cloudDirs[cloudI], - lagrangianTensorFieldFields[cloudI] - ); - } + lagrangianFieldCache.decomposeAllFields + ( + cloudi, + cloudDirs[cloudi], + fieldDecomposer + ); } } @@ -1506,38 +1211,17 @@ int main(int argc, char *argv[]) aMesh.writeDecomposition(); - // Area fields - // ~~~~~~~~~~~ - PtrList areaScalarFields; - PtrList areaVectorFields; - PtrList areaSphTensorFields; - PtrList areaSymmTensorFields; - PtrList areaTensorFields; + // Area/edge fields + // ~~~~~~~~~~~~~~~~ - // Edge fields (limited number of types) - // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - PtrList edgeScalarFields; + faFieldDecomposer::fieldsCache areaFieldCache; if (doDecompFields) { - readFields(aMesh, objects, areaScalarFields); - readFields(aMesh, objects, areaVectorFields); - readFields(aMesh, objects, areaSphTensorFields); - readFields(aMesh, objects, areaSymmTensorFields); - readFields(aMesh, objects, areaTensorFields); - - readFields(aMesh, objects, edgeScalarFields); + areaFieldCache.readAllFields(aMesh, objects); } - const label nAreaFields = - ( - areaScalarFields.size() - + areaVectorFields.size() - + areaSphTensorFields.size() - + areaSymmTensorFields.size() - + areaTensorFields.size() - + edgeScalarFields.size() - ); + const label nAreaFields = areaFieldCache.size(); Info<< endl; Info<< "Finite area field transfer: " @@ -1634,13 +1318,7 @@ int main(int argc, char *argv[]) boundaryProcAddressing ); - fieldDecomposer.decomposeFields(areaScalarFields); - fieldDecomposer.decomposeFields(areaVectorFields); - fieldDecomposer.decomposeFields(areaSphTensorFields); - fieldDecomposer.decomposeFields(areaSymmTensorFields); - fieldDecomposer.decomposeFields(areaTensorFields); - - fieldDecomposer.decomposeFields(edgeScalarFields); + areaFieldCache.decomposeAllFields(fieldDecomposer); } } } diff --git a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C index 2a69f8c055..5efad485c8 100644 --- a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C +++ b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C @@ -6,7 +6,7 @@ \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation - Copyright (C) 2019-2021 OpenCFD Ltd. + Copyright (C) 2019-2022 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. @@ -37,6 +37,7 @@ License #include "DynamicList.H" #include "fvFieldDecomposer.H" #include "IOobjectList.H" +#include "PtrDynList.H" #include "cellSet.H" #include "faceSet.H" #include "pointSet.H" @@ -178,32 +179,32 @@ bool Foam::domainDecomposition::writeDecomposition(const bool decomposeSets) } - PtrList cellSets; - PtrList faceSets; - PtrList pointSets; + PtrDynList cellSets; + PtrDynList faceSets; + PtrDynList pointSets; if (decomposeSets) { // Read sets IOobjectList objects(*this, facesInstance(), "polyMesh/sets"); { - IOobjectList cSets(objects.lookupClass(cellSet::typeName)); - forAllConstIters(cSets, iter) + IOobjectList sets(objects.lookupClass()); + forAllConstIters(sets, iter) { - cellSets.append(new cellSet(*iter())); + cellSets.append(new cellSet(*(iter.val()))); } } { - IOobjectList fSets(objects.lookupClass(faceSet::typeName)); - forAllConstIters(fSets, iter) + IOobjectList sets(objects.lookupClass()); + forAllConstIters(sets, iter) { - faceSets.append(new faceSet(*iter())); + faceSets.append(new faceSet(*(iter.val()))); } } { - IOobjectList pSets(objects.lookupClass(pointSet::typeName)); - forAllConstIters(pSets, iter) + IOobjectList sets(objects.lookupClass()); + forAllConstIters(sets, iter) { - pointSets.append(new pointSet(*iter())); + pointSets.append(new pointSet(*(iter.val()))); } } } @@ -225,13 +226,11 @@ bool Foam::domainDecomposition::writeDecomposition(const bool decomposeSets) ); - label maxProcCells = 0; + label maxProcFaces = 0; label totProcFaces = 0; label maxProcPatches = 0; label totProcPatches = 0; - label maxProcFaces = 0; - // Write out the meshes for (label proci = 0; proci < nProcs_; proci++) @@ -265,7 +264,6 @@ bool Foam::domainDecomposition::writeDecomposition(const bool decomposeSets) { // Mark the original face as used // Remember to decrement the index by one (turning index) - // label curF = mag(curFaceLabels[facei]) - 1; faceLookup[curF] = facei; @@ -855,31 +853,35 @@ bool Foam::domainDecomposition::writeDecomposition(const bool decomposeSets) Info<< "Number of cells = " << procMesh.nCells() << nl; + if (procMesh.nCells()) + { + Info<< " Number of points = " << procMesh.nPoints() << nl; + } + maxProcCells = max(maxProcCells, procMesh.nCells()); label nBoundaryFaces = 0; label nProcPatches = 0; label nProcFaces = 0; - forAll(procMesh.boundaryMesh(), patchi) + for (const polyPatch& pp : procMesh.boundaryMesh()) { - if (isA(procMesh.boundaryMesh()[patchi])) + const auto* cpp = isA(pp); + + if (cpp) { - const processorPolyPatch& ppp = - refCast - ( - procMesh.boundaryMesh()[patchi] - ); + const auto& procPatch = *cpp; Info<< " Number of faces shared with processor " - << ppp.neighbProcNo() << " = " << ppp.size() << endl; + << procPatch.neighbProcNo() << " = " + << procPatch.size() << nl; - nProcPatches++; - nProcFaces += ppp.size(); + nProcFaces += procPatch.size(); + ++nProcPatches; } else { - nBoundaryFaces += procMesh.boundaryMesh()[patchi].size(); + nBoundaryFaces += pp.size(); } } @@ -892,103 +894,79 @@ bool Foam::domainDecomposition::writeDecomposition(const bool decomposeSets) totProcFaces += nProcFaces; totProcPatches += nProcPatches; - maxProcPatches = max(maxProcPatches, nProcPatches); maxProcFaces = max(maxProcFaces, nProcFaces); + maxProcPatches = max(maxProcPatches, nProcPatches); - // create and write the addressing information - labelIOList pointProcAddressing - ( - IOobject - ( - "pointProcAddressing", - procMesh.facesInstance(), - procMesh.meshSubDir, - procMesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - procPointAddressing_[proci] - ); - pointProcAddressing.write(); + // Write the addressing information - labelIOList faceProcAddressing + IOobject ioAddr ( - IOobject - ( - "faceProcAddressing", - procMesh.facesInstance(), - procMesh.meshSubDir, - procMesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - procFaceAddressing_[proci] + "procAddressing", + procMesh.facesInstance(), + polyMesh::meshSubDir, + procMesh.thisDb(), + IOobject::NO_READ, + IOobject::NO_WRITE, + false // not registered ); - faceProcAddressing.write(); - labelIOList cellProcAddressing - ( - IOobject - ( - "cellProcAddressing", - procMesh.facesInstance(), - procMesh.meshSubDir, - procMesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - procCellAddressing_[proci] - ); - cellProcAddressing.write(); + // pointProcAddressing + ioAddr.rename("pointProcAddressing"); + IOListRef