9.2
general documentation
cs_multigrid.h
Go to the documentation of this file.
1#ifndef CS_MULTIGRID_H
2#define CS_MULTIGRID_H
3
4/*============================================================================
5 * Multigrid solver.
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 "base/cs_base.h"
35#include "alge/cs_grid.h"
36#include "alge/cs_sles.h"
37#include "alge/cs_sles_it.h"
38#include "alge/cs_sles_pc.h"
39#include "base/cs_time_plot.h"
40#include "base/cs_tree.h"
41
42/*----------------------------------------------------------------------------*/
43
45
46/*============================================================================
47 * Macro definitions
48 *============================================================================*/
49
50/*============================================================================
51 * Type definitions
52 *============================================================================*/
53
54/*----------------------------------------------------------------------------
55 * Multigrid types
56 *----------------------------------------------------------------------------*/
57
58typedef enum {
59
66
67/* Multigrid linear solver context (opaque) */
68
69typedef struct _cs_multigrid_t cs_multigrid_t;
70
71/*============================================================================
72 * Global variables
73 *============================================================================*/
74
75/* Names for multigrid types */
76
77extern const char *cs_multigrid_type_name[];
78
79/*=============================================================================
80 * Public function prototypes
81 *============================================================================*/
82
83/*----------------------------------------------------------------------------
84 * Initialize multigrid solver API.
85 *----------------------------------------------------------------------------*/
86
87void
89
90/*----------------------------------------------------------------------------
91 * Finalize multigrid solver API.
92 *----------------------------------------------------------------------------*/
93
94void
96
97/*----------------------------------------------------------------------------*
98 * Set maximum grid level which should run on device (i.e. GPU).
99 *----------------------------------------------------------------------------*/
100
101void
103
104/*----------------------------------------------------------------------------
105 * Define and associate a multigrid sparse linear system solver
106 * for a given field or equation name.
107 *
108 * If this system did not previously exist, it is added to the list of
109 * "known" systems. Otherwise, its definition is replaced by the one
110 * defined here.
111 *
112 * This is a utility function: if finer control is needed, see
113 * cs_sles_define() and cs_multigrid_create().
114 *
115 * Note that this function returns a pointer directly to the multigrid solver
116 * management structure. This may be used to set further options, for
117 * example calling cs_multigrid_set_coarsening_options() and
118 * cs_multigrid_set_solver_options().
119 * If needed, cs_sles_find() may be used to obtain a pointer to the
120 * matching cs_sles_t container.
121 *
122 * \param[in] f_id associated field id, or < 0
123 * \param[in] name associated name if f_id < 0, or NULL
124 * \param[in] mg_type type of multigrid algorithm to use
125 *
126 * \return pointer to new multigrid info and context
127 */
128/*----------------------------------------------------------------------------*/
129
131cs_multigrid_define(int f_id,
132 const char *name,
133 cs_multigrid_type_t mg_type);
134
135/*----------------------------------------------------------------------------*/
146/*----------------------------------------------------------------------------*/
147
150 cs_tree_node_t *config);
151
152/*----------------------------------------------------------------------------
153 * Destroy multigrid linear system solver info and context.
154 *
155 * parameters:
156 * context <-> pointer to multigrid linear solver info
157 * (actual type: cs_multigrid_t **)
158 *----------------------------------------------------------------------------*/
159
160void
161cs_multigrid_destroy(void **context);
162
163/*----------------------------------------------------------------------------
164 * Create multigrid sparse linear system solver info and context
165 * based on existing info and context.
166 *
167 * Note that the configuration dictionnary remains shared with the
168 * copied context.
169 *
170 * parameters:
171 * context <-- pointer to reference info and context
172 * (actual type: cs_multigrid_t *)
173 *
174 * returns:
175 * pointer to newly created solver info object
176 * (actual type: cs_multigrid_t *)
177 *----------------------------------------------------------------------------*/
178
179void *
180cs_multigrid_copy(const void *context);
181
182/*----------------------------------------------------------------------------
183 * Access multigrid solver configuration dictionnary.
184 *
185 * parameters:
186 * mg <-> pointer to multigrid info and context
187 *
188 * returns:
189 * pointer to configuration dictionnary node
190 *----------------------------------------------------------------------------*/
191
192cs_tree_node_t *
194
195/*----------------------------------------------------------------------------
196 * Set multigrid coarsening parameters.
197 *
198 * parameters:
199 * mg <-> pointer to multigrid info and context
200 * conv_diff <-- true if convection/diffusion mode is required
201 *----------------------------------------------------------------------------*/
202
203void
205 bool conv_diff);
206
207/*----------------------------------------------------------------------------
208 * Set multigrid coarsening parameters.
209 *
210 * parameters:
211 * mg <-> pointer to multigrid info and context
212 * aggregation_limit <-- maximum allowed fine rows per coarse cell
213 * coarsening_type <-- coarsening type; see cs_grid_coarsening_t
214 * n_max_levels <-- maximum number of grid levels
215 * min_g_rows <-- global number of rows on coarse grids
216 * under which no coarsening occurs
217 * p0p1_relax <-- p0/p1 relaxation_parameter
218 * postprocess_block_size <-- if > 0, postprocess coarsening
219 * (using coarse cell numbers modulo this value)
220 *----------------------------------------------------------------------------*/
221
222void
224 (cs_multigrid_t *mg,
225 int aggregation_limit,
226 cs_grid_coarsening_t coarsening_type,
227 int n_max_levels,
228 cs_gnum_t min_g_rows,
229 double p0p1_relax,
230 int postprocess_block_size);
231
232/*----------------------------------------------------------------------------*/
233/*
234 * \brief Set specific multigrid coarsening parameters for fine grids.
235 *
236 * \param[in, out] mg pointer to multigrid info and context
237 * \param[in] f_settings_threshold grids of this level or higher use
238 * standard (coarse grid) settings.
239 * \param[in] aggregation_limit maximum allowed fine rows
240 * per coarse row
241 * \param[in] coarsening_type coarsening type;
242 * see \ref cs_grid_coarsening_t
243 */
244/*----------------------------------------------------------------------------*/
245
246void
248 (cs_multigrid_t *mg,
249 int f_settings_threshold,
250 int aggregation_limit,
251 cs_grid_coarsening_t coarsening_type);
252
253/*----------------------------------------------------------------------------
254 * Set multigrid parameters for associated iterative solvers.
255 *
256 * On a GPU, some parameters may be replaced by the closest GPU equivalents.
257 * For finer control, use \ref cs_multigrid_set_coarsening_options_d after
258 * calling this function to modify parameters for solvers running on device.
259 *
260 * parameters:
261 * mg <-> pointer to multigrid info and context
262 * descent_smoother_type <-- type of smoother for descent
263 * ascent_smoother_type <-- type of smoother for ascent
264 * coarse_solver_type <-- type of solver
265 * n_max_cycles <-- maximum number of cycles
266 * n_max_iter_descent <-- maximum iterations per descent phase
267 * n_max_iter_ascent <-- maximum iterations per descent phase
268 * n_max_iter_coarse <-- maximum iterations per coarsest solution
269 * poly_degree_descent <-- preconditioning polynomial degree
270 * for descent phases (0: diagonal)
271 * poly_degree_ascent <-- preconditioning polynomial degree
272 * for ascent phases (0: diagonal)
273 * poly_degree_coarse <-- preconditioning polynomial degree
274 * for coarse solver (0: diagonal)
275 * precision_mult_descent <-- precision multiplier for descent phases
276 * (levels >= 1)
277 * precision_mult_ascent <-- precision multiplier for ascent phases
278 * precision_mult_coarse <-- precision multiplier for coarsest grid
279 *----------------------------------------------------------------------------*/
280
281void
283 cs_sles_it_type_t descent_smoother_type,
284 cs_sles_it_type_t ascent_smoother_type,
285 cs_sles_it_type_t coarse_solver_type,
286 int n_max_cycles,
287 int n_max_iter_descent,
288 int n_max_iter_ascent,
289 int n_max_iter_coarse,
290 int poly_degree_descent,
291 int poly_degree_ascent,
292 int poly_degree_coarse,
293 double precision_mult_descent,
294 double precision_mult_ascent,
295 double precision_mult_coarse);
296
297/*----------------------------------------------------------------------------*/
298/*
299 * \brief Set multigrid device solver parameters for associated
300 * iterative solvers.
301 *
302 * \param[in, out] mg pointer to multigrid info
303 * and context
304 * \param[in] descent_smoother_type type of smoother for descent
305 * \param[in] ascent_smoother_type type of smoother for ascent
306 * \param[in] coarse_solver_type type of solver for coarsest grid
307 * \param[in] n_max_iter_descent maximum iterations
308 * per descent smoothing
309 * \param[in] n_max_iter_ascent maximum iterations
310 * per ascent smoothing
311 * \param[in] n_max_iter_coarse maximum iterations
312 * per coarsest solution
313 * \param[in] poly_degree_descent preconditioning polynomial degree
314 * for descent phases (0: diagonal)
315 * \param[in] poly_degree_ascent preconditioning polynomial degree
316 * for ascent phases (0: diagonal)
317 * \param[in] poly_degree_coarse preconditioning polynomial degree
318 * for coarse solver (0: diagonal)
319 */
320/*----------------------------------------------------------------------------*/
321
322void
324 cs_sles_it_type_t descent_smoother_type,
325 cs_sles_it_type_t ascent_smoother_type,
326 cs_sles_it_type_t coarse_solver_type,
327 int n_max_iter_descent,
328 int n_max_iter_ascent,
329 int n_max_iter_coarse,
330 int poly_degree_descent,
331 int poly_degree_ascent,
332 int poly_degree_coarse);
333
334/*----------------------------------------------------------------------------*/
335/*
336 * \brief Set the max. number of cycles for a multigrid
337 *
338 * \param[in, out] mg pointer to multigrid info and context
339 * \param[in] n_max_cycles maximum number of cycles
340 */
341/*----------------------------------------------------------------------------*/
342
343void
345 int n_max_cycles);
346
347/*----------------------------------------------------------------------------*/
348/*
349 * \brief Indicate if a multigrid solver requires an MSR matrix input.
350 *
351 * \param[in] mg pointer to multigrid info and context
352 *
353 * \return true if MSR is needed, false otherwise.
354 */
355/*----------------------------------------------------------------------------*/
356
357bool
359
360/*----------------------------------------------------------------------------
361 * Setup multigrid sparse linear equation solver.
362 *
363 * parameters:
364 * context <-> pointer to multigrid info and context
365 * (actual type: cs_multigrid_t *)
366 * name <-- pointer to name of linear system
367 * a <-- associated matrix
368 * verbosity <-- associated verbosity
369 *----------------------------------------------------------------------------*/
370
371void
372cs_multigrid_setup(void *context,
373 const char *name,
374 const cs_matrix_t *a,
375 int verbosity);
376
377/*----------------------------------------------------------------------------
378 * Setup multigrid sparse linear equation solver with separate
379 * convection-diffusion matrixes
380 *
381 * parameters:
382 * context <-> pointer to multigrid info and context
383 * (actual type: cs_multigrid_t *)
384 * name <-- pointer to name of linear system
385 * a <-- associated matrix
386 * conv_diff <-- convection-diffusion mode
387 * verbosity <-- associated verbosity
388 *----------------------------------------------------------------------------*/
389
390void
392 const char *name,
393 const cs_matrix_t *a,
394 bool conv_diff,
395 int verbosity);
396
397/*----------------------------------------------------------------------------
398 * Call multigrid sparse linear equation solver.
399 *
400 * parameters:
401 * context <-> pointer to iterative sparse linear solver info
402 * (actual type: cs_multigrid_t *)
403 * name <-- pointer to name of linear system
404 * a <-- matrix
405 * verbosity <-- associated verbosity
406 * precision <-- solver precision
407 * r_norm <-- residual normalization
408 * n_iter --> number of iterations
409 * residual --> residual
410 * rhs <-- right hand side
411 * vx_ini <-- initial solution (vx if nonzero, nullptr if zero)
412 * vx <-> system solution
413 * aux_size <-- number of elements in aux_vectors
414 * aux_vectors --- optional working area (internal allocation if NULL)
415 *
416 * returns:
417 * convergence state
418 *----------------------------------------------------------------------------*/
419
421cs_multigrid_solve(void *context,
422 const char *name,
423 const cs_matrix_t *a,
424 int verbosity,
425 double precision,
426 double r_norm,
427 int *n_iter,
428 double *residual,
429 const cs_real_t *rhs,
430 cs_real_t *vx_ini,
431 cs_real_t *vx,
432 size_t aux_size,
433 void *aux_vectors);
434
435/*----------------------------------------------------------------------------
436 * Free iterative sparse linear equation solver setup context.
437 *
438 * Note that this function should free resolution-related data, such as
439 * buffers and preconditioning but does not free the whole context,
440 * as info used for logging (especially performance data) is maintained.
441
442 * parameters:
443 * context <-> pointer to iterative sparse linear solver info
444 * (actual type: cs_multigrid_t *)
445 *----------------------------------------------------------------------------*/
446
447void
448cs_multigrid_free(void *context);
449
450/*----------------------------------------------------------------------------
451 * Log sparse linear equation solver info.
452 *
453 * parameters:
454 * context <-> pointer to iterative sparse linear solver info
455 * (actual type: cs_multigrid_t *)
456 * log_type <-- log type
457 *----------------------------------------------------------------------------*/
458
459void
460cs_multigrid_log(const void *context,
461 cs_log_t log_type);
462
463/*----------------------------------------------------------------------------*/
471/*----------------------------------------------------------------------------*/
472
475
476/*----------------------------------------------------------------------------
477 * Error handler for multigrid sparse linear equation solver.
478 *
479 * In case of divergence or breakdown, this error handler outputs
480 * postprocessing data to assist debugging, then aborts the run.
481 * It does nothing in case the maximum iteration count is reached.
482 *
483 * parameters:
484 * sles <-> pointer to solver object
485 * state <-- convergence status
486 * a <-- matrix
487 * rhs <-- right hand side
488 * vx <-> system solution
489 *
490 * returns:
491 * false (do not attempt new solve)
492 *----------------------------------------------------------------------------*/
493
494bool
497 const cs_matrix_t *a,
498 const cs_real_t *rhs,
499 cs_real_t *vx);
500
501/*----------------------------------------------------------------------------
502 * Set plotting options for multigrid.
503 *
504 * parameters:
505 * mg <-> pointer to multigrid info and context
506 * base_name <-- base plot name to activate, NULL otherwise
507 * use_iteration <-- if true, use iteration as time stamp
508 * otherwise, use wall clock time
509 *----------------------------------------------------------------------------*/
510
511void
513 const char *base_name,
514 bool use_iteration);
515
516/*----------------------------------------------------------------------------*/
517/*
518 * \brief Query the global multigrid parameters for parallel grid merging.
519 *
520 * \param[in] mg pointer to multigrid info and context
521 * \param[out] rank_stride number of ranks over which merging
522 * takes place, or NULL
523 * \param[out] rows_mean_threshold mean number of rows under which merging
524 * should be applied, or NULL
525 * \param[out] rows_glob_threshold global number of rows under which
526 * merging should be applied, or NULL
527 */
528/*----------------------------------------------------------------------------*/
529
530void
532 int *rank_stride,
533 int *rows_mean_threshold,
534 cs_gnum_t *rows_glob_threshold);
535
536/*----------------------------------------------------------------------------*/
537/*
538 * \brief Set global multigrid parameters for parallel grid merging behavior.
539 *
540 * \param[in, out] mg pointer to multigrid info and context
541 * \param[in] rank_stride number of ranks over which merging
542 * takes place
543 * \param[in] rows_mean_threshold mean number of rows under which
544 * merging should be applied
545 * \param[in] rows_glob_threshold global number of rows under which
546 * merging should be applied
547 */
548/*----------------------------------------------------------------------------*/
549
550void
552 int rank_stride,
553 int rows_mean_threshold,
554 cs_gnum_t rows_glob_threshold);
555
556/*----------------------------------------------------------------------------*/
557/*
558 * \brief Query the global multigrid parameters for parallel grid merging.
559 *
560 * \param[in] mg pointer to multigrid info and context
561 * \param[out] n_max_ranks maximum number of MPI ranks for bottom grid
562 * \param[out] max_row_factor maximum acceptable mean ratio of merged rows
563 * (per MPI rank) to finest rows.
564 */
565/*----------------------------------------------------------------------------*/
566
567void
569 int *n_max_ranks,
570 float *max_row_factor);
571
572/*----------------------------------------------------------------------------*/
573/*
574 * \brief Set global multigrid parameters for parallel grid merging behavior.
575 *
576 * \param[in, out] mg pointer to multigrid info and context
577 * \param[in] n_max_ranks maximum number of MPI ranks for bottom grid
578 * \param[in] max_row_factor maximum acceptable mean ratio of merged rows
579 * (per MPI rank) to finest rows.
580 */
581/*----------------------------------------------------------------------------*/
582
583void
585 int n_max_ranks,
586 float max_row_factor);
587
588/*----------------------------------------------------------------------------*/
589
591
592#endif /* CS_MULTIGRID_H */
#define BEGIN_C_DECLS
Definition: cs_defs.h:528
double cs_real_t
Floating-point value.
Definition: cs_defs.h:332
unsigned cs_gnum_t
global mesh entity number
Definition: cs_defs.h:317
#define END_C_DECLS
Definition: cs_defs.h:529
cs_grid_coarsening_t
Definition: cs_grid.h:48
cs_log_t
Definition: cs_log.h:44
struct _cs_matrix_t cs_matrix_t
Definition: cs_matrix.h:108
cs_tree_node_t * cs_multigrid_get_config(cs_multigrid_t *mg)
void cs_multigrid_setup(void *context, const char *name, const cs_matrix_t *a, int verbosity)
Setup multigrid sparse linear equation solver.
Definition: cs_multigrid.cpp:5275
void cs_multigrid_set_coarsening_options_fine_grid(cs_multigrid_t *mg, int f_settings_threshold, int aggregation_limit, cs_grid_coarsening_t coarsening_type)
Set specific multigrid coarsening parameters for fine grids.
Definition: cs_multigrid.cpp:4983
void cs_multigrid_setup_conv_diff(void *context, const char *name, const cs_matrix_t *a, bool conv_diff, int verbosity)
void cs_multigrid_get_merge_bottom_options(const cs_multigrid_t *mg, int *n_max_ranks, float *max_row_factor)
Query the global multigrid parameters for parallel grid merging.
Definition: cs_multigrid.cpp:6066
void cs_multigrid_set_solver_options_d(cs_multigrid_t *mg, cs_sles_it_type_t descent_smoother_type, cs_sles_it_type_t ascent_smoother_type, cs_sles_it_type_t coarse_solver_type, int n_max_iter_descent, int n_max_iter_ascent, int n_max_iter_coarse, int poly_degree_descent, int poly_degree_ascent, int poly_degree_coarse)
Set multigrid device solver parameters for associated iterative solvers.
Definition: cs_multigrid.cpp:5166
struct _cs_multigrid_t cs_multigrid_t
Definition: cs_multigrid.h:69
cs_multigrid_type_t
Definition: cs_multigrid.h:58
@ CS_MULTIGRID_K_CYCLE
Definition: cs_multigrid.h:61
@ CS_MULTIGRID_N_TYPES
Definition: cs_multigrid.h:63
@ CS_MULTIGRID_K_CYCLE_HPC
Definition: cs_multigrid.h:62
@ CS_MULTIGRID_V_CYCLE
Definition: cs_multigrid.h:60
void cs_multigrid_get_merge_options(const cs_multigrid_t *mg, int *rank_stride, int *rows_mean_threshold, cs_gnum_t *rows_glob_threshold)
Query the global multigrid parameters for parallel grid merging.
Definition: cs_multigrid.cpp:6003
void cs_multigrid_set_max_grid_level_for_device(int level)
Set maximum grid level which should run on device (i.e. GPU).
Definition: cs_multigrid.cpp:4574
cs_multigrid_t * cs_multigrid_define(int f_id, const char *name, cs_multigrid_type_t mg_type)
Define and associate a multigrid sparse linear system solver for a given field or equation name.
Definition: cs_multigrid.cpp:4607
void * cs_multigrid_copy(const void *context)
Create multigrid sparse linear system solver info and context based on existing info and context.
Definition: cs_multigrid.cpp:4851
void cs_multigrid_set_coarsening_options(cs_multigrid_t *mg, int aggregation_limit, cs_grid_coarsening_t coarsening_type, int n_max_levels, cs_gnum_t min_g_rows, double p0p1_relax, int postprocess_block_size)
Set multigrid coarsening parameters.
Definition: cs_multigrid.cpp:4946
cs_sles_pc_t * cs_multigrid_pc_create(cs_multigrid_type_t mg_type)
Create a multigrid preconditioner.
Definition: cs_multigrid.cpp:5682
void cs_multigrid_set_conv_diff(cs_multigrid_t *mg, bool conv_diff)
Definition: cs_multigrid.cpp:4919
cs_sles_convergence_state_t cs_multigrid_solve(void *context, const char *name, const cs_matrix_t *a, int verbosity, double precision, double r_norm, int *n_iter, double *residual, const cs_real_t *rhs, cs_real_t *vx_ini, cs_real_t *vx, size_t aux_size, void *aux_vectors)
Call multigrid sparse linear equation solver.
Definition: cs_multigrid.cpp:5362
void cs_multigrid_set_merge_options(cs_multigrid_t *mg, int rank_stride, int rows_mean_threshold, cs_gnum_t rows_glob_threshold)
Set global multigrid parameters for parallel grid merging behavior.
Definition: cs_multigrid.cpp:6040
void cs_multigrid_set_merge_bottom_options(cs_multigrid_t *mg, int n_max_ranks, float max_row_factor)
Set global multigrid parameters for parallel grid merging behavior.
Definition: cs_multigrid.cpp:6095
void cs_multigrid_set_plot_options(cs_multigrid_t *mg, const char *base_name, bool use_iteration)
Set plotting options for multigrid.
Definition: cs_multigrid.cpp:5957
bool cs_multigrid_error_post_and_abort(cs_sles_t *sles, cs_sles_convergence_state_t state, const cs_matrix_t *a, const cs_real_t *rhs, cs_real_t *vx)
void cs_multigrid_set_solver_options(cs_multigrid_t *mg, cs_sles_it_type_t descent_smoother_type, cs_sles_it_type_t ascent_smoother_type, cs_sles_it_type_t coarse_solver_type, int n_max_cycles, int n_max_iter_descent, int n_max_iter_ascent, int n_max_iter_coarse, int poly_degree_descent, int poly_degree_ascent, int poly_degree_coarse, double precision_mult_descent, double precision_mult_ascent, double precision_mult_coarse)
Set multigrid parameters for associated iterative solvers.
Definition: cs_multigrid.cpp:5032
void cs_multigrid_free(void *context)
Free multigrid sparse linear equation solver setup context.
Definition: cs_multigrid.cpp:5604
bool cs_multigrid_need_msr(const cs_multigrid_t *mg)
Indicate if a multigrid solver requires an MSR matrix input.
Definition: cs_multigrid.cpp:5239
void cs_multigrid_initialize(void)
Initialize multigrid solver API.
Definition: cs_multigrid.cpp:4551
cs_multigrid_t * cs_multigrid_create(cs_multigrid_type_t mg_type, cs_tree_node_t *config)
Create multigrid linear system solver info and context.
Definition: cs_multigrid.cpp:4644
void cs_multigrid_log(const void *context, cs_log_t log_type)
Log multigrid solver info.
Definition: cs_multigrid.cpp:4898
void cs_multigrid_set_max_cycles(cs_multigrid_t *mg, int n_max_cycles)
Set the max. number of cycles for a multigrid.
Definition: cs_multigrid.cpp:5217
void cs_multigrid_finalize(void)
Finalize multigrid solver API.
Definition: cs_multigrid.cpp:4562
const char * cs_multigrid_type_name[]
void cs_multigrid_destroy(void **context)
Destroy multigrid linear system solver info and context.
Definition: cs_multigrid.cpp:4793
cs_sles_convergence_state_t
Definition: cs_sles.h:57
struct _cs_sles_t cs_sles_t
Definition: cs_sles.h:72
cs_sles_it_type_t
Definition: cs_sles_it.h:55
struct _cs_sles_pc_t cs_sles_pc_t
Definition: cs_sles_pc.h:65