8.3
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-2024 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
62typedef struct _cs_cdo_assembly_t cs_cdo_assembly_t;
63
64/*----------------------------------------------------------------------------*/
75/*----------------------------------------------------------------------------*/
76
77typedef 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
86typedef 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
138void
140
141/*----------------------------------------------------------------------------*/
150/*----------------------------------------------------------------------------*/
151
152cs_cdo_assembly_t *
153cs_cdo_assembly_get(int t_id);
154
155/*----------------------------------------------------------------------------*/
165/*----------------------------------------------------------------------------*/
166
167void
168cs_cdo_assembly_init(int ddim,
169 int edim,
170 int n_cw_dofs);
171
172/*----------------------------------------------------------------------------*/
177/*----------------------------------------------------------------------------*/
178
179void
181
182/*----------------------------------------------------------------------------*/
192/*----------------------------------------------------------------------------*/
193
194void
195cs_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
213void
215 const cs_lnum_t *dof_ids,
216 const cs_range_set_t *rset,
217 cs_cdo_assembly_t *asb,
219
220/*----------------------------------------------------------------------------*/
232/*----------------------------------------------------------------------------*/
233
234void
235cs_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
255void
256cs_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
275void
276cs_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
296void
297cs_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
317void
318cs_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
339void
340cs_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
361void
362cs_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
382void
383cs_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
402void
403cs_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
424void
426 const cs_lnum_t *dof_ids,
427 const cs_range_set_t *rset,
428 cs_cdo_assembly_t *asb,
430
431/*----------------------------------------------------------------------------*/
443/*----------------------------------------------------------------------------*/
444
445void
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
467void
468cs_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
488void
489cs_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
510void
512 const cs_lnum_t *dof_ids,
513 const cs_range_set_t *rset,
514 cs_cdo_assembly_t *asb,
516
517/*----------------------------------------------------------------------------*/
529/*----------------------------------------------------------------------------*/
530
531void
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
553void
554cs_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
574void
575cs_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
596void
597cs_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
617void
618cs_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
639void
640cs_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
660void
661cs_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__ */
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:1341
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:1627
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:1418
void cs_cdo_assembly_setup_log(void)
Print information for the setup.log file.
Definition: cs_cdo_assembly.cpp:1321
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:1861
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:2001
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:1908
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:2391
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:2702
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:2956
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:1362
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:2626
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:1809
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:2321
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.cpp:3039
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:1446
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:1395
#define BEGIN_C_DECLS
Definition: cs_defs.h:542
double cs_real_t
Floating-point value.
Definition: cs_defs.h:342
uint64_t cs_gnum_t
global mesh entity number
Definition: cs_defs.h:325
#define END_C_DECLS
Definition: cs_defs.h:543
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:335
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