From dafbfb5c204449a6c7d5fd7f05c606e793e75766 Mon Sep 17 00:00:00 2001 From: mattijs Date: Fri, 4 Jun 2010 15:31:19 +0100 Subject: [PATCH] ENH: multiLevel decomposition method. --- .../generation/snappyHexMesh/snappyHexMesh.C | 3 +- .../manipulation/renumberMesh/renumberMesh.C | 12 +- .../splitMeshRegions/splitMeshRegions.C | 63 +- .../decomposePar/decomposeParDict | 30 +- .../domainDecompositionDistribute.C | 12 +- .../redistributeMeshPar/redistributeMeshPar.C | 5 +- .../metisDecomp/dummyMetisDecomp.C | 10 +- .../ptscotchDecomp/dummyPtscotchDecomp.C | 10 +- .../scotchDecomp/dummyScotchDecomp.C | 26 +- .../autoHexMeshDriver/autoHexMeshDriver.C | 6 +- .../meshRefinement/meshRefinement.C | 2 + .../distributedTriSurfaceMesh.C | 19 +- .../decompose/decompositionMethods/Make/files | 1 + .../decompositionMethod/decompositionMethod.C | 617 ++++++++---------- .../decompositionMethod/decompositionMethod.H | 198 +++--- .../geomDecomp/geomDecomp.H | 11 + .../hierarchGeomDecomp/hierarchGeomDecomp.C | 52 +- .../hierarchGeomDecomp/hierarchGeomDecomp.H | 31 +- .../manualDecomp/manualDecomp.C | 23 +- .../manualDecomp/manualDecomp.H | 23 +- .../multiLevelDecomp/multiLevelDecomp.C | 293 +++++++++ .../multiLevelDecomp/multiLevelDecomp.H | 136 ++++ .../simpleGeomDecomp/simpleGeomDecomp.C | 39 +- .../simpleGeomDecomp/simpleGeomDecomp.H | 25 +- .../decompose/metisDecomp/metisDecomp.C | 130 ++-- .../decompose/metisDecomp/metisDecomp.H | 14 +- .../decompose/ptscotchDecomp/ptscotchDecomp.C | 73 +-- .../decompose/ptscotchDecomp/ptscotchDecomp.H | 13 +- .../decompose/scotchDecomp/scotchDecomp.C | 77 +-- .../decompose/scotchDecomp/scotchDecomp.H | 14 +- 30 files changed, 1140 insertions(+), 828 deletions(-) create mode 100644 src/parallel/decompose/decompositionMethods/multiLevelDecomp/multiLevelDecomp.C create mode 100644 src/parallel/decompose/decompositionMethods/multiLevelDecomp/multiLevelDecomp.H diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C index 7ced14726d..c48abfbc39 100644 --- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C +++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C @@ -334,8 +334,7 @@ int main(int argc, char *argv[]) ( decompositionMethod::New ( - decomposeDict, - mesh + decomposeDict ) ); decompositionMethod& decomposer = decomposerPtr(); diff --git a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C index 19a80bac5f..3394b928b2 100644 --- a/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C +++ b/applications/utilities/mesh/manipulation/renumberMesh/renumberMesh.C @@ -489,11 +489,17 @@ int main(int argc, char *argv[]) ); autoPtr decomposePtr = decompositionMethod::New ( - decomposeDict, - mesh + decomposeDict ); - labelList cellToRegion(decomposePtr().decompose(mesh.cellCentres())); + labelList cellToRegion + ( + decomposePtr().decompose + ( + mesh, + mesh.cellCentres() + ) + ); // For debugging: write out region { diff --git a/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C b/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C index e9c20f1afb..7e3cd14588 100644 --- a/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C +++ b/applications/utilities/mesh/manipulation/splitMeshRegions/splitMeshRegions.C @@ -381,7 +381,8 @@ void subsetVolFields const fvMesh& mesh, const fvMesh& subMesh, const labelList& cellMap, - const labelList& faceMap + const labelList& faceMap, + const labelHashSet& addedPatches ) { const labelList patchMap(identity(mesh.boundaryMesh().size())); @@ -412,14 +413,7 @@ void subsetVolFields // get initialised. forAll(tSubFld().boundaryField(), patchI) { - const fvPatchField& pfld = - tSubFld().boundaryField()[patchI]; - - if - ( - isA > - (pfld) - ) + if (addedPatches.found(patchI)) { tSubFld().boundaryField()[patchI] == pTraits::zero; @@ -440,7 +434,8 @@ void subsetSurfaceFields ( const fvMesh& mesh, const fvMesh& subMesh, - const labelList& faceMap + const labelList& faceMap, + const labelHashSet& addedPatches ) { const labelList patchMap(identity(mesh.boundaryMesh().size())); @@ -470,14 +465,7 @@ void subsetSurfaceFields // get initialised. forAll(tSubFld().boundaryField(), patchI) { - const fvsPatchField& pfld = - tSubFld().boundaryField()[patchI]; - - if - ( - isA > - (pfld) - ) + if (addedPatches.found(patchI)) { tSubFld().boundaryField()[patchI] == pTraits::zero; @@ -852,6 +840,15 @@ void createAndWriteRegion newMesh ); + + // Make map of all added patches + labelHashSet addedPatches(2*interfaceToPatch.size()); + forAllConstIter(EdgeMap