From 924bf5ed1971b3fd5e58f640c997e03fd4633b7f Mon Sep 17 00:00:00 2001 From: Markus Blatt Date: Fri, 11 Dec 2020 17:38:00 +0100 Subject: [PATCH] Use old style traits class approach to check for face tag support. Old version failed due to a gcc compiler bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77446 with error: "non-constant condition for static assertion" --- .../aquifers/BlackoilAquiferModel.hpp | 33 +++++++++++++++---- .../aquifers/BlackoilAquiferModel_impl.hpp | 3 +- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/opm/simulators/aquifers/BlackoilAquiferModel.hpp b/opm/simulators/aquifers/BlackoilAquiferModel.hpp index 1aceb62eb..bdb2b70b6 100644 --- a/opm/simulators/aquifers/BlackoilAquiferModel.hpp +++ b/opm/simulators/aquifers/BlackoilAquiferModel.hpp @@ -44,10 +44,36 @@ #include #include +#include namespace Opm { +template +class SupportsFaceTag + : public std::bool_constant +{}; + + +template<> +class SupportsFaceTag + : public std::bool_constant +{}; + + +template<> +class SupportsFaceTag> + : public std::bool_constant +{}; + +#if HAVE_DUNE_ALUGRID +template<> +class SupportsFaceTag> + : public std::bool_constant +{}; +#endif + + /// Class for handling the blackoil well model. template class BlackoilAquiferModel @@ -55,13 +81,6 @@ class BlackoilAquiferModel using Simulator = GetPropType; using RateVector = GetPropType; - constexpr bool supportsFaceTag(const Dune::CpGrid&){ return true;} - constexpr bool supportsFaceTag(const Dune::PolyhedralGrid<3, 3>&){ return true;} -#if HAVE_DUNE_ALUGRID - constexpr bool supportsFaceTag(const Dune::ALUGrid<3, 3, Dune::cube, Dune::nonconforming>&){ return true;} -#endif - template - constexpr bool supportsFaceTag(const G&){ return false;} public: explicit BlackoilAquiferModel(Simulator& simulator); diff --git a/opm/simulators/aquifers/BlackoilAquiferModel_impl.hpp b/opm/simulators/aquifers/BlackoilAquiferModel_impl.hpp index e771b6c3b..6901480cc 100644 --- a/opm/simulators/aquifers/BlackoilAquiferModel_impl.hpp +++ b/opm/simulators/aquifers/BlackoilAquiferModel_impl.hpp @@ -26,7 +26,8 @@ BlackoilAquiferModel::BlackoilAquiferModel(Simulator& simulator) : simulator_(simulator) { // Grid needs to support Facetag - assert(supportsFaceTag(simulator.vanguard().grid())); + using Grid = std::remove_const_t>; + static_assert(SupportsFaceTag::value, "Grid has to support assumptions about face tag."); init(); }