1c4762a1bSJed Brown 2c4762a1bSJed Brown static char help[] = "Tests MatGetRowMax(), MatGetRowMin(), MatGetRowMaxAbs()\n"; 3c4762a1bSJed Brown 4c4762a1bSJed Brown #include <petscmat.h> 5c4762a1bSJed Brown 6c4762a1bSJed Brown #define M 5 7c4762a1bSJed Brown #define N 6 8c4762a1bSJed Brown 9c4762a1bSJed Brown int main(int argc,char **args) 10c4762a1bSJed Brown { 11c4762a1bSJed Brown Mat A; 12fa213d2fSHong Zhang Vec min,max,maxabs,e; 134e879edeSHong Zhang PetscInt m,n,j,imin[M],imax[M],imaxabs[M],indices[N],row,testcase=0; 14c4762a1bSJed Brown PetscScalar values[N]; 15c4762a1bSJed Brown PetscErrorCode ierr; 161a254869SHong Zhang PetscMPIInt size,rank; 17fa213d2fSHong Zhang PetscReal enorm; 18c4762a1bSJed Brown 19c4762a1bSJed Brown ierr = PetscInitialize(&argc,&args,(char*)0,help);if (ierr) return ierr; 20*5f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); 21*5f80ce2aSJacob Faibussowitsch CHKERRMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 22*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscOptionsGetInt(NULL,NULL,"-testcase",&testcase,NULL)); 23c4762a1bSJed Brown 24*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatCreate(PETSC_COMM_WORLD,&A)); 251a254869SHong Zhang if (testcase == 1) { /* proc[0] holds entire A and other processes have no entry */ 26dd400576SPatrick Sanan if (rank == 0) { 27*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetSizes(A,M,N,PETSC_DECIDE,PETSC_DECIDE)); 281a254869SHong Zhang } else { 29*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetSizes(A,0,0,PETSC_DECIDE,PETSC_DECIDE)); 301a254869SHong Zhang } 311a254869SHong Zhang testcase = 0; 321a254869SHong Zhang } else { 33*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,M,N)); 341a254869SHong Zhang } 35*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetFromOptions(A)); 36*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetUp(A)); 371a254869SHong Zhang 38dd400576SPatrick Sanan if (rank == 0) { /* proc[0] sets matrix A */ 391a254869SHong Zhang for (j=0; j<N; j++) indices[j] = j; 401a254869SHong Zhang switch (testcase) { 411a254869SHong Zhang case 1: /* see testcast 0 */ 421a254869SHong Zhang break; 431a254869SHong Zhang case 2: 44c4762a1bSJed Brown row = 0; 45f07e67edSHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; values[3] = -4.0; values[4] = 1.0; values[5] = 1.0; 46*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetValues(A,1,&row,N,indices,values,INSERT_VALUES)); 471a254869SHong Zhang row = 2; 481a254869SHong Zhang indices[0] = 0; indices[1] = 3; indices[2] = 5; 491a254869SHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; 50*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetValues(A,1,&row,3,indices,values,INSERT_VALUES)); 511a254869SHong Zhang row = 3; 521a254869SHong Zhang indices[0] = 0; indices[1] = 1; indices[2] = 4; 531a254869SHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; 54*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetValues(A,1,&row,3,indices,values,INSERT_VALUES)); 55c4762a1bSJed Brown row = 4; 561a254869SHong Zhang indices[0] = 0; indices[1] = 1; indices[2] = 2; 571a254869SHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; 58*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetValues(A,1,&row,3,indices,values,INSERT_VALUES)); 591a254869SHong Zhang break; 601a254869SHong Zhang case 3: 611a254869SHong Zhang row = 0; 621a254869SHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; 63*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetValues(A,1,&row,3,indices+1,values,INSERT_VALUES)); 641a254869SHong Zhang row = 1; 651a254869SHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; 66*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetValues(A,1,&row,3,indices,values,INSERT_VALUES)); 671a254869SHong Zhang row = 2; 681a254869SHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; 69*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetValues(A,1,&row,3,indices,values,INSERT_VALUES)); 701a254869SHong Zhang row = 3; 711a254869SHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; values[3] = -1.0; 72*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetValues(A,1,&row,4,indices,values,INSERT_VALUES)); 731a254869SHong Zhang row = 4; 741a254869SHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; values[3] = -1.0; 75*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetValues(A,1,&row,4,indices,values,INSERT_VALUES)); 761a254869SHong Zhang break; 771a254869SHong Zhang 781a254869SHong Zhang default: 791a254869SHong Zhang row = 0; 801a254869SHong Zhang values[0] = -1.0; values[1] = 0.0; values[2] = 1.0; values[3] = 3.0; values[4] = 4.0; values[5] = -5.0; 81*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetValues(A,1,&row,N,indices,values,INSERT_VALUES)); 821a254869SHong Zhang row = 1; 83*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetValues(A,1,&row,3,indices,values,INSERT_VALUES)); 841a254869SHong Zhang row = 3; 85*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetValues(A,1,&row,1,indices+4,values+4,INSERT_VALUES)); 86c4762a1bSJed Brown row = 4; 87*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetValues(A,1,&row,2,indices+4,values+4,INSERT_VALUES)); 881a254869SHong Zhang } 891a254869SHong Zhang } 90*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY)); 91*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY)); 92*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatView(A,PETSC_VIEWER_STDOUT_WORLD)); 93c4762a1bSJed Brown 94*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetLocalSize(A, &m,&n)); 95*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecCreate(PETSC_COMM_WORLD,&min)); 96*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecSetSizes(min,m,PETSC_DECIDE)); 97*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecSetFromOptions(min)); 98*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDuplicate(min,&max)); 99*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDuplicate(min,&maxabs)); 100*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDuplicate(min,&e)); 101c4762a1bSJed Brown 102f07e67edSHong Zhang /* MatGetRowMax() */ 103*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"\n MatGetRowMax\n")); 104*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetRowMax(A,max,NULL)); 105*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetRowMax(A,max,imax)); 106*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecView(max,PETSC_VIEWER_STDOUT_WORLD)); 107*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecGetLocalSize(max,&n)); 108*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscIntView(n,imax,PETSC_VIEWER_STDOUT_WORLD)); 109fa213d2fSHong Zhang 110f07e67edSHong Zhang /* MatGetRowMin() */ 111*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatScale(A,-1.0)); 112*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatView(A,PETSC_VIEWER_STDOUT_WORLD)); 113*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"\n MatGetRowMin\n")); 114*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetRowMin(A,min,NULL)); 115*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetRowMin(A,min,imin)); 116fa213d2fSHong Zhang 117*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecWAXPY(e,1.0,max,min)); /* e = max + min */ 118*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecNorm(e,NORM_INFINITY,&enorm)); 1192c71b3e2SJacob Faibussowitsch PetscCheckFalse(enorm > PETSC_MACHINE_EPSILON,PETSC_COMM_WORLD,PETSC_ERR_PLIB,"max+min > PETSC_MACHINE_EPSILON "); 120f07e67edSHong Zhang for (j = 0; j < n; j++) { 1212c71b3e2SJacob Faibussowitsch PetscCheckFalse(imin[j] != imax[j],PETSC_COMM_SELF,PETSC_ERR_PLIB,"imin[%" PetscInt_FMT "] %" PetscInt_FMT " != imax %" PetscInt_FMT,j,imin[j],imax[j]); 122f07e67edSHong Zhang } 123fa213d2fSHong Zhang 124f07e67edSHong Zhang /* MatGetRowMaxAbs() */ 125*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"\n MatGetRowMaxAbs\n")); 126*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetRowMaxAbs(A,maxabs,NULL)); 127*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetRowMaxAbs(A,maxabs,imaxabs)); 128*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecView(maxabs,PETSC_VIEWER_STDOUT_WORLD)); 129*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscIntView(n,imaxabs,PETSC_VIEWER_STDOUT_WORLD)); 1301a254869SHong Zhang 131f07e67edSHong Zhang /* MatGetRowMinAbs() */ 132*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"\n MatGetRowMinAbs\n")); 133*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetRowMinAbs(A,min,NULL)); 134*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetRowMinAbs(A,min,imin)); 135*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecView(min,PETSC_VIEWER_STDOUT_WORLD)); 136*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscIntView(n,imin,PETSC_VIEWER_STDOUT_WORLD)); 137f07e67edSHong Zhang 138f07e67edSHong Zhang if (size == 1) { 139f07e67edSHong Zhang /* Test MatGetRowMax, MatGetRowMin and MatGetRowMaxAbs for SeqDense and MPIBAIJ matrix */ 1404e879edeSHong Zhang Mat Adense; 1414e879edeSHong Zhang Vec max_d,maxabs_d; 142*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDuplicate(min,&max_d)); 143*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDuplicate(min,&maxabs_d)); 144f07e67edSHong Zhang 145*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatScale(A,-1.0)); 146*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatConvert(A,MATDENSE,MAT_INITIAL_MATRIX,&Adense)); 147*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"MatGetRowMax for seqdense matrix\n")); 148*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetRowMax(Adense,max_d,imax)); 1494e879edeSHong Zhang 150*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecWAXPY(e,-1.0,max,max_d)); /* e = -max + max_d */ 151*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecNorm(e,NORM_INFINITY,&enorm)); 1522c71b3e2SJacob Faibussowitsch PetscCheckFalse(enorm > PETSC_MACHINE_EPSILON,PETSC_COMM_WORLD,PETSC_ERR_PLIB,"norm(-max + max_d) %g > PETSC_MACHINE_EPSILON",(double)enorm); 1534e879edeSHong Zhang 154*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatScale(Adense,-1.0)); 155*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"MatGetRowMin for seqdense matrix\n")); 156*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetRowMin(Adense,min,imin)); 157f07e67edSHong Zhang 158*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecWAXPY(e,1.0,max,min)); /* e = max + min */ 159*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecNorm(e,NORM_INFINITY,&enorm)); 1602c71b3e2SJacob Faibussowitsch PetscCheckFalse(enorm > PETSC_MACHINE_EPSILON,PETSC_COMM_WORLD,PETSC_ERR_PLIB,"max+min > PETSC_MACHINE_EPSILON "); 161f07e67edSHong Zhang for (j = 0; j < n; j++) { 162f07e67edSHong Zhang if (imin[j] != imax[j]) { 16398921bdaSJacob Faibussowitsch SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"imin[%" PetscInt_FMT "] %" PetscInt_FMT " != imax %" PetscInt_FMT " for seqdense matrix",j,imin[j],imax[j]); 164f07e67edSHong Zhang } 165f07e67edSHong Zhang } 166f07e67edSHong Zhang 167*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"MatGetRowMaxAbs for seqdense matrix\n")); 168*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetRowMaxAbs(Adense,maxabs_d,imaxabs)); 169*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecWAXPY(e,-1.0,maxabs,maxabs_d)); /* e = -maxabs + maxabs_d */ 170*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecNorm(e,NORM_INFINITY,&enorm)); 1712c71b3e2SJacob Faibussowitsch PetscCheckFalse(enorm > PETSC_MACHINE_EPSILON,PETSC_COMM_WORLD,PETSC_ERR_PLIB,"norm(-maxabs + maxabs_d) %g > PETSC_MACHINE_EPSILON",(double)enorm); 172c4762a1bSJed Brown 173*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatDestroy(&Adense)); 174*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDestroy(&max_d)); 175*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDestroy(&maxabs_d)); 17643359b5eSHong Zhang } 17743359b5eSHong Zhang 17843359b5eSHong Zhang { /* BAIJ matrix */ 1794e879edeSHong Zhang Mat B; 18043359b5eSHong Zhang Vec maxabsB,maxabsB2; 18143359b5eSHong Zhang PetscInt bs=2,*imaxabsB,*imaxabsB2,rstart,rend,cstart,cend,ncols,col,Brows[2],Bcols[2]; 18243359b5eSHong Zhang const PetscInt *cols; 18343359b5eSHong Zhang const PetscScalar *vals,*vals2; 18443359b5eSHong Zhang PetscScalar Bvals[4]; 18543359b5eSHong Zhang 186*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscMalloc2(M,&imaxabsB,bs*M,&imaxabsB2)); 18743359b5eSHong Zhang 18843359b5eSHong Zhang /* bs = 1 */ 189*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatConvert(A,MATMPIBAIJ,MAT_INITIAL_MATRIX,&B)); 190*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDuplicate(min,&maxabsB)); 191*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetRowMaxAbs(B,maxabsB,NULL)); 192*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetRowMaxAbs(B,maxabsB,imaxabsB)); 193*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"\n MatGetRowMaxAbs for BAIJ matrix\n")); 194*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecWAXPY(e,-1.0,maxabs,maxabsB)); /* e = -maxabs + maxabsB */ 195*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecNorm(e,NORM_INFINITY,&enorm)); 1962c71b3e2SJacob Faibussowitsch PetscCheckFalse(enorm > PETSC_MACHINE_EPSILON,PETSC_COMM_WORLD,PETSC_ERR_PLIB,"norm(-maxabs + maxabs_d) %g > PETSC_MACHINE_EPSILON",(double)enorm); 1974e879edeSHong Zhang 1984e879edeSHong Zhang for (j = 0; j < n; j++) { 1992c71b3e2SJacob Faibussowitsch PetscCheckFalse(imaxabs[j] != imaxabsB[j],PETSC_COMM_SELF,PETSC_ERR_PLIB,"imaxabs[%" PetscInt_FMT "] %" PetscInt_FMT " != imaxabsB %" PetscInt_FMT,j,imin[j],imax[j]); 200c4762a1bSJed Brown } 201*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatDestroy(&B)); 20243359b5eSHong Zhang 20343359b5eSHong Zhang /* Test bs = 2: Create B with bs*bs block structure of A */ 204*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecCreate(PETSC_COMM_WORLD,&maxabsB2)); 205*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecSetSizes(maxabsB2,bs*m,PETSC_DECIDE)); 206*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecSetFromOptions(maxabsB2)); 20743359b5eSHong Zhang 208*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetOwnershipRange(A,&rstart,&rend)); 209*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetOwnershipRangeColumn(A,&cstart,&cend)); 210*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatCreate(PETSC_COMM_WORLD,&B)); 211*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetSizes(B,bs*(rend-rstart),bs*(cend-cstart),PETSC_DECIDE,PETSC_DECIDE)); 212*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetFromOptions(B)); 213*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetUp(B)); 21443359b5eSHong Zhang 21543359b5eSHong Zhang for (row=rstart; row<rend; row++) { 216*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetRow(A,row,&ncols,&cols,&vals)); 21743359b5eSHong Zhang for (col=0; col<ncols; col++) { 21843359b5eSHong Zhang for (j=0; j<bs; j++) { 21943359b5eSHong Zhang Brows[j] = bs*row + j; 22043359b5eSHong Zhang Bcols[j] = bs*cols[col]+j; 22143359b5eSHong Zhang } 22243359b5eSHong Zhang for (j=0; j<bs*bs; j++) Bvals[j] = vals[col]; 223*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatSetValues(B,bs,Brows,bs,Bcols,Bvals,INSERT_VALUES)); 22443359b5eSHong Zhang } 225*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatRestoreRow(A,row,&ncols,&cols,&vals)); 22643359b5eSHong Zhang } 227*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatAssemblyBegin(B,MAT_FINAL_ASSEMBLY)); 228*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatAssemblyEnd(B,MAT_FINAL_ASSEMBLY)); 22943359b5eSHong Zhang 230*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatGetRowMaxAbs(B,maxabsB2,imaxabsB2)); 23143359b5eSHong Zhang 23243359b5eSHong Zhang /* Check maxabsB2 and imaxabsB2 */ 233*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecGetArrayRead(maxabsB,&vals)); 234*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecGetArrayRead(maxabsB2,&vals2)); 23543359b5eSHong Zhang for (row=0; row<m; row++) { 23643359b5eSHong Zhang if (PetscAbsScalar(vals[row] - vals2[bs*row]) > PETSC_MACHINE_EPSILON) 23798921bdaSJacob Faibussowitsch SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"row %" PetscInt_FMT " maxabsB != maxabsB2",row); 23843359b5eSHong Zhang } 239*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecRestoreArrayRead(maxabsB,&vals)); 240*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecRestoreArrayRead(maxabsB2,&vals2)); 24143359b5eSHong Zhang 24243359b5eSHong Zhang for (col=0; col<n; col++) { 24343359b5eSHong Zhang if (imaxabsB[col] != imaxabsB2[bs*col]/bs) 24498921bdaSJacob Faibussowitsch SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"col %" PetscInt_FMT " imaxabsB != imaxabsB2",col); 24543359b5eSHong Zhang } 246*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDestroy(&maxabsB)); 247*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatDestroy(&B)); 248*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDestroy(&maxabsB2)); 249*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFree2(imaxabsB,imaxabsB2)); 250c4762a1bSJed Brown } 251c4762a1bSJed Brown 252*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDestroy(&min)); 253*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDestroy(&max)); 254*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDestroy(&maxabs)); 255*5f80ce2aSJacob Faibussowitsch CHKERRQ(VecDestroy(&e)); 256*5f80ce2aSJacob Faibussowitsch CHKERRQ(MatDestroy(&A)); 257c4762a1bSJed Brown ierr = PetscFinalize(); 258c4762a1bSJed Brown return ierr; 259c4762a1bSJed Brown } 260c4762a1bSJed Brown 261c4762a1bSJed Brown /*TEST 262c4762a1bSJed Brown 263c4762a1bSJed Brown test: 264c4762a1bSJed Brown output_file: output/ex114.out 265c4762a1bSJed Brown 266c4762a1bSJed Brown test: 267c4762a1bSJed Brown suffix: 2 2684e879edeSHong Zhang args: -testcase 1 2694e879edeSHong Zhang output_file: output/ex114.out 270c4762a1bSJed Brown 271c4762a1bSJed Brown test: 272c4762a1bSJed Brown suffix: 3 2734e879edeSHong Zhang args: -testcase 2 2744e879edeSHong Zhang output_file: output/ex114_3.out 2754e879edeSHong Zhang 2764e879edeSHong Zhang test: 2774e879edeSHong Zhang suffix: 4 2784e879edeSHong Zhang args: -testcase 3 2794e879edeSHong Zhang output_file: output/ex114_4.out 2804e879edeSHong Zhang 2814e879edeSHong Zhang test: 2824e879edeSHong Zhang suffix: 5 2834e879edeSHong Zhang nsize: 3 2844e879edeSHong Zhang args: -testcase 0 2854e879edeSHong Zhang output_file: output/ex114_5.out 2864e879edeSHong Zhang 2874e879edeSHong Zhang test: 2884e879edeSHong Zhang suffix: 6 2894e879edeSHong Zhang nsize: 3 2904e879edeSHong Zhang args: -testcase 1 2914e879edeSHong Zhang output_file: output/ex114_6.out 2924e879edeSHong Zhang 2934e879edeSHong Zhang test: 2944e879edeSHong Zhang suffix: 7 2954e879edeSHong Zhang nsize: 3 2964e879edeSHong Zhang args: -testcase 2 2974e879edeSHong Zhang output_file: output/ex114_7.out 2984e879edeSHong Zhang 2994e879edeSHong Zhang test: 3004e879edeSHong Zhang suffix: 8 3014e879edeSHong Zhang nsize: 3 3024e879edeSHong Zhang args: -testcase 3 3034e879edeSHong Zhang output_file: output/ex114_8.out 304c4762a1bSJed Brown 305c4762a1bSJed Brown TEST*/ 306