* The @p solver_control object is the same as for other
* deal.II iterative solvers.
*/
- SolverBase(SolverControl & solver_control,
- std::string exec_type);
+ SolverBase(SolverControl &solver_control, std::string exec_type);
/**
* Destructor.
*
* @p exec_type The execution paradigm for the CG solver.
*/
- SolverCG(SolverControl & solver_control,
- std::string exec_type,
- const AdditionalData & data = AdditionalData());
+ SolverCG(SolverControl & solver_control,
+ std::string exec_type,
+ const AdditionalData &data = AdditionalData());
+
+ /**
+ * Constructor.
+ *
+ * @p solver_control The solver control object is then used to set the
+ * parameters and setup the CG solver from the CG factory which solves the
+ * linear system.
+ *
+ * @p exec_type The execution paradigm for the CG solver.
+ *
+ * @p preconditioner The preconditioner for the solver.
+ */
+ SolverCG(SolverControl & solver_control,
+ std::string exec_type,
+ std::shared_ptr<gko::LinOpFactory> preconditioner,
+ const AdditionalData & data = AdditionalData());
- /**
- * Constructor.
- *
- * @p solver_control The solver control object is then used to set the
- * parameters and setup the CG solver from the CG factory which solves the
- * linear system.
- *
- * @p exec_type The execution paradigm for the CG solver.
- *
- * @p preconditioner The preconditioner for the solver.
- */
- SolverCG(SolverControl & solver_control,
- std::string exec_type,
- std::shared_ptr<gko::LinOpFactory> preconditioner,
- const AdditionalData & data = AdditionalData());
protected:
/**
* Store a copy of the settings for this particular solver.
* Constructor.
*
* @p solver_control The solver control object is then used to set the
- * parameters and setup the BICGSTAB solver from the BICGSTAB factory which solves the
- * linear system.
+ * parameters and setup the BICGSTAB solver from the BICGSTAB factory which
+ * solves the linear system.
*
* @p exec_type The execution paradigm for the BICGSTAB solver.
*/
- SolverBICGSTAB(SolverControl & solver_control,
- std::string exec_type,
- const AdditionalData & data = AdditionalData());
+ SolverBICGSTAB(SolverControl & solver_control,
+ std::string exec_type,
+ const AdditionalData &data = AdditionalData());
+
+ /**
+ * Constructor.
+ *
+ * @p solver_control The solver control object is then used to set the
+ * parameters and setup the BICGSTAB solver from the BICGSTAB factory which
+ * solves the linear system.
+ *
+ * @p exec_type The execution paradigm for the BICGSTAB solver.
+ *
+ * @p preconditioner The preconditioner for the solver.
+ */
+ SolverBICGSTAB(SolverControl & solver_control,
+ std::string exec_type,
+ std::shared_ptr<gko::LinOpFactory> preconditioner,
+ const AdditionalData & data = AdditionalData());
- /**
- * Constructor.
- *
- * @p solver_control The solver control object is then used to set the
- * parameters and setup the BICGSTAB solver from the BICGSTAB factory which solves the
- * linear system.
- *
- * @p exec_type The execution paradigm for the BICGSTAB solver.
- *
- * @p preconditioner The preconditioner for the solver.
- */
- SolverBICGSTAB(SolverControl & solver_control,
- std::string exec_type,
- std::shared_ptr<gko::LinOpFactory> preconditioner,
- const AdditionalData & data = AdditionalData());
protected:
/**
* Store a copy of the settings for this particular solver.
* @ingroup GinkgoWrappers
*/
template <typename ValueType = double, typename IndexType = int32_t>
- class SolverCGS: public SolverBase<ValueType, IndexType>
+ class SolverCGS : public SolverBase<ValueType, IndexType>
{
public:
/**
*
* @p exec_type The execution paradigm for the CGS solver.
*/
- SolverCGS(SolverControl & solver_control,
- std::string exec_type,
- const AdditionalData & data = AdditionalData());
+ SolverCGS(SolverControl & solver_control,
+ std::string exec_type,
+ const AdditionalData &data = AdditionalData());
+
+ /**
+ * Constructor.
+ *
+ * @p solver_control The solver control object is then used to set the
+ * parameters and setup the CGS solver from the CGS factory which solves the
+ * linear system.
+ *
+ * @p exec_type The execution paradigm for the CGS solver.
+ *
+ * @p preconditioner The preconditioner for the solver.
+ */
+ SolverCGS(SolverControl & solver_control,
+ std::string exec_type,
+ std::shared_ptr<gko::LinOpFactory> preconditioner,
+ const AdditionalData & data = AdditionalData());
- /**
- * Constructor.
- *
- * @p solver_control The solver control object is then used to set the
- * parameters and setup the CGS solver from the CGS factory which solves the
- * linear system.
- *
- * @p exec_type The execution paradigm for the CGS solver.
- *
- * @p preconditioner The preconditioner for the solver.
- */
- SolverCGS(SolverControl & solver_control,
- std::string exec_type,
- std::shared_ptr<gko::LinOpFactory> preconditioner,
- const AdditionalData & data = AdditionalData());
protected:
/**
* Store a copy of the settings for this particular solver.
* @ingroup GinkgoWrappers
*/
template <typename ValueType = double, typename IndexType = int32_t>
- class SolverFCG: public SolverBase<ValueType, IndexType>
+ class SolverFCG : public SolverBase<ValueType, IndexType>
{
public:
/**
*
* @p exec_type The execution paradigm for the FCG solver.
*/
- SolverFCG(SolverControl & solver_control,
- std::string exec_type,
- const AdditionalData & data = AdditionalData());
+ SolverFCG(SolverControl & solver_control,
+ std::string exec_type,
+ const AdditionalData &data = AdditionalData());
+
+ /**
+ * Constructor.
+ *
+ * @p solver_control The solver control object is then used to set the
+ * parameters and setup the FCG solver from the FCG factory which solves the
+ * linear system.
+ *
+ * @p exec_type The execution paradigm for the FCG solver.
+ *
+ * @p preconditioner The preconditioner for the solver.
+ */
+ SolverFCG(SolverControl & solver_control,
+ std::string exec_type,
+ std::shared_ptr<gko::LinOpFactory> preconditioner,
+ const AdditionalData & data = AdditionalData());
- /**
- * Constructor.
- *
- * @p solver_control The solver control object is then used to set the
- * parameters and setup the FCG solver from the FCG factory which solves the
- * linear system.
- *
- * @p exec_type The execution paradigm for the FCG solver.
- *
- * @p preconditioner The preconditioner for the solver.
- */
- SolverFCG(SolverControl & solver_control,
- std::string exec_type,
- std::shared_ptr<gko::LinOpFactory> preconditioner,
- const AdditionalData & data = AdditionalData());
protected:
/**
* Store a copy of the settings for this particular solver.
* @ingroup GinkgoWrappers
*/
template <typename ValueType = double, typename IndexType = int32_t>
- class SolverGMRES: public SolverBase<ValueType, IndexType>
+ class SolverGMRES : public SolverBase<ValueType, IndexType>
{
public:
/**
* A standardized data struct to pipe additional data to the solver.
*/
struct AdditionalData
- {
- /**
- * Constructor. By default, set the number of temporary vectors to 30,
- * i.e. do a restart every 30 iterations.
- */
- AdditionalData(const unsigned int restart_parameter = 30);
+ {
+ /**
+ * Constructor. By default, set the number of temporary vectors to 30,
+ * i.e. do a restart every 30 iterations.
+ */
+ AdditionalData(const unsigned int restart_parameter = 30);
+
+ /**
+ * Maximum number of tmp vectors.
+ */
+ unsigned int restart_parameter;
+ };
/**
- * Maximum number of tmp vectors.
+ * Constructor.
+ *
+ * @p solver_control The solver control object is then used to set the
+ * parameters and setup the GMRES solver from the GMRES factory which solves
+ * the linear system.
+ *
+ * @p exec_type The execution paradigm for the GMRES solver.
*/
- unsigned int restart_parameter;
-
- };
+ SolverGMRES(SolverControl & solver_control,
+ std::string exec_type,
+ const AdditionalData &data = AdditionalData());
/**
* Constructor.
*
* @p solver_control The solver control object is then used to set the
- * parameters and setup the GMRES solver from the GMRES factory which solves the
- * linear system.
+ * parameters and setup the GMRES solver from the GMRES factory which solves
+ * the linear system.
*
* @p exec_type The execution paradigm for the GMRES solver.
+ *
+ * @p preconditioner The preconditioner for the solver.
*/
- SolverGMRES(SolverControl & solver_control,
- std::string exec_type,
- const AdditionalData & data = AdditionalData());
+ SolverGMRES(SolverControl & solver_control,
+ std::string exec_type,
+ std::shared_ptr<gko::LinOpFactory> preconditioner,
+ const AdditionalData & data = AdditionalData());
- /**
- * Constructor.
- *
- * @p solver_control The solver control object is then used to set the
- * parameters and setup the GMRES solver from the GMRES factory which solves the
- * linear system.
- *
- * @p exec_type The execution paradigm for the GMRES solver.
- *
- * @p preconditioner The preconditioner for the solver.
- */
- SolverGMRES(SolverControl & solver_control,
- std::string exec_type,
- std::shared_ptr<gko::LinOpFactory> preconditioner,
- const AdditionalData & data = AdditionalData());
protected:
/**
* Store a copy of the settings for this particular solver.
* @ingroup GinkgoWrappers
*/
template <typename ValueType = double, typename IndexType = int32_t>
- class SolverIR: public SolverBase<ValueType, IndexType>
+ class SolverIR : public SolverBase<ValueType, IndexType>
{
public:
/**
*
* @p exec_type The execution paradigm for the IR solver.
*/
- SolverIR(SolverControl & solver_control,
- std::string exec_type,
- const AdditionalData & data = AdditionalData());
+ SolverIR(SolverControl & solver_control,
+ std::string exec_type,
+ const AdditionalData &data = AdditionalData());
- /**
- * Constructor.
- *
- * @p solver_control The solver control object is then used to set the
- * parameters and setup the IR solver from the IR factory which solves the
- * linear system.
- *
- * @p exec_type The execution paradigm for the IR solver.
- *
- * @p inner_solver The Inner solver for the IR solver.
- */
- SolverIR(SolverControl & solver_control,
- std::string exec_type,
- std::shared_ptr<gko::LinOpFactory> inner_solver,
- const AdditionalData & data = AdditionalData());
+ /**
+ * Constructor.
+ *
+ * @p solver_control The solver control object is then used to set the
+ * parameters and setup the IR solver from the IR factory which solves the
+ * linear system.
+ *
+ * @p exec_type The execution paradigm for the IR solver.
+ *
+ * @p inner_solver The Inner solver for the IR solver.
+ */
+ SolverIR(SolverControl & solver_control,
+ std::string exec_type,
+ std::shared_ptr<gko::LinOpFactory> inner_solver,
+ const AdditionalData & data = AdditionalData());
protected:
/**
// std::shared_ptr<gko::Executor> exec = gko::CudaExecutor::create(0,
// gko::OmpExecutor::create());
// std::shared_ptr<gko::Executor> exec = gko::OmpExecutor::create();
- auto executor = "reference";
- std::shared_ptr<gko::Executor> exec = gko::ReferenceExecutor::create();
- std::shared_ptr<gko::LinOpFactory> jacobi = gko::preconditioner::Jacobi<>::build().on(exec);
- std::shared_ptr<gko::LinOpFactory> inner_cg = gko::solver::Cg<>::build()
- .with_criteria(
- gko::stop::Iteration::build().with_max_iters(45u).on(exec),
- gko::stop::ResidualNormReduction<>::build()
- .with_reduction_factor(1e-5)
- .on(exec))
- .on(exec);
- GinkgoWrappers::SolverCG<> cg_solver(control, executor);
- GinkgoWrappers::SolverBICGSTAB<> bicgstab_solver(control, executor);
- GinkgoWrappers::SolverCGS<> cgs_solver(control, executor);
- GinkgoWrappers::SolverFCG<> fcg_solver(control, executor);
- GinkgoWrappers::SolverGMRES<> gmres_solver(control, executor);
- GinkgoWrappers::SolverIR<> ir_solver_cg(control, executor, inner_cg);
- GinkgoWrappers::SolverCG<> cg_solver_with_jacobi_precond(control, executor, jacobi);
+ auto executor = "reference";
+ std::shared_ptr<gko::Executor> exec = gko::ReferenceExecutor::create();
+ std::shared_ptr<gko::LinOpFactory> jacobi =
+ gko::preconditioner::Jacobi<>::build().on(exec);
+ std::shared_ptr<gko::LinOpFactory> inner_cg =
+ gko::solver::Cg<>::build()
+ .with_criteria(gko::stop::Iteration::build().with_max_iters(45u).on(
+ exec),
+ gko::stop::ResidualNormReduction<>::build()
+ .with_reduction_factor(1e-5)
+ .on(exec))
+ .on(exec);
+ GinkgoWrappers::SolverCG<> cg_solver(control, executor);
+ GinkgoWrappers::SolverBICGSTAB<> bicgstab_solver(control, executor);
+ GinkgoWrappers::SolverCGS<> cgs_solver(control, executor);
+ GinkgoWrappers::SolverFCG<> fcg_solver(control, executor);
+ GinkgoWrappers::SolverGMRES<> gmres_solver(control, executor);
+ GinkgoWrappers::SolverIR<> ir_solver_cg(control, executor, inner_cg);
+ GinkgoWrappers::SolverCG<> cg_solver_with_jacobi_precond(control,
+ executor,
+ jacobi);
check_solver_within_range(cg_solver.solve(A, u, f),
control.last_step(),