1 2 static char help[] = "Tests various routines in MatMPIBAIJ format.\n"; 3 4 5 #include <petscmat.h> 6 7 int main(int argc,char **args) 8 { 9 Mat A; 10 PetscInt m=2,bs=1,M,row,col,start,end,i,j,k; 11 PetscErrorCode ierr; 12 PetscMPIInt rank,size; 13 PetscScalar data=100; 14 PetscBool flg; 15 16 ierr = PetscInitialize(&argc,&args,(char*)0,help);if (ierr) return ierr; 17 ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank);CHKERRQ(ierr); 18 ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size);CHKERRQ(ierr); 19 20 /* Test MatSetValues() and MatGetValues() */ 21 ierr = PetscOptionsGetInt(NULL,NULL,"-mat_block_size",&bs,NULL);CHKERRQ(ierr); 22 ierr = PetscOptionsGetInt(NULL,NULL,"-mat_size",&m,NULL);CHKERRQ(ierr); 23 24 M = m*bs*size; 25 ierr = MatCreateBAIJ(PETSC_COMM_WORLD,bs,PETSC_DECIDE,PETSC_DECIDE,M,M,PETSC_DECIDE,NULL,PETSC_DECIDE,NULL,&A);CHKERRQ(ierr); 26 27 ierr = MatGetOwnershipRange(A,&start,&end);CHKERRQ(ierr); 28 ierr = PetscOptionsHasName(NULL,NULL,"-column_oriented",&flg);CHKERRQ(ierr); 29 if (flg) { 30 ierr = MatSetOption(A,MAT_ROW_ORIENTED,PETSC_FALSE);CHKERRQ(ierr); 31 } 32 33 /* inproc assembly */ 34 for (row=start; row<end; row++) { 35 for (col=start; col<end; col++,data+=1) { 36 ierr = MatSetValues(A,1,&row,1,&col,&data,INSERT_VALUES);CHKERRQ(ierr); 37 } 38 } 39 ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 40 ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 41 42 /* offproc assembly */ 43 data = 5.0; 44 row = (M+start-1)%M; 45 for (col=0; col<M; col++) { 46 ierr = MatSetValues(A,1,&row,1,&col,&data,ADD_VALUES);CHKERRQ(ierr); 47 } 48 ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 49 ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 50 51 /* Test MatSetValuesBlocked() */ 52 ierr = PetscOptionsHasName(NULL,NULL,"-test_setvaluesblocked",&flg);CHKERRQ(ierr); 53 if (flg) { 54 PetscScalar *bval; 55 row /= bs; 56 col = start/bs; 57 ierr = PetscMalloc1(bs*bs,&bval);CHKERRQ(ierr); 58 k = 1; 59 /* row oriented - defalt */ 60 for (i=0; i<bs; i++) { 61 for (j=0; j<bs; j++) { 62 bval[i*bs+j] = (PetscScalar)k; k++; 63 } 64 } 65 ierr = MatSetValuesBlocked(A,1,&row,1,&col,bval,INSERT_VALUES);CHKERRQ(ierr); 66 ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 67 ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 68 ierr = PetscFree(bval);CHKERRQ(ierr); 69 } 70 71 ierr = MatView(A,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); 72 ierr = MatDestroy(&A);CHKERRQ(ierr); 73 ierr = PetscFinalize(); 74 return ierr; 75 } 76 77 78 79 /*TEST 80 81 test: 82 suffix: 1 83 nsize: 3 84 args: -mat_block_size 2 -test_setvaluesblocked 85 86 test: 87 suffix: 2 88 nsize: 3 89 args: -mat_block_size 2 -test_setvaluesblocked -column_oriented 90 91 test: 92 suffix: 3 93 nsize: 3 94 args: -mat_block_size 1 -test_setvaluesblocked 95 96 test: 97 suffix: 4 98 nsize: 3 99 args: -mat_block_size 1 -test_setvaluesblocked -column_oriented 100 101 TEST*/ 102 103