1*71063593SHong Zhang 2*71063593SHong Zhang /* 3*71063593SHong Zhang Defines matrix-matrix product routines for pairs of SeqAIJ matrices 4*71063593SHong Zhang D = A * B * C 5*71063593SHong Zhang */ 6*71063593SHong Zhang 7*71063593SHong Zhang #include <../src/mat/impls/aij/seq/aij.h> /*I "petscmat.h" I*/ 8*71063593SHong Zhang #include <../src/mat/utils/freespace.h> 9*71063593SHong Zhang #include <../src/mat/utils/petscheap.h> 10*71063593SHong Zhang #include <petscbt.h> 11*71063593SHong Zhang #include <../src/mat/impls/dense/seq/dense.h> /*I "petscmat.h" I*/ 12*71063593SHong Zhang 13*71063593SHong Zhang #undef __FUNCT__ 14*71063593SHong Zhang #define __FUNCT__ "MatMatMatMult_SeqAIJ_SeqAIJ_SeqAIJ" 15*71063593SHong Zhang PetscErrorCode MatMatMatMult_SeqAIJ_SeqAIJ_SeqAIJ(Mat A,Mat B,Mat C,MatReuse scall,PetscReal fill,Mat *D) 16*71063593SHong Zhang { 17*71063593SHong Zhang PetscErrorCode ierr; 18*71063593SHong Zhang 19*71063593SHong Zhang PetscFunctionBegin; 20*71063593SHong Zhang printf("MatMatMatMult_SeqAIJ_SeqAIJ_SeqAIJ...\n"); 21*71063593SHong Zhang /* 22*71063593SHong Zhang if (scall == MAT_INITIAL_MATRIX){ 23*71063593SHong Zhang ierr = PetscLogEventBegin(MAT_MatMultSymbolic,A,B,0,0);CHKERRQ(ierr); 24*71063593SHong Zhang ierr = MatMatMultSymbolic_SeqAIJ_SeqAIJ(A,B,fill,C);CHKERRQ(ierr); 25*71063593SHong Zhang ierr = PetscLogEventEnd(MAT_MatMultSymbolic,A,B,0,0);CHKERRQ(ierr); 26*71063593SHong Zhang } 27*71063593SHong Zhang ierr = PetscLogEventBegin(MAT_MatMultNumeric,A,B,0,0);CHKERRQ(ierr); 28*71063593SHong Zhang ierr = (*(*C)->ops->matmultnumeric)(A,B,*C);CHKERRQ(ierr); 29*71063593SHong Zhang ierr = PetscLogEventEnd(MAT_MatMultNumeric,A,B,0,0);CHKERRQ(ierr); 30*71063593SHong Zhang */ 31*71063593SHong Zhang PetscFunctionReturn(0); 32*71063593SHong Zhang } 33*71063593SHong Zhang 34*71063593SHong Zhang #undef __FUNCT__ 35*71063593SHong Zhang #define __FUNCT__ "MatMatMatMultSymbolic_SeqAIJ_SeqAIJ_SeqAIJ" 36*71063593SHong Zhang PetscErrorCode MatMatMatMultSymbolic_SeqAIJ_SeqAIJ_SeqAIJ(Mat A,Mat B,Mat C,PetscReal fill,Mat *D) 37*71063593SHong Zhang { 38*71063593SHong Zhang PetscErrorCode ierr; 39*71063593SHong Zhang Mat_SeqAIJ *a=(Mat_SeqAIJ*)A->data,*b=(Mat_SeqAIJ*)B->data,*c; 40*71063593SHong Zhang PetscInt *ai=a->i,*bi=b->i,*ci,*cj; 41*71063593SHong Zhang PetscInt am=A->rmap->N,bn=B->cmap->N,bm=B->rmap->N; 42*71063593SHong Zhang PetscReal afill; 43*71063593SHong Zhang PetscInt i,j,anzi,brow,bnzj,cnzi,*bj,*aj,nlnk_max,*lnk,ndouble=0; 44*71063593SHong Zhang PetscBT lnkbt; 45*71063593SHong Zhang PetscFreeSpaceList free_space=PETSC_NULL,current_space=PETSC_NULL; 46*71063593SHong Zhang 47*71063593SHong Zhang PetscFunctionBegin; 48*71063593SHong Zhang printf("MatMatMatMultSymbolic_SeqAIJ_SeqAIJ_SeqAIJ...\n"); 49*71063593SHong Zhang PetscFunctionReturn(0); 50*71063593SHong Zhang } 51*71063593SHong Zhang 52*71063593SHong Zhang #undef __FUNCT__ 53*71063593SHong Zhang #define __FUNCT__ "MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqAIJ" 54*71063593SHong Zhang PetscErrorCode MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqAIJ(Mat A,Mat B,Mat C,Mat D) 55*71063593SHong Zhang { 56*71063593SHong Zhang PetscErrorCode ierr; 57*71063593SHong Zhang 58*71063593SHong Zhang PetscFunctionBegin; 59*71063593SHong Zhang printf("MatMatMatMultNumeric_SeqAIJ_SeqAIJ_SeqAIJ...\n"); 60*71063593SHong Zhang PetscFunctionReturn(0); 61*71063593SHong Zhang } 62