From 775fe1d596682a0f3ce0069ed96eaeeb52e499ac Mon Sep 17 00:00:00 2001
From: Sergio Ferraris <s.ferraris@opencfd.co.uk>
Date: Mon, 8 Jun 2020 15:42:52 +0100
Subject: [PATCH] ENH: Adding finalOnLastPimpleIterOnly to allow Final solver
 in PIMPLE

The PIMPLE option finalOnLastPimpleIterOnly allows the call the Final
solver only in the last PIMPLE loop. The default is false which is
the present behavior.
---
 .../pimpleControl/pimpleControl.C                |  5 ++++-
 .../pimpleControl/pimpleControl.H                |  6 +++++-
 .../pimpleControl/pimpleControlI.H               | 16 +++++++++++++---
 .../rhoPimpleFoam/RAS/cavity/system/fvSolution   |  1 +
 4 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControl.C b/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControl.C
index 2559b9d67a1..e49d3c75fc1 100644
--- a/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControl.C
+++ b/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControl.C
@@ -50,6 +50,8 @@ bool Foam::pimpleControl::read()
     SIMPLErho_ = pimpleDict.getOrDefault("SIMPLErho", false);
     turbOnFinalIterOnly_ =
         pimpleDict.getOrDefault("turbOnFinalIterOnly", true);
+    finalOnLastPimpleIterOnly_ =
+        pimpleDict.getOrDefault("finalOnLastPimpleIterOnly", false);
 
     return true;
 }
@@ -153,7 +155,8 @@ Foam::pimpleControl::pimpleControl
     corrPISO_(0),
     SIMPLErho_(false),
     turbOnFinalIterOnly_(true),
-    converged_(false)
+    converged_(false),
+    finalOnLastPimpleIterOnly_(false)
 {
     read();
 
diff --git a/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControl.H b/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControl.H
index 710f4c176fb..1433215df84 100644
--- a/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControl.H
+++ b/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControl.H
@@ -6,7 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2017 OpenFOAM Foundation
-    Copyright (C) 2017 OpenCFD Ltd.
+    Copyright (C) 2017-2020 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -94,6 +94,10 @@ protected:
             //- Converged flag
             bool converged_;
 
+            //- Flag to indicate wheter the final solver is used only on the
+            //  final pimple iter
+            bool finalOnLastPimpleIterOnly_;
+
 
     // Protected Member Functions
 
diff --git a/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControlI.H b/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControlI.H
index 944c2a2b465..344db63f93e 100644
--- a/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControlI.H
+++ b/src/finiteVolume/cfdTools/general/solutionControl/pimpleControl/pimpleControlI.H
@@ -6,6 +6,7 @@
      \\/     M anipulation  |
 -------------------------------------------------------------------------------
     Copyright (C) 2011-2017 OpenFOAM Foundation
+    Copyright (C) 2020 OpenCFD Ltd.
 -------------------------------------------------------------------------------
 License
     This file is part of OpenFOAM.
@@ -96,9 +97,18 @@ inline bool Foam::pimpleControl::finalIter() const
 
 inline bool Foam::pimpleControl::finalInnerIter() const
 {
-    return
-       corrPISO_ == nCorrPISO_
-    && corrNonOrtho_ == nNonOrthCorr_ + 1;
+    bool finalInnerIter =
+        corrPISO_ == nCorrPISO_
+     && corrNonOrtho_ == nNonOrthCorr_ + 1;
+
+    if (finalOnLastPimpleIterOnly_)
+    {
+        return finalInnerIter && finalIter();
+    }
+    else
+    {
+        return finalInnerIter;
+    }
 }
 
 
diff --git a/tutorials/compressible/rhoPimpleFoam/RAS/cavity/system/fvSolution b/tutorials/compressible/rhoPimpleFoam/RAS/cavity/system/fvSolution
index f1ea496680b..8c0b4fd7982 100644
--- a/tutorials/compressible/rhoPimpleFoam/RAS/cavity/system/fvSolution
+++ b/tutorials/compressible/rhoPimpleFoam/RAS/cavity/system/fvSolution
@@ -58,6 +58,7 @@ PIMPLE
     momentumPredictor yes;
     nOuterCorrectors 1;
     nCorrectors     2;
+    finalOnLastPimpleIterOnly   true;
     nNonOrthogonalCorrectors 0;
 
     pMax            1.2e5;
-- 
GitLab