81class ParallelIstlSolverBackend :
public ParallelBaseBackend<TypeTag>
83 using ParentType = ParallelBaseBackend<TypeTag>;
90 using ParallelOperator =
typename ParentType::ParallelOperator;
91 using OverlappingVector =
typename ParentType::OverlappingVector;
92 using ParallelPreconditioner =
typename ParentType::ParallelPreconditioner;
93 using ParallelScalarProduct =
typename ParentType::ParallelScalarProduct;
95 using MatrixBlock =
typename SparseMatrixAdapter::MatrixBlock;
96 using RawLinearSolver =
typename LinearSolverWrapper::RawSolver;
98 static_assert(std::is_same<SparseMatrixAdapter, IstlSparseMatrixAdapter<MatrixBlock> >::value,
99 "The ParallelIstlSolverBackend linear solver backend requires the IstlSparseMatrixAdapter");
102 explicit ParallelIstlSolverBackend(
const Simulator& simulator)
103 : ParentType(simulator)
113 LinearSolverWrapper::registerParameters();
119 std::shared_ptr<RawLinearSolver> prepareSolver_(ParallelOperator& parOperator,
120 ParallelScalarProduct& parScalarProduct,
121 ParallelPreconditioner& parPreCond)
123 return solverWrapper_.get(parOperator,
128 void cleanupSolver_()
130 solverWrapper_.cleanup();
133 std::pair<bool, int> runSolver_(std::shared_ptr<RawLinearSolver> solver)
135 Dune::InverseOperatorResult result;
136 solver->apply(*this->overlappingx_, *this->overlappingb_, result);
137 return std::make_pair(result.converged, result.iterations);
140 LinearSolverWrapper solverWrapper_;
typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type GetPropType
get the type alias defined in the property (equivalent to old macro GET_PROP_TYPE(....
Definition propertysystem.hh:233