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