12#ifndef DUMUX_COMMON_PDESOLVER_HH
13#define DUMUX_COMMON_PDESOLVER_HH
18#include <dune/common/hybridutilities.hh>
19#include <dune/common/std/type_traits.hh>
25template <
class FirstRow,
class ... Args>
31template<
class Assembler>
34template<
class Assembler>
41template<
class Assembler>
59template<
class A,
class LS>
62 using Scalar =
typename A::Scalar;
111 {
return *assembler_; }
117 {
return *assembler_; }
123 {
return *linearSolver_; }
131 {
return *linearSolver_; }
136 template <
class FirstRow,
class ... Args>
139 bool matrixHasCorrectSize =
true;
140 using namespace Dune::Hybrid;
143 const auto& row = matrix[i];
144 const auto numRowsLeftMostBlock = row[Dune::index_constant<0>{}].N();
145 forEach(row, [&](
const auto& subBlock)
147 if (subBlock.N() != numRowsLeftMostBlock)
148 matrixHasCorrectSize =
false;
151 return matrixHasCorrectSize;
155 std::shared_ptr<Assembler> assembler_;
156 std::shared_ptr<LinearSolver> linearSolver_;
A high-level interface for a PDESolver.
Definition: common/pdesolver.hh:61
LS LinearSolver
Definition: common/pdesolver.hh:68
virtual void solve(Variables &vars, TimeLoop &timeLoop)
Solve the given PDE system with time step control.
Definition: common/pdesolver.hh:101
A Assembler
export the assembler and linear solver types
Definition: common/pdesolver.hh:67
bool checkSizesOfSubMatrices(const Dune::MultiTypeBlockMatrix< FirstRow, Args... > &matrix) const
Helper function to assure the MultiTypeBlockMatrix's sub-blocks have the correct sizes.
Definition: common/pdesolver.hh:137
const LinearSolver & linearSolver() const
Access the linear solver.
Definition: common/pdesolver.hh:122
virtual void solve(Variables &vars)=0
Solve the given PDE system (usually assemble + solve linear system + update)
Assembler & assembler()
Access the assembler.
Definition: common/pdesolver.hh:116
const Assembler & assembler() const
Access the assembler.
Definition: common/pdesolver.hh:110
PDESolver(std::shared_ptr< Assembler > assembler, std::shared_ptr< LinearSolver > linearSolver)
Constructor.
Definition: common/pdesolver.hh:78
LinearSolver & linearSolver()
Access the linear solver.
Definition: common/pdesolver.hh:130
virtual ~PDESolver()=default
Detail::PDESolver::AssemblerVariables< Assembler > Variables
export the type of variables that represent a numerical solution
Definition: common/pdesolver.hh:71
Manages the handling of time dependent problems.
Definition: common/timeloop.hh:56
Definition: common/pdesolver.hh:26
Manages the handling of time dependent problems.
Definition: common/pdesolver.hh:29
typename VariablesChooser< Assembler >::Type AssemblerVariables
Definition: common/pdesolver.hh:42
typename Assembler::Variables AssemblerVariablesType
Definition: common/pdesolver.hh:32
constexpr bool assemblerExportsVariables
Definition: common/pdesolver.hh:35
Definition: common/pdesolver.hh:24
typename A::SolutionVector Type
Definition: common/pdesolver.hh:39
AssemblerVariablesType< A > Type
Definition: common/pdesolver.hh:38
Definition: common/pdesolver.hh:37