|
bool | apply_uses_initial_guess () const override |
| Return true as iterative solvers use the data in x as an initial guess or false if multigrid always set the input as zero. More...
|
|
std::vector< std::shared_ptr< const gko::multigrid::MultigridLevel > > | get_mg_level_list () const |
| Gets the list of MultigridLevel operators. More...
|
|
std::vector< std::shared_ptr< const LinOp > > | get_pre_smoother_list () const |
| Gets the list of pre-smoother operators. More...
|
|
std::vector< std::shared_ptr< const LinOp > > | get_mid_smoother_list () const |
| Gets the list of mid-smoother operators. More...
|
|
std::vector< std::shared_ptr< const LinOp > > | get_post_smoother_list () const |
| Gets the list of post-smoother operators. More...
|
|
std::shared_ptr< const LinOp > | get_coarsest_solver () const |
| Gets the operator at the coarsest level. More...
|
|
multigrid::cycle | get_cycle () const |
| Get the cycle of multigrid. More...
|
|
void | set_cycle (multigrid::cycle cycle) |
| Set the cycle of multigrid. More...
|
|
const parameters_type & | get_parameters () const |
|
const ConcreteLinOp * | apply (ptr_param< const LinOp > b, ptr_param< LinOp > x) const |
|
ConcreteLinOp * | apply (ptr_param< const LinOp > b, ptr_param< LinOp > x) |
|
const ConcreteLinOp * | apply (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x) const |
|
ConcreteLinOp * | apply (ptr_param< const LinOp > alpha, ptr_param< const LinOp > b, ptr_param< const LinOp > beta, ptr_param< LinOp > x) |
|
std::unique_ptr< ConcreteLinOp > | create_default (std::shared_ptr< const Executor > exec) const |
|
std::unique_ptr< ConcreteLinOp > | create_default () const |
|
std::unique_ptr< ConcreteLinOp > | clone (std::shared_ptr< const Executor > exec) const |
|
std::unique_ptr< ConcreteLinOp > | clone () const |
|
ConcreteLinOp * | copy_from (const PolymorphicObject *other) |
|
std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, ConcreteLinOp > * | copy_from (std::unique_ptr< Derived > &&other) |
|
std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, ConcreteLinOp > * | copy_from (const std::unique_ptr< Derived > &other) |
|
ConcreteLinOp * | copy_from (const std::shared_ptr< const PolymorphicObject > &other) |
|
ConcreteLinOp * | move_from (ptr_param< PolymorphicObject > other) |
|
ConcreteLinOp * | clear () |
|
void | convert_to (result_type *result) const override |
| Converts the implementer to an object of type result_type. More...
|
|
void | move_to (result_type *result) override |
| Converts the implementer to an object of type result_type by moving data from this object. More...
|
|
void | convert_to (ptr_param< result_type > result) const |
|
void | move_to (ptr_param< result_type > result) |
|
EnableSolverBase & | operator= (const EnableSolverBase &other) |
| Creates a shallow copy of the provided system matrix, clones it onto this executor if executors don't match.
|
|
EnableSolverBase & | operator= (EnableSolverBase &&other) |
| Moves the provided system matrix, clones it onto this executor if executors don't match. More...
|
|
| EnableSolverBase (std::shared_ptr< const LinOp > system_matrix) |
|
| EnableSolverBase (const EnableSolverBase &other) |
| Creates a shallow copy of the provided system matrix.
|
|
| EnableSolverBase (EnableSolverBase &&other) |
| Moves the provided system matrix. More...
|
|
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 |
| Returns the IDs of all scalars (workspace vectors with system dimension-independent size, usually 1 x num_rhs).
|
|
std::vector< int > | get_workspace_vectors () const override |
| Returns the IDs of all vectors (workspace vectors with system dimension-dependent size, usually system_matrix_size x num_rhs).
|
|
std::shared_ptr< const LinOp > | get_system_matrix () const |
| Returns the system matrix, with its concrete type, used by the solver. More...
|
|
EnableIterativeBase & | operator= (const EnableIterativeBase &other) |
| Creates a shallow copy of the provided stopping criterion, clones it onto this executor if executors don't match.
|
|
EnableIterativeBase & | operator= (EnableIterativeBase &&other) |
| Moves the provided stopping criterion, clones it onto this executor if executors don't match. More...
|
|
| EnableIterativeBase (std::shared_ptr< const stop::CriterionFactory > stop_factory) |
|
| EnableIterativeBase (const EnableIterativeBase &other) |
| Creates a shallow copy of the provided stopping criterion.
|
|
| EnableIterativeBase (EnableIterativeBase &&other) |
| Moves the provided stopping criterion. More...
|
|
void | set_stop_criterion_factory (std::shared_ptr< const stop::CriterionFactory > new_stop_factory) override |
| Sets the stopping criterion of the solver. More...
|
|
std::shared_ptr< const stop::CriterionFactory > | get_stop_criterion_factory () const |
| Gets the stopping criterion factory of the solver. More...
|
|
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).