6#include <deal.II/lac/precondition.h>
7#include <deal.II/lac/solver_cg.h>
8#include <deal.II/lac/solver_control.h>
22#include <prismspf/config.h>
26template <
unsigned int dim,
unsigned int degree,
typename number>
32template <
unsigned int dim,
unsigned int degree,
typename number>
48 solve_context->get_user_inputs().linear_solve_parameters.linear_solvers.
at(
59 unsigned int num_levels =
solve_context->get_dof_manager().get_dof_handlers().size();
61 for (
unsigned int relative_level = 0; relative_level < num_levels; ++relative_level)
64 solutions.get_solution_full_vector(relative_level));
68 for (
unsigned int relative_level = 0; relative_level < num_levels; ++relative_level)
87 for (
unsigned int relative_level = 0; relative_level < num_levels; ++relative_level)
115 const unsigned int num_levels =
rhs_vector.size();
116 for (
unsigned int relative_level = 0; relative_level < num_levels; ++relative_level)
119 solutions.get_solution_full_vector(relative_level));
131 solutions.zero_out_ghosts(relative_level);
138 solutions.get_solution_full_vector(relative_level));
141 solutions.apply_constraints(relative_level);
159 if (
solve_context->get_user_inputs().output_parameters.should_output(
163 <<
" Linear solve final residual : "
172 <<
"[Increment " <<
solve_context->get_simulation_timer().get_increment()
174 <<
"Warning: linear solver did not converge as per set tolerances before "
197 value *= sqrt(
solve_context->get_triangulation_manager().get_volume());
static dealii::ConditionalOStream & pout_summary()
Log output stream for writing a summary.log file.
Definition conditional_ostreams.cc:34
static dealii::ConditionalOStream & pout_base()
Generic parallel output stream. Used for essential information in release and debug mode.
Definition conditional_ostreams.cc:43
This class handles the explicit solves of all explicit fields.
Definition linear_solver.h:34
std::vector< MFOperator< dim, degree, number > > rhs_operators
Matrix free operators for each level.
Definition linear_solver.h:184
int do_linear_solve(BlockVector< number > &b_vector, MFOperator< dim, degree, number > &lhs_operator, BlockVector< number > &x_vector)
Definition linear_solver.h:150
LinearSolverParameters lin_params
Linear solver parameters.
Definition linear_solver.h:210
double normalization_value()
Definition linear_solver.h:190
void init(const std::list< DependencyMap > &all_dependeny_sets) override
Initialize the solver.
Definition linear_solver.h:56
std::vector< BlockVector< number > > rhs_vector
Definition linear_solver.h:187
LinearSolver(SolveGroup _solve_group, const SolveContext< dim, degree, number > &_solve_context)
Constructor.
Definition linear_solver.h:44
std::vector< MFOperator< dim, degree, number > > lhs_operators
Definition linear_solver.h:186
dealii::SolverControl linear_solver_control
Solver control. Contains max iterations and tolerance.
Definition linear_solver.h:215
void solve_level(unsigned int relative_level) override
Solve for a single update step.
Definition linear_solver.h:127
void reinit() override
Reinitialize the solver.
Definition linear_solver.h:112
This class exists to evaluate a single user-defined operator for the matrix-free implementation of so...
Definition mf_operator.h:50
This class contains the user implementation of each PDE operator.
Definition pde_operator_base.h:24
This class provides context for a solver with ptrs to all the relevant dependencies.
Definition solve_context.h:36
Structure to hold the attributes of a solve-group.
Definition solve_group.h:59
std::set< Types::Index > field_indices
Indices of the fields to be solved in this group.
Definition solve_group.h:98
DependencyMap dependencies_rhs
Dependencies for the rhs equation(s)
Definition solve_group.h:103
DependencyMap dependencies_lhs
Dependencies for the lhs equation(s)
Definition solve_group.h:107
Definition solver_base.h:32
virtual void reinit()
Reinitialize the solution vectors & apply constraints.
Definition solver_base.h:98
SolveGroup solve_group
Information about the solve group this handler is responsible for.
Definition solver_base.h:259
virtual void init(const std::list< DependencyMap > &all_dependeny_sets)
Initialize the solver.
Definition solver_base.h:83
GroupSolutionHandler< dim, number > solutions
Solution vectors for fields handled by this solver.
Definition solver_base.h:269
const SolveContext< dim, degree, number > * solve_context
Solver context provides access to external information.
Definition solver_base.h:264
static void start_section(const char *name)
Start a new timer section.
Definition timer.cc:116
static void end_section(const char *name)
End the timer section.
Definition timer.cc:127
@ Value
Use value of the variable as a criterion for refinement.
Definition grid_refiner_criterion.h:31
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVector
Typedef for solution block vector.
Definition group_solution_handler.h:29
Definition conditional_ostreams.cc:20
Struct that stores relevant linear solve information of a certain field.
Definition linear_solve_parameters.h:22
unsigned int max_iterations
Definition linear_solve_parameters.h:30
double tolerance
Definition linear_solve_parameters.h:24
SolverToleranceType tolerance_type
Definition linear_solve_parameters.h:27
SolverToleranceType
Solver tolerance type.
Definition type_enums.h:69
@ RMSEPerField
The mean local error averaged over each field is lower than the tolerance.
Definition type_enums.h:81
@ AbsoluteResidual
Legacy.
Definition type_enums.h:73
@ RMSETotal
The sum of the average local errors of each field is lower than the tolerance.
Definition type_enums.h:89
@ IntegratedPerField
The integrated error averaged over each field is lower than the tolerance.
Definition type_enums.h:85