101 using OverlappingVector =
typename ParentType::OverlappingVector;
105 using MatrixBlock =
typename SparseMatrixAdapter::MatrixBlock;
109 ParallelPreconditioner>;
111 static_assert(std::is_same<SparseMatrixAdapter, IstlSparseMatrixAdapter<MatrixBlock> >::value,
112 "The ParallelIstlSolverBackend linear solver backend requires the IstlSparseMatrixAdapter");
119 static void registerParameters()
123 Parameters::Register<Parameters::LinearSolverMaxError<Scalar>>
124 (
"The maximum residual error which the linear solver tolerates"
125 " without giving up");
131 std::shared_ptr<RawLinearSolver> prepareSolver_(ParallelOperator& parOperator,
132 ParallelScalarProduct& parScalarProduct,
133 ParallelPreconditioner& parPreCond)
135 const auto& gridView = this->simulator_.gridView();
138 Scalar linearSolverTolerance = Parameters::Get<Parameters::LinearSolverTolerance<Scalar>>();
139 Scalar linearSolverAbsTolerance = Parameters::Get<Parameters::LinearSolverAbsTolerance<Scalar>>();
140 if(linearSolverAbsTolerance < 0.0)
141 linearSolverAbsTolerance = this->simulator_.model().newtonMethod().tolerance() / 100.0;
143 convCrit_.reset(
new CCC(gridView.comm(),
144 linearSolverTolerance,
145 linearSolverAbsTolerance,
148 auto bicgstabSolver =
149 std::make_shared<RawLinearSolver>(parPreCond, *convCrit_, parScalarProduct);
152 if (parOperator.overlap().myRank() == 0)
153 verbosity = Parameters::Get<Parameters::LinearSolverVerbosity>();
154 bicgstabSolver->setVerbosity(verbosity);
155 bicgstabSolver->setMaxIterations(Parameters::Get<Parameters::LinearSolverMaxIterations>());
156 bicgstabSolver->setLinearOperator(&parOperator);
157 bicgstabSolver->setRhs(this->overlappingb_);
159 return bicgstabSolver;
162 std::pair<bool,int> runSolver_(std::shared_ptr<RawLinearSolver> solver)
164 bool converged = solver->apply(*this->overlappingx_);
165 return std::make_pair(converged,
int(solver->report().iterations()));
168 void cleanupSolver_()
171 std::unique_ptr<ConvergenceCriterion<OverlappingVector> > convCrit_;
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:235