5#include <deal.II/grid/grid_tools.h>
6#include <deal.II/lac/precondition.h>
7#include <deal.II/lac/solver_cg.h>
8#include <deal.II/matrix_free/matrix_free.h>
9#include <deal.II/matrix_free/operators.h>
10#include <deal.II/multigrid/mg_coarse.h>
11#include <deal.II/multigrid/mg_constrained_dofs.h>
12#include <deal.II/multigrid/mg_matrix.h>
13#include <deal.II/multigrid/mg_smoother.h>
14#include <deal.II/multigrid/mg_tools.h>
15#include <deal.II/multigrid/mg_transfer_global_coarsening.h>
16#include <deal.II/multigrid/mg_transfer_matrix_free.h>
17#include <deal.II/multigrid/multigrid.h>
25#include <prismspf/config.h>
29template <
unsigned int dim,
unsigned int degree,
typename number>
35template <
unsigned int dim,
unsigned int degree,
typename number>
42 using SolverBase::rhs_operators;
69 dealii::MGLevelObject<MFOperator<dim, degree, number>> mg_lhs_operators(min_level,
75 dealii::MGLevelObject<BlockVector<number>> mg_solution_vectors(min_level, max_level);
76 dealii::MGLevelObject<BlockVector<number>> mg_rhs_vectors(min_level, max_level);
81 dealii::MGTransferBlockMatrixFree<dim, number> mg_transfer;
90 using SmootherPrecond =
92 dealii::MGLevelObject<typename SmootherPrecond::AdditionalData> smoother_data(
95 for (
unsigned int level = min_level; level <= max_level; ++level)
104 using Smoother = dealii::MGSmootherPrecondition<MFOperator<dim, degree, number>,
107 Smoother mg_smoother;
108 mg_smoother.initialize(mg_lhs_operators, smoother_data);
124 dealii::MGCoarseGridApplySmoother<BlockVector<number>> mg_coarse_solver;
125 mg_coarse_solver.initialize(mg_smoother);
128 dealii::Multigrid<BlockVector<number>> multigrid(
139 dealii::PreconditionMG<dim,
141 dealii::MGTransferBlockMatrixFree<dim, number>>
148 dealii::SolverControl cg_solver_control();
149 dealii::SolverCG<BlockVector<number>> cg_solver(cg_solver_control);
159PRISMS_PF_END_NAMESPACE
int do_linear_solve(BlockVector< number > &b_vector, MFOperator< dim, degree, number > &lhs_operator, BlockVector< number > &x_vector)
Definition linear_solver.h:168
std::vector< MFOperator< dim, degree, number > > lhs_operators
Definition linear_solver.h:204
const SolveContext< dim, degree, number > * solve_context
Solver context provides access to external information.
Definition solver_base.h:269
void solve_level(unsigned int relative_level) override
Solve for a single update step.
Definition mg_solver.h:60
LinearSolver< dim, degree, number > LinearSolver
Definition mg_solver.h:39
void mg_solve()
Definition mg_solver.h:64
MGSolver(SolveBlock _solve_block, const SolveContext< dim, degree, number > &_solve_context)
Constructor.
Definition mg_solver.h:51
dealii::SolverControl linear_solver_control
Solver control. Contains max iterations and tolerance.
Definition mg_solver.h:156
SolveBlock solve_block
Information about the solve block this handler is responsible for.
Definition solver_base.h:264
SolverBase< dim, degree, number > SolverBase
Definition mg_solver.h:38
Structure to hold the attributes of a solve-block.
Definition solve_block.h:56
This class provides context for a solver with ptrs to all the relevant dependencies.
Definition solve_context.h:36
GroupSolutionHandler< dim, number > solutions
Solution vectors for fields handled by this solver.
Definition solver_base.h:274
const SolveContext< dim, degree, number > * solve_context
Solver context provides access to external information.
Definition solver_base.h:269
SolveBlock solve_block
Information about the solve block this handler is responsible for.
Definition solver_base.h:264
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVector
Typedef for solution block vector.
Definition group_solution_handler.h:29
Definition conditional_ostreams.cc:20