PRISMS-PF Manual
Loading...
Searching...
No Matches
solve_parameters.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2026 PRISMS Center at the University of Michigan
2// SPDX-License-Identifier: GNU Lesser General Public Version 2.1
3
4#pragma once
5
6#include <deal.II/base/exceptions.h>
7#include <deal.II/base/parameter_handler.h>
8#include <deal.II/lac/precondition.h>
9#include <deal.II/lac/solver_minres.h>
10#include <deal.II/lac/solver_selector.h>
11
14#include <prismspf/core/types.h>
15
17
18#include <prismspf/config.h>
19
20#include <execution>
21#include <map>
22
24
29{
33 static void
34 declare(dealii::ParameterHandler &parameter_handler,
35 unsigned int n_subsections = Numbers::default_subsections);
36
40 void
41 assign(dealii::ParameterHandler &parameter_handler,
42 unsigned int n_subsections = Numbers::default_subsections) override;
43
47 void
48 validate(const std::vector<FieldAttributes> &field_attributes,
49 const std::vector<SolveBlock> &solve_blocks) const override;
50
51 // Solver type. richardson|cg|bicgstab|gmres|fgmres|minres
52 std::string solver_type = "cg";
53
54 // Solver tolerance
55 double tolerance = 1.0e-10;
56
57 // Solver tolerance type
59
60 // Max number of iterations for the linear solve
61 unsigned int max_iterations = 100;
62
63 // The multigrid depth
64 unsigned int mg_depth = 1;
65
66 // Preconditioner
68
69 // Solver AdditionalData structures
70 dealii::PreconditionChebyshev<>::AdditionalData chebyshev_parameters;
71
72 static void
73 declare_chebyshev(dealii::ParameterHandler &parameter_handler);
74
75 void
76 assign_chebyshev(dealii::ParameterHandler &parameter_handler);
77
78 dealii::SolverRichardson<>::AdditionalData richardson_parameters;
79
80 static void
81 declare_richardson(dealii::ParameterHandler &parameter_handler);
82
83 void
84 assign_richardson(dealii::ParameterHandler &parameter_handler);
85
86 dealii::SolverBicgstab<>::AdditionalData bicgstab_parameters;
87
88 static void
89 declare_bicgstab(dealii::ParameterHandler &parameter_handler);
90
91 void
92 assign_bicgstab(dealii::ParameterHandler &parameter_handler);
93
94 dealii::SolverGMRES<>::AdditionalData gmres_parameters;
95
96 static void
97 declare_gmres(dealii::ParameterHandler &parameter_handler);
98
99 void
100 assign_gmres(dealii::ParameterHandler &parameter_handler);
101
102 // MinRes and CG do not have additional parameters, so we do not need to store them
103 // here.
104 // dealii::SolverMinRes<>::AdditionalData minres_parameters;
105 // dealii::SolverCG<>::AdditionalData cg_parameters;
106 // FGMRES additional parameters are a subset of GMRES parameters, so we can just use
107 // gmres_parameters for both solvers
108 // dealii::SolverFGMRES<>::AdditionalData fgmres_parameters;
109};
110
115{
119 static void
120 declare(dealii::ParameterHandler &parameter_handler,
121 unsigned int n_subsections = Numbers::default_subsections);
122
126 void
127 assign(dealii::ParameterHandler &parameter_handler,
128 unsigned int n_subsections = Numbers::default_subsections) override;
129
133 void
134 validate(const std::vector<FieldAttributes> &field_attributes,
135 const std::vector<SolveBlock> &solve_blocks) const override;
136
137 // Map of linear solve parameters for fields that require them
138 std::map<unsigned int, LinearSolverParameters> linear_solvers;
139};
140
145{
149 static void
150 declare(dealii::ParameterHandler &parameter_handler,
151 unsigned int n_subsections = Numbers::default_subsections);
152
156 void
157 assign(dealii::ParameterHandler &parameter_handler,
158 unsigned int n_subsections = Numbers::default_subsections) override;
159
163 void
164 validate(const std::vector<FieldAttributes> &field_attributes,
165 const std::vector<SolveBlock> &solve_blocks) const override;
166
167 // Nonlinear step length
168 double step_length = 1.0;
169
170 // Max number of iterations for the nonlinear solve
171 unsigned int max_iterations = 100;
172
173 // Tolerance value for the nonlinear solve
174 double tolerance_value = 1.0e-10;
175};
176
181{
185 static void
186 declare(dealii::ParameterHandler &parameter_handler,
187 unsigned int n_subsections = Numbers::default_subsections);
188
192 void
193 assign(dealii::ParameterHandler &parameter_handler,
194 unsigned int n_subsections = Numbers::default_subsections) override;
195
199 void
200 validate(const std::vector<FieldAttributes> &field_attributes,
201 const std::vector<SolveBlock> &solve_blocks) const override;
202
203 // Map of nonlinear solve parameters for fields that require them
204 std::map<Types::Index, NonlinearSolverParameters> nonlinear_solvers;
205};
206
207PRISMS_PF_END_NAMESPACE
static constexpr unsigned int default_subsections
Max number of subsections.
Definition types.h:33
Definition conditional_ostreams.cc:20
Struct that holds linear solver parameters.
Definition solve_parameters.h:115
void validate(const std::vector< FieldAttributes > &field_attributes, const std::vector< SolveBlock > &solve_blocks) const override
Validate.
Definition solve_parameters.cc:342
std::map< unsigned int, LinearSolverParameters > linear_solvers
Definition solve_parameters.h:138
void assign(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections) override
Assign the parameters from file.
Definition solve_parameters.cc:316
static void declare(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections)
Declare the parameters to be read from file.
Definition solve_parameters.cc:287
Struct that stores relevant linear solve information of a certain solve block.
Definition solve_parameters.h:29
unsigned int max_iterations
Definition solve_parameters.h:61
void assign_chebyshev(dealii::ParameterHandler &parameter_handler)
Definition solve_parameters.cc:179
void assign_gmres(dealii::ParameterHandler &parameter_handler)
Definition solve_parameters.cc:267
static void declare_chebyshev(dealii::ParameterHandler &parameter_handler)
Definition solve_parameters.cc:160
double tolerance
Definition solve_parameters.h:55
static void declare_richardson(dealii::ParameterHandler &parameter_handler)
Definition solve_parameters.cc:191
void validate(const std::vector< FieldAttributes > &field_attributes, const std::vector< SolveBlock > &solve_blocks) const override
Validate.
Definition solve_parameters.cc:153
dealii::SolverGMRES ::AdditionalData gmres_parameters
Definition solve_parameters.h:94
SolverToleranceType tolerance_type
Definition solve_parameters.h:58
void assign_richardson(dealii::ParameterHandler &parameter_handler)
Definition solve_parameters.cc:205
dealii::PreconditionChebyshev ::AdditionalData chebyshev_parameters
Definition solve_parameters.h:70
PreconditionerType preconditioner
Definition solve_parameters.h:67
void assign_bicgstab(dealii::ParameterHandler &parameter_handler)
Definition solve_parameters.cc:226
std::string solver_type
Definition solve_parameters.h:52
static void declare_bicgstab(dealii::ParameterHandler &parameter_handler)
Definition solve_parameters.cc:213
dealii::SolverBicgstab ::AdditionalData bicgstab_parameters
Definition solve_parameters.h:86
dealii::SolverRichardson ::AdditionalData richardson_parameters
Definition solve_parameters.h:78
static void declare(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections)
Declare the parameters to be read from file.
Definition solve_parameters.cc:11
static void declare_gmres(dealii::ParameterHandler &parameter_handler)
Definition solve_parameters.cc:233
unsigned int mg_depth
Definition solve_parameters.h:64
void assign(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections) override
Assign the parameters from file.
Definition solve_parameters.cc:87
Struct that holds nonlinear solver parameters.
Definition solve_parameters.h:181
void assign(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections) override
Assign the parameters from file.
Definition solve_parameters.cc:448
void validate(const std::vector< FieldAttributes > &field_attributes, const std::vector< SolveBlock > &solve_blocks) const override
Validate.
Definition solve_parameters.cc:473
static void declare(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections)
Declare the parameters to be read from file.
Definition solve_parameters.cc:420
std::map< Types::Index, NonlinearSolverParameters > nonlinear_solvers
Definition solve_parameters.h:204
Struct that stores relevant nonlinear solve information of a certain field.
Definition solve_parameters.h:145
static void declare(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections)
Declare the parameters to be read from file.
Definition solve_parameters.cc:352
double step_length
Definition solve_parameters.h:168
double tolerance_value
Definition solve_parameters.h:174
void assign(dealii::ParameterHandler &parameter_handler, unsigned int n_subsections=Numbers::default_subsections) override
Assign the parameters from file.
Definition solve_parameters.cc:402
void validate(const std::vector< FieldAttributes > &field_attributes, const std::vector< SolveBlock > &solve_blocks) const override
Validate.
Definition solve_parameters.cc:413
unsigned int max_iterations
Definition solve_parameters.h:171
ParameterBase()=default
PreconditionerType
Preconditioner type.
Definition type_enums.h:143
@ None
Definition type_enums.h:144
SolverToleranceType
Solver tolerance type.
Definition type_enums.h:112
@ RMSEPerField
The mean local error averaged over each field is lower than the tolerance.
Definition type_enums.h:124