5 #ifndef GKO_PUBLIC_CORE_MULTIGRID_MULTIGRID_LEVEL_HPP_
6 #define GKO_PUBLIC_CORE_MULTIGRID_MULTIGRID_LEVEL_HPP_
13 #include <ginkgo/core/base/abstract_factory.hpp>
14 #include <ginkgo/core/base/composition.hpp>
15 #include <ginkgo/core/base/exception_helpers.hpp>
16 #include <ginkgo/core/base/lin_op.hpp>
17 #include <ginkgo/core/base/utils.hpp>
46 virtual std::shared_ptr<const LinOp>
get_fine_op()
const = 0;
60 virtual std::shared_ptr<const LinOp>
get_coarse_op()
const = 0;
81 template <
typename ValueType>
85 using value_type = ValueType;
116 void set_multigrid_level(std::shared_ptr<const LinOp> prolong_op,
117 std::shared_ptr<const LinOp> coarse_op,
118 std::shared_ptr<const LinOp> restrict_op)
121 restrict_op->get_size()[1]};
122 GKO_ASSERT_EQUAL_DIMENSIONS(fine_op_->get_size(), mg_size);
124 this->set_composition(prolong_op, coarse_op, restrict_op);
133 void set_fine_op(std::shared_ptr<const LinOp> fine_op)
135 GKO_ASSERT_EQUAL_DIMENSIONS(fine_op_->get_size(), fine_op->get_size());
139 explicit EnableMultigridLevel() {}
150 explicit EnableMultigridLevel(std::shared_ptr<const LinOp> fine_op)
155 std::shared_ptr<const LinOp> fine_op_;
163 #endif // GKO_PUBLIC_CORE_MULTIGRID_MULTIGRID_LEVEL_HPP_