From 48973bad83535ae43195488a6d8cf0ef26572359 Mon Sep 17 00:00:00 2001
From: Andrew Heather <>
Date: Tue, 18 Oct 2022 14:27:51 +0100
Subject: [PATCH] ENH: chtMultiRegionFoam - add frozenFlow option

Also for 'chtMultiRegionSimpleFoam' and 'chtMultiRegionTwoPhaseEulerFoam'.
---
 .../chtMultiRegionFoam/chtMultiRegionFoam.C   | 26 +++++++++++++------
 .../chtMultiRegionSimpleFoam.C                | 26 +++++++++++++------
 .../readFluidMultiRegionSIMPLEControls.H      |  2 ++
 .../fluid/setRegionFluidFields.H              |  2 --
 .../chtMultiRegionTwoPhaseEulerFoam.C         | 24 +++++++++++------
 .../readFluidMultiRegionPIMPLEControls.H      |  2 ++
 .../fluid/setRegionFluidFields.H              |  2 --
 .../readFluidMultiRegionPIMPLEControls.H      |  2 ++
 .../fluid/setRegionFluidFields.H              |  2 --
 .../solid/setRegionSolidFields.H              |  1 -
 10 files changed, 58 insertions(+), 31 deletions(-)

diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C
index ea6760482a7..2c89e817fe9 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionFoam.C
@@ -113,15 +113,19 @@ int main(int argc, char *argv[])
 
             forAll(fluidRegions, i)
             {
-                #include "setRegionFluidFields.H"
+                fvMesh& mesh = fluidRegions[i];
+
                 #include "readFluidMultiRegionPIMPLEControls.H"
+                #include "setRegionFluidFields.H"
                 #include "solveFluid.H"
             }
 
             forAll(solidRegions, i)
             {
-                #include "setRegionSolidFields.H"
+                fvMesh& mesh = solidRegions[i];
+
                 #include "readSolidMultiRegionPIMPLEControls.H"
+                #include "setRegionSolidFields.H"
                 #include "solveSolid.H"
             }
 
