From 937e3949deaa461cd680d95445b473f8707a9e41 Mon Sep 17 00:00:00 2001 From: Timo Koch <timo.koch@iws.uni-stuttgart.de> Date: Tue, 28 Feb 2023 15:32:16 +0100 Subject: [PATCH] [solver][fix] Throw if canCommunicate is false but this is a parallel run+solver --- dumux/linear/istlsolvers.hh | 6 ++---- dumux/linear/solvercategory.hh | 10 +++++++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/dumux/linear/istlsolvers.hh b/dumux/linear/istlsolvers.hh index 97f5a8316a..6d29313ed9 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 16ab7226ae..3943680d00 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 -- GitLab