|
| bool | apply_uses_initial_guess () const override |
| |
| std::vector< std::shared_ptr< const gko::multigrid::MultigridLevel > > | get_mg_level_list () const |
| |
| std::vector< std::shared_ptr< const LinOp > > | get_pre_smoother_list () const |
| |
| std::vector< std::shared_ptr< const LinOp > > | get_mid_smoother_list () const |
| |
| std::vector< std::shared_ptr< const LinOp > > | get_post_smoother_list () const |
| |
| std::shared_ptr< const LinOp > | get_coarsest_solver () const |
| |
| multigrid::cycle | get_cycle () const |
| |
| void | set_cycle (multigrid::cycle cycle) |
| |
|
const parameters_type & | get_parameters () const |
| |
|
const Multigrid * | apply (ptr_param< const LinOp > b, ptr_param< LinOp > x) const |
| |
|
Multigrid * | apply (ptr_param< const LinOp > b, ptr_param< LinOp > x) |
| |
|
const Multigrid * | apply (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x) const |
| |
|
Multigrid * | apply (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x) |
| |
|
std::unique_ptr< AbstractObject > | create_default (std::shared_ptr< const Executor > exec) const |
| |
|
std::unique_ptr< AbstractObject > | create_default () const |
| |
|
std::unique_ptr< AbstractObject > | clone (std::shared_ptr< const Executor > exec) const |
| |
|
std::unique_ptr< AbstractObject > | clone () const |
| |
|
AbstractObject * | copy_from (const PolymorphicObject *other) |
| |
|
template<typename Derived > |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, AbstractObject > * | copy_from (std::unique_ptr< Derived > &&other) |
| |
|
template<typename Derived > |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, AbstractObject > * | copy_from (const std::unique_ptr< Derived > &other) |
| |
|
AbstractObject * | copy_from (const std::shared_ptr< const PolymorphicObject > &other) |
| |
|
AbstractObject * | move_from (ptr_param< PolymorphicObject > other) |
| |
|
AbstractObject * | clear () |
| |
|
PolymorphicObject & | operator= (const PolymorphicObject &) |
| |
| std::unique_ptr< PolymorphicObject > | create_default (std::shared_ptr< const Executor > exec) const |
| |
| std::unique_ptr< PolymorphicObject > | create_default () const |
| |
| std::unique_ptr< PolymorphicObject > | clone (std::shared_ptr< const Executor > exec) const |
| |
| std::unique_ptr< PolymorphicObject > | clone () const |
| |
| PolymorphicObject * | copy_from (const PolymorphicObject *other) |
| |
| template<typename Derived , typename Deleter > |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, PolymorphicObject > * | copy_from (std::unique_ptr< Derived, Deleter > &&other) |
| |
| template<typename Derived , typename Deleter > |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, PolymorphicObject > * | copy_from (const std::unique_ptr< Derived, Deleter > &other) |
| |
| PolymorphicObject * | copy_from (const std::shared_ptr< const PolymorphicObject > &other) |
| |
| PolymorphicObject * | move_from (ptr_param< PolymorphicObject > other) |
| |
| PolymorphicObject * | clear () |
| |
| std::shared_ptr< const Executor > | get_executor () const noexcept |
| |
| void | add_logger (std::shared_ptr< const Logger > logger) override |
| |
| void | remove_logger (const Logger *logger) override |
| |
|
void | remove_logger (ptr_param< const Logger > logger) |
| |
| const std::vector< std::shared_ptr< const Logger > > & | get_loggers () const override |
| |
| void | clear_loggers () override |
| |
|
void | remove_logger (ptr_param< const Logger > logger) |
| |
| void | convert_to (result_type *result) const override |
| |
| void | move_to (result_type *result) override |
| |
|
void | convert_to (ptr_param< result_type > result) const |
| |
|
void | move_to (ptr_param< result_type > result) |
| |
| EnableSolverBase & | operator= (const EnableSolverBase &other) |
| |
| EnableSolverBase & | operator= (EnableSolverBase &&other) |
| |
|
| EnableSolverBase (std::shared_ptr< const LinOp > system_matrix) |
| |
| | EnableSolverBase (const EnableSolverBase &other) |
| |
| | EnableSolverBase (EnableSolverBase &&other) |
| |
|
int | get_num_workspace_ops () const override |
| |
|
std::vector< std::string > | get_workspace_op_names () const override |
| |
| std::vector< int > | get_workspace_scalars () const override |
| |
| std::vector< int > | get_workspace_vectors () const override |
| |
| std::shared_ptr< const MatrixType > | get_system_matrix () const |
| |
| EnableIterativeBase & | operator= (const EnableIterativeBase &other) |
| |
| EnableIterativeBase & | operator= (EnableIterativeBase &&other) |
| |
|
| EnableIterativeBase (std::shared_ptr< const stop::CriterionFactory > stop_factory) |
| |
| | EnableIterativeBase (const EnableIterativeBase &other) |
| |
| | EnableIterativeBase (EnableIterativeBase &&other) |
| |
| void | set_stop_criterion_factory (std::shared_ptr< const stop::CriterionFactory > new_stop_factory) override |
| |
| std::shared_ptr< const stop::CriterionFactory > | get_stop_criterion_factory () const |
| |
|
|
void | apply_impl (const LinOp *b, LinOp *x) const override |
| |
|
void | apply_impl (const LinOp *alpha, const LinOp *b, const LinOp *beta, LinOp *x) const override |
| |
| void | apply_with_initial_guess_impl (const LinOp *b, LinOp *x, initial_guess_mode guess) const override |
| |
| void | apply_with_initial_guess_impl (const LinOp *alpha, const LinOp *b, const LinOp *beta, LinOp *x, initial_guess_mode guess) const override |
| |
|
template<typename VectorType > |
| void | apply_dense_impl (const VectorType *b, VectorType *x, initial_guess_mode guess) const |
| |
| void | generate () |
| |
|
| Multigrid (std::shared_ptr< const Executor > exec) |
| |
|
| Multigrid (const Factory *factory, std::shared_ptr< const LinOp > system_matrix) |
| |
| void | validate () |
| |
| void | verify_legal_length (bool checked, size_type len, size_type ref_len) |
| |
|
void | create_state () const |
| |
|
Multigrid * | self () noexcept |
| |
|
const Multigrid * | self () const noexcept |
| |
| std::unique_ptr< PolymorphicObject > | create_default_impl (std::shared_ptr< const Executor > exec) const override |
| |
| PolymorphicObject * | copy_from_impl (const PolymorphicObject *other) override |
| |
| PolymorphicObject * | copy_from_impl (std::unique_ptr< PolymorphicObject > other) override |
| |
| PolymorphicObject * | move_from_impl (PolymorphicObject *other) override |
| |
| PolymorphicObject * | move_from_impl (std::unique_ptr< PolymorphicObject > other) override |
| |
| PolymorphicObject * | clear_impl () override |
| |
| | PolymorphicObject (std::shared_ptr< const Executor > exec) |
| |
|
| PolymorphicObject (const PolymorphicObject &other) |
| |
|
void | log (Params &&... params) const |
| |
|
void | set_system_matrix (std::shared_ptr< const LinOp > new_system_matrix) |
| |
|
void | setup_workspace () const |
| |
|
void | set_system_matrix_base (std::shared_ptr< const MatrixType > system_matrix) |
| |
|
| EnableApplyWithInitialGuess (initial_guess_mode guess=initial_guess_mode::provided) |
| |
| void | apply_with_initial_guess (const LinOp *b, LinOp *x, initial_guess_mode guess) const override |
| |
| void | apply_with_initial_guess (const LinOp *alpha, const LinOp *b, const LinOp *beta, LinOp *x, initial_guess_mode guess) const override |
| |
|
Multigrid * | self () noexcept |
| |
|
const Multigrid * | self () const noexcept |
| |
|
void | apply_with_initial_guess (ptr_param< const LinOp > b, ptr_param< LinOp > x, initial_guess_mode guess) const |
| |
|
void | apply_with_initial_guess (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x, initial_guess_mode guess) const |
| |
| initial_guess_mode | get_default_initial_guess () const |
| |
| | ApplyWithInitialGuess (initial_guess_mode guess=initial_guess_mode::provided) |
| |
| void | set_default_initial_guess (initial_guess_mode guess) |
| |
Multigrid methods have a hierarchy of many levels, whose corase level is a subset of the fine level, of the problem. The coarse level solves the system on the residual of fine level and fine level will use the coarse solution to correct its own result. Multigrid solves the problem by relatively cheap step in each level and refining the result when prolongating back.
The main step of each level
- Presmooth (solve on the fine level)
- Calculate residual
- Restrict (reduce the problem dimension)
- Solve residual in next level
- Prolongate (return to the fine level size)
- Postsmooth (correct the answer in fine level)
Ginkgo uses the index from 0 for finest level (original problem size) ~ N for the coarsest level (the coarsest solver), and its level counts is N (N multigrid level generation).