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