4#ifndef nonexplicit_linear_solver_h
5#define nonexplicit_linear_solver_h
7#include <deal.II/lac/precondition.h>
8#include <deal.II/lac/solver_cg.h>
9#include <deal.II/lac/solver_control.h>
11#include <prismspf/config.h>
12#include <prismspf/core/constraint_handler.h>
13#include <prismspf/core/dof_handler.h>
14#include <prismspf/core/matrix_free_handler.h>
15#include <prismspf/core/solution_handler.h>
16#include <prismspf/core/type_enums.h>
17#include <prismspf/core/variable_attributes.h>
18#include <prismspf/solvers/linear_solver_gmg.h>
19#include <prismspf/solvers/linear_solver_identity.h>
20#include <prismspf/solvers/nonexplicit_base.h>
21#include <prismspf/user_inputs/user_input_parameters.h>
23#ifdef PRISMS_PF_WITH_CALIPER
24# include <caliper/cali.h>
27PRISMS_PF_BEGIN_NAMESPACE
32template <
int dim,
int degree,
typename number>
38template <
int dim,
int degree>
54 const dealii::MappingQ1<dim> &_mapping,
79 std::map<unsigned int, std::unique_ptr<identitySolver<dim, degree>>> identity_solvers;
84 std::map<unsigned int, std::unique_ptr<GMGSolver<dim, degree>>> gmg_solvers;
87template <
int dim,
int degree>
95 const dealii::MappingQ1<dim> &_mapping,
100 _triangulation_handler,
105 _mg_matrix_free_handler,
109template <
int dim,
int degree>
113 this->compute_subset_attributes(fieldSolveType::NONEXPLICIT_LINEAR);
116 if (this->subset_attributes.empty())
121 this->set_initial_condition();
123 for (
const auto &[index, variable] : this->subset_attributes)
125 if (this->user_inputs.linear_solve_parameters.linear_solve.at(index)
126 .preconditioner == preconditionerType::GMG)
132 this->matrix_free_handler,
133 this->constraint_handler,
134 this->triangulation_handler,
136 this->mg_matrix_free_handler,
137 this->solution_handler));
138 gmg_solvers.at(index)->init();
142 identity_solvers.emplace(
146 this->matrix_free_handler,
147 this->constraint_handler,
148 this->solution_handler));
149 identity_solvers.at(index)->init();
154template <
int dim,
int degree>
159 if (this->subset_attributes.empty())
164 for (
const auto &[index, variable] : this->subset_attributes)
166 if (this->user_inputs.linear_solve_parameters.linear_solve.at(index)
167 .preconditioner == preconditionerType::GMG)
169 gmg_solvers.at(index)->solve();
173 identity_solvers.at(index)->solve();
178PRISMS_PF_END_NAMESPACE
Class that handles the assembly and solving of a field with a GMG preconditioner.
Definition linear_solver_gmg.h:44
The class handles the generation and application of boundary conditions based on the user-inputs.
Definition constraint_handler.h:25
Definition explicit_base.h:27
Class that manages the deal.II DoFHandlers.
Definition dof_handler.h:25
Class that handles the assembly and solving of a field with the identity preconditioner (no precondit...
Definition linear_solver_identity.h:26
This class handles the computation and access of the inverted mass matrix for explicit solves.
Definition invm_handler.h:25
This class handlers the management and access of the matrix-free objects.
Definition matrix_free_handler.h:25
Base class for nonexplicit solves.
Definition nonexplicit_base.h:35
This class handles all linear solves.
Definition nonexplicit_linear_solver.h:40
~nonexplicitLinearSolver()=default
Destructor.
nonexplicitLinearSolver(const userInputParameters< dim > &_user_inputs, const matrixfreeHandler< dim > &_matrix_free_handler, const triangulationHandler< dim > &_triangulation_handler, const invmHandler< dim, degree > &_invm_handler, const constraintHandler< dim > &_constraint_handler, const dofHandler< dim > &_dof_handler, const dealii::MappingQ1< dim > &_mapping, dealii::MGLevelObject< matrixfreeHandler< dim, float > > &_mg_matrix_free_handler, solutionHandler< dim > &_solution_handler)
Constructor.
Definition nonexplicit_linear_solver.h:88
void solve() override
Solve a single update step.
Definition nonexplicit_linear_solver.h:156
void init() override
Initialize system.
Definition nonexplicit_linear_solver.h:111
Class that manages solution initialization and swapping with old solutions.
Definition solution_handler.h:22
This class handlers the generation and manipulation of triangulations.
Definition triangulation_handler.h:24