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