From fbc3a122c58049b7222e9b85a4b252257b487997 Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Fri, 10 Nov 2023 20:42:28 +0000 Subject: [PATCH] meshCheck::checkTopology: Multiple disconnected region sets now only written for allTopology NCC cases have multiple disconnected regions that polyMesh topology checking considers a potential error and meshCheck::checkTopology can generate diagnostic cell and point sets relating to these regions but these are now only written if allTopology is set true to remove unnecessary clutter when checking the mesh at run-time for moving mesh cases using the checkMesh functionObject. --- src/meshCheck/checkTopology.C | 217 ++++++++++++++++++---------------- 1 file changed, 115 insertions(+), 102 deletions(-) diff --git a/src/meshCheck/checkTopology.C b/src/meshCheck/checkTopology.C index 95e8781ffa..3adf01bb74 100644 --- a/src/meshCheck/checkTopology.C +++ b/src/meshCheck/checkTopology.C @@ -333,107 +333,115 @@ Foam::label Foam::meshCheck::checkTopology Info<< " *Number of regions: " << rs.nRegions() << endl; Info<< " The mesh has multiple regions which are not connected " - "by any face." << endl - << " <= 0 : single region - labelList pointToRegion(mesh.nPoints(), -1); + Info<< " <()); - Pstream::listCombineScatter(regionDisconnected); - } - - - - // write cellSet for each region - PtrList cellRegions(rs.nRegions()); - for (label i = 0; i < rs.nRegions(); i++) - { - cellRegions.set - ( - i, - new cellSet + IOobject ( + "cellToRegion", + mesh.time().name(), mesh, - "region" + Foam::name(i), - mesh.nCells()/100 - ) + IOobject::NO_READ, + IOobject::NO_WRITE + ), + rs ); + ctr.write(); } - forAll(rs, i) - { - cellRegions[rs[i]].insert(i); - } - for (label i = 0; i < rs.nRegions(); i++) + // Write region sets for allTopology + if (allTopology) { - Info<< " <= 0 : single region + labelList pointToRegion(mesh.nPoints(), -1); + + for + ( + label faceI = mesh.nInternalFaces(); + faceI < mesh.nFaces(); + faceI++ + ) + { + label regionI = rs[mesh.faceOwner()[faceI]]; + const face& f = mesh.faces()[faceI]; + forAll(f, fp) + { + label& pRegion = pointToRegion[f[fp]]; + if (pRegion == -1) + { + pRegion = regionI; + } + else if (pRegion == -2) + { + // Already marked + regionDisconnected[regionI] = false; + } + else if (pRegion != regionI) + { + // Multiple regions + regionDisconnected[regionI] = false; + regionDisconnected[pRegion] = false; + pRegion = -2; + points.insert(f[fp]); + } + } + } + + Pstream::listCombineGather + ( + regionDisconnected, + andEqOp() + ); + Pstream::listCombineScatter(regionDisconnected); + } + + // write cellSet for each region + PtrList cellRegions(rs.nRegions()); + for (label i = 0; i < rs.nRegions(); i++) + { + cellRegions.set + ( + i, + new cellSet + ( + mesh, + "region" + Foam::name(i), + mesh.nCells()/100 + ) + ); + } + + forAll(rs, i) + { + cellRegions[rs[i]].insert(i); + } + + for (label i = 0; i < rs.nRegions(); i++) + { + Info<< " <()) + << " cells to cellSet " << cellRegions[i].name() + << endl; + + cellRegions[i].instance() = mesh.pointsInstance(); + cellRegions[i].write(); } - Info<< " with " - << returnReduce(cellRegions[i].size(), sumOp()) - << " cells to cellSet " << cellRegions[i].name() << endl; - cellRegions[i].write(); - } - - label nPoints = returnReduce(points.size(), sumOp