8.0
general documentation
cs_matrix_assembler.h
Go to the documentation of this file.
1 #ifndef __CS_MATRIX_ASSEMBLER_H__
2 #define __CS_MATRIX_ASSEMBLER_H__
3 
4 /*============================================================================
5  * Incremental or general construction of matrix.
6  *============================================================================*/
7 
8 /*
9  This file is part of code_saturne, a general-purpose CFD tool.
10 
11  Copyright (C) 1998-2023 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 "cs_defs.h"
35 
36 #include "cs_halo.h"
37 #include "cs_log.h"
38 
39 /*----------------------------------------------------------------------------*/
40 
42 
43 /*============================================================================
44  * Macro definitions
45  *============================================================================*/
46 
51 #define CS_MATRIX_DISTANT_ROW_USE_COL_IDX (1 << 0)
52 #define CS_MATRIX_DISTANT_ROW_USE_COL_G_ID (1 << 1)
53 #define CS_MATRIX_EXTERNAL_HALO (1 << 2)
54 
55 /*============================================================================
56  * Type definitions
57  *============================================================================*/
58 
61 typedef struct _cs_matrix_assembler_t cs_matrix_assembler_t;
62 
65 typedef struct _cs_matrix_assembler_values_t cs_matrix_assembler_values_t;
66 
67 /*----------------------------------------------------------------------------*/
81 /*----------------------------------------------------------------------------*/
82 
83 typedef void
85  cs_lnum_t db_size,
86  cs_lnum_t eb_size);
87 
88 /*----------------------------------------------------------------------------*/
113 /*----------------------------------------------------------------------------*/
114 
115 typedef void
117  cs_lnum_t n,
118  cs_lnum_t stride,
119  const cs_lnum_t row_id[],
120  const cs_lnum_t col_idx[],
121  const cs_real_t vals[]);
122 
123 /*----------------------------------------------------------------------------*/
145 /*----------------------------------------------------------------------------*/
146 
147 typedef void
149  cs_lnum_t n,
150  cs_lnum_t stride,
151  const cs_gnum_t row_g_id[],
152  const cs_gnum_t col_g_id[],
153  const cs_real_t vals[]);
154 
155 /*----------------------------------------------------------------------------*/
166 /*----------------------------------------------------------------------------*/
167 
168 typedef void
170 
171 /*----------------------------------------------------------------------------*/
183 /*----------------------------------------------------------------------------*/
184 
185 typedef void
187 
188 /*============================================================================
189  * Global variables
190  *============================================================================*/
191 
192 /*=============================================================================
193  * Public function prototypes
194  *============================================================================*/
195 
196 /*----------------------------------------------------------------------------*/
209 /*----------------------------------------------------------------------------*/
210 
212 cs_matrix_assembler_create(const cs_gnum_t l_range[2],
213  bool separate_diag);
214 
215 /*----------------------------------------------------------------------------*/
233 /*----------------------------------------------------------------------------*/
234 
237  bool separate_diag,
238  const cs_lnum_t row_idx[],
239  const cs_lnum_t col_id[],
240  const cs_halo_t *halo);
241 
242 /*----------------------------------------------------------------------------*/
248 /*----------------------------------------------------------------------------*/
249 
250 void
252 
253 /*----------------------------------------------------------------------------*/
264 /*----------------------------------------------------------------------------*/
265 
266 void
268  cs_lnum_t n,
269  const cs_gnum_t row_g_id[],
270  const cs_gnum_t col_g_id[]);
271 
272 /*----------------------------------------------------------------------------*/
282 /*----------------------------------------------------------------------------*/
283 
284 void
286 
287 /*----------------------------------------------------------------------------*/
319 /*----------------------------------------------------------------------------*/
320 
321 void
323  int flags);
324 
325 /*----------------------------------------------------------------------------*/
336 /*----------------------------------------------------------------------------*/
337 
338 int
340 
341 #if defined(HAVE_MPI)
342 
343 /*----------------------------------------------------------------------------*/
352 /*----------------------------------------------------------------------------*/
353 
354 void
355 cs_matrix_assembler_set_comm(cs_matrix_assembler_t *ma,
356  MPI_Comm comm);
357 
358 #endif /* HAVE_MPI */
359 
360 /*----------------------------------------------------------------------------*/
369 /*----------------------------------------------------------------------------*/
370 
371 const cs_gnum_t *
373 
374 /*----------------------------------------------------------------------------*/
383 /*----------------------------------------------------------------------------*/
384 
385 const cs_halo_t *
387 
388 /*----------------------------------------------------------------------------*/
397 /*----------------------------------------------------------------------------*/
398 
399 bool
401 
402 /*----------------------------------------------------------------------------*/
410 /*----------------------------------------------------------------------------*/
411 
412 cs_lnum_t
414 
415 /*----------------------------------------------------------------------------*/
423 /*----------------------------------------------------------------------------*/
424 
425 cs_gnum_t
427 
428 /*----------------------------------------------------------------------------*/
436 /*----------------------------------------------------------------------------*/
437 
438 cs_lnum_t
440 
441 /*----------------------------------------------------------------------------*/
457 /*----------------------------------------------------------------------------*/
458 
459 const cs_lnum_t *
461 
462 /*----------------------------------------------------------------------------*/
480 /*----------------------------------------------------------------------------*/
481 
482 const cs_lnum_t *
484 
485 /*----------------------------------------------------------------------------*/
499 /*----------------------------------------------------------------------------*/
500 
501 void
503  int rc[4]);
504 
505 /*----------------------------------------------------------------------------*/
513 /*----------------------------------------------------------------------------*/
514 
515 void
517  cs_log_t log_id,
518  const char *name);
519 
520 /*----------------------------------------------------------------------------*/
555 /*----------------------------------------------------------------------------*/
556 
559  bool sep_diag,
560  cs_lnum_t db_size,
561  cs_lnum_t eb_size,
562  void *matrix,
568 
569 /*----------------------------------------------------------------------------*/
579 /*----------------------------------------------------------------------------*/
580 
581 void
583 
584 /*----------------------------------------------------------------------------*/
609 /*----------------------------------------------------------------------------*/
610 
611 void
613  cs_lnum_t n,
614  const cs_lnum_t row_id[],
615  const cs_lnum_t col_id[],
616  const cs_real_t val[]);
617 
618 /*----------------------------------------------------------------------------*/
643 /*----------------------------------------------------------------------------*/
644 
645 void
647  cs_lnum_t n,
648  const cs_gnum_t row_g_id[],
649  const cs_gnum_t col_g_id[],
650  const cs_real_t val[]);
651 
652 /*----------------------------------------------------------------------------*/
670 /*----------------------------------------------------------------------------*/
671 
672 void
674 
675 /*----------------------------------------------------------------------------*/
676 
678 
679 #endif /* __CS_MATRIX_ASSEMBLER_H__ */
#define BEGIN_C_DECLS
Definition: cs_defs.h:509
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:510
int cs_lnum_t
local mesh entity id
Definition: cs_defs.h:313
cs_log_t
Definition: cs_log.h:48
void cs_matrix_assembler_log_rank_counts(const cs_matrix_assembler_t *ma, cs_log_t log_id, const char *name)
Log rank counts for a given matrix assembler.
Definition: cs_matrix_assembler.c:3009
void() cs_matrix_assembler_values_add_g_t(void *matrix, cs_lnum_t n, cs_lnum_t stride, const cs_gnum_t row_g_id[], const cs_gnum_t col_g_id[], const cs_real_t vals[])
Function pointer for addition to matrix coefficients using global row ids and column indexes.
Definition: cs_matrix_assembler.h:148
struct _cs_matrix_assembler_t cs_matrix_assembler_t
Definition: cs_matrix_assembler.h:61
void cs_matrix_assembler_values_add_g(cs_matrix_assembler_values_t *mav, cs_lnum_t n, const cs_gnum_t row_g_id[], const cs_gnum_t col_g_id[], const cs_real_t val[])
Add values to a matrix assembler values structure using global row and column ids.
Definition: cs_matrix_assembler.c:3309
void() cs_matrix_assembler_values_add_t(void *matrix, cs_lnum_t n, cs_lnum_t stride, const cs_lnum_t row_id[], const cs_lnum_t col_idx[], const cs_real_t vals[])
Function pointer for addition to matrix coefficients using local row ids and column indexes.
Definition: cs_matrix_assembler.h:116
const cs_gnum_t * cs_matrix_assembler_get_l_range(const cs_matrix_assembler_t *ma)
Return a pointer to local global row range associated with a matrix assembler.
Definition: cs_matrix_assembler.c:2823
bool cs_matrix_assembler_get_separate_diag(const cs_matrix_assembler_t *ma)
Indicate if the matrix assembler is based on a separate diagonal.
Definition: cs_matrix_assembler.c:2857
void cs_matrix_assembler_set_options(cs_matrix_assembler_t *ma, int flags)
Set option flags for a given matrix assembler structure.
Definition: cs_matrix_assembler.c:2661
void() cs_matrix_assembler_values_end_t(void *matrix)
Function pointer to complete the final assembly of matrix coefficients.
Definition: cs_matrix_assembler.h:186
const cs_lnum_t * cs_matrix_assembler_get_row_index(const cs_matrix_assembler_t *ma)
Return a row index associated with a matrix assembler.
Definition: cs_matrix_assembler.c:2933
void cs_matrix_assembler_compute(cs_matrix_assembler_t *ma)
Compute internal structures required by a matrix assembler.
Definition: cs_matrix_assembler.c:2767
cs_matrix_assembler_values_t * cs_matrix_assembler_values_create(const cs_matrix_assembler_t *ma, bool sep_diag, cs_lnum_t db_size, cs_lnum_t eb_size, void *matrix, cs_matrix_assembler_values_init_t *init, cs_matrix_assembler_values_add_t *add, cs_matrix_assembler_values_add_g_t *add_g, cs_matrix_assembler_values_begin_t *begin, cs_matrix_assembler_values_end_t *end)
Create and initialize a matrix assembler values structure.
Definition: cs_matrix_assembler.c:3082
cs_lnum_t cs_matrix_assembler_get_n_rows(const cs_matrix_assembler_t *ma)
Return the number of rows associated with a matrix assembler.
Definition: cs_matrix_assembler.c:2873
void cs_matrix_assembler_values_done(cs_matrix_assembler_values_t *mav)
Start assembly of matrix values structure.
Definition: cs_matrix_assembler.c:3543
const cs_lnum_t * cs_matrix_assembler_get_col_ids(const cs_matrix_assembler_t *ma)
Return a column ids associated with a matrix assembler.
Definition: cs_matrix_assembler.c:2959
cs_lnum_t cs_matrix_assembler_get_n_columns(const cs_matrix_assembler_t *ma)
Return the number of columns associated with a matrix assembler.
Definition: cs_matrix_assembler.c:2905
int cs_matrix_assembler_get_options(const cs_matrix_assembler_t *ma)
Return the option flags for a given matrix assembler structure.
Definition: cs_matrix_assembler.c:2687
cs_matrix_assembler_t * cs_matrix_assembler_create(const cs_gnum_t l_range[2], bool separate_diag)
Create a matrix assembler structure.
Definition: cs_matrix_assembler.c:2399
cs_gnum_t cs_matrix_assembler_get_n_g_rows(const cs_matrix_assembler_t *ma)
Return the global number of rows associated with a matrix assembler.
Definition: cs_matrix_assembler.c:2889
void cs_matrix_assembler_get_rank_counts(const cs_matrix_assembler_t *ma, int rc[4])
Return info on the number of neighbor ranks a matrix assembler may communicate with.
Definition: cs_matrix_assembler.c:2981
const cs_halo_t * cs_matrix_assembler_get_halo(const cs_matrix_assembler_t *ma)
Return a pointer to the halo structure associated with a matrix assembler.
Definition: cs_matrix_assembler.c:2840
void cs_matrix_assembler_destroy(cs_matrix_assembler_t **ma)
Destroy a matrix assembler structure.
Definition: cs_matrix_assembler.c:2588
cs_matrix_assembler_t * cs_matrix_assembler_create_from_shared(cs_lnum_t n_rows, bool separate_diag, const cs_lnum_t row_idx[], const cs_lnum_t col_id[], const cs_halo_t *halo)
Create a matrix assembler structure based on a given connectivity and associated halo structure.
Definition: cs_matrix_assembler.c:2486
void cs_matrix_assembler_values_finalize(cs_matrix_assembler_values_t **mav)
Finalize matrix assembler values structure.
Definition: cs_matrix_assembler.c:3152
struct _cs_matrix_assembler_values_t cs_matrix_assembler_values_t
Definition: cs_matrix_assembler.h:65
void cs_matrix_assembler_add_g_ids(cs_matrix_assembler_t *ma, cs_lnum_t n, const cs_gnum_t row_g_id[], const cs_gnum_t col_g_id[])
Add entries to a matrix assembler structure.
Definition: cs_matrix_assembler.c:2706
void cs_matrix_assembler_values_add(cs_matrix_assembler_values_t *mav, cs_lnum_t n, const cs_lnum_t row_id[], const cs_lnum_t col_id[], const cs_real_t val[])
Add values to a matrix assembler values structure using local row and column ids.
Definition: cs_matrix_assembler.c:3199
void() cs_matrix_assembler_values_init_t(void *matrix, cs_lnum_t db_size, cs_lnum_t eb_size)
Function pointer for initialization of matrix coefficients using local row ids and column indexes.
Definition: cs_matrix_assembler.h:84
void() cs_matrix_assembler_values_begin_t(void *matrix)
Function pointer to start the final assembly of matrix coefficients.
Definition: cs_matrix_assembler.h:169
void matrix(const int *iconvp, const int *idiffp, const int *ndircp, const int *isym, const cs_real_t *thetap, const int *imucpp, const cs_real_t coefbp[], const cs_real_t cofbfp[], const cs_real_t rovsdt[], const cs_real_t i_massflux[], const cs_real_t b_massflux[], const cs_real_t i_visc[], const cs_real_t b_visc[], const cs_real_t xcpp[], cs_real_t da[], cs_real_t xa[])
Definition: cs_matrix_building.c:111
Definition: cs_halo.h:77