diff --git a/dumux/linear/istlsolvers.hh b/dumux/linear/istlsolvers.hh index 97f5a8316a25c7c060749b8e3048f4790d05e454..6d29313ed955623e3c2a5a847b2e81dfcc063f34 100644 --- a/dumux/linear/istlsolvers.hh +++ b/dumux/linear/istlsolvers.hh @@ -143,9 +143,10 @@ public: { initializeParameters_(paramGroup); #if HAVE_MPI + solverCategory_ = Detail::solverCategory<LinearSolverTraits>(gridView); if constexpr (LinearSolverTraits::canCommunicate) { - solverCategory_ = Detail::solverCategory<LinearSolverTraits>(gridView); + if (solverCategory_ != Dune::SolverCategory::sequential) { parallelHelper_ = std::make_unique<ParallelISTLHelper<LinearSolverTraits>>(gridView, dofMapper); @@ -157,10 +158,7 @@ public: scalarProduct_ = std::make_shared<ScalarProduct>(); } else - { - solverCategory_ = Dune::SolverCategory::sequential; scalarProduct_ = std::make_shared<ScalarProduct>(); - } #else solverCategory_ = Dune::SolverCategory::sequential; scalarProduct_ = std::make_shared<ScalarProduct>(); diff --git a/dumux/linear/solvercategory.hh b/dumux/linear/solvercategory.hh index 16ab7226aeb901df1278d4705c01d14f5e7bead8..3943680d0020277ee06243e6d2a843ccb372deec 100644 --- a/dumux/linear/solvercategory.hh +++ b/dumux/linear/solvercategory.hh @@ -37,7 +37,15 @@ Dune::SolverCategory::Category solverCategory(const GridView& gridView) return Dune::SolverCategory::overlapping; } else - return Dune::SolverCategory::sequential; + { + if (gridView.comm().size() > 1) + DUNE_THROW(Dune::InvalidStateException, + "Attempt to construct parallel solver but LinearSolverTraits::canCommunicate is false. " << + "Maybe the grid implementation does not support distributed parallelism." + ); + } + + return Dune::SolverCategory::sequential; } } // end namespace Dumux::Detail