xref: /petsc/src/mat/tests/ex238.c (revision 9566063d113dddea24716c546802770db7481bc0)
16679dcc1SBarry Smith static char help[] = "Creates MatSeqBAIJ matrix of given BS for timing tests of MatMult().\n";
26679dcc1SBarry Smith 
36679dcc1SBarry Smith #include <petscmat.h>
46679dcc1SBarry Smith 
56679dcc1SBarry Smith int main(int argc,char **args)
66679dcc1SBarry Smith {
76679dcc1SBarry Smith   Mat            A;
86679dcc1SBarry Smith   Vec            x,y;
9760b957fSBarry Smith   PetscInt       m=50000,bs=12,i,j,k,l,row,col,M, its = 25;
106679dcc1SBarry Smith   PetscScalar    rval,*vals;
116679dcc1SBarry Smith   PetscRandom    rdm;
126679dcc1SBarry Smith 
13*9566063dSJacob Faibussowitsch   PetscCall(PetscInitialize(&argc,&args,(char*)0,help));
14*9566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetInt(NULL,NULL,"-mat_block_size",&bs,NULL));
15*9566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetInt(NULL,NULL,"-its",&its,NULL));
16*9566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetInt(NULL,NULL,"-mat_size",&m,NULL));
176679dcc1SBarry Smith   M    = m*bs;
18*9566063dSJacob Faibussowitsch   PetscCall(MatCreateSeqBAIJ(PETSC_COMM_SELF,bs,M,M,27,NULL,&A));
19*9566063dSJacob Faibussowitsch   PetscCall(MatSetOption(A,MAT_NEW_NONZERO_ALLOCATION_ERR,PETSC_TRUE));
206679dcc1SBarry Smith 
21*9566063dSJacob Faibussowitsch   PetscCall(PetscRandomCreate(PETSC_COMM_SELF,&rdm));
22*9566063dSJacob Faibussowitsch   PetscCall(PetscRandomSetFromOptions(rdm));
23*9566063dSJacob Faibussowitsch   PetscCall(VecCreateSeq(PETSC_COMM_SELF,M,&x));
24*9566063dSJacob Faibussowitsch   PetscCall(VecDuplicate(x,&y));
256679dcc1SBarry Smith 
26e269983cSBarry Smith   /* For each block row insert at most 27 blocks */
27*9566063dSJacob Faibussowitsch   PetscCall(PetscMalloc1(bs*bs,&vals));
286679dcc1SBarry Smith   for (i=0; i<m; i++) {
296679dcc1SBarry Smith     row = i;
306679dcc1SBarry Smith     for (j=0; j<27; j++) {
31*9566063dSJacob Faibussowitsch       PetscCall(PetscRandomGetValue(rdm,&rval));
326679dcc1SBarry Smith       col  = (PetscInt)(PetscRealPart(rval)*m);
336679dcc1SBarry Smith       for (k=0; k<bs; k++) {
346679dcc1SBarry Smith         for (l=0; l<bs; l++) {
35*9566063dSJacob Faibussowitsch           PetscCall(PetscRandomGetValue(rdm,&rval));
366679dcc1SBarry Smith           vals[k*bs + l] = rval;
376679dcc1SBarry Smith         }
386679dcc1SBarry Smith       }
39*9566063dSJacob Faibussowitsch       PetscCall(MatSetValuesBlocked(A,1,&row,1,&col,vals,INSERT_VALUES));
406679dcc1SBarry Smith     }
416679dcc1SBarry Smith   }
42*9566063dSJacob Faibussowitsch   PetscCall(MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY));
43*9566063dSJacob Faibussowitsch   PetscCall(MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY));
44*9566063dSJacob Faibussowitsch   PetscCall(PetscFree(vals));
456679dcc1SBarry Smith 
466679dcc1SBarry Smith   /* Time MatMult(), MatMultAdd() */
47760b957fSBarry Smith   for (i=0; i<its; i++) {
48*9566063dSJacob Faibussowitsch     PetscCall(VecSetRandom(x,rdm));
49*9566063dSJacob Faibussowitsch     PetscCall(MatMult(A,x,y));
50*9566063dSJacob Faibussowitsch     PetscCall(VecSetRandom(x,rdm));
51*9566063dSJacob Faibussowitsch     PetscCall(VecSetRandom(y,rdm));
52*9566063dSJacob Faibussowitsch     PetscCall(MatMultAdd(A,x,y,y));
536679dcc1SBarry Smith   }
546679dcc1SBarry Smith 
55*9566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&A));
56*9566063dSJacob Faibussowitsch   PetscCall(VecDestroy(&x));
57*9566063dSJacob Faibussowitsch   PetscCall(VecDestroy(&y));
58*9566063dSJacob Faibussowitsch   PetscCall(PetscRandomDestroy(&rdm));
59*9566063dSJacob Faibussowitsch   PetscCall(PetscFinalize());
60b122ec5aSJacob Faibussowitsch   return 0;
616679dcc1SBarry Smith }
626679dcc1SBarry Smith 
636679dcc1SBarry Smith /*TEST
646679dcc1SBarry Smith 
65cc384ab3SSatish Balay    testset:
66dfd57a17SPierre Jolivet      requires: defined(PETSC_USING_64BIT_PTR)
67cc384ab3SSatish Balay      output_file: output/ex238_1.out
68cc384ab3SSatish Balay      test:
69cc384ab3SSatish Balay        suffix: 1
70760b957fSBarry Smith        args: -mat_block_size 1 -mat_size 1000 -its 2
71cc384ab3SSatish Balay      test:
72cc384ab3SSatish Balay        suffix: 2
73760b957fSBarry Smith        args: -mat_block_size 2 -mat_size 1000 -its 2
74cc384ab3SSatish Balay      test:
75cc384ab3SSatish Balay        suffix: 4
76760b957fSBarry Smith        args: -mat_block_size 4 -mat_size 1000 -its 2
77cc384ab3SSatish Balay      test:
78cc384ab3SSatish Balay        suffix: 5
79760b957fSBarry Smith        args: -mat_block_size 5 -mat_size 1000 -its 2
80cc384ab3SSatish Balay      test:
81cc384ab3SSatish Balay        suffix: 6
82760b957fSBarry Smith        args: -mat_block_size 6 -mat_size 1000 -its 2
83cc384ab3SSatish Balay      test:
84cc384ab3SSatish Balay        suffix: 8
85760b957fSBarry Smith        args: -mat_block_size 8 -mat_size 1000 -its 2
86cc384ab3SSatish Balay      test:
87cc384ab3SSatish Balay        suffix: 12
88760b957fSBarry Smith        args: -mat_block_size 12 -mat_size 1000 -its 2
89cc384ab3SSatish Balay      test:
90cc384ab3SSatish Balay        suffix: 15
91760b957fSBarry Smith        args: -mat_block_size 15 -mat_size 1000 -its 2
926679dcc1SBarry Smith 
936679dcc1SBarry Smith TEST*/
94