From 64deb4e4b869a9aff06f727206ac45ff699f61e3 Mon Sep 17 00:00:00 2001
From: Kutalmis Bercin <kutalmis.bercin@esi-group.com>
Date: Fri, 2 Jul 2021 13:12:45 +0100
Subject: [PATCH] BUG: state error in volRegion::calculateCache()  (fixes
 #2121)

- need to change requireUpdate_ at the beginning of calculateCache
  otherwise it is not updated for "ALL" selection (causing unnecessary
  repeated calculations). For other modes, it would have tripped
  an error in FULLDEBUG.
---
 .../functionObjects/volRegion/volRegion.C        | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/finiteVolume/functionObjects/volRegion/volRegion.C b/src/finiteVolume/functionObjects/volRegion/volRegion.C
index a8f1c4c8a87..035160f7f12 100644
--- a/src/finiteVolume/functionObjects/volRegion/volRegion.C
+++ b/src/finiteVolume/functionObjects/volRegion/volRegion.C
@@ -61,6 +61,9 @@ void Foam::functionObjects::volRegion::calculateCache()
     regionID_ = -1;
     cellIds_.clear();
 
+    // Update now. Need a valid state for the cellIDs() call
+    requireUpdate_ = false;
+
     switch (regionType_)
     {
         case vrtAll:
@@ -93,15 +96,18 @@ void Foam::functionObjects::volRegion::calculateCache()
         }
     }
 
-    // Cached value for nCells()
-    nCells_ = returnReduce(cellIDs().size(), sumOp<label>());
 
-    // Cached value for V()
+    // Calculate cache value for nCells() and V()
+    const labelList& selected = this->cellIDs();
+
+    nCells_ = selected.size();
     V_ = 0;
-    for (const label celli : cellIDs())
+    for (const label celli : selected)
     {
         V_ += volMesh_.V()[celli];
     }
+
+    reduce(nCells_, sumOp<label>());
     reduce(V_, sumOp<scalar>());
 
     if (!nCells_)
@@ -112,8 +118,6 @@ void Foam::functionObjects::volRegion::calculateCache()
             << "    Region has no cells" << nl
             << exit(FatalError);
     }
-
-    requireUpdate_ = false;
 }
 
 
-- 
GitLab