From e5cc374d8ed68b94a3fa598886a6cb33042435fb Mon Sep 17 00:00:00 2001
From: Henry Weller <http://cfd.direct>
Date: Wed, 22 Feb 2017 15:34:13 +0000
Subject: [PATCH] MULES: Adjust limiter only at boundaries for which the field
 value is fixed

Resolves bug-report https://bugs.openfoam.org/view.php?id=2470
---
 .../fvMatrices/solvers/MULES/CMULESTemplates.C        |  2 +-
 .../fvMatrices/solvers/MULES/MULESTemplates.C         | 11 ++++++++---
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/finiteVolume/fvMatrices/solvers/MULES/CMULESTemplates.C b/src/finiteVolume/fvMatrices/solvers/MULES/CMULESTemplates.C
index 34ee43bede3..b9ffcc9bc4d 100644
--- a/src/finiteVolume/fvMatrices/solvers/MULES/CMULESTemplates.C
+++ b/src/finiteVolume/fvMatrices/solvers/MULES/CMULESTemplates.C
@@ -249,7 +249,7 @@ void Foam::MULES::limiterCorr
                 psiMinn[pfCelli] = min(psiMinn[pfCelli], psiPNf[pFacei]);
             }
         }
-        else
+        else if (psiPf.fixesValue())
         {
             forAll(phiCorrPf, pFacei)
             {
diff --git a/src/finiteVolume/fvMatrices/solvers/MULES/MULESTemplates.C b/src/finiteVolume/fvMatrices/solvers/MULES/MULESTemplates.C
index 743cb8eae5c..675e4a3bd66 100644
--- a/src/finiteVolume/fvMatrices/solvers/MULES/MULESTemplates.C
+++ b/src/finiteVolume/fvMatrices/solvers/MULES/MULESTemplates.C
@@ -195,6 +195,11 @@ void Foam::MULES::limiter
         MULEScontrols.lookupOrDefault<scalar>("smoothLimiter", 0)
     );
 
+    const scalar extremaCoeff
+    (
+        MULEScontrols.lookupOrDefault<scalar>("extremaCoeff", 0)
+    );
+
     const scalarField& psi0 = psi.oldTime();
 
     const labelUList& owner = mesh.owner();
@@ -286,7 +291,7 @@ void Foam::MULES::limiter
                 psiMinn[pfCelli] = min(psiMinn[pfCelli], psiPNf[pFacei]);
             }
         }
-        else
+        else if (psiPf.fixesValue())
         {
             forAll(phiCorrPf, pFacei)
             {
@@ -316,8 +321,8 @@ void Foam::MULES::limiter
         }
     }
 
-    psiMaxn = min(psiMaxn, psiMax);
-    psiMinn = max(psiMinn, psiMin);
+    psiMaxn = min(psiMaxn + extremaCoeff*(psiMax - psiMin), psiMax);
+    psiMinn = max(psiMinn - extremaCoeff*(psiMax - psiMin), psiMin);
 
     if (smoothLimiter > SMALL)
     {
-- 
GitLab