version 3.7
solvercategory.hh
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3//
4// SPDX-FileCopyrightInfo: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
7#ifndef DUMUX_LINEAR_SOLVERCATEGORY_HH
8#define DUMUX_LINEAR_SOLVERCATEGORY_HH
9
10#include <dune/istl/solvers.hh>
11
12namespace Dumux::Detail {
13
14template<class LinearSolverTraits, class GridView>
15Dune::SolverCategory::Category solverCategory(const GridView& gridView)
16{
18 {
19 if (gridView.comm().size() <= 1)
20 return Dune::SolverCategory::sequential;
21
22 if (LinearSolverTraits::isNonOverlapping(gridView))
23 return Dune::SolverCategory::nonoverlapping;
24 else
25 return Dune::SolverCategory::overlapping;
26 }
27 else
28 {
29 if (gridView.comm().size() > 1)
30 DUNE_THROW(Dune::InvalidStateException,
31 "Attempt to construct parallel solver but LinearSolverTraits::canCommunicate is false. " <<
32 "Maybe the grid implementation does not support distributed parallelism."
33 );
34 }
35
36 return Dune::SolverCategory::sequential;
37}
38
39} // end namespace Dumux::Detail
40
41#endif
Distance implementation details.
Definition: cvfelocalresidual.hh:25
static constexpr bool canCommunicate
Definition: gridcapabilities.hh:51
Dune::SolverCategory::Category solverCategory(const GridView &gridView)
Definition: solvercategory.hh:15