9.2
general documentation
cs_grid_priv.h
Go to the documentation of this file.
1#ifndef CS_GRID_PRIV_H
2#define CS_GRID_PRIV_H
3
4/*============================================================================
5 * Grid connectivity and data used for multigrid coarsening
6 * and associated matrix construction.
7 *============================================================================*/
8
9/*
10 This file is part of code_saturne, a general-purpose CFD tool.
11
12 Copyright (C) 1998-2026 EDF S.A.
13
14 This program is free software; you can redistribute it and/or modify it under
15 the terms of the GNU General Public License as published by the Free Software
16 Foundation; either version 2 of the License, or (at your option) any later
17 version.
18
19 This program is distributed in the hope that it will be useful, but WITHOUT
20 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
21 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
22 details.
23
24 You should have received a copy of the GNU General Public License along with
25 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
26 Street, Fifth Floor, Boston, MA 02110-1301, USA.
27*/
28
29/*----------------------------------------------------------------------------*/
30
31/*----------------------------------------------------------------------------
32 * Local headers
33 *----------------------------------------------------------------------------*/
34
35#include "base/cs_base.h"
36
37#include "base/cs_dispatch.h"
38#include "base/cs_halo.h"
39#include "alge/cs_matrix.h"
40
41/*============================================================================
42 * Macro definitions
43 *============================================================================*/
44
45/*============================================================================
46 * Type definitions
47 *============================================================================*/
48
49/* Structure associated with opaque grid object */
50
51typedef struct _cs_grid_t cs_grid_t;
52
53/* Structure associated with grid */
54/*--------------------------------*/
55
56struct _cs_grid_t {
57
58 int level; /* Level in multigrid hierarchy */
59
60 cs_alloc_mode_t alloc_mode; /* Preferred allocation mode */
61
62 bool conv_diff; /* true if convection/diffusion case,
63 false otherwise */
64 bool symmetric; /* Symmetric matrix coefficients
65 indicator */
66 bool use_faces; /* True if face information is present */
67 bool use_xa; /* True if face-based extra-diagonal
68 are available */
69
70 cs_lnum_t db_size; /* Block sizes for diagonal */
71 cs_lnum_t eb_size; /* Block sizes for extra diagonal */
72
73 cs_gnum_t n_g_rows; /* Global number of rows */
74
75 cs_lnum_t n_rows; /* Local number of rows */
76 cs_lnum_t n_cols_ext; /* Local number of participating cells
77 (cells + ghost cells sharing a face) */
78
79 cs_lnum_t n_elts_r[2]; /* Size of array used for restriction
80 operations ({n_rows, n_cols_ext} when
81 no grid merging has taken place) */
82
83 /* Grid hierarchy information */
84
85 const struct _cs_grid_t *parent; /* Pointer to parent (finer) grid */
86
87 /* Connectivity information */
88
89 cs_lnum_t n_faces; /* Local number of faces */
90 const cs_lnum_2_t *face_cell; /* Face -> cells connectivity (1 to n) */
91 cs_lnum_2_t *_face_cell; /* Face -> cells connectivity
92 (private array) */
93
94 /* Restriction from parent to current level */
95
96 cs_lnum_t *coarse_row; /* Fine -> coarse row connectivity;
97 size: parent n_cols_ext
98 -2: undetermined (initial value)
99 -1: penalized
100 {0, n-1}: standard mapping */
101 cs_lnum_t *coarse_face; /* Fine -> coarse face connectivity
102 (1 to n, signed:
103 = 0 fine face inside coarse cell
104 > 0 orientation same as parent
105 < 0 orientation opposite as parent);
106 size: parent n_faces */
107
108 /* Face to cell data (if owner); uses same index as MSR matrix */
109
110 cs_lnum_t *cell_face; /* Cell to faces adjacency */
111 short int *cell_face_sgn; /* Cell to faces orientation */
112
113 /* Geometric data */
114
115 cs_real_t relaxation; /* P0/P1 relaxation parameter */
116 const cs_real_3_t *cell_cen; /* Cell center (shared) */
117 cs_real_3_t *_cell_cen; /* Cell center (private) */
118
119 const cs_real_t *cell_vol; /* Cell volume (shared) */
120 cs_real_t *_cell_vol; /* Cell volume (private) */
121
122 cs_real_3_t *face_normal; /* Surface normal of internal faces.
123 (L2 norm = face area).
124 Not used for finest grid. */
125
126 /* Parallel / periodic halo */
127
128 const cs_halo_t *halo; /* Halo for this connectivity (shared) */
129 cs_halo_t *_halo; /* Halo for this connectivity (private) */
130
131 /* Matrix-related data */
132
133 const cs_real_t *da; /* Diagonal (shared) */
134 cs_real_t *_da; /* Diagonal (private) */
135
136 const cs_real_t *xa; /* Extra-diagonal (shared) */
137 cs_real_t *_xa; /* Extra-diagonal (private) */
138 cs_real_t *xa_conv; /* Extra-diagonal (except level 0) */
139 cs_real_t *xa_diff; /* Extra-diagonal (except level 0) */
140
141 const cs_real_t *xa0; /* Symmetrized extra-diagonal (shared) */
142 cs_real_t *_xa0; /* Symmetrized extra-diagonal (private) */
143 cs_real_t *xa0_diff; /* Symmetrized extra-diagonal */
144
146
147 cs_matrix_structure_t *matrix_struct; /* Associated matrix structure */
148 const cs_matrix_t *matrix; /* Associated matrix (shared) */
149 cs_matrix_t *_matrix; /* Associated matrix (private) */
150
151#if defined(HAVE_MPI)
152
153 /* Additional fields to allow merging grids */
154
155 int merge_sub_root; /* sub-root when merging */
156 int merge_sub_rank; /* sub-rank when merging
157 (0 <= sub-rank < merge_sub_size) */
158 int merge_sub_size; /* current number of merged ranks
159 for this subset */
160 int merge_stride; /* total number of ranks over which
161 merging occurred at previous levels */
162 int next_merge_stride; /* total number of ranks over which
163 merging occurred at current level */
164
165 cs_lnum_t *merge_cell_idx; /* start cell_id for each sub-rank
166 when merge_sub_rank = 0
167 (size: merge_size + 1) */
168
169 int n_ranks; /* Number of active ranks */
170 MPI_Comm comm; /* Associated communicator */
171
172#endif
173};
174
175/*============================================================================
176 * Global variables
177 *============================================================================*/
178
179/* Names for coarsening options */
180
181extern const char *cs_grid_coarsening_type_name[];
182
183/*============================================================================
184 * Semi-private function prototypes
185 *
186 * The following functions are intended to be used by the multigrid layer
187 * (cs_multigrid.c), not directly by the user, so they are no more
188 * documented than private static functions)
189 *============================================================================*/
190
191/*----------------------------------------------------------------------------*/
195/*----------------------------------------------------------------------------*/
196
197void
199
200/*----------------------------------------------------------------------------
201 * Create base grid by mapping from shared mesh values.
202 *
203 * Note that as arrays given as arguments are shared by the created grid
204 * (which can only access them, not modify them), the grid should be
205 * destroyed before those arrays.
206 *
207 * parameters:
208 * n_faces <-- Local number of faces
209 * db_size <-- Block sizes for diagonal
210 * eb_size <-- Block sizes for extra-diagonal
211 * face_cell <-- Face -> cells connectivity
212 * a <-- Associated matrix
213 * conv_diff <-- Convection-diffusion mode
214 *
215 * returns:
216 * base grid structure
217 *----------------------------------------------------------------------------*/
218
219cs_grid_t *
223 const cs_lnum_2_t *face_cell,
224 const cs_matrix_t *a,
225 bool conv_diff);
226
227/*----------------------------------------------------------------------------
228 * Create base grid by mapping from parent (possibly shared) matrix.
229 *
230 * Note that as arrays given as arguments are shared by the created grid
231 * (which can only access them, not modify them), the grid should be
232 * destroyed before those arrays.
233 *
234 * parameters:
235 * a <-- associated matrix
236 * n_ranks <-- number of active ranks (<= 1 to restrict to local values)
237 *
238 * returns:
239 * base grid structure
240 *----------------------------------------------------------------------------*/
241
242cs_grid_t *
244 int n_ranks);
245
246/*----------------------------------------------------------------------------
247 * Destroy a grid structure.
248 *
249 * parameters:
250 * grid <-> Pointer to grid structure pointer
251 *----------------------------------------------------------------------------*/
252
253void
254cs_grid_destroy(cs_grid_t **grid);
255
256/*----------------------------------------------------------------------------
257 * Free a grid structure's associated quantities.
258 *
259 * The quantities required to compute a coarser grid with relaxation from a
260 * given grid are not needed after that stage, so may be freed.
261 *
262 * parameters:
263 * g <-> Pointer to grid structure
264 *----------------------------------------------------------------------------*/
265
266void
268
269/*----------------------------------------------------------------------------
270 * Get grid information.
271 *
272 * parameters:
273 * g <-- Grid structure
274 * level --> Level in multigrid hierarchy (or NULL)
275 * symmetric --> Symmetric matrix coefficients indicator (or NULL)
276 * db_size --> Size of the diagonal block (or NULL)
277 * eb_size --> Size of the extra diagonal block (or NULL)
278 * n_ranks --> number of ranks with data (or NULL)
279 * n_rows --> Number of local rows (or NULL)
280 * n_cols_ext --> Number of columns including ghosts (or NULL)
281 * n_entries --> Number of entries (or NULL)
282 * n_g_rows --> Number of global rows (or NULL)
283 *----------------------------------------------------------------------------*/
284
285void
286cs_grid_get_info(const cs_grid_t *g,
287 int *level,
288 bool *symmetric,
291 int *n_ranks,
294 cs_lnum_t *n_entries,
296
297/*----------------------------------------------------------------------------
298 * Get memory allocation mode corresponding to a grid.
299 *
300 * parameters:
301 * g <-- Grid structure
302 *
303 * returns:
304 * memory allocation typt
305 *----------------------------------------------------------------------------*/
306
308cs_grid_get_alloc_mode(const cs_grid_t *g);
309
310/*----------------------------------------------------------------------------
311 * Get number of rows corresponding to a grid.
312 *
313 * parameters:
314 * g <-- Grid structure
315 *
316 * returns:
317 * number of rows of grid structure
318 *----------------------------------------------------------------------------*/
319
321cs_grid_get_n_rows(const cs_grid_t *g);
322
323/*----------------------------------------------------------------------------
324 * Get number of extended (local + ghost) columns corresponding to a grid.
325 *
326 * parameters:
327 * g <-- Grid structure
328 *
329 * returns:
330 * number of extended columns of grid structure
331 *----------------------------------------------------------------------------*/
332
334cs_grid_get_n_cols_ext(const cs_grid_t *g);
335
336/*----------------------------------------------------------------------------
337 * Get maximum number of extended (local + ghost) columns corresponding to
338 * a grid, both with and without merging between ranks
339 *
340 * parameters:
341 * g <-- Grid structure
342 *
343 * returns:
344 * maximum number of extended columns of grid structure, with or without
345 * merging
346 *----------------------------------------------------------------------------*/
347
349cs_grid_get_n_cols_max(const cs_grid_t *g);
350
351/*----------------------------------------------------------------------------
352 * Get global number of rows corresponding to a grid.
353 *
354 * parameters:
355 * g <-- Grid structure
356 *
357 * returns:
358 * global number of rows of grid structure
359 *----------------------------------------------------------------------------*/
360
362cs_grid_get_n_g_rows(const cs_grid_t *g);
363
364/*----------------------------------------------------------------------------
365 * Get grid's associated matrix information.
366 *
367 * parameters:
368 * g <-- Grid structure
369 *
370 * returns:
371 * pointer to matrix structure
372 *----------------------------------------------------------------------------*/
373
374const cs_matrix_t *
375cs_grid_get_matrix(const cs_grid_t *g);
376
377#if defined(HAVE_MPI)
378
379/*----------------------------------------------------------------------------
380 * Get the MPI subcommunicator for a given grid.
381 *
382 * parameters:
383 * g <-- Grid structure
384 *
385 * returns:
386 * MPI communicator
387 *----------------------------------------------------------------------------*/
388
389MPI_Comm
390cs_grid_get_comm(const cs_grid_t *g);
391
392/*----------------------------------------------------------------------------
393 * Get the MPI subcommunicator for a given merge stride.
394 *
395 * parameters:
396 * parent <-- parent MPI communicator
397 * merge_stride <-- associated merge stride
398 *
399 * returns:
400 * MPI communicator
401 *----------------------------------------------------------------------------*/
402
403MPI_Comm
405 int merge_stride);
406
407#endif
408
409/*----------------------------------------------------------------------------
410 * Create coarse grid from fine grid.
411 *
412 * parameters:
413 * f <-- Fine grid structure
414 * alloc_mode <-- Memory allocation mode
415 * coarsening_type <-- Coarsening criteria type
416 * aggregation_limit <-- Maximum allowed fine rows per coarse rows
417 * verbosity <-- Verbosity level
418 * merge_stride <-- Associated merge stride
419 * merge_rows_mean_threshold <-- mean number of rows under which
420 * merging should be applied
421 * merge_rows_glob_threshold <-- global number of rows under which
422 * merging should be applied
423 * relaxation_parameter <-- P0/P1 relaxation factor
424 *
425 * returns:
426 * coarse grid structure
427 *----------------------------------------------------------------------------*/
428
429cs_grid_t *
430cs_grid_coarsen(const cs_grid_t *f,
432 cs_grid_coarsening_t coarsening_type,
433 int aggregation_limit,
434 int verbosity,
435 int merge_stride,
436 int merge_rows_mean_threshold,
437 cs_gnum_t merge_rows_glob_threshold,
438 double relaxation_parameter);
439
440/*----------------------------------------------------------------------------
441 * Create coarse grid with only one row per rank from fine grid.
442 *
443 * parameters:
444 * f <-- Fine grid structure
445 * alloc_mode <-- Memory allocation mode
446 * merge_stride <-- Associated merge stride
447 * verbosity <-- Verbosity level
448 *
449 * returns:
450 * coarse grid structure
451 *----------------------------------------------------------------------------*/
452
453cs_grid_t *
454cs_grid_coarsen_to_single(const cs_grid_t *f,
456 int merge_stride,
457 int verbosity);
458
459/*----------------------------------------------------------------------------
460 * Merge grids on several ranks to a grid on a single rank
461 *
462 * The coarse grid must previously have been initialized with _coarse_init()
463 * and its coarsening indicator determined (at least for the local cells;
464 * it is extended to halo cells here if necessary).
465 *
466 * parameters:
467 * g <-- Pointer to grid structure
468 * merge_stride <-- Associated merge stride
469 * verbosity <-- verbosity level
470 *----------------------------------------------------------------------------*/
471
472void
474 int merge_stride,
475 int verbosity);
476
477/*----------------------------------------------------------------------------
478 * Merge bottom grid over adjacent ranks, to reduce communicator size.
479 *
480 * If this would lead to a mean number of rows exceeding a given threshold,
481 * no merging is done.
482 *
483 * parameters:
484 * g <-- Grid structure
485 * verbosity <-- Verbosity level
486 * n_max_ranks <-- Maximum number of MPI ranks for bottom grid
487 * max_row_factor <-- maximum acceptable mean ratio of merged rows
488 * (per MPI rank) to finest rows.
489 *----------------------------------------------------------------------------*/
490
491void
493 int verbosity,
494 int n_max_ranks,
495 float max_row_factor);
496
497/*----------------------------------------------------------------------------
498 * Project coarse grid row numbers to base grid.
499 *
500 * If a global coarse grid row number is larger than max_num, its
501 * value modulo max_num is used.
502 *
503 * parameters:
504 * g <-- Grid structure
505 * n_base_rows <-- Number of rows in base grid
506 * max_num <-- Values of c_row_num = global_num % max_num
507 * c_row_num --> Global coarse row number (modulo max_num)
508 *----------------------------------------------------------------------------*/
509
510void
511cs_grid_project_row_num(const cs_grid_t *g,
512 cs_lnum_t n_base_rows,
513 int max_num,
514 int c_row_num[]);
515
516/*----------------------------------------------------------------------------
517 * Project coarse grid row rank to base grid.
518 *
519 * parameters:
520 * g <-- Grid structure
521 * n_base_rows <-- Number of rows in base grid
522 * f_row_rank --> Global coarse row rank projected to fine rows
523 *----------------------------------------------------------------------------*/
524
525void
526cs_grid_project_row_rank(const cs_grid_t *g,
527 cs_lnum_t n_base_rows,
528 int f_row_rank[]);
529
530/*----------------------------------------------------------------------------
531 * Project variable from coarse grid to base grid
532 *
533 * parameters:
534 * g <-- Grid structure
535 * n_base_rows <-- Number of rows in base grid
536 * c_var <-- Row variable on coarse grid
537 * f_var --> Row variable projected to fine grid
538 *----------------------------------------------------------------------------*/
539
540void
541cs_grid_project_var(const cs_grid_t *g,
542 cs_lnum_t n_base_rows,
543 const cs_real_t c_var[],
544 cs_real_t f_var[]);
545
546/*----------------------------------------------------------------------------
547 * Compute diagonal dominance metric and project it to base grid
548 *
549 * parameters:
550 * g <-- Grid structure
551 * n_base_rows <-- Number of rows in base grid
552 * diag_dom --> Diagonal dominance metric (on fine grid)
553 *----------------------------------------------------------------------------*/
554
555void
556cs_grid_project_diag_dom(const cs_grid_t *g,
557 cs_lnum_t n_base_rows,
558 cs_real_t diag_dom[]);
559
560/*----------------------------------------------------------------------------
561 * Finalize global info related to multigrid solvers
562 *----------------------------------------------------------------------------*/
563
564void
566
567/*----------------------------------------------------------------------------
568 * Dump grid structure
569 *
570 * parameters:
571 * g <-- grid structure that should be dumped
572 *----------------------------------------------------------------------------*/
573
574void
575cs_grid_dump(const cs_grid_t *g);
576
577/*----------------------------------------------------------------------------
578 * Compute coarse row variable values from fine row values
579 *
580 * parameters:
581 * ctx <-> Reference to dispatch context
582 * f <-- Fine grid structure
583 * c <-- Fine grid structure
584 * f_var <-- Variable defined on fine grid rows
585 * c_var --> Variable defined on coarse grid rows
586 *
587 * returns:
588 * coarse grid structure
589 *----------------------------------------------------------------------------*/
590
591void
593 const cs_grid_t *f,
594 const cs_grid_t *c,
595 const cs_real_t *f_var,
596 cs_real_t *c_var);
597
598/*----------------------------------------------------------------------------
599 * Compute fine row variable values from coarse row values
600 *
601 * parameters:
602 * ctx <-> Reference to dispatch context
603 * c <-- Fine grid structure
604 * f <-- Fine grid structure
605 * increment <-- if true, add value to f_var; otherwise, overwrite it
606 * c_var <-- Variable defined on coarse grid rows
607 * f_var <-> Variable defined on fine grid rows
608 *----------------------------------------------------------------------------*/
609
610void
612 const cs_grid_t *c,
613 const cs_grid_t *f,
614 bool increment,
615 cs_real_t *c_var,
616 cs_real_t *f_var);
617
618/*----------------------------------------------------------------------------*/
619
620#endif /* CS_GRID_PRIV_H */
Definition: cs_dispatch.h:2288
double cs_real_t
Floating-point value.
Definition: cs_defs.h:332
cs_lnum_t cs_lnum_2_t[2]
vector of 2 local mesh-entity ids
Definition: cs_defs.h:342
cs_real_t cs_real_3_t[3]
vector of 3 floating-point values
Definition: cs_defs.h:349
unsigned cs_gnum_t
global mesh entity number
Definition: cs_defs.h:317
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:325
cs_grid_coarsening_t
Definition: cs_grid.h:48
void cs_grid_project_row_num(const cs_grid_t *g, cs_lnum_t n_base_rows, int max_num, int c_row_num[])
cs_grid_t * cs_grid_create_from_parent(const cs_matrix_t *a, int n_ranks)
cs_grid_t * cs_grid_coarsen_to_single(const cs_grid_t *f, cs_alloc_mode_t alloc_mode, int merge_stride, int verbosity)
void cs_grid_restrict_row_var(cs_dispatch_context &ctx, const cs_grid_t *f, const cs_grid_t *c, const cs_real_t *f_var, cs_real_t *c_var)
Definition: cs_grid.cpp:8987
void cs_grid_dump(const cs_grid_t *g)
void cs_grid_set_diag_dom_clip_factor(double factor)
Set factor to ensure diagonal dominance.
Definition: cs_grid.cpp:8931
MPI_Comm cs_grid_get_comm_merge(MPI_Comm parent, int merge_stride)
cs_lnum_t cs_grid_get_n_cols_ext(const cs_grid_t *g)
cs_grid_t * cs_grid_coarsen(const cs_grid_t *f, cs_alloc_mode_t alloc_mode, cs_grid_coarsening_t coarsening_type, int aggregation_limit, int verbosity, int merge_stride, int merge_rows_mean_threshold, cs_gnum_t merge_rows_glob_threshold, double relaxation_parameter)
const char * cs_grid_coarsening_type_name[]
cs_alloc_mode_t cs_grid_get_alloc_mode(const cs_grid_t *g)
void cs_grid_project_var(const cs_grid_t *g, cs_lnum_t n_base_rows, const cs_real_t c_var[], cs_real_t f_var[])
const cs_matrix_t * cs_grid_get_matrix(const cs_grid_t *g)
cs_gnum_t cs_grid_get_n_g_rows(const cs_grid_t *g)
cs_lnum_t cs_grid_get_n_rows(const cs_grid_t *g)
void cs_grid_prolong_row_var(cs_dispatch_context &ctx, const cs_grid_t *c, const cs_grid_t *f, bool increment, cs_real_t *c_var, cs_real_t *f_var)
Definition: cs_grid.cpp:9101
void cs_grid_project_diag_dom(const cs_grid_t *g, cs_lnum_t n_base_rows, cs_real_t diag_dom[])
cs_grid_t * cs_grid_create_from_shared(cs_lnum_t n_faces, cs_lnum_t db_size, cs_lnum_t eb_size, const cs_lnum_2_t *face_cell, const cs_matrix_t *a, bool conv_diff)
cs_lnum_t cs_grid_get_n_cols_max(const cs_grid_t *g)
MPI_Comm cs_grid_get_comm(const cs_grid_t *g)
void cs_grid_project_row_rank(const cs_grid_t *g, cs_lnum_t n_base_rows, int f_row_rank[])
void cs_grid_destroy(cs_grid_t **grid)
void cs_grid_finalize(void)
void cs_grid_merge_bottom(cs_grid_t *g, int verbosity, int n_max_ranks, float max_row_factor)
void cs_grid_merge_ranks(cs_grid_t *g, int merge_stride, int verbosity)
void cs_grid_get_info(const cs_grid_t *g, int *level, bool *symmetric, cs_lnum_t *db_size, cs_lnum_t *eb_size, int *n_ranks, cs_lnum_t *n_rows, cs_lnum_t *n_cols_ext, cs_lnum_t *n_entries, cs_gnum_t *n_g_rows)
void cs_grid_free_quantities(cs_grid_t *g)
struct _cs_matrix_structure_t cs_matrix_structure_t
Definition: cs_matrix.h:104
struct _cs_matrix_t cs_matrix_t
Definition: cs_matrix.h:108
cs_alloc_mode_t
Definition: cs_mem.h:46
Definition: cs_grid_priv.h:56
bool symmetric
Definition: cs_grid_priv.h:64
bool use_faces
Definition: cs_grid_priv.h:66
int merge_sub_size
Definition: cs_grid_priv.h:158
int merge_stride
Definition: cs_grid_priv.h:160
cs_lnum_t n_elts_r[2]
Definition: cs_grid_priv.h:79
const cs_real_3_t * cell_cen
Definition: cs_grid_priv.h:116
cs_lnum_2_t * _face_cell
Definition: cs_grid_priv.h:91
cs_lnum_t * coarse_row
Definition: cs_grid_priv.h:96
int n_ranks
Definition: cs_grid_priv.h:169
cs_lnum_t n_rows
Definition: cs_grid_priv.h:75
const cs_lnum_2_t * face_cell
Definition: cs_grid_priv.h:90
cs_real_3_t * face_normal
Definition: cs_grid_priv.h:122
cs_real_t * _xa
Definition: cs_grid_priv.h:137
cs_real_t relaxation
Definition: cs_grid_priv.h:115
cs_alloc_mode_t alloc_mode
Definition: cs_grid_priv.h:60
cs_real_t * xa_diff
Definition: cs_grid_priv.h:139
cs_lnum_t * merge_cell_idx
Definition: cs_grid_priv.h:165
bool use_xa
Definition: cs_grid_priv.h:67
cs_lnum_t n_faces
Definition: cs_grid_priv.h:89
cs_real_t * xa_conv
Definition: cs_grid_priv.h:138
cs_lnum_t * coarse_face
Definition: cs_grid_priv.h:101
const cs_halo_t * halo
Definition: cs_grid_priv.h:128
const cs_real_t * xa0
Definition: cs_grid_priv.h:141
int merge_sub_root
Definition: cs_grid_priv.h:155
const cs_real_t * da
Definition: cs_grid_priv.h:133
cs_gnum_t n_g_rows
Definition: cs_grid_priv.h:73
cs_matrix_t * _matrix
Definition: cs_grid_priv.h:149
short int * cell_face_sgn
Definition: cs_grid_priv.h:111
cs_lnum_t db_size
Definition: cs_grid_priv.h:70
const struct _cs_grid_t * parent
Definition: cs_grid_priv.h:85
cs_lnum_t * cell_face
Definition: cs_grid_priv.h:110
cs_real_t * _cell_vol
Definition: cs_grid_priv.h:120
int next_merge_stride
Definition: cs_grid_priv.h:162
cs_halo_t * _halo
Definition: cs_grid_priv.h:129
int merge_sub_rank
Definition: cs_grid_priv.h:156
bool conv_diff
Definition: cs_grid_priv.h:62
MPI_Comm comm
Definition: cs_grid_priv.h:170
cs_real_3_t * _cell_cen
Definition: cs_grid_priv.h:117
cs_real_t * xa0_diff
Definition: cs_grid_priv.h:143
const cs_real_t * cell_vol
Definition: cs_grid_priv.h:119
int level
Definition: cs_grid_priv.h:58
cs_lnum_t n_cols_ext
Definition: cs_grid_priv.h:76
cs_real_t * xa0ij
Definition: cs_grid_priv.h:145
cs_real_t * _xa0
Definition: cs_grid_priv.h:142
cs_lnum_t eb_size
Definition: cs_grid_priv.h:71
cs_real_t * _da
Definition: cs_grid_priv.h:134
const cs_matrix_t * matrix
Definition: cs_grid_priv.h:148
const cs_real_t * xa
Definition: cs_grid_priv.h:136
cs_matrix_structure_t * matrix_struct
Definition: cs_grid_priv.h:147
Definition: cs_halo.h:74