8.0
general documentation
Loading...
Searching...
No Matches
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
50
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
60
61typedef struct _cs_matrix_assembler_t cs_matrix_assembler_t;
62
64
65typedef struct _cs_matrix_assembler_values_t cs_matrix_assembler_values_t;
66
67/*----------------------------------------------------------------------------*/
81/*----------------------------------------------------------------------------*/
82
83typedef void
85 cs_lnum_t db_size,
86 cs_lnum_t eb_size);
87
88/*----------------------------------------------------------------------------*/
113/*----------------------------------------------------------------------------*/
114
115typedef 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
147typedef 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
168typedef void
170
171/*----------------------------------------------------------------------------*/
183/*----------------------------------------------------------------------------*/
184
185typedef void
187
188/*============================================================================
189 * Global variables
190 *============================================================================*/
191
192/*=============================================================================
193 * Public function prototypes
194 *============================================================================*/
195
196/*----------------------------------------------------------------------------*/
209/*----------------------------------------------------------------------------*/
210
212cs_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
250void
252
253/*----------------------------------------------------------------------------*/
264/*----------------------------------------------------------------------------*/
265
266void
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
284void
286
287/*----------------------------------------------------------------------------*/
319/*----------------------------------------------------------------------------*/
320
321void
323 int flags);
324
325/*----------------------------------------------------------------------------*/
336/*----------------------------------------------------------------------------*/
337
338int
340
341#if defined(HAVE_MPI)
342
343/*----------------------------------------------------------------------------*/
352/*----------------------------------------------------------------------------*/
353
354void
355cs_matrix_assembler_set_comm(cs_matrix_assembler_t *ma,
356 MPI_Comm comm);
357
358#endif /* HAVE_MPI */
359
360/*----------------------------------------------------------------------------*/
369/*----------------------------------------------------------------------------*/
370
371const cs_gnum_t *
373
374/*----------------------------------------------------------------------------*/
383/*----------------------------------------------------------------------------*/
384
385const cs_halo_t *
387
388/*----------------------------------------------------------------------------*/
397/*----------------------------------------------------------------------------*/
398
399bool
401
402/*----------------------------------------------------------------------------*/
410/*----------------------------------------------------------------------------*/
411
414
415/*----------------------------------------------------------------------------*/
423/*----------------------------------------------------------------------------*/
424
425cs_gnum_t
427
428/*----------------------------------------------------------------------------*/
436/*----------------------------------------------------------------------------*/
437
440
441/*----------------------------------------------------------------------------*/
457/*----------------------------------------------------------------------------*/
458
459const cs_lnum_t *
461
462/*----------------------------------------------------------------------------*/
480/*----------------------------------------------------------------------------*/
481
482const cs_lnum_t *
484
485/*----------------------------------------------------------------------------*/
499/*----------------------------------------------------------------------------*/
500
501void
503 int rc[4]);
504
505/*----------------------------------------------------------------------------*/
513/*----------------------------------------------------------------------------*/
514
515void
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
581void
583
584/*----------------------------------------------------------------------------*/
609/*----------------------------------------------------------------------------*/
610
611void
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
645void
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
672void
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
#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
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
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
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
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
struct _cs_matrix_assembler_t cs_matrix_assembler_t
Definition cs_matrix_assembler.h:61
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
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_end_t(void *matrix)
Function pointer to complete the final assembly of matrix coefficients.
Definition cs_matrix_assembler.h:186
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_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
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_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
void cs_matrix_assembler_values_done(cs_matrix_assembler_values_t *mav)
Start assembly of matrix values structure.
Definition cs_matrix_assembler.c:3543
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
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
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
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
void cs_matrix_assembler_destroy(cs_matrix_assembler_t **ma)
Destroy a matrix assembler structure.
Definition cs_matrix_assembler.c:2588
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
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_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 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