9.2
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-2026 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 "alge/cs_matrix.h"
36#include "base/cs_param_types.h"
37#include "base/cs_range_set.h"
38#include "cdo/cs_sdm.h"
39
40/*============================================================================
41 * Macro definitions
42 *============================================================================*/
43
44/* Size of the buffer used to collect global ids for rows and columns when
45 * assembling the values in the global matrix from the local cellwise matrices
46 */
47
48#define CS_CDO_ASSEMBLY_BUFSIZE 200
49
50/*============================================================================
51 * Type definitions
52 *============================================================================*/
53
54/*=============================================================================
55 * Local structure definitions
56 *============================================================================*/
57
58typedef struct _cs_cdo_assembly_t cs_cdo_assembly_t;
59
60/*----------------------------------------------------------------------------*/
71/*----------------------------------------------------------------------------*/
72
73typedef void
74(cs_cdo_assembly_func_t)(const cs_sdm_t *m,
75 const cs_lnum_t *dof_ids,
76 const cs_range_set_t *rset,
77 cs_cdo_assembly_t *eqa,
79
80/* Metadata for the assembly of a row */
81
82typedef struct {
83
84 /* Row numberings */
85
86 cs_gnum_t g_id; /* Global row numbering */
87 cs_lnum_t l_id; /* Local range set numbering */
88 int i; /* Cellwise system numbering */
89
90 /* Column-related members */
91
92 int n_cols; /* Number of columns (cellwise system) */
93 cs_gnum_t *col_g_id; /* Global numbering of columns */
94 int *col_idx; /* Array to build and to give as parameter
95 for *add_vals() functions */
96
97 const cs_real_t *val; /* Row values */
98 cs_real_t *expval; /* Expanded row values (when unrolling non
99 scalar-valued blocks) */
100
102
103/* Cell-wise structure used for the assembly of local systems */
104
106
107 int n_cw_dofs; /* Number of DoFs in a cell */
108 int ddim; /* Number of real values related to each diagonal
109 entry */
110 int edim; /* Number of real values related to each
111 extra-diagonal entry */
112
113 /* For matrices built by blocks (for instance in coupled systems with
114 scalar-valued blocks), one may need to shift the row and/or the column
115 local ids */
116
119
121
122};
123
124/*============================================================================
125 * Public function prototypes
126 *============================================================================*/
127
128/*----------------------------------------------------------------------------*/
132/*----------------------------------------------------------------------------*/
133
134void
136
137/*----------------------------------------------------------------------------*/
146/*----------------------------------------------------------------------------*/
147
148cs_cdo_assembly_t *
149cs_cdo_assembly_get(int t_id);
150
151/*----------------------------------------------------------------------------*/
161/*----------------------------------------------------------------------------*/
162
163void
164cs_cdo_assembly_init(int ddim,
165 int edim,
166 int n_cw_dofs);
167
168/*----------------------------------------------------------------------------*/
173/*----------------------------------------------------------------------------*/
174
175void
177
178/*----------------------------------------------------------------------------*/
188/*----------------------------------------------------------------------------*/
189
190void
191cs_cdo_assembly_set_shift(cs_cdo_assembly_t *asb,
192 cs_lnum_t l_row_shift,
193 cs_lnum_t l_col_shift);
194
195/*----------------------------------------------------------------------------*/
207/*----------------------------------------------------------------------------*/
208
209void
211 const cs_lnum_t *dof_ids,
212 const cs_range_set_t *rset,
213 cs_cdo_assembly_t *asb,
215
216/*----------------------------------------------------------------------------*/
228/*----------------------------------------------------------------------------*/
229
230void
231cs_cdo_assembly_matrix_e33_generic(const cs_sdm_t *m,
232 const cs_lnum_t *dof_ids,
233 const cs_range_set_t *rset,
234 cs_cdo_assembly_t *asb,
236
237#if defined(HAVE_MPI)
238/*----------------------------------------------------------------------------*/
249/*----------------------------------------------------------------------------*/
250
251void
252cs_cdo_assembly_matrix_mpit(const cs_sdm_t *m,
253 const cs_lnum_t *dof_ids,
254 const cs_range_set_t *rset,
255 cs_cdo_assembly_t *asb,
257
258/*----------------------------------------------------------------------------*/
269/*----------------------------------------------------------------------------*/
270
271void
272cs_cdo_assembly_matrix_mpis(const cs_sdm_t *m,
273 const cs_lnum_t *dof_ids,
274 const cs_range_set_t *rset,
275 cs_cdo_assembly_t *asb,
277#endif /* defined(HAVE_MPI) */
278
279/*----------------------------------------------------------------------------*/
290/*----------------------------------------------------------------------------*/
291
292void
293cs_cdo_assembly_matrix_seqt(const cs_sdm_t *m,
294 const cs_lnum_t *dof_ids,
295 const cs_range_set_t *rset,
296 cs_cdo_assembly_t *asb,
298
299/*----------------------------------------------------------------------------*/
311/*----------------------------------------------------------------------------*/
312
313void
314cs_cdo_assembly_matrix_seqs(const cs_sdm_t *m,
315 const cs_lnum_t *dof_ids,
316 const cs_range_set_t *rset,
317 cs_cdo_assembly_t *asb,
319
320/*----------------------------------------------------------------------------*/
333/*----------------------------------------------------------------------------*/
334
335void
336cs_cdo_assembly_matrix_sys_seqs(const cs_sdm_t *m,
337 const cs_lnum_t *dof_ids,
338 const cs_range_set_t *rset,
339 cs_cdo_assembly_t *asb,
341
342/*----------------------------------------------------------------------------*/
355/*----------------------------------------------------------------------------*/
356
357void
358cs_cdo_assembly_matrix_sys_seqt(const cs_sdm_t *m,
359 const cs_lnum_t *dof_ids,
360 const cs_range_set_t *rset,
361 cs_cdo_assembly_t *asb,
363
364#if defined(HAVE_MPI)
365/*----------------------------------------------------------------------------*/
376/*----------------------------------------------------------------------------*/
377
378void
379cs_cdo_assembly_matrix_sys_mpis(const cs_sdm_t *m,
380 const cs_lnum_t *dof_ids,
381 const cs_range_set_t *rset,
382 cs_cdo_assembly_t *asb,
384
385/*----------------------------------------------------------------------------*/
396/*----------------------------------------------------------------------------*/
397
398void
399cs_cdo_assembly_matrix_sys_mpit(const cs_sdm_t *m,
400 const cs_lnum_t *dof_ids,
401 const cs_range_set_t *rset,
402 cs_cdo_assembly_t *asb,
404#endif /* HAVE_MPI */
405
406/*----------------------------------------------------------------------------*/
418/*----------------------------------------------------------------------------*/
419
420void
422 const cs_lnum_t *dof_ids,
423 const cs_range_set_t *rset,
424 cs_cdo_assembly_t *asb,
426
427/*----------------------------------------------------------------------------*/
439/*----------------------------------------------------------------------------*/
440
441void
443 const cs_lnum_t *dof_ids,
444 const cs_range_set_t *rset,
445 cs_cdo_assembly_t *asb,
447
448#if defined(HAVE_MPI)
449/*----------------------------------------------------------------------------*/
461/*----------------------------------------------------------------------------*/
462
463void
465 const cs_lnum_t *dof_ids,
466 const cs_range_set_t *rset,
467 cs_cdo_assembly_t *asb,
469
470/*----------------------------------------------------------------------------*/
482/*----------------------------------------------------------------------------*/
483
484void
486 const cs_lnum_t *dof_ids,
487 const cs_range_set_t *rset,
488 cs_cdo_assembly_t *asb,
490#endif /* defined(HAVE_MPI) */
491
492/*----------------------------------------------------------------------------*/
504/*----------------------------------------------------------------------------*/
505
506void
508 const cs_lnum_t *dof_ids,
509 const cs_range_set_t *rset,
510 cs_cdo_assembly_t *asb,
512
513/*----------------------------------------------------------------------------*/
525/*----------------------------------------------------------------------------*/
526
527void
529 const cs_lnum_t *dof_ids,
530 const cs_range_set_t *rset,
531 cs_cdo_assembly_t *asb,
533
534#if defined(HAVE_MPI)
535/*----------------------------------------------------------------------------*/
547/*----------------------------------------------------------------------------*/
548
549void
551 const cs_lnum_t *dof_ids,
552 const cs_range_set_t *rset,
553 cs_cdo_assembly_t *asb,
555
556/*----------------------------------------------------------------------------*/
568/*----------------------------------------------------------------------------*/
569
570void
572 const cs_lnum_t *dof_ids,
573 const cs_range_set_t *rset,
574 cs_cdo_assembly_t *asb,
576#endif /* defined(HAVE_MPI) */
577
578/*----------------------------------------------------------------------------*/
590/*----------------------------------------------------------------------------*/
591
592void
593cs_cdo_assembly_eblock_matrix_seqs(const cs_sdm_t *m,
594 const cs_lnum_t *dof_ids,
595 const cs_range_set_t *rset,
596 cs_cdo_assembly_t *asb,
598
599/*----------------------------------------------------------------------------*/
611/*----------------------------------------------------------------------------*/
612
613void
614cs_cdo_assembly_eblock_matrix_seqt(const cs_sdm_t *m,
615 const cs_lnum_t *dof_ids,
616 const cs_range_set_t *rset,
617 cs_cdo_assembly_t *asb,
619
620#if defined(HAVE_MPI)
621/*----------------------------------------------------------------------------*/
633/*----------------------------------------------------------------------------*/
634
635void
636cs_cdo_assembly_eblock_matrix_mpis(const cs_sdm_t *m,
637 const cs_lnum_t *dof_ids,
638 const cs_range_set_t *rset,
639 cs_cdo_assembly_t *asb,
641
642/*----------------------------------------------------------------------------*/
654/*----------------------------------------------------------------------------*/
655
656void
657cs_cdo_assembly_eblock_matrix_mpit(const cs_sdm_t *m,
658 const cs_lnum_t *dof_ids,
659 const cs_range_set_t *rset,
660 cs_cdo_assembly_t *asb,
662#endif /* defined(HAVE_MPI) */
663
664#endif /* CS_CDO_ASSEMBLY_H */
void cs_cdo_assembly_matrix_mpis(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. Parallel without openMP threadi...
Definition: cs_cdo_assembly.cpp:1742
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.cpp:1327
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.cpp:1613
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.cpp:1404
void cs_cdo_assembly_matrix_sys_mpit(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 coupled matrix. Scalar-valued case. Parallel with openMP t...
Definition: cs_cdo_assembly.cpp:2192
void cs_cdo_assembly_matrix_sys_mpis(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 coupled matrix. Scalar-valued case. Parallel without openM...
Definition: cs_cdo_assembly.cpp:2075
void cs_cdo_assembly_block33_matrix_mpit(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.cpp:2853
void cs_cdo_assembly_setup_log(void)
Print information for the setup.log file.
Definition: cs_cdo_assembly.cpp:1307
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.cpp:1847
void cs_cdo_assembly_block33_matrix_mpis(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.cpp:2770
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.cpp:1987
void cs_cdo_assembly_eblock_matrix_mpis(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.cpp:3114
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.cpp:1894
void cs_cdo_assembly_matrix_mpit(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. Parallel and with openMP threa...
Definition: cs_cdo_assembly.cpp:1685
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.cpp:2377
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.cpp:2688
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.cpp:2942
void cs_cdo_assembly_eblock33_matrix_mpit(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.cpp:2529
void cs_cdo_assembly_eblock33_matrix_mpis(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.cpp:2453
void cs_cdo_assembly_eblock_matrix_mpit(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.cpp:3206
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.cpp:1348
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.cpp:2612
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.cpp:1795
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.cpp:2307
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:74
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.cpp:3025
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.cpp:1432
void cs_cdo_assembly_finalize(void)
Free matrix-related structures used during the simulation. Display overall statistic about the assemb...
Definition: cs_cdo_assembly.cpp:1381
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
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:325
struct _cs_matrix_assembler_values_t cs_matrix_assembler_values_t
Definition: cs_matrix_assembler.h:65
Definition: cs_cdo_assembly.h:105
cs_lnum_t l_col_shift
Definition: cs_cdo_assembly.h:117
cs_cdo_assembly_row_t * row
Definition: cs_cdo_assembly.h:120
int n_cw_dofs
Definition: cs_cdo_assembly.h:107
int ddim
Definition: cs_cdo_assembly.h:108
cs_lnum_t l_row_shift
Definition: cs_cdo_assembly.h:118
int edim
Definition: cs_cdo_assembly.h:110
Definition: cs_cdo_assembly.h:82
int n_cols
Definition: cs_cdo_assembly.h:92
const cs_real_t * val
Definition: cs_cdo_assembly.h:97
cs_lnum_t l_id
Definition: cs_cdo_assembly.h:87
cs_real_t * expval
Definition: cs_cdo_assembly.h:98
cs_gnum_t * col_g_id
Definition: cs_cdo_assembly.h:93
cs_gnum_t g_id
Definition: cs_cdo_assembly.h:86
int * col_idx
Definition: cs_cdo_assembly.h:94
int i
Definition: cs_cdo_assembly.h:88
Definition: cs_range_set.h:53