From 69ea4976aca78d9d539237af95d8ea21668d2a5c Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Mon, 6 Nov 2017 17:06:15 +0100
Subject: [PATCH] ENH: reduced verbosity when decomposing/reconstructing empty
 meshes

- only warn about missing cells/points if the mesh is also missing
  boundary patches.
- reduce verbosity when decomposing to an empty mesh
- skip face matching when either mesh has no faces
---
 .../decomposePar/domainDecomposition.C        | 24 +++++++++++++------
 src/OpenFOAM/meshes/polyMesh/polyMesh.C       | 20 ++++++++++------
 .../polyMeshAdder/faceCoupleInfo.C            |  9 +++++++
 3 files changed, 39 insertions(+), 14 deletions(-)

diff --git a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C
index b2a14692578..bf722cfbae3 100644
--- a/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C
+++ b/applications/utilities/parallelProcessing/decomposePar/domainDecomposition.C
@@ -831,11 +831,18 @@ bool Foam::domainDecomposition::writeDecomposition(const bool decomposeSets)
 
 
         // Statistics
+        Info<< nl << "Processor " << proci;
 
-        Info<< endl
-            << "Processor " << proci << nl
-            << "    Number of cells = " << procMesh.nCells()
-            << endl;
+        if (procMesh.nCells())
+        {
+            Info<< nl << "    ";
+        }
+        else
+        {
+            Info<< ": ";
+        }
+
+        Info<< "Number of cells = " << procMesh.nCells() << nl;
 
         maxProcCells = max(maxProcCells, procMesh.nCells());
 
@@ -865,9 +872,12 @@ bool Foam::domainDecomposition::writeDecomposition(const bool decomposeSets)
             }
         }
 
-        Info<< "    Number of processor patches = " << nProcPatches << nl
-            << "    Number of processor faces = " << nProcFaces << nl
-            << "    Number of boundary faces = " << nBoundaryFaces << endl;
+        if (procMesh.nCells() && (nBoundaryFaces || nProcFaces))
+        {
+            Info<< "    Number of processor patches = " << nProcPatches << nl
+                << "    Number of processor faces = " << nProcFaces << nl
+                << "    Number of boundary faces = " << nBoundaryFaces << nl;
+        }
 
         totProcFaces += nProcFaces;
         totProcPatches += nProcPatches;
diff --git a/src/OpenFOAM/meshes/polyMesh/polyMesh.C b/src/OpenFOAM/meshes/polyMesh/polyMesh.C
index 6c44d9e8d1b..de8d164ef75 100644
--- a/src/OpenFOAM/meshes/polyMesh/polyMesh.C
+++ b/src/OpenFOAM/meshes/polyMesh/polyMesh.C
@@ -325,15 +325,21 @@ Foam::polyMesh::polyMesh(const IOobject& io)
     boundary_.calcGeometry();
 
     // Warn if global empty mesh
-    if (returnReduce(nPoints(), sumOp<label>()) == 0)
+    if (returnReduce(boundary_.empty(), orOp<bool>()))
     {
         WarningInFunction
-            << "no points in mesh" << endl;
-    }
-    if (returnReduce(nCells(), sumOp<label>()) == 0)
-    {
-        WarningInFunction
-            << "no cells in mesh" << endl;
+            << "mesh missing boundary on one or more domains" << endl;
+
+        if (returnReduce(nPoints(), sumOp<label>()) == 0)
+        {
+            WarningInFunction
+                << "no points in mesh" << endl;
+        }
+        if (returnReduce(nCells(), sumOp<label>()) == 0)
+        {
+            WarningInFunction
+                << "no cells in mesh" << endl;
+        }
     }
 
     // Initialise demand-driven data
diff --git a/src/dynamicMesh/polyMeshAdder/faceCoupleInfo.C b/src/dynamicMesh/polyMeshAdder/faceCoupleInfo.C
index e1c8a08e64d..3c3edde47d7 100644
--- a/src/dynamicMesh/polyMeshAdder/faceCoupleInfo.C
+++ b/src/dynamicMesh/polyMeshAdder/faceCoupleInfo.C
@@ -886,6 +886,15 @@ void Foam::faceCoupleInfo::findPerfectMatchingFaces
     labelList& mesh1Faces
 )
 {
+    // Quick check: skip face matching if either mesh has no faces
+    if (!mesh0.nFaces() || !mesh1.nFaces())
+    {
+        mesh0Faces.clear();
+        mesh1Faces.clear();
+
+        return;
+    }
+
     // Face centres of external faces (without invoking
     // mesh.faceCentres since mesh might have been clearedOut)
 
-- 
GitLab