From b9a22a06cf3cdc5074ac731dd1793a17ed72e5af Mon Sep 17 00:00:00 2001
From: Ned Coltman <edward.coltman@iws.uni-stuttgart.de>
Date: Wed, 6 May 2020 09:21:37 +0200
Subject: [PATCH] [test][rans][ransnc] unify turbulent initial ctds with if
 constexpr

---
 test/freeflow/rans/problem.hh   | 39 ++++++++++++++++-----------------
 test/freeflow/ransnc/problem.hh | 39 ++++++++++++++++-----------------
 2 files changed, 38 insertions(+), 40 deletions(-)

diff --git a/test/freeflow/rans/problem.hh b/test/freeflow/rans/problem.hh
index 221f3caad4..21f812c220 100644
--- a/test/freeflow/rans/problem.hh
+++ b/test/freeflow/rans/problem.hh
@@ -324,9 +324,7 @@ public:
 #endif
 
         // turbulence model-specific initial conditions
-        static constexpr auto numEq = numTurbulenceEq(ModelTraits::turbulenceModel());
-        setInitialAtPos_(values, globalPos, Dune::index_constant<numEq>{});
-
+        setInitialAtPos_(values, globalPos);
         return values;
     }
 
@@ -353,26 +351,27 @@ private:
         return globalPos[0] > this->gridGeometry().bBoxMax()[0] - eps_;
     }
 
-    //! Initial conditions for the zero-eq turbulence model (none)
-    void setInitialAtPos_(PrimaryVariables& values, const GlobalPosition &globalPos, Dune::index_constant<0>) const {}
-
-    //! Initial conditions for the one-eq turbulence model
-    void setInitialAtPos_(PrimaryVariables& values, const GlobalPosition &globalPos, Dune::index_constant<1>) const
-    {
-        values[Indices::viscosityTildeIdx] = viscosityTilde_;
-        if (isOnWallAtPos(globalPos))
-            values[Indices::viscosityTildeIdx] = 0.0;
-    }
-
     //! Initial conditions for the komega, kepsilon and lowrekepsilon turbulence models
-    void setInitialAtPos_(PrimaryVariables& values, const GlobalPosition &globalPos, Dune::index_constant<2>) const
+    void setInitialAtPos_(PrimaryVariables& values, const GlobalPosition &globalPos) const
     {
-        values[Indices::turbulentKineticEnergyIdx] = turbulentKineticEnergy_;
-        values[Indices::dissipationIdx] = dissipation_;
-        if (isOnWallAtPos(globalPos))
+        if constexpr (numTurbulenceEq(ModelTraits::turbulenceModel()) == 0) // zero equation models
+            return;
+        else if constexpr (numTurbulenceEq(ModelTraits::turbulenceModel()) == 1)  // one equation models
+        {
+            values[Indices::viscosityTildeIdx] = viscosityTilde_;
+            if (isOnWallAtPos(globalPos))
+                values[Indices::viscosityTildeIdx] = 0.0;
+        }
+        else // two equation models
         {
-            values[Indices::turbulentKineticEnergyIdx] = 0.0;
-            values[Indices::dissipationIdx] = 0.0;
+            static_assert(numTurbulenceEq(ModelTraits::turbulenceModel()) == 2, "Only reached by 2eq models");
+            values[Indices::turbulentKineticEnergyIdx] = turbulentKineticEnergy_;
+            values[Indices::dissipationIdx] = dissipation_;
+            if (isOnWallAtPos(globalPos))
+            {
+                values[Indices::turbulentKineticEnergyIdx] = 0.0;
+                values[Indices::dissipationIdx] = 0.0;
+            }
         }
     }
 
diff --git a/test/freeflow/ransnc/problem.hh b/test/freeflow/ransnc/problem.hh
index 1489864aef..4af9a105e3 100644
--- a/test/freeflow/ransnc/problem.hh
+++ b/test/freeflow/ransnc/problem.hh
@@ -343,9 +343,7 @@ public:
         values[Indices::velocityYIdx] = 0.0;
 
         // turbulence model-specific initial conditions
-        static constexpr auto numEq = numTurbulenceEq(ModelTraits::turbulenceModel());
-        setInitialAtPos_(values, globalPos, Dune::index_constant<numEq>{});
-
+        setInitialAtPos_(values, globalPos);
         return values;
     }
 
@@ -372,26 +370,27 @@ private:
         return globalPos[0] > this->gridGeometry().bBoxMax()[0] - eps_;
     }
 
-    //! Initial conditions for the zero-eq turbulence model (none)
-    void setInitialAtPos_(PrimaryVariables& values, const GlobalPosition &globalPos, Dune::index_constant<0>) const {}
-
-    //! Initial conditions for the one-eq turbulence model
-    void setInitialAtPos_(PrimaryVariables& values, const GlobalPosition &globalPos, Dune::index_constant<1>) const
-    {
-        values[Indices::viscosityTildeIdx] = viscosityTilde_;
-        if (isOnWallAtPos(globalPos))
-            values[Indices::viscosityTildeIdx] = 0.0;
-    }
-
     //! Initial conditions for the komega, kepsilon and lowrekepsilon turbulence models
-    void setInitialAtPos_(PrimaryVariables& values, const GlobalPosition &globalPos, Dune::index_constant<2>) const
+    void setInitialAtPos_(PrimaryVariables& values, const GlobalPosition &globalPos) const
     {
-        values[Indices::turbulentKineticEnergyIdx] = turbulentKineticEnergy_;
-        values[Indices::dissipationIdx] = dissipation_;
-        if (isOnWallAtPos(globalPos))
+        if constexpr (numTurbulenceEq(ModelTraits::turbulenceModel()) == 0) // zero equation models
+            return;
+        else if constexpr (numTurbulenceEq(ModelTraits::turbulenceModel()) == 1)  // one equation models
+        {
+            values[Indices::viscosityTildeIdx] = viscosityTilde_;
+            if (isOnWallAtPos(globalPos))
+                values[Indices::viscosityTildeIdx] = 0.0;
+        }
+        else // two equation models
         {
-            values[Indices::turbulentKineticEnergyIdx] = 0.0;
-            values[Indices::dissipationIdx] = 0.0;
+            static_assert(numTurbulenceEq(ModelTraits::turbulenceModel()) == 2, "Only reached by 2eq models");
+            values[Indices::turbulentKineticEnergyIdx] = turbulentKineticEnergy_;
+            values[Indices::dissipationIdx] = dissipation_;
+            if (isOnWallAtPos(globalPos))
+            {
+                values[Indices::turbulentKineticEnergyIdx] = 0.0;
+                values[Indices::dissipationIdx] = 0.0;
+            }
         }
     }
 
-- 
GitLab