16 #ifndef dealii_ginkgo_solver_h
17 # define dealii_ginkgo_solver_h
20 # include <deal.II/base/config.h>
22 # ifdef DEAL_II_WITH_GINKGO
24 # include <deal.II/lac/block_sparse_matrix.h>
25 # include <deal.II/lac/exceptions.h>
26 # include <deal.II/lac/solver_control.h>
27 # include <deal.II/lac/sparse_matrix.h>
28 # include <deal.II/lac/vector.h>
30 # include <ginkgo/ginkgo.hpp>
34 DEAL_II_NAMESPACE_OPEN
36 namespace GinkgoWrappers
49 template <
typename ValueType,
typename IndexType>
124 apply(Vector<ValueType> &solution,
const Vector<ValueType> &rhs);
133 Vector<ValueType> & solution,
134 const Vector<ValueType> & rhs);
153 std::shared_ptr<gko::LinOpFactory> solver_gen;
159 std::shared_ptr<gko::stop::ResidualNormReduction<>::Factory>
166 std::shared_ptr<gko::log::Convergence<>> convergence_logger;
172 std::shared_ptr<gko::stop::Combined::Factory> combined_factory;
179 std::shared_ptr<gko::Executor> executor;
189 initialize_ginkgo_log();
198 std::shared_ptr<gko::matrix::Csr<ValueType, IndexType>> system_matrix;
205 const std::string exec_type;
214 template <
typename ValueType =
double,
typename IndexType =
int32_t>
221 struct AdditionalData
236 const std::string & exec_type,
237 const AdditionalData &data = AdditionalData());
253 const std::string & exec_type,
254 const std::shared_ptr<gko::LinOpFactory> &preconditioner,
255 const AdditionalData & data = AdditionalData());
261 const AdditionalData additional_data;
270 template <
typename ValueType =
double,
typename IndexType =
int32_t>
277 struct AdditionalData
292 const std::string & exec_type,
293 const AdditionalData &data = AdditionalData());
309 const std::string & exec_type,
310 const std::shared_ptr<gko::LinOpFactory> &preconditioner,
311 const AdditionalData &data = AdditionalData());
317 const AdditionalData additional_data;
328 template <
typename ValueType =
double,
typename IndexType =
int32_t>
329 class SolverCGS :
public SolverBase<ValueType, IndexType>
335 struct AdditionalData
350 const std::string & exec_type,
351 const AdditionalData &data = AdditionalData());
367 const std::string & exec_type,
368 const std::shared_ptr<gko::LinOpFactory> &preconditioner,
369 const AdditionalData &data = AdditionalData());
375 const AdditionalData additional_data;
395 template <
typename ValueType =
double,
typename IndexType =
int32_t>
396 class SolverFCG :
public SolverBase<ValueType, IndexType>
402 struct AdditionalData
417 const std::string & exec_type,
418 const AdditionalData &data = AdditionalData());
434 const std::string & exec_type,
435 const std::shared_ptr<gko::LinOpFactory> &preconditioner,
436 const AdditionalData &data = AdditionalData());
442 const AdditionalData additional_data;
450 template <
typename ValueType =
double,
typename IndexType =
int32_t>
457 struct AdditionalData
463 AdditionalData(
const unsigned int restart_parameter = 30);
468 unsigned int restart_parameter;
483 const std::string & exec_type,
484 const AdditionalData &data = AdditionalData());
500 const std::string & exec_type,
501 const std::shared_ptr<gko::LinOpFactory> &preconditioner,
502 const AdditionalData &data = AdditionalData());
508 const AdditionalData additional_data;
520 template <
typename ValueType =
double,
typename IndexType =
int32_t>
521 class SolverIR :
public SolverBase<ValueType, IndexType>
527 struct AdditionalData
542 const std::string & exec_type,
543 const AdditionalData &data = AdditionalData());
559 const std::string & exec_type,
560 const std::shared_ptr<gko::LinOpFactory> &inner_solver,
561 const AdditionalData & data = AdditionalData());
567 const AdditionalData additional_data;
573 DEAL_II_NAMESPACE_CLOSE
575 # endif // DEAL_II_WITH_GINKGO