PRISMS-PF Manual
Loading...
Searching...
No Matches
linear_solve_parameters.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: © 2025 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
10#include <prismspf/core/types.h>
11
12#include <prismspf/config.h>
13
14#include <map>
15
17
22{
23 // Solver tolerance
25
26 // Solver tolerance type
28
29 // Max number of iterations for the linear solve
31
32 // Preconditioner
34
35 // Smoothing range for eigenvalues. This denotes the lower bound of eigenvalues that are
36 // smoothed [1.2 λ^max / smoothing_range, 1.2 λ^max], where λ^max is the estimated
37 // maximum eigenvalue. A choice between 5 and 20 is usually useful when the
38 // preconditioner is used as a smoother in multigrid.
40
41 // Polynomial degree for the Chebyshev smoother
43
44 // Maximum number of CG iterations used to find the maximum eigenvalue
46
47 // The minimum multigrid level
48 unsigned int min_mg_level = 0;
49};
50
55{
59 void
60 validate();
61
65 void
67
68 // Map of linear solve parameters for fields that require them
69 std::map<unsigned int, LinearSolverParameters> linear_solvers;
70};
71
72inline void
74{
75 // Nothing to do here for now
76}
77
78inline void
80{
81 if (!linear_solvers.empty())
82 {
84 << "================================================\n"
85 << " Linear Solve Parameters\n"
86 << "================================================\n";
87
88 for (const auto &[index, linear_solver_parameters] : linear_solvers)
89 {
91 << "Index: " << index << "\n"
92 << " Tolerance: " << linear_solver_parameters.tolerance << "\n"
93 << " Type: " << to_string(linear_solver_parameters.tolerance_type) << "\n"
94 << " Max iterations: " << linear_solver_parameters.max_iterations << "\n"
95 << " Preconditioner: " << to_string(linear_solver_parameters.preconditioner)
96 << "\n";
97
99 {
101 << " Smoothing range: " << linear_solver_parameters.smoothing_range
102 << "\n"
103 << " Smoother degree: " << linear_solver_parameters.smoother_degree
104 << "\n"
105 << " Max eigenvalue CG iterations: "
106 << linear_solver_parameters.eig_cg_n_iterations << "\n"
107 << "Min multigrid level: " << linear_solver_parameters.min_mg_level
108 << "\n";
109 }
110 }
111
112 ConditionalOStreams::pout_summary() << "\n" << std::flush;
113 }
114}
115
static dealii::ConditionalOStream & pout_summary()
Log output stream for writing a summary.log file.
Definition conditional_ostreams.cc:34
@ Value
Use value of the variable as a criterion for refinement.
Definition grid_refiner_criterion.h:31
static const double smoothing_range
Default eigenvalue smoothing range for multigrid.
Definition types.h:72
static const unsigned int iterations
Default iterations.
Definition types.h:67
static const double tolerance
Default tolerance.
Definition types.h:57
static const unsigned int eig_cg_n_iterations
Default CG iterations to find the maximum eigenvalue for multigrid.
Definition types.h:82
static const unsigned int smoother_degree
Default smoother degree for multigrid.
Definition types.h:77
Definition conditional_ostreams.cc:20
Struct that holds linear solver parameters.
Definition linear_solve_parameters.h:55
void validate()
Postprocess and validate parameters.
Definition linear_solve_parameters.h:73
std::map< unsigned int, LinearSolverParameters > linear_solvers
Definition linear_solve_parameters.h:69
void print_parameter_summary() const
Print parameters to summary.log.
Definition linear_solve_parameters.h:79
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
unsigned int min_mg_level
Definition linear_solve_parameters.h:48
unsigned int eig_cg_n_iterations
Definition linear_solve_parameters.h:45
double tolerance
Definition linear_solve_parameters.h:24
SolverToleranceType tolerance_type
Definition linear_solve_parameters.h:27
PreconditionerType preconditioner
Definition linear_solve_parameters.h:33
unsigned int smoother_degree
Definition linear_solve_parameters.h:42
double smoothing_range
Definition linear_solve_parameters.h:39
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
std::string to_string(ElasticityModel type)
Enum to string for ElasticityModel.
Definition type_enums.h:120
PreconditionerType
Preconditioner type.
Definition type_enums.h:100
@ GMG
Definition type_enums.h:102