@@ -133,8 +137,10 @@ int main(int argc, char *argv[])
 
                 forAll(fluidRegions, i)
                 {
-                    #include "setRegionFluidFields.H"
+                    fvMesh& mesh = fluidRegions[i];
+
                     #include "readFluidMultiRegionPIMPLEControls.H"
+                    #include "setRegionFluidFields.H"
                     if (!frozenFlow)
                     {
                         Info<< "\nSolving for fluid region "
@@ -166,20 +172,24 @@ int main(int argc, char *argv[])
 
                     forAll(fluidRegions, i)
                     {
+                        fvMesh& mesh = fluidRegions[i];
+
                         Info<< "\nSolving for fluid region "
                             << fluidRegions[i].name() << endl;
-                       #include "setRegionFluidFields.H"
-                       #include "readFluidMultiRegionPIMPLEControls.H"
-                       frozenFlow = true;
-                       #include "solveFluid.H"
+                        #include "readFluidMultiRegionPIMPLEControls.H"
+                        #include "setRegionFluidFields.H"
+                        frozenFlow = true;
+                        #include "solveFluid.H"
                     }
 
                     forAll(solidRegions, i)
                     {
+                        fvMesh& mesh = solidRegions[i];
+
                         Info<< "\nSolving for solid region "
                             << solidRegions[i].name() << endl;
-                        #include "setRegionSolidFields.H"
                         #include "readSolidMultiRegionPIMPLEControls.H"
+                        #include "setRegionSolidFields.H"
                         #include "solveSolid.H"
                     }
 
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C
index 21a452df9f8..bc802e0265d 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/chtMultiRegionSimpleFoam.C
@@ -76,17 +76,21 @@ int main(int argc, char *argv[])
 
         forAll(fluidRegions, i)
         {
+            fvMesh& mesh = fluidRegions[i];
+
             Info<< "\nSolving for fluid region "
                 << fluidRegions[i].name() << endl;
-            #include "setRegionFluidFields.H"
             #include "readFluidMultiRegionSIMPLEControls.H"
+            #include "setRegionFluidFields.H"
             #include "solveFluid.H"
         }
 
         forAll(solidRegions, i)
         {
-            #include "setRegionSolidFields.H"
+            fvMesh& mesh = solidRegions[i];
+
             #include "readSolidMultiRegionSIMPLEControls.H"
+            #include "setRegionSolidFields.H"
             #include "solveSolid.H"
         }
 
@@ -99,8 +103,10 @@ int main(int argc, char *argv[])
 
             forAll(fluidRegions, i)
             {
-                #include "setRegionFluidFields.H"
+                fvMesh& mesh = fluidRegions[i];
+
                 #include "readSolidMultiRegionSIMPLEControls.H"
+                #include "setRegionFluidFields.H"
                 if (!frozenFlow)
                 {
                     #include "pEqn.H"
@@ -121,20 +127,24 @@ int main(int argc, char *argv[])
 
                 forAll(fluidRegions, i)
                 {
+                    fvMesh& mesh = fluidRegions[i];
+
                     Info<< "\nSolving for fluid region "
                         << fluidRegions[i].name() << endl;
-                   #include "setRegionFluidFields.H"
-                   #include "readFluidMultiRegionSIMPLEControls.H"
-                   frozenFlow = true;
-                   #include "solveFluid.H"
+                    #include "readFluidMultiRegionSIMPLEControls.H"
+                    #include "setRegionFluidFields.H"
+                    frozenFlow = true;
+                    #include "solveFluid.H"
                 }
 
                 forAll(solidRegions, i)
                 {
+                    fvMesh& mesh = solidRegions[i];
+
                     Info<< "\nSolving for solid region "
                         << solidRegions[i].name() << endl;
-                    #include "setRegionSolidFields.H"
                     #include "readSolidMultiRegionSIMPLEControls.H"
+                    #include "setRegionSolidFields.H"
                     #include "solveSolid.H"
                 }
 
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/readFluidMultiRegionSIMPLEControls.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/readFluidMultiRegionSIMPLEControls.H
index 332001c2945..94558641738 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/readFluidMultiRegionSIMPLEControls.H
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/readFluidMultiRegionSIMPLEControls.H
@@ -5,3 +5,5 @@
 
     const bool momentumPredictor =
         simple.getOrDefault("momentumPredictor", true);
+
+    simple.readIfPresent("frozenFlow", frozenFlowFluid[i]);
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/setRegionFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/setRegionFluidFields.H
index 28c4418da82..783ebfd1da3 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/setRegionFluidFields.H
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionSimpleFoam/fluid/setRegionFluidFields.H
@@ -1,5 +1,3 @@
-    const fvMesh& mesh = fluidRegions[i];
-
     rhoThermo& thermo = thermoFluid[i];
     thermo.validate(args.executable(), "h", "e");
 
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionTwoPhaseEulerFoam/chtMultiRegionTwoPhaseEulerFoam.C b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionTwoPhaseEulerFoam/chtMultiRegionTwoPhaseEulerFoam.C
index 0da321d1886..abc0f5f6ac2 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionTwoPhaseEulerFoam/chtMultiRegionTwoPhaseEulerFoam.C
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionTwoPhaseEulerFoam/chtMultiRegionTwoPhaseEulerFoam.C
@@ -5,7 +5,7 @@
     \\  /    A nd           | www.openfoam.com
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
-    Copyright (C) 2018 OpenCFD Ltd.
+    Copyright (C) 2018-2022 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -108,19 +108,23 @@ int main(int argc, char *argv[])
 
             forAll(fluidRegions, i)
             {
+                fvMesh& mesh = fluidRegions[i];
+
                 Info<< "\nSolving for fluid region "
                     << fluidRegions[i].name() << endl;
-                #include "setRegionFluidFields.H"
                 #include "readFluidMultiRegionPIMPLEControls.H"
+                #include "setRegionFluidFields.H"
                 #include "solveFluid.H"
             }
 
             forAll(solidRegions, i)
             {
+                fvMesh& mesh = solidRegions[i];
+
                 Info<< "\nSolving for solid region "
                     << solidRegions[i].name() << endl;
-                #include "setRegionSolidFields.H"
                 #include "readSolidMultiRegionPIMPLEControls.H"
+                #include "setRegionSolidFields.H"
                 #include "solveSolid.H"
             }
 
@@ -135,20 +139,24 @@ int main(int argc, char *argv[])
 
                     forAll(fluidRegions, i)
                     {
+                        fvMesh& mesh = fluidRegions[i];
+
                         Info<< "\nSolving for fluid region "
                             << fluidRegions[i].name() << endl;
-                       #include "setRegionFluidFields.H"
-                       #include "readFluidMultiRegionPIMPLEControls.H"
-                       frozenFlow = true;
-                       #include "solveFluid.H"
+                        #include "readFluidMultiRegionPIMPLEControls.H"
+                        #include "setRegionFluidFields.H"
+                        frozenFlow = true;
+                        #include "solveFluid.H"
                     }
 
                     forAll(solidRegions, i)
                     {
+                        fvMesh& mesh = solidRegions[i];
+
                         Info<< "\nSolving for solid region "
                             << solidRegions[i].name() << endl;
-                        #include "setRegionSolidFields.H"
                         #include "readSolidMultiRegionPIMPLEControls.H"
+                        #include "setRegionSolidFields.H"
                         #include "solveSolid.H"
                     }
                 }
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionTwoPhaseEulerFoam/fluid/readFluidMultiRegionPIMPLEControls.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionTwoPhaseEulerFoam/fluid/readFluidMultiRegionPIMPLEControls.H
index 7238b5a67a9..9e76ce95743 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionTwoPhaseEulerFoam/fluid/readFluidMultiRegionPIMPLEControls.H
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionTwoPhaseEulerFoam/fluid/readFluidMultiRegionPIMPLEControls.H
@@ -9,3 +9,5 @@
     (
         pimpleDict.getOrDefault<int>("nEnergyCorrectors", 1)
     );
+
+    pimpleDict.readIfPresent("frozenFlow", frozenFlowFluid[i]);
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionTwoPhaseEulerFoam/fluid/setRegionFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionTwoPhaseEulerFoam/fluid/setRegionFluidFields.H
index 75432934920..c11535179be 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionTwoPhaseEulerFoam/fluid/setRegionFluidFields.H
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/chtMultiRegionTwoPhaseEulerFoam/fluid/setRegionFluidFields.H
@@ -1,5 +1,3 @@
-    fvMesh& mesh = fluidRegions[i];
-
     twoPhaseSystem& fluid  = phaseSystemFluid[i];
 
     phaseModel& phase1 = fluid.phase1();
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/readFluidMultiRegionPIMPLEControls.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/readFluidMultiRegionPIMPLEControls.H
index af3cbe03c59..d477e4992fe 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/readFluidMultiRegionPIMPLEControls.H
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/readFluidMultiRegionPIMPLEControls.H
@@ -8,3 +8,5 @@
 
     const bool momentumPredictor =
         pimple.getOrDefault("momentumPredictor", true);
+
+    pimple.readIfPresent("frozenFlow", frozenFlowFluid[i]);
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/setRegionFluidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/setRegionFluidFields.H
index a35a63d52b9..7647af9bd7d 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/setRegionFluidFields.H
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/fluid/setRegionFluidFields.H
@@ -1,5 +1,3 @@
-    fvMesh& mesh = fluidRegions[i];
-
     CombustionModel<rhoReactionThermo>& reaction = reactionFluid[i];
 
     rhoReactionThermo& thermo = reaction.thermo();
diff --git a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/setRegionSolidFields.H b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/setRegionSolidFields.H
index 7790ac9659a..55032570851 100644
--- a/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/setRegionSolidFields.H
+++ b/applications/solvers/heatTransfer/chtMultiRegionFoam/solid/setRegionSolidFields.H
@@ -1,4 +1,3 @@
-fvMesh& mesh = solidRegions[i];
 solidThermo& thermo = thermos[i];
 
 tmp<volScalarField> trho = thermo.rho();
-- 
GitLab