8.1
general documentation
cs_cdo_assembly.h
Go to the documentation of this file.
1 #ifndef __CS_CDO_ASSEMBLY_H__
2 #define __CS_CDO_ASSEMBLY_H__
3 
4 /*============================================================================
5  * Set of functions and structures to handle the assembly of cellwise local CDO
6  * systems into a cs_matrix_t structure through the cs_matrix_assembler_t and
7  * its related structures
8  *============================================================================*/
9 
10 /*
11  This file is part of code_saturne, a general-purpose CFD tool.
12 
13  Copyright (C) 1998-2023 EDF S.A.
14 
15  This program is free software; you can redistribute it and/or modify it under
16  the terms of the GNU General Public License as published by the Free Software
17  Foundation; either version 2 of the License, or (at your option) any later
18  version.
19 
20  This program is distributed in the hope that it will be useful, but WITHOUT
21  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
22  FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
23  details.
24 
25  You should have received a copy of the GNU General Public License along with
26  this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
27  Street, Fifth Floor, Boston, MA 02110-1301, USA.
28 */
29 
30 /*----------------------------------------------------------------------------
31  * Local headers
32  *----------------------------------------------------------------------------*/
33 
34 #include "cs_matrix.h"
35 #include "cs_matrix_assembler.h"
36 #include "cs_param_types.h"
37 #include "cs_range_set.h"
38 #include "cs_sdm.h"
39 
40 /*----------------------------------------------------------------------------*/
41 
43 
44 /*============================================================================
45  * Macro definitions
46  *============================================================================*/
47 
48 /* Size of the buffer used to collect global ids for rows and columns when
49  * assembling the values in the global matrix from the local cellwise matrices
50  */
51 
52 #define CS_CDO_ASSEMBLY_BUFSIZE 200
53 
54 /*============================================================================
55  * Type definitions
56  *============================================================================*/
57 
58 /*=============================================================================
59  * Local structure definitions
60  *============================================================================*/
61 
62 typedef struct _cs_cdo_assembly_t cs_cdo_assembly_t;
63 
64 /*----------------------------------------------------------------------------*/
75 /*----------------------------------------------------------------------------*/
76 
77 typedef void
78 (cs_cdo_assembly_func_t)(const cs_sdm_t *m,
79  const cs_lnum_t *dof_ids,
80  const cs_range_set_t *rset,
81  cs_cdo_assembly_t *eqa,
83 
84 /* Metadata for the assembly of a row */
85 
86 typedef struct {
87 
88  /* Row numberings */
89 
90  cs_gnum_t g_id; /* Global row numbering */
91  cs_lnum_t l_id; /* Local range set numbering */
92  int i; /* Cellwise system numbering */
93 
94  /* Column-related members */
95 
96  int n_cols; /* Number of columns (cellwise system) */
97  cs_gnum_t *col_g_id; /* Global numbering of columns */
98  int *col_idx; /* Array to build and to give as parameter
99  for *add_vals() functions */
100 
101  const cs_real_t *val; /* Row values */
102  cs_real_t *expval; /* Expanded row values (when unrolling non
103  scalar-valued blocks) */
104 
106 
107 /* Cell-wise structure used for the assembly of local systems */
108 
110 
111  int n_cw_dofs; /* Number of DoFs in a cell */
112  int ddim; /* Number of real values related to each diagonal
113  entry */
114  int edim; /* Number of real values related to each
115  extra-diagonal entry */
116 
117  /* For matrices built by blocks (for instance in coupled systems with
118  scalar-valued blocks), one may need to shift the row and/or the column
119  local ids */
120 
123 
125 
126 };
127 
128 /*============================================================================
129  * Public function prototypes
130  *============================================================================*/
131 
132 /*----------------------------------------------------------------------------*/
136 /*----------------------------------------------------------------------------*/
137 
138 void
140 
141 /*----------------------------------------------------------------------------*/
150 /*----------------------------------------------------------------------------*/
151 
152 cs_cdo_assembly_t *
153 cs_cdo_assembly_get(int t_id);
154 
155 /*----------------------------------------------------------------------------*/
165 /*----------------------------------------------------------------------------*/
166 
167 void
168 cs_cdo_assembly_init(int ddim,
169  int edim,
170  int n_cw_dofs);
171 
172 /*----------------------------------------------------------------------------*/
177 /*----------------------------------------------------------------------------*/
178 
179 void
181 
182 /*----------------------------------------------------------------------------*/
192 /*----------------------------------------------------------------------------*/
193 
194 void
195 cs_cdo_assembly_set_shift(cs_cdo_assembly_t *asb,
196  cs_lnum_t l_row_shift,
197  cs_lnum_t l_col_shift);
198 
199 /*----------------------------------------------------------------------------*/
211 /*----------------------------------------------------------------------------*/
212 
213 void
214 cs_cdo_assembly_matrix_scal_generic(const cs_sdm_t *m,
215  const cs_lnum_t *dof_ids,
216  const cs_range_set_t *rset,
217  cs_cdo_assembly_t *asb,
219 
220 /*----------------------------------------------------------------------------*/
232 /*----------------------------------------------------------------------------*/
233 
234 void
235 cs_cdo_assembly_matrix_e33_generic(const cs_sdm_t *m,
236  const cs_lnum_t *dof_ids,
237  const cs_range_set_t *rset,
238  cs_cdo_assembly_t *asb,
240 
241 #if defined(HAVE_MPI)
242 /*----------------------------------------------------------------------------*/
253 /*----------------------------------------------------------------------------*/
254 
255 void
256 cs_cdo_assembly_matrix_mpit(const cs_sdm_t *m,
257  const cs_lnum_t *dof_ids,
258  const cs_range_set_t *rset,
259  cs_cdo_assembly_t *asb,
261 
262 /*----------------------------------------------------------------------------*/
273 /*----------------------------------------------------------------------------*/
274 
275 void
276 cs_cdo_assembly_matrix_mpis(const cs_sdm_t *m,
277  const cs_lnum_t *dof_ids,
278  const cs_range_set_t *rset,
279  cs_cdo_assembly_t *asb,
281 #endif /* defined(HAVE_MPI) */
282 
283 /*----------------------------------------------------------------------------*/
294 /*----------------------------------------------------------------------------*/
295 
296 void
297 cs_cdo_assembly_matrix_seqt(const cs_sdm_t *m,
298  const cs_lnum_t *dof_ids,
299  const cs_range_set_t *rset,
300  cs_cdo_assembly_t *asb,
302 
303 /*----------------------------------------------------------------------------*/
315 /*----------------------------------------------------------------------------*/
316 
317 void
318 cs_cdo_assembly_matrix_seqs(const cs_sdm_t *m,
319  const cs_lnum_t *dof_ids,
320  const cs_range_set_t *rset,
321  cs_cdo_assembly_t *asb,
323 
324 /*----------------------------------------------------------------------------*/
337 /*----------------------------------------------------------------------------*/
338 
339 void
340 cs_cdo_assembly_matrix_sys_seqs(const cs_sdm_t *m,
341  const cs_lnum_t *dof_ids,
342  const cs_range_set_t *rset,
343  cs_cdo_assembly_t *asb,
345 
346 /*----------------------------------------------------------------------------*/
359 /*----------------------------------------------------------------------------*/
360 
361 void
362 cs_cdo_assembly_matrix_sys_seqt(const cs_sdm_t *m,
363  const cs_lnum_t *dof_ids,
364  const cs_range_set_t *rset,
365  cs_cdo_assembly_t *asb,
367 
368 #if defined(HAVE_MPI)
369 /*----------------------------------------------------------------------------*/
380 /*----------------------------------------------------------------------------*/
381 
382 void
383 cs_cdo_assembly_matrix_sys_mpis(const cs_sdm_t *m,
384  const cs_lnum_t *dof_ids,
385  const cs_range_set_t *rset,
386  cs_cdo_assembly_t *asb,
388 
389 /*----------------------------------------------------------------------------*/
400 /*----------------------------------------------------------------------------*/
401 
402 void
403 cs_cdo_assembly_matrix_sys_mpit(const cs_sdm_t *m,
404  const cs_lnum_t *dof_ids,
405  const cs_range_set_t *rset,
406  cs_cdo_assembly_t *asb,
408 #endif /* HAVE_MPI */
409 
410 /*----------------------------------------------------------------------------*/
422 /*----------------------------------------------------------------------------*/
423 
424 void
425 cs_cdo_assembly_eblock33_matrix_seqs(const cs_sdm_t *m,
426  const cs_lnum_t *dof_ids,
427  const cs_range_set_t *rset,
428  cs_cdo_assembly_t *asb,
430 
431 /*----------------------------------------------------------------------------*/
443 /*----------------------------------------------------------------------------*/
444 
445 void
446 cs_cdo_assembly_eblock33_matrix_seqt(const cs_sdm_t *m,
447  const cs_lnum_t *dof_ids,
448  const cs_range_set_t *rset,
449  cs_cdo_assembly_t *asb,
451 
452 #if defined(HAVE_MPI)
453 /*----------------------------------------------------------------------------*/
465 /*----------------------------------------------------------------------------*/
466 
467 void
468 cs_cdo_assembly_eblock33_matrix_mpis(const cs_sdm_t *m,
469  const cs_lnum_t *dof_ids,
470  const cs_range_set_t *rset,
471  cs_cdo_assembly_t *asb,
473 
474 /*----------------------------------------------------------------------------*/
486 /*----------------------------------------------------------------------------*/
487 
488 void
489 cs_cdo_assembly_eblock33_matrix_mpit(const cs_sdm_t *m,
490  const cs_lnum_t *dof_ids,
491  const cs_range_set_t *rset,
492  cs_cdo_assembly_t *asb,
494 #endif /* defined(HAVE_MPI) */
495 
496 /*----------------------------------------------------------------------------*/
508 /*----------------------------------------------------------------------------*/
509 
510 void
511 cs_cdo_assembly_block33_matrix_seqs(const cs_sdm_t *m,
512  const cs_lnum_t *dof_ids,
513  const cs_range_set_t *rset,
514  cs_cdo_assembly_t *asb,
516 
517 /*----------------------------------------------------------------------------*/
529 /*----------------------------------------------------------------------------*/
530 
531 void
532 cs_cdo_assembly_block33_matrix_seqt(const cs_sdm_t *m,
533  const cs_lnum_t *dof_ids,
534  const cs_range_set_t *rset,
535  cs_cdo_assembly_t *asb,
537 
538 #if defined(HAVE_MPI)
539 /*----------------------------------------------------------------------------*/
551 /*----------------------------------------------------------------------------*/
552 
553 void
554 cs_cdo_assembly_block33_matrix_mpis(const cs_sdm_t *m,
555  const cs_lnum_t *dof_ids,
556  const cs_range_set_t *rset,
557  cs_cdo_assembly_t *asb,
559 
560 /*----------------------------------------------------------------------------*/
572 /*----------------------------------------------------------------------------*/
573 
574 void
575 cs_cdo_assembly_block33_matrix_mpit(const cs_sdm_t *m,
576  const cs_lnum_t *dof_ids,
577  const cs_range_set_t *rset,
578  cs_cdo_assembly_t *asb,
580 #endif /* defined(HAVE_MPI) */
581 
582 /*----------------------------------------------------------------------------*/
594 /*----------------------------------------------------------------------------*/
595 
596 void
597 cs_cdo_assembly_eblock_matrix_seqs(const cs_sdm_t *m,
598  const cs_lnum_t *dof_ids,
599  const cs_range_set_t *rset,
600  cs_cdo_assembly_t *asb,
602 
603 /*----------------------------------------------------------------------------*/
615 /*----------------------------------------------------------------------------*/
616 
617 void
618 cs_cdo_assembly_eblock_matrix_seqt(const cs_sdm_t *m,
619  const cs_lnum_t *dof_ids,
620  const cs_range_set_t *rset,
621  cs_cdo_assembly_t *asb,
623 
624 #if defined(HAVE_MPI)
625 /*----------------------------------------------------------------------------*/
637 /*----------------------------------------------------------------------------*/
638 
639 void
640 cs_cdo_assembly_eblock_matrix_mpis(const cs_sdm_t *m,
641  const cs_lnum_t *dof_ids,
642  const cs_range_set_t *rset,
643  cs_cdo_assembly_t *asb,
645 
646 /*----------------------------------------------------------------------------*/
658 /*----------------------------------------------------------------------------*/
659 
660 void
661 cs_cdo_assembly_eblock_matrix_mpit(const cs_sdm_t *m,
662  const cs_lnum_t *dof_ids,
663  const cs_range_set_t *rset,
664  cs_cdo_assembly_t *asb,
666 #endif /* defined(HAVE_MPI) */
667 
668 /*----------------------------------------------------------------------------*/
669 
671 
672 #endif /* __CS_CDO_ASSEMBLY_H__ */
void cs_cdo_assembly_matrix_e33_generic(const cs_sdm_t *m, const cs_lnum_t *dof_ids, const cs_range_set_t *rset, cs_cdo_assembly_t *asb, cs_matrix_assembler_values_t *mav)
Assemble a cellwise matrix into the global matrix. Rely on the generic cs_matrix_assembler_values_add...
Definition: cs_cdo_assembly.c:1596
void cs_cdo_assembly_set_shift(cs_cdo_assembly_t *asb, cs_lnum_t l_row_shift, cs_lnum_t l_col_shift)
Set the current shift values to consider during the assembly stage.
Definition: cs_cdo_assembly.c:1382
void cs_cdo_assembly_setup_log(void)
Print information for the setup.log file.
Definition: cs_cdo_assembly.c:1282
void cs_cdo_assembly_matrix_seqs(const cs_sdm_t *m, const cs_lnum_t *dof_ids, const cs_range_set_t *rset, cs_cdo_assembly_t *asb, cs_matrix_assembler_values_t *mav)
Assemble a cellwise matrix into the global matrix Scalar-valued case. Sequential and without openMP (...
Definition: cs_cdo_assembly.c:1832
cs_cdo_assembly_t * cs_cdo_assembly_get(int t_id)
Get a pointer to a cs_cdo_assembly_t structure related to a given thread.
Definition: cs_cdo_assembly.c:1302
void cs_cdo_assembly_matrix_sys_seqt(const cs_sdm_t *m, const cs_lnum_t *dof_ids, const cs_range_set_t *rset, cs_cdo_assembly_t *asb, cs_matrix_assembler_values_t *mav)
Assemble a cellwise (no-block) matrix into the global matrix corresponding to a system of coupled equ...
Definition: cs_cdo_assembly.c:1971
void cs_cdo_assembly_matrix_sys_seqs(const cs_sdm_t *m, const cs_lnum_t *dof_ids, const cs_range_set_t *rset, cs_cdo_assembly_t *asb, cs_matrix_assembler_values_t *mav)
Assemble a cellwise (no-block) matrix into the global matrix corresponding to a system of coupled equ...
Definition: cs_cdo_assembly.c:1880
void cs_cdo_assembly_eblock33_matrix_seqt(const cs_sdm_t *m, const cs_lnum_t *dof_ids, const cs_range_set_t *rset, cs_cdo_assembly_t *asb, cs_matrix_assembler_values_t *mav)
Assemble a cellwise matrix into the global matrix. Case of a block 3x3 entries. Expand each row....
Definition: cs_cdo_assembly.c:2357
void cs_cdo_assembly_block33_matrix_seqt(const cs_sdm_t *m, const cs_lnum_t *dof_ids, const cs_range_set_t *rset, cs_cdo_assembly_t *asb, cs_matrix_assembler_values_t *mav)
Assemble a cellwise matrix into the global matrix. Case of a block 3x3 entries. Expand each row....
Definition: cs_cdo_assembly.c:2668
void cs_cdo_assembly_eblock_matrix_seqs(const cs_sdm_t *m, const cs_lnum_t *dof_ids, const cs_range_set_t *rset, cs_cdo_assembly_t *asb, cs_matrix_assembler_values_t *mav)
Assemble a cellwise matrix into the global matrix Case of a block NxN entries. Expand each row....
Definition: cs_cdo_assembly.c:2922
void cs_cdo_assembly_init(int ddim, int edim, int n_cw_dofs)
Allocate cs_cdo_assembly_t structure (shared among schemes). Each thread has its own copy this struct...
Definition: cs_cdo_assembly.c:1323
void cs_cdo_assembly_block33_matrix_seqs(const cs_sdm_t *m, const cs_lnum_t *dof_ids, const cs_range_set_t *rset, cs_cdo_assembly_t *asb, cs_matrix_assembler_values_t *mav)
Assemble a cellwise matrix into the global matrix. Case of a block 3x3 entries. Expand each row....
Definition: cs_cdo_assembly.c:2592
void cs_cdo_assembly_matrix_seqt(const cs_sdm_t *m, const cs_lnum_t *dof_ids, const cs_range_set_t *rset, cs_cdo_assembly_t *asb, cs_matrix_assembler_values_t *mav)
Assemble a cellwise matrix into the global matrix. Scalar-valued case. Sequential and with openMP thr...
Definition: cs_cdo_assembly.c:1780
void cs_cdo_assembly_eblock33_matrix_seqs(const cs_sdm_t *m, const cs_lnum_t *dof_ids, const cs_range_set_t *rset, cs_cdo_assembly_t *asb, cs_matrix_assembler_values_t *mav)
Assemble a cellwise matrix into the global matrix Case of a block 3x3 entries. Expand each row....
Definition: cs_cdo_assembly.c:2287
void() cs_cdo_assembly_func_t(const cs_sdm_t *m, const cs_lnum_t *dof_ids, const cs_range_set_t *rset, cs_cdo_assembly_t *eqa, cs_matrix_assembler_values_t *mav)
Assemble a cellwise matrix into the global matrix Block or no block versions are handled.
Definition: cs_cdo_assembly.h:78
void cs_cdo_assembly_eblock_matrix_seqt(const cs_sdm_t *m, const cs_lnum_t *dof_ids, const cs_range_set_t *rset, cs_cdo_assembly_t *asb, cs_matrix_assembler_values_t *mav)
Assemble a cellwise system into the global algebraic system. Case of a block NxN entries....
Definition: cs_cdo_assembly.c:3005
void cs_cdo_assembly_matrix_scal_generic(const cs_sdm_t *m, const cs_lnum_t *dof_ids, const cs_range_set_t *rset, cs_cdo_assembly_t *asb, cs_matrix_assembler_values_t *mav)
Assemble a cellwise matrix into the global matrix. Rely on the generic cs_matrix_assembler_values_add...
Definition: cs_cdo_assembly.c:1410
void cs_cdo_assembly_finalize(void)
Free matrix-related structures used during the simulation. Display overall statistic about the assemb...
Definition: cs_cdo_assembly.c:1359
#define BEGIN_C_DECLS
Definition: cs_defs.h:514
double cs_real_t
Floating-point value.
Definition: cs_defs.h:319
unsigned long cs_gnum_t
global mesh entity number
Definition: cs_defs.h:298
#define END_C_DECLS
Definition: cs_defs.h:515
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:313
struct _cs_matrix_assembler_values_t cs_matrix_assembler_values_t
Definition: cs_matrix_assembler.h:65
Definition: cs_cdo_assembly.h:109
cs_lnum_t l_col_shift
Definition: cs_cdo_assembly.h:121
cs_cdo_assembly_row_t * row
Definition: cs_cdo_assembly.h:124
int n_cw_dofs
Definition: cs_cdo_assembly.h:111
int ddim
Definition: cs_cdo_assembly.h:112
cs_lnum_t l_row_shift
Definition: cs_cdo_assembly.h:122
int edim
Definition: cs_cdo_assembly.h:114
Definition: cs_cdo_assembly.h:86
int n_cols
Definition: cs_cdo_assembly.h:96
const cs_real_t * val
Definition: cs_cdo_assembly.h:101
cs_lnum_t l_id
Definition: cs_cdo_assembly.h:91
cs_real_t * expval
Definition: cs_cdo_assembly.h:102
cs_gnum_t * col_g_id
Definition: cs_cdo_assembly.h:97
cs_gnum_t g_id
Definition: cs_cdo_assembly.h:90
int * col_idx
Definition: cs_cdo_assembly.h:98
int i
Definition: cs_cdo_assembly.h:92
Definition: cs_range_set.h:57