xref: /petsc/src/mat/impls/dense/mpi/mpidense.h (revision b31b2f82859ff8548562364efb89146f661bbcd9)
1 #pragma once
2 
3 #include <../src/mat/impls/dense/seq/dense.h>
4 #include <petscsf.h>
5 
6 /*  Data structures for basic parallel dense matrix  */
7 
8 typedef struct {  /* used by MatMatMultxxx_MPIDense_MPIDense() */
9   Mat Ae, Be, Ce; /* matrix in Elemental format */
10 } MatProductCtx_MatMultDense;
11 
12 typedef struct { /* used by MatTransposeMatMultXXX_MPIDense_MPIDense() */
13   PetscScalar *sendbuf;
14   Mat          atb;
15   PetscMPIInt *recvcounts;
16   PetscMPIInt  tag;
17 } MatProductCtx_TransMatMultDense;
18 
19 typedef struct { /* used by MatMatTransposeMultxxx_MPIDense_MPIDense() */
20   PetscScalar *buf[2];
21   PetscMPIInt  tag;
22   PetscMPIInt *recvcounts;
23   PetscMPIInt *recvdispls;
24   PetscInt     alg; /* algorithm used */
25 } MatProductCtx_MatTransMultDense;
26 
27 PETSC_INTERN PetscErrorCode MatSetUpMultiply_MPIDense(Mat);
28 PETSC_INTERN PetscErrorCode MatCreateSubMatrices_MPIDense(Mat, PetscInt, const IS[], const IS[], MatReuse, Mat *[]);
29 PETSC_INTERN PetscErrorCode MatProductSetFromOptions_MPIAIJ_MPIDense(Mat);
30 
31 PETSC_INTERN PetscErrorCode MatProductSetFromOptions_MPIDense_MPIAIJ(Mat);
32 
33 #if defined(PETSC_HAVE_ELEMENTAL)
34 PETSC_INTERN PetscErrorCode MatMatMultSymbolic_Elemental(Mat, Mat, PetscReal, Mat);
35 PETSC_INTERN PetscErrorCode MatMatMultNumeric_Elemental(Mat, Mat, Mat);
36 #endif
37 PETSC_INTERN PetscErrorCode MatConvert_SeqDense_SeqAIJ(Mat A, MatType newtype, MatReuse reuse, Mat *newmat);
38 
39 PETSC_INTERN PetscErrorCode MatShift_MPIDense(Mat, PetscScalar);
40 PETSC_INTERN PetscErrorCode MatDenseGetColumnVecWrite_MPIDense(Mat, PetscInt, Vec *);
41 PETSC_INTERN PetscErrorCode MatDenseGetColumnVecRead_MPIDense(Mat, PetscInt, Vec *);
42 PETSC_INTERN PetscErrorCode MatDenseGetColumnVec_MPIDense(Mat, PetscInt, Vec *);
43 PETSC_INTERN PetscErrorCode MatDenseRestoreColumnVecWrite_MPIDense(Mat, PetscInt, Vec *);
44 PETSC_INTERN PetscErrorCode MatDenseRestoreColumnVecRead_MPIDense(Mat, PetscInt, Vec *);
45 PETSC_INTERN PetscErrorCode MatDenseRestoreColumnVec_MPIDense(Mat, PetscInt, Vec *);
46 
47 PETSC_INTERN PetscErrorCode MatCreate_MPIDense(Mat);
48 PETSC_INTERN PetscErrorCode MatGetDiagonal_MPIDense(Mat, Vec);
49 
50 #if PetscDefined(HAVE_CUDA)
51 PETSC_INTERN PetscErrorCode MatConvert_MPIDense_MPIDenseCUDA(Mat, MatType, MatReuse, Mat *);
52 #endif
53 
54 #if PetscDefined(HAVE_HIP)
55 PETSC_INTERN PetscErrorCode MatConvert_MPIDense_MPIDenseHIP(Mat, MatType, MatReuse, Mat *);
56 #endif
57