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