9.2
general documentation
cs_param_sles.h
Go to the documentation of this file.
1#ifndef CS_PARAM_SLES_H
2#define CS_PARAM_SLES_H
3
4/*============================================================================
5 * Routines to handle the SLES (Sparse Linear Equation Solver) settings
6 *============================================================================*/
7
8/*
9 This file is part of code_saturne, a general-purpose CFD tool.
10
11 Copyright (C) 1998-2026 EDF S.A.
12
13 This program is free software; you can redistribute it and/or modify it under
14 the terms of the GNU General Public License as published by the Free Software
15 Foundation; either version 2 of the License, or (at your option) any later
16 version.
17
18 This program is distributed in the hope that it will be useful, but WITHOUT
19 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
20 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
21 details.
22
23 You should have received a copy of the GNU General Public License along with
24 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
25 Street, Fifth Floor, Boston, MA 02110-1301, USA.
26*/
27
28/*----------------------------------------------------------------------------*/
29
30/*----------------------------------------------------------------------------
31 * Local headers
32 *----------------------------------------------------------------------------*/
33
34#include "alge/cs_param_amg.h"
35#include "alge/cs_param_hpddm.h"
36#include "alge/cs_param_mumps.h"
37#include "base/cs_param_types.h"
38
39/*----------------------------------------------------------------------------*/
40
49/*============================================================================
50 * Macro definitions
51 *============================================================================*/
52
53/*============================================================================
54 * Type definitions
55 *============================================================================*/
56
63typedef struct {
64
65 char *name;
74 int restart;
82
88
95
103
110
117
119
120/*============================================================================
121 * Global variables
122 *============================================================================*/
123
124/*============================================================================
125 * Public function prototypes
126 *============================================================================*/
127
128/*----------------------------------------------------------------------------*/
138/*----------------------------------------------------------------------------*/
139
141cs_param_sles_create(int field_id,
142 const char *system_name);
143
144/*----------------------------------------------------------------------------*/
150/*----------------------------------------------------------------------------*/
151
152void
154
155/*----------------------------------------------------------------------------*/
162/*----------------------------------------------------------------------------*/
163
164void
166
167/*----------------------------------------------------------------------------*/
174/*----------------------------------------------------------------------------*/
175
176void
178 cs_param_sles_t *dst);
179
180/*----------------------------------------------------------------------------*/
189/*----------------------------------------------------------------------------*/
190
191int
192cs_param_sles_set_solver(const char *keyval,
193 cs_param_sles_t *slesp);
194
195/*----------------------------------------------------------------------------*/
204/*----------------------------------------------------------------------------*/
205
206int
207cs_param_sles_set_precond(const char *keyval,
208 cs_param_sles_t *slesp);
209
210/*----------------------------------------------------------------------------*/
220/*----------------------------------------------------------------------------*/
221
222int
223cs_param_sles_set_solver_class(const char *keyval,
224 cs_param_sles_t *slesp);
225
226/*----------------------------------------------------------------------------*/
236/*----------------------------------------------------------------------------*/
237
238int
239cs_param_sles_set_amg_type(const char *keyval,
240 cs_param_sles_t *slesp);
241
242/*----------------------------------------------------------------------------*/
252/*----------------------------------------------------------------------------*/
253
254int
255cs_param_sles_set_precond_block_type(const char *keyval,
256 cs_param_sles_t *slesp);
257
258/*----------------------------------------------------------------------------*/
270/*----------------------------------------------------------------------------*/
271
272void
274 double rtol,
275 double atol,
276 double dtol,
277 int max_iter);
278
279/*----------------------------------------------------------------------------*/
288/*----------------------------------------------------------------------------*/
289
290void
292 bool used_as_solver,
293 bool used_as_k_cycle);
294
295/*----------------------------------------------------------------------------*/
313/*----------------------------------------------------------------------------*/
314
315void
317 int n_down_iter,
318 cs_param_amg_inhouse_solver_t down_smoother,
319 int down_poly_deg,
320 int n_up_iter,
322 int up_poly_deg,
323 cs_param_amg_inhouse_solver_t coarse_solver,
324 int coarse_poly_deg,
326 int aggreg_limit);
327
328/*----------------------------------------------------------------------------*/
341/*----------------------------------------------------------------------------*/
342
343void
345 int max_levels,
346 cs_gnum_t min_n_g_rows,
347 double p0p1_relax,
348 int coarse_max_iter,
349 double coarse_rtol_mult);
350
351/*----------------------------------------------------------------------------*/
358/*----------------------------------------------------------------------------*/
359
360void
362
363/*----------------------------------------------------------------------------*/
378/*----------------------------------------------------------------------------*/
379
380void
382 int n_down_iter,
383 cs_param_amg_boomer_smoother_t down_smoother,
384 int n_up_iter,
386 cs_param_amg_boomer_smoother_t coarse_solver,
388
389/*----------------------------------------------------------------------------*/
403/*----------------------------------------------------------------------------*/
404
405void
407 double strong_thr,
409 int p_max,
410 int n_agg_lv,
411 int n_agg_paths);
412
413/*----------------------------------------------------------------------------*/
420/*----------------------------------------------------------------------------*/
421
422void
424
425/*----------------------------------------------------------------------------*/
439/*----------------------------------------------------------------------------*/
440
441void
443 int n_down_iter,
444 cs_param_amg_gamg_smoother_t down_smoother,
445 int n_up_iter,
448
449/*----------------------------------------------------------------------------*/
462/*----------------------------------------------------------------------------*/
463
464void
466 double threshold,
467 int n_agg_lv,
468 bool use_sq_grph,
469 int n_smooth_agg);
470
471/*----------------------------------------------------------------------------*/
478/*----------------------------------------------------------------------------*/
479
480void
482
483/*----------------------------------------------------------------------------*/
497/*----------------------------------------------------------------------------*/
498
499void
501 int n_down_iter,
502 cs_param_amg_gamg_smoother_t down_smoother,
503 int n_up_iter,
506
507/*----------------------------------------------------------------------------*/
519/*----------------------------------------------------------------------------*/
520
521void
523 bool use_boomer_coarsening,
524 bool reuse_interpolation,
525 bool subspace_coarsening);
526
527/*----------------------------------------------------------------------------*/
534/*----------------------------------------------------------------------------*/
535
536void
538
539/*----------------------------------------------------------------------------*/
550/*----------------------------------------------------------------------------*/
551
552void
554 bool is_single,
555 cs_param_mumps_facto_type_t facto_type);
556
557/*----------------------------------------------------------------------------*/
574/*----------------------------------------------------------------------------*/
575
576void
578 cs_param_mumps_analysis_algo_t analysis_algo,
579 int block_analysis,
580 bool keep_ordering,
581 double mem_coef,
582 double blr_threshold,
583 int ir_steps,
585 bool advanced_optim);
586
587/*----------------------------------------------------------------------------*/
594/*----------------------------------------------------------------------------*/
595
596void
598
599/*----------------------------------------------------------------------------*/
617/*----------------------------------------------------------------------------*/
618
619void
621 const bool use_neumann,
622 const int nb_eigenvector,
623 const int harmonic_overlap,
624 const double relative_threshold,
625 const int p = -1);
626
627/*----------------------------------------------------------------------------*/
642/*----------------------------------------------------------------------------*/
643
644void
646 const int min_iter,
647 const int max_iter,
648 const int min_harmonic_overlap,
649 const int max_harmonic_overlap,
650 const int min_nb_eigenvector,
651 const int max_nb_eigenvector);
652
653/*----------------------------------------------------------------------------*/
659/*----------------------------------------------------------------------------*/
660
661bool
663
664/*----------------------------------------------------------------------------*/
674/*----------------------------------------------------------------------------*/
675
678
679/*----------------------------------------------------------------------------*/
680
681#endif /* CS_PARAM_SLES_H */
unsigned cs_gnum_t
global mesh entity number
Definition: cs_defs.h:317
@ p
Definition: cs_field_pointer.h:63
Routines to handle the set of parameters for algebraic multigrids (AMG) like boomerAMG of the HYPRE l...
cs_param_amg_boomer_interp_algo_t
Type of algorithm used in boomerAMG to coarsen a level. Only a selection of algorithms is available h...
Definition: cs_param_amg.h:103
cs_param_amg_boomer_coarsen_algo_t
Type of algorithm used in boomerAMG to coarsen a level. Only a selection of algorithms is available h...
Definition: cs_param_amg.h:86
cs_param_amg_inhouse_solver_t
Type of algorithm used in the in-house algorithm for smoothing each level or solving the coarse level...
Definition: cs_param_amg.h:274
cs_param_amg_gamg_coarse_solver_t
Definition: cs_param_amg.h:191
cs_param_amg_type_t
Definition: cs_param_amg.h:64
cs_param_amg_gamg_smoother_t
Definition: cs_param_amg.h:175
cs_param_amg_boomer_smoother_t
Type of algorithm used in boomerAMG to smooth a level. Only a selection of algorithms is available he...
Definition: cs_param_amg.h:122
cs_param_amg_inhouse_coarsen_t
Type of algorithm used in the in-house algorithm to coarsen each level. This enum avoids using the as...
Definition: cs_param_amg.h:302
Routines and structure to handle the HPDDM setup. The structure is used as a context structure of a c...
Routines and structure to handle the MUMPS setup. The structure is used as a context structure of a c...
cs_param_mumps_facto_type_t
type of factorization to consider when using the MUMPS solver to solve a linear system
Definition: cs_param_mumps.h:71
cs_param_mumps_memory_usage_t
Strategy for the memory usage inside MUMPS.
Definition: cs_param_mumps.h:149
cs_param_mumps_analysis_algo_t
Type of algorithm to consider when using the MUMPS solver to perform the analysis step (renumbering a...
Definition: cs_param_mumps.h:119
void cs_param_sles_amg_inhouse(cs_param_sles_t *slesp, int n_down_iter, cs_param_amg_inhouse_solver_t down_smoother, int down_poly_deg, int n_up_iter, cs_param_amg_inhouse_solver_t up_smoother, int up_poly_deg, cs_param_amg_inhouse_solver_t coarse_solver, int coarse_poly_deg, cs_param_amg_inhouse_coarsen_t coarsen_algo, int aggreg_limit)
Set the main members of a cs_param_amg_inhouse_t structure. This structure is not reset before applyi...
Definition: cs_param_sles.cpp:1514
void cs_param_sles_mumps(cs_param_sles_t *slesp, bool is_single, cs_param_mumps_facto_type_t facto_type)
Set the main members of a cs_param_mumps_t structure. This structure is allocated and initialized wit...
Definition: cs_param_sles.cpp:2002
bool cs_param_sles_hypre_from_petsc(void)
Check the availability of Hypre solvers from the PETSc library.
Definition: cs_param_sles.cpp:2211
void cs_param_sles_hpddm_reset(cs_param_sles_t *slesp)
Allocate and initialize a new context structure for the HPDDM settings.
Definition: cs_param_sles.cpp:2079
void cs_param_sles_gamg(cs_param_sles_t *slesp, int n_down_iter, cs_param_amg_gamg_smoother_t down_smoother, int n_up_iter, cs_param_amg_gamg_smoother_t up_smoother, cs_param_amg_gamg_coarse_solver_t coarse_solver)
Set the main members of a cs_param_amg_gamg_t structure. This structure is allocated,...
Definition: cs_param_sles.cpp:1782
void cs_param_sles_copy_from(const cs_param_sles_t *src, cs_param_sles_t *dst)
Copy a cs_param_sles_t structure from src to dst.
Definition: cs_param_sles.cpp:597
void cs_param_sles_boomeramg_advanced(cs_param_sles_t *slesp, double strong_thr, cs_param_amg_boomer_interp_algo_t interp_algo, int p_max, int n_agg_lv, int n_agg_paths)
Set the members of a cs_param_amg_boomer_t structure used in advanced settings. This structure is all...
Definition: cs_param_sles.cpp:1704
void cs_param_sles_amg_inhouse_advanced(cs_param_sles_t *slesp, int max_levels, cs_gnum_t min_n_g_rows, double p0p1_relax, int coarse_max_iter, double coarse_rtol_mult)
Set the members of a cs_param_amg_inhouse_t structure used in advanced settings. CS_CDO_KEEP_DEFAULT ...
Definition: cs_param_sles.cpp:1574
void cs_param_sles_amg_inhouse_reset(cs_param_sles_t *slesp, bool used_as_solver, bool used_as_k_cycle)
Allocate and initialize a new context structure for the in-house AMG settings.
Definition: cs_param_sles.cpp:1465
int cs_param_sles_set_solver_class(const char *keyval, cs_param_sles_t *slesp)
Set the class of solvers associated to this SLES from its keyval Common choices are "petsc",...
Definition: cs_param_sles.cpp:1088
int cs_param_sles_set_solver(const char *keyval, cs_param_sles_t *slesp)
Set the solver associated to this SLES from its keyval.
Definition: cs_param_sles.cpp:657
int cs_param_sles_set_precond(const char *keyval, cs_param_sles_t *slesp)
Set the preconditioner associated to this SLES from its keyval.
Definition: cs_param_sles.cpp:825
void cs_param_sles_gamg_reset(cs_param_sles_t *slesp)
Allocate and initialize a new context structure for the GAMG settings in PETSc.
Definition: cs_param_sles.cpp:1747
void cs_param_sles_mumps_reset(cs_param_sles_t *slesp)
Allocate and initialize a new context structure for the MUMPS settings.
Definition: cs_param_sles.cpp:1974
void cs_param_sles_gamg_advanced(cs_param_sles_t *slesp, double threshold, int n_agg_lv, bool use_sq_grph, int n_smooth_agg)
Set the members of a cs_param_amg_gamg_t structure used in advanced settings. This structure is alloc...
Definition: cs_param_sles.cpp:1822
void cs_param_sles_free(cs_param_sles_t **p_slesp)
Free a cs_param_sles_t structure.
Definition: cs_param_sles.cpp:401
cs_param_solver_class_t cs_param_sles_check_class(cs_param_solver_class_t wanted_class)
Check the availability of a solver library and return the requested one if this is possible or an alt...
Definition: cs_param_sles.cpp:2237
void cs_param_sles_set_cvg_param(cs_param_sles_t *slesp, double rtol, double atol, double dtol, int max_iter)
Set the convergence criteria for the given SLES parameters. One can use the parameter value CS_CDO_KE...
Definition: cs_param_sles.cpp:1423
void cs_param_sles_boomeramg_reset(cs_param_sles_t *slesp)
Allocate and initialize a new context structure for the boomerAMG settings.
Definition: cs_param_sles.cpp:1622
void cs_param_sles_hmg(cs_param_sles_t *slesp, int n_down_iter, cs_param_amg_gamg_smoother_t down_smoother, int n_up_iter, cs_param_amg_gamg_smoother_t up_smoother, cs_param_amg_gamg_coarse_solver_t coarse_solver)
Set the main members of a cs_param_amg_hmg_t structure. This structure is allocated,...
Definition: cs_param_sles.cpp:1898
void cs_param_sles_hpddm_advanced(cs_param_sles_t *slesp, const int min_iter, const int max_iter, const int min_harmonic_overlap, const int max_harmonic_overlap, const int min_nb_eigenvector, const int max_nb_eigenvector)
Set the members related to an advanced settings of a cs_param_hpddm_t structure. This structure is al...
Definition: cs_param_sles.cpp:2165
int cs_param_sles_set_precond_block_type(const char *keyval, cs_param_sles_t *slesp)
Set the type of block preconditioner associated to this SLES from its keyval.
Definition: cs_param_sles.cpp:1358
void cs_param_sles_hpddm(cs_param_sles_t *slesp, const bool use_neumann, const int nb_eigenvector, const int harmonic_overlap, const double relative_threshold, const int p=-1)
Set the members related to an settings of a cs_param_hpddm_t structure. This structure is allocated a...
Definition: cs_param_sles.cpp:2117
cs_param_sles_t * cs_param_sles_create(int field_id, const char *system_name)
Create a cs_param_sles_t structure and assign a default settings.
Definition: cs_param_sles.cpp:350
void cs_param_sles_hmg_advanced(cs_param_sles_t *slesp, bool use_boomer_coarsening, bool reuse_interpolation, bool subspace_coarsening)
Set the members of a cs_param_amg_gamg_t structure used in advanced settings. This structure is alloc...
Definition: cs_param_sles.cpp:1935
int cs_param_sles_set_amg_type(const char *keyval, cs_param_sles_t *slesp)
Set the type of algebraic multigrid (AMG) associated to this SLES from its keyval.
Definition: cs_param_sles.cpp:1190
void cs_param_sles_boomeramg(cs_param_sles_t *slesp, int n_down_iter, cs_param_amg_boomer_smoother_t down_smoother, int n_up_iter, cs_param_amg_boomer_smoother_t up_smoother, cs_param_amg_boomer_smoother_t coarse_solver, cs_param_amg_boomer_coarsen_algo_t coarsen_algo)
Set the main members of a cs_param_amg_boomer_t structure. This structure is allocated and initialize...
Definition: cs_param_sles.cpp:1661
void cs_param_sles_log(cs_param_sles_t *slesp)
Log information related to the linear settings stored in the structure.
Definition: cs_param_sles.cpp:432
void cs_param_sles_hmg_reset(cs_param_sles_t *slesp)
Allocate and initialize a new context structure for the HMG settings in PETSc.
Definition: cs_param_sles.cpp:1863
void cs_param_sles_mumps_advanced(cs_param_sles_t *slesp, cs_param_mumps_analysis_algo_t analysis_algo, int block_analysis, bool keep_ordering, double mem_coef, double blr_threshold, int ir_steps, cs_param_mumps_memory_usage_t mem_usage, bool advanced_optim)
Set the members related to an advanced settings of a cs_param_mumps_t structure. This structure is al...
Definition: cs_param_sles.cpp:2038
cs_param_resnorm_type_t
Definition: cs_param_types.h:974
cs_param_solver_class_t
Class of iterative solvers to consider for solver the linear system.
Definition: cs_param_types.h:752
cs_param_precond_type_t
Definition: cs_param_types.h:864
cs_param_precond_block_t
Definition: cs_param_types.h:787
cs_param_solver_type_t
Definition: cs_param_types.h:945
Set of parameters to check the convergence (or the divergence) of an iterative process (tolerances or...
Definition: cs_param_types.h:603
Structure storing all metadata related to the resolution of a linear system with an iterative solver.
Definition: cs_param_sles.h:63
cs_param_convergence_t cvg_param
Definition: cs_param_sles.h:109
cs_param_precond_block_t precond_block_type
Definition: cs_param_sles.h:81
bool allow_no_op
Definition: cs_param_sles.h:94
int field_id
Definition: cs_param_sles.h:66
bool mat_is_sym
Definition: cs_param_sles.h:102
int verbosity
Definition: cs_param_sles.h:68
void * context_param
Definition: cs_param_sles.h:116
char * name
Definition: cs_param_sles.h:65
cs_param_resnorm_type_t resnorm_type
Definition: cs_param_sles.h:87
bool need_flexible
Definition: cs_param_sles.h:73
cs_param_precond_type_t precond
Definition: cs_param_sles.h:71
cs_param_solver_class_t solver_class
Definition: cs_param_sles.h:70
int restart
Definition: cs_param_sles.h:74
cs_param_amg_type_t amg_type
Definition: cs_param_sles.h:75
cs_param_solver_type_t solver
Definition: cs_param_sles.h:72