1 2 static char help[] = "Test MatAXPY and SUBSET_NONZERO_PATTERN [-different] [-skip]\n by default subset pattern is used \n\n"; 3 4 /* A test contributed by Jose E. Roman, Oct. 2014 */ 5 6 #include <petscmat.h> 7 8 int main(int argc,char **args) 9 { 10 PetscErrorCode ierr; 11 Mat A,B,C; 12 PetscBool different=PETSC_FALSE,skip=PETSC_FALSE; 13 PetscInt m0,m1,n=128,i; 14 15 ierr = PetscInitialize(&argc,&args,(char*)0,help);if (ierr) return ierr; 16 ierr = PetscOptionsGetBool(NULL,NULL,"-different",&different,NULL);CHKERRQ(ierr); 17 ierr = PetscOptionsGetBool(NULL,NULL,"-skip",&skip,NULL);CHKERRQ(ierr); 18 /* 19 Create matrices 20 A = tridiag(1,-2,1) and B = diag(7); 21 */ 22 ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr); 23 ierr = MatCreate(PETSC_COMM_WORLD,&B);CHKERRQ(ierr); 24 ierr = MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,n,n);CHKERRQ(ierr); 25 ierr = MatSetSizes(B,PETSC_DECIDE,PETSC_DECIDE,n,n);CHKERRQ(ierr); 26 ierr = MatSetFromOptions(A);CHKERRQ(ierr); 27 ierr = MatSetFromOptions(B);CHKERRQ(ierr); 28 ierr = MatSetUp(A);CHKERRQ(ierr); 29 ierr = MatSetUp(B);CHKERRQ(ierr); 30 ierr = MatGetOwnershipRange(A,&m0,&m1);CHKERRQ(ierr); 31 for (i=m0;i<m1;i++) { 32 if (i>0) { ierr = MatSetValue(A,i,i-1,-1.0,INSERT_VALUES);CHKERRQ(ierr); } 33 if (i<n-1) { ierr = MatSetValue(A,i,i+1,-1.0,INSERT_VALUES);CHKERRQ(ierr); } 34 ierr = MatSetValue(A,i,i,2.0,INSERT_VALUES);CHKERRQ(ierr); 35 ierr = MatSetValue(B,i,i,7.0,INSERT_VALUES);CHKERRQ(ierr); 36 } 37 ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 38 ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 39 ierr = MatAssemblyBegin(B,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 40 ierr = MatAssemblyEnd(B,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 41 42 ierr = MatDuplicate(A,MAT_COPY_VALUES,&C);CHKERRQ(ierr); 43 /* Add B */ 44 ierr = MatAXPY(C,1.0,B,(different)?DIFFERENT_NONZERO_PATTERN:SUBSET_NONZERO_PATTERN);CHKERRQ(ierr); 45 /* Add A */ 46 if (!skip) { ierr = MatAXPY(C,1.0,A,SUBSET_NONZERO_PATTERN);CHKERRQ(ierr); } 47 48 /* 49 Free memory 50 */ 51 ierr = MatDestroy(&A);CHKERRQ(ierr); 52 ierr = MatDestroy(&B);CHKERRQ(ierr); 53 ierr = MatDestroy(&C);CHKERRQ(ierr); 54 ierr = PetscFinalize(); 55 return ierr; 56 } 57 58 59 /*TEST 60 61 test: 62 nsize: 4 63 output_file: output/ex172.out 64 65 test: 66 suffix: 2 67 nsize: 4 68 args: -different 69 output_file: output/ex172.out 70 71 test: 72 suffix: 3 73 nsize: 4 74 args: -skip 75 output_file: output/ex172.out 76 77 test: 78 suffix: 4 79 nsize: 4 80 args: -different -skip 81 output_file: output/ex172.out 82 83 test: 84 suffix: baij 85 args: -mat_type baij> ex172.tmp 2>&1 86 output_file: output/ex172.out 87 88 test: 89 suffix: mpibaij 90 nsize: 4 91 args: -mat_type baij> ex172.tmp 2>&1 92 output_file: output/ex172.out 93 94 test: 95 suffix: mpisbaij 96 nsize: 4 97 args: -mat_type sbaij> ex172.tmp 2>&1 98 output_file: output/ex172.out 99 100 test: 101 suffix: sbaij 102 args: -mat_type sbaij> ex172.tmp 2>&1 103 output_file: output/ex172.out 104 105 TEST*/ 106