PaStiX Handbook 6.4.0
Loading...
Searching...
No Matches
bvec.h
Go to the documentation of this file.
1/**
2 *
3 * @file bvec.h
4 *
5 * @copyright 2004-2024 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
6 * Univ. Bordeaux. All rights reserved.
7 *
8 * @version 6.4.0
9 * @author Mathieu Faverge
10 * @author Pierre Ramet
11 * @author Xavier Lacoste
12 * @author Vincent Bridonneau
13 * @author Alycia Lisito
14 * @date 2024-07-05
15 *
16 * @addtogroup bcsc
17 * @{
18 *
19 **/
20#ifndef _bvec_h_
21#define _bvec_h_
22
23#include <stdlib.h>
24
25/**
26 * @brief Tags used in MPI communications.
27 */
28typedef enum bvec_tag_ {
29 PastixTagAmount,
30 PastixTagIndexes,
31 PastixTagValues,
33
34/**
35 * @brief Information about the amount of data exchanged to permute the pivots.
36 */
37typedef struct bvec_data_amount_s
38{
39 /* WARNING: the two counters must remain at the head of the structure to exchange
40 the volume of the communications between the processes. */
41 pastix_int_t idxcnt; /**< Amount of indexes of b or x which will be exchanged. */
42 pastix_int_t valcnt; /**< Amount of values of b or x which will be exchanged. */
44
45/**
46 * @brief Informations of the data exchanged with other processes.
47 */
48typedef struct bvec_proc_comm_s
49{
50 bvec_data_amount_t nsends; /**< Number of indexes and values to send to clustnum. */
51 bvec_data_amount_t nrecvs; /**< Number of indexes and values to receive from clustnum. */
52 pastix_int_t *send_idxbuf; /**< Array of indexes of b or x to exchange. */
53 void *send_valbuf; /**< Array of values of b or x to exchange. */
54 /* The indexes and values array are sorted the following way: */
55 /* k is incremented -> k += dofk * j. */
56 /* indexes[k] = i. */
57 /* array[k] -> corresponds to (i, 0). */
58 /* array[k + dofk * j] -> corresponds to (i, j). */
59 /* array[k + h + dofk * j] -> corresponds to (i + h, j). */
61
62/**
63 * @brief Structure to manage communications with distributed rhs.
64 */
65typedef struct bvec_handle_comm_s
66{
67 pastix_int_t clustnbr; /**< Number of processes in the communicator. */
68 pastix_int_t clustnum; /**< ID of the current process in the communicator. */
69 PASTIX_Comm comm; /**< PaStiX MPI communicator used for the ordering step. */
70 pastix_coeftype_t flttype; /**< valtab datatype: PastixFloat, PastixDouble, PastixComplex32 or PastixComplex64 */
71 pastix_int_t max_idx; /**< Maximum amount of indexes received, used to allocate the receiving buffer. */
72 pastix_int_t max_val; /**< Maximum amount of values received, used to allocate the receiving buffer. */
73 bvec_proc_comm_t data_comm[1]; /**< Array of size clustnbr. */
74 /* data_comm[c]: contains the data clustnum has to send to c in */
75 /* the distributed case and the amount of data */
76 /* clustnum will receive from c. */
77 /* data_comm[clustnum]: contains the data clustnum will send */
78 /* to the other processors in the replicated */
79 /* case and is NULL in the distributed case. */
81
82void *bvec_malloc( size_t size );
83void bvec_free( void *x );
84
85#if defined( PASTIX_WITH_MPI )
86int bvec_handle_comm_init( const pastix_data_t *pastix_data,
87 pastix_rhs_t Pb );
88int bvec_handle_comm_exit( bvec_handle_comm_t *rhs_comm );
89
90pastix_int_t bvec_glob2Ploc( const pastix_data_t *pastix_data,
91 pastix_int_t ig );
92pastix_int_t bvec_Pglob2loc( const pastix_data_t *pastix_data,
93 const pastix_int_t *glob2loc,
94 pastix_int_t igp );
95int bvec_compute_Ploc2Pglob( pastix_data_t *pastix_data,
96 pastix_rhs_t Pb );
97
98int bvec_exchange_amount_rep( bvec_handle_comm_t *rhs_comm );
99int bvec_exchange_amount_dst( pastix_data_t *pastix_data,
100 pastix_dir_t dir,
101 pastix_int_t m,
102 pastix_int_t nrhs,
103 pastix_rhs_t Pb );
104#endif
105
106#endif /* _bvec_h_ */
107/**
108 * @}
109 */
BEGIN_C_DECLS typedef int pastix_int_t
Definition datatypes.h:51
pastix_int_t max_idx
Definition bvec.h:71
pastix_int_t valcnt
Definition bvec.h:42
pastix_int_t max_val
Definition bvec.h:72
pastix_int_t idxcnt
Definition bvec.h:41
pastix_int_t * send_idxbuf
Definition bvec.h:52
bvec_data_amount_t nrecvs
Definition bvec.h:51
bvec_data_amount_t nsends
Definition bvec.h:50
pastix_int_t clustnbr
Definition bvec.h:67
void * send_valbuf
Definition bvec.h:53
pastix_int_t clustnum
Definition bvec.h:68
PASTIX_Comm comm
Definition bvec.h:69
pastix_coeftype_t flttype
Definition bvec.h:70
bvec_proc_comm_t data_comm[1]
Definition bvec.h:73
void bvec_free(void *x)
Free a vector.
Definition bvec.c:62
struct bvec_proc_comm_s bvec_proc_comm_t
Informations of the data exchanged with other processes.
enum bvec_tag_ bvec_tag_e
Tags used in MPI communications.
void * bvec_malloc(size_t size)
Allocate a vector.
Definition bvec.c:42
struct bvec_handle_comm_s bvec_handle_comm_t
Structure to manage communications with distributed rhs.
struct bvec_data_amount_s bvec_data_amount_t
Information about the amount of data exchanged to permute the pivots.
bvec_tag_
Tags used in MPI communications.
Definition bvec.h:28
Information about the amount of data exchanged to permute the pivots.
Definition bvec.h:38
Structure to manage communications with distributed rhs.
Definition bvec.h:66
Informations of the data exchanged with other processes.
Definition bvec.h:49
spm_coeftype_t pastix_coeftype_t
Arithmetic types.
Definition api.h:294
enum pastix_dir_e pastix_dir_t
Direction.
Main PaStiX data structure.
Definition pastixdata.h:68
Main PaStiX RHS structure.
Definition pastixdata.h:155