From 56fccbfbad2d07cd88ac3f9c96e30fadc35a645b Mon Sep 17 00:00:00 2001 From: andy Date: Tue, 24 Jan 2012 10:48:16 +0000 Subject: [PATCH 1/4] BUG: Corrected sprayFoam species evolution - mantis #394 --- applications/solvers/lagrangian/sprayFoam/Make/options | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/solvers/lagrangian/sprayFoam/Make/options b/applications/solvers/lagrangian/sprayFoam/Make/options index f9cb15cc2f..9d6d7d5398 100644 --- a/applications/solvers/lagrangian/sprayFoam/Make/options +++ b/applications/solvers/lagrangian/sprayFoam/Make/options @@ -1,4 +1,5 @@ EXE_INC = \ + -I$(FOAM_SOLVERS)/lagrangian/reactingParcelFoam \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I${LIB_SRC}/meshTools/lnInclude \ -I$(LIB_SRC)/turbulenceModels/compressible/turbulenceModel \ @@ -20,8 +21,7 @@ EXE_INC = \ -I$(LIB_SRC)/ODE/lnInclude \ -I$(LIB_SRC)/regionModels/regionModel/lnInclude \ -I$(LIB_SRC)/regionModels/surfaceFilmModels/lnInclude \ - -I$(LIB_SRC)/combustionModels/lnInclude \ - -I$(FOAM_SOLVERS)/lagrangian/reactingParcelFoam + -I$(LIB_SRC)/combustionModels/lnInclude EXE_LIBS = \ From 101b5b6e91bbc18f8ab8b60d24125f6ced7495c6 Mon Sep 17 00:00:00 2001 From: mattijs Date: Tue, 24 Jan 2012 12:34:30 +0000 Subject: [PATCH 2/4] ENH: regionSplit: work out globally consecutive regioning without global reductions --- src/meshTools/regionSplit/regionSplit.C | 409 ++++++++++++++++-------- src/meshTools/regionSplit/regionSplit.H | 94 +++++- 2 files changed, 355 insertions(+), 148 deletions(-) diff --git a/src/meshTools/regionSplit/regionSplit.C b/src/meshTools/regionSplit/regionSplit.C index 21fc55f0e6..c9eb4de199 100644 --- a/src/meshTools/regionSplit/regionSplit.C +++ b/src/meshTools/regionSplit/regionSplit.C @@ -128,7 +128,7 @@ void Foam::regionSplit::fillSeedMask changedFaces.setSize(nFaces); - // Loop over changed faces. MeshWave in small. + // Loop over changed faces. FaceCellWave in small. while (changedFaces.size()) { @@ -260,7 +260,7 @@ void Foam::regionSplit::fillSeedMask } -Foam::label Foam::regionSplit::calcRegionSplit +Foam::label Foam::regionSplit::calcLocalRegionSplit ( const boolList& blockedFace, const List& explicitConnections, @@ -282,7 +282,7 @@ Foam::label Foam::regionSplit::calcRegionSplit { FatalErrorIn ( - "regionSplit::calcRegionSplit(..)" + "regionSplit::calcLocalRegionSplit(..)" ) << "Face " << faceI << " not synchronised. My value:" << blockedFace[faceI] << " coupled value:" << syncBlockedFace[faceI] @@ -313,7 +313,7 @@ Foam::label Foam::regionSplit::calcRegionSplit // ~~~~~~~~~~~~~~~~~~~~ // Start with region 0 - label nRegions = 0; + label nLocalRegions = 0; label unsetCellI = 0; @@ -340,11 +340,11 @@ Foam::label Foam::regionSplit::calcRegionSplit cellRegion, faceRegion, unsetCellI, - nRegions + nLocalRegions ); // Current unsetCell has now been handled. Go to next region. - nRegions++; + nLocalRegions++; unsetCellI++; } while (true); @@ -356,7 +356,7 @@ Foam::label Foam::regionSplit::calcRegionSplit { if (cellRegion[cellI] < 0) { - FatalErrorIn("regionSplit::calcRegionSplit(..)") + FatalErrorIn("regionSplit::calcLocalRegionSplit(..)") << "cell:" << cellI << " region:" << cellRegion[cellI] << abort(FatalError); } @@ -366,34 +366,62 @@ Foam::label Foam::regionSplit::calcRegionSplit { if (faceRegion[faceI] == -1) { - FatalErrorIn("regionSplit::calcRegionSplit(..)") + FatalErrorIn("regionSplit::calcLocalRegionSplit(..)") << "face:" << faceI << " region:" << faceRegion[faceI] << abort(FatalError); } } } + return nLocalRegions; +} - // Assign global regions - // ~~~~~~~~~~~~~~~~~~~~~ +Foam::autoPtr Foam::regionSplit::calcRegionSplit +( + const boolList& blockedFace, + const List& explicitConnections, + + labelList& cellRegion +) const +{ + // See header in regionSplit.H + + // 1. Do local analysis + label nLocalRegions = calcLocalRegionSplit + ( + blockedFace, + explicitConnections, + cellRegion + ); + + if (!Pstream::parRun()) + { + return autoPtr(new globalIndex(nLocalRegions)); + } + + + // 2. Assign global regions + // ~~~~~~~~~~~~~~~~~~~~~~~~ // Offset local regions to create unique global regions. - globalIndex globalRegions(nRegions); + globalIndex globalRegions(nLocalRegions); - // Merge global regions - // ~~~~~~~~~~~~~~~~~~~~ + // Convert regions to global ones + forAll(cellRegion, cellI) + { + cellRegion[cellI] = globalRegions.toGlobal(cellRegion[cellI]); + } + + + // 3. Merge global regions + // ~~~~~~~~~~~~~~~~~~~~~~~ // Regions across non-blocked proc patches get merged. // This will set merged global regions to be the min of both. // (this will create gaps in the global region list so they will get // merged later on) - // Map from global to merged global - labelList mergedGlobal(identity(globalRegions.size())); - - - // See if any regions get merged. Only nessecary for parallel while (Pstream::parRun()) { if (debug) @@ -401,123 +429,81 @@ Foam::label Foam::regionSplit::calcRegionSplit Pout<< nl << "-- Starting Iteration --" << endl; } + const polyBoundaryMesh& patches = mesh_.boundaryMesh(); - // Send global regions across (or -2 if blocked face) + labelList nbrRegion(mesh_.nFaces()-mesh_.nInternalFaces(), -1); forAll(patches, patchI) { const polyPatch& pp = patches[patchI]; - if (isA(pp)) + if (pp.coupled()) { - labelList myGlobalRegions(pp.size()); - - label faceI = pp.start(); - - forAll(pp, i) - { - if (faceRegion[faceI] < 0) - { - myGlobalRegions[i] = faceRegion[faceI]; - } - else - { - myGlobalRegions[i] = mergedGlobal - [globalRegions.toGlobal(faceRegion[faceI])]; - } - - faceI++; - } - - OPstream toProcNbr + const labelList& patchCells = pp.faceCells(); + SubList