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*b122ec5aSJacob Faibussowitsch CHKERRQ(PetscInitialize(&argc,&args,(char*)0,help)); 145f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsGetInt(NULL,NULL,"-mat_block_size",&bs,NULL)); 155f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsGetInt(NULL,NULL,"-its",&its,NULL)); 165f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsGetInt(NULL,NULL,"-mat_size",&m,NULL)); 176679dcc1SBarry Smith M = m*bs; 185f80ce2aSJacob Faibussowitsch CHKERRQ(MatCreateSeqBAIJ(PETSC_COMM_SELF,bs,M,M,27,NULL,&A)); 195f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetOption(A,MAT_NEW_NONZERO_ALLOCATION_ERR,PETSC_TRUE)); 206679dcc1SBarry Smith 215f80ce2aSJacob Faibussowitsch CHKERRQ(PetscRandomCreate(PETSC_COMM_SELF,&rdm)); 225f80ce2aSJacob Faibussowitsch CHKERRQ(PetscRandomSetFromOptions(rdm)); 235f80ce2aSJacob Faibussowitsch CHKERRQ(VecCreateSeq(PETSC_COMM_SELF,M,&x)); 245f80ce2aSJacob Faibussowitsch CHKERRQ(VecDuplicate(x,&y)); 256679dcc1SBarry Smith 26e269983cSBarry Smith /* For each block row insert at most 27 blocks */ 275f80ce2aSJacob Faibussowitsch CHKERRQ(PetscMalloc1(bs*bs,&vals)); 286679dcc1SBarry Smith for (i=0; i<m; i++) { 296679dcc1SBarry Smith row = i; 306679dcc1SBarry Smith for (j=0; j<27; j++) { 315f80ce2aSJacob Faibussowitsch CHKERRQ(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++) { 355f80ce2aSJacob Faibussowitsch CHKERRQ(PetscRandomGetValue(rdm,&rval)); 366679dcc1SBarry Smith vals[k*bs + l] = rval; 376679dcc1SBarry Smith } 386679dcc1SBarry Smith } 395f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetValuesBlocked(A,1,&row,1,&col,vals,INSERT_VALUES)); 406679dcc1SBarry Smith } 416679dcc1SBarry Smith } 425f80ce2aSJacob Faibussowitsch CHKERRQ(MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY)); 435f80ce2aSJacob Faibussowitsch CHKERRQ(MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY)); 445f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFree(vals)); 456679dcc1SBarry Smith 466679dcc1SBarry Smith /* Time MatMult(), MatMultAdd() */ 47760b957fSBarry Smith for (i=0; i<its; i++) { 485f80ce2aSJacob Faibussowitsch CHKERRQ(VecSetRandom(x,rdm)); 495f80ce2aSJacob Faibussowitsch CHKERRQ(MatMult(A,x,y)); 505f80ce2aSJacob Faibussowitsch CHKERRQ(VecSetRandom(x,rdm)); 515f80ce2aSJacob Faibussowitsch CHKERRQ(VecSetRandom(y,rdm)); 525f80ce2aSJacob Faibussowitsch CHKERRQ(MatMultAdd(A,x,y,y)); 536679dcc1SBarry Smith } 546679dcc1SBarry Smith 555f80ce2aSJacob Faibussowitsch CHKERRQ(MatDestroy(&A)); 565f80ce2aSJacob Faibussowitsch CHKERRQ(VecDestroy(&x)); 575f80ce2aSJacob Faibussowitsch CHKERRQ(VecDestroy(&y)); 585f80ce2aSJacob Faibussowitsch CHKERRQ(PetscRandomDestroy(&rdm)); 59*b122ec5aSJacob Faibussowitsch CHKERRQ(PetscFinalize()); 60*b122ec5aSJacob 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