xref: /petsc/src/mat/impls/aij/seq/matmatmatmult.c (revision 7106359360f840f518d031a873bcccd37a949d71)
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