xref: /petsc/src/mat/impls/dense/mpi/mpidense.h (revision b31b2f82859ff8548562364efb89146f661bbcd9)
1a4963045SJacob Faibussowitsch #pragma once
28965ea79SLois Curfman McInnes 
3c6db04a5SJed Brown #include <../src/mat/impls/dense/seq/dense.h>
4637a0070SStefano Zampini #include <petscsf.h>
58965ea79SLois Curfman McInnes 
6da81f932SPierre Jolivet /*  Data structures for basic parallel dense matrix  */
7052cd425SLois Curfman McInnes 
84222ddf1SHong Zhang typedef struct {  /* used by MatMatMultxxx_MPIDense_MPIDense() */
9320f2790SHong Zhang   Mat Ae, Be, Ce; /* matrix in Elemental format */
10*cc1eb50dSBarry Smith } MatProductCtx_MatMultDense;
11320f2790SHong Zhang 
124222ddf1SHong Zhang typedef struct { /* used by MatTransposeMatMultXXX_MPIDense_MPIDense() */
13637a0070SStefano Zampini   PetscScalar *sendbuf;
14637a0070SStefano Zampini   Mat          atb;
15d5017740SHong Zhang   PetscMPIInt *recvcounts;
16cc48ffa7SToby Isaac   PetscMPIInt  tag;
17*cc1eb50dSBarry Smith } MatProductCtx_TransMatMultDense;
18baa3c1c6SHong Zhang 
194222ddf1SHong Zhang typedef struct { /* used by MatMatTransposeMultxxx_MPIDense_MPIDense() */
20cc48ffa7SToby Isaac   PetscScalar *buf[2];
21cc48ffa7SToby Isaac   PetscMPIInt  tag;
22faa55883SToby Isaac   PetscMPIInt *recvcounts;
23faa55883SToby Isaac   PetscMPIInt *recvdispls;
24faa55883SToby Isaac   PetscInt     alg; /* algorithm used */
25*cc1eb50dSBarry Smith } MatProductCtx_MatTransMultDense;
26cc48ffa7SToby Isaac 
275a576424SJed Brown PETSC_INTERN PetscErrorCode MatSetUpMultiply_MPIDense(Mat);
287dae84e0SHong Zhang PETSC_INTERN PetscErrorCode MatCreateSubMatrices_MPIDense(Mat, PetscInt, const IS[], const IS[], MatReuse, Mat *[]);
294222ddf1SHong Zhang PETSC_INTERN PetscErrorCode MatProductSetFromOptions_MPIAIJ_MPIDense(Mat);
30320f2790SHong Zhang 
314222ddf1SHong Zhang PETSC_INTERN PetscErrorCode MatProductSetFromOptions_MPIDense_MPIAIJ(Mat);
324222ddf1SHong Zhang 
335242a7b1SHong Zhang #if defined(PETSC_HAVE_ELEMENTAL)
344222ddf1SHong Zhang PETSC_INTERN PetscErrorCode MatMatMultSymbolic_Elemental(Mat, Mat, PetscReal, Mat);
354222ddf1SHong Zhang PETSC_INTERN PetscErrorCode MatMatMultNumeric_Elemental(Mat, Mat, Mat);
365242a7b1SHong Zhang #endif
374e29119aSPierre Jolivet PETSC_INTERN PetscErrorCode MatConvert_SeqDense_SeqAIJ(Mat A, MatType newtype, MatReuse reuse, Mat *newmat);
384742e46bSJacob Faibussowitsch 
394742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatShift_MPIDense(Mat, PetscScalar);
404742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatDenseGetColumnVecWrite_MPIDense(Mat, PetscInt, Vec *);
414742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatDenseGetColumnVecRead_MPIDense(Mat, PetscInt, Vec *);
424742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatDenseGetColumnVec_MPIDense(Mat, PetscInt, Vec *);
434742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatDenseRestoreColumnVecWrite_MPIDense(Mat, PetscInt, Vec *);
444742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatDenseRestoreColumnVecRead_MPIDense(Mat, PetscInt, Vec *);
454742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatDenseRestoreColumnVec_MPIDense(Mat, PetscInt, Vec *);
464742e46bSJacob Faibussowitsch 
474742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatCreate_MPIDense(Mat);
4814277c92SJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatGetDiagonal_MPIDense(Mat, Vec);
494742e46bSJacob Faibussowitsch 
504742e46bSJacob Faibussowitsch #if PetscDefined(HAVE_CUDA)
514742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatConvert_MPIDense_MPIDenseCUDA(Mat, MatType, MatReuse, Mat *);
524742e46bSJacob Faibussowitsch #endif
534742e46bSJacob Faibussowitsch 
544742e46bSJacob Faibussowitsch #if PetscDefined(HAVE_HIP)
554742e46bSJacob Faibussowitsch PETSC_INTERN PetscErrorCode MatConvert_MPIDense_MPIDenseHIP(Mat, MatType, MatReuse, Mat *);
564742e46bSJacob Faibussowitsch #endif
57