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]; 151a254869SHong Zhang PetscMPIInt size,rank; 16fa213d2fSHong Zhang PetscReal enorm; 17c4762a1bSJed Brown 189566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc,&args,(char*)0,help)); 199566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); 209566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 219566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetInt(NULL,NULL,"-testcase",&testcase,NULL)); 22c4762a1bSJed Brown 239566063dSJacob Faibussowitsch PetscCall(MatCreate(PETSC_COMM_WORLD,&A)); 241a254869SHong Zhang if (testcase == 1) { /* proc[0] holds entire A and other processes have no entry */ 25dd400576SPatrick Sanan if (rank == 0) { 269566063dSJacob Faibussowitsch PetscCall(MatSetSizes(A,M,N,PETSC_DECIDE,PETSC_DECIDE)); 271a254869SHong Zhang } else { 289566063dSJacob Faibussowitsch PetscCall(MatSetSizes(A,0,0,PETSC_DECIDE,PETSC_DECIDE)); 291a254869SHong Zhang } 301a254869SHong Zhang testcase = 0; 311a254869SHong Zhang } else { 329566063dSJacob Faibussowitsch PetscCall(MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,M,N)); 331a254869SHong Zhang } 349566063dSJacob Faibussowitsch PetscCall(MatSetFromOptions(A)); 359566063dSJacob Faibussowitsch PetscCall(MatSetUp(A)); 361a254869SHong Zhang 37dd400576SPatrick Sanan if (rank == 0) { /* proc[0] sets matrix A */ 381a254869SHong Zhang for (j=0; j<N; j++) indices[j] = j; 391a254869SHong Zhang switch (testcase) { 401a254869SHong Zhang case 1: /* see testcast 0 */ 411a254869SHong Zhang break; 421a254869SHong Zhang case 2: 43c4762a1bSJed Brown row = 0; 44f07e67edSHong 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; 459566063dSJacob Faibussowitsch PetscCall(MatSetValues(A,1,&row,N,indices,values,INSERT_VALUES)); 461a254869SHong Zhang row = 2; 471a254869SHong Zhang indices[0] = 0; indices[1] = 3; indices[2] = 5; 481a254869SHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; 499566063dSJacob Faibussowitsch PetscCall(MatSetValues(A,1,&row,3,indices,values,INSERT_VALUES)); 501a254869SHong Zhang row = 3; 511a254869SHong Zhang indices[0] = 0; indices[1] = 1; indices[2] = 4; 521a254869SHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; 539566063dSJacob Faibussowitsch PetscCall(MatSetValues(A,1,&row,3,indices,values,INSERT_VALUES)); 54c4762a1bSJed Brown row = 4; 551a254869SHong Zhang indices[0] = 0; indices[1] = 1; indices[2] = 2; 561a254869SHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; 579566063dSJacob Faibussowitsch PetscCall(MatSetValues(A,1,&row,3,indices,values,INSERT_VALUES)); 581a254869SHong Zhang break; 591a254869SHong Zhang case 3: 601a254869SHong Zhang row = 0; 611a254869SHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; 629566063dSJacob Faibussowitsch PetscCall(MatSetValues(A,1,&row,3,indices+1,values,INSERT_VALUES)); 631a254869SHong Zhang row = 1; 641a254869SHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; 659566063dSJacob Faibussowitsch PetscCall(MatSetValues(A,1,&row,3,indices,values,INSERT_VALUES)); 661a254869SHong Zhang row = 2; 671a254869SHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; 689566063dSJacob Faibussowitsch PetscCall(MatSetValues(A,1,&row,3,indices,values,INSERT_VALUES)); 691a254869SHong Zhang row = 3; 701a254869SHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; values[3] = -1.0; 719566063dSJacob Faibussowitsch PetscCall(MatSetValues(A,1,&row,4,indices,values,INSERT_VALUES)); 721a254869SHong Zhang row = 4; 731a254869SHong Zhang values[0] = -2.0; values[1] = -2.0; values[2] = -2.0; values[3] = -1.0; 749566063dSJacob Faibussowitsch PetscCall(MatSetValues(A,1,&row,4,indices,values,INSERT_VALUES)); 751a254869SHong Zhang break; 761a254869SHong Zhang 771a254869SHong Zhang default: 781a254869SHong Zhang row = 0; 791a254869SHong 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; 809566063dSJacob Faibussowitsch PetscCall(MatSetValues(A,1,&row,N,indices,values,INSERT_VALUES)); 811a254869SHong Zhang row = 1; 829566063dSJacob Faibussowitsch PetscCall(MatSetValues(A,1,&row,3,indices,values,INSERT_VALUES)); 831a254869SHong Zhang row = 3; 849566063dSJacob Faibussowitsch PetscCall(MatSetValues(A,1,&row,1,indices+4,values+4,INSERT_VALUES)); 85c4762a1bSJed Brown row = 4; 869566063dSJacob Faibussowitsch PetscCall(MatSetValues(A,1,&row,2,indices+4,values+4,INSERT_VALUES)); 871a254869SHong Zhang } 881a254869SHong Zhang } 899566063dSJacob Faibussowitsch PetscCall(MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY)); 909566063dSJacob Faibussowitsch PetscCall(MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY)); 919566063dSJacob Faibussowitsch PetscCall(MatView(A,PETSC_VIEWER_STDOUT_WORLD)); 92c4762a1bSJed Brown 939566063dSJacob Faibussowitsch PetscCall(MatGetLocalSize(A, &m,&n)); 949566063dSJacob Faibussowitsch PetscCall(VecCreate(PETSC_COMM_WORLD,&min)); 959566063dSJacob Faibussowitsch PetscCall(VecSetSizes(min,m,PETSC_DECIDE)); 969566063dSJacob Faibussowitsch PetscCall(VecSetFromOptions(min)); 979566063dSJacob Faibussowitsch PetscCall(VecDuplicate(min,&max)); 989566063dSJacob Faibussowitsch PetscCall(VecDuplicate(min,&maxabs)); 999566063dSJacob Faibussowitsch PetscCall(VecDuplicate(min,&e)); 100c4762a1bSJed Brown 101f07e67edSHong Zhang /* MatGetRowMax() */ 1029566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\n MatGetRowMax\n")); 1039566063dSJacob Faibussowitsch PetscCall(MatGetRowMax(A,max,NULL)); 1049566063dSJacob Faibussowitsch PetscCall(MatGetRowMax(A,max,imax)); 1059566063dSJacob Faibussowitsch PetscCall(VecView(max,PETSC_VIEWER_STDOUT_WORLD)); 1069566063dSJacob Faibussowitsch PetscCall(VecGetLocalSize(max,&n)); 1079566063dSJacob Faibussowitsch PetscCall(PetscIntView(n,imax,PETSC_VIEWER_STDOUT_WORLD)); 108fa213d2fSHong Zhang 109f07e67edSHong Zhang /* MatGetRowMin() */ 1109566063dSJacob Faibussowitsch PetscCall(MatScale(A,-1.0)); 1119566063dSJacob Faibussowitsch PetscCall(MatView(A,PETSC_VIEWER_STDOUT_WORLD)); 1129566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\n MatGetRowMin\n")); 1139566063dSJacob Faibussowitsch PetscCall(MatGetRowMin(A,min,NULL)); 1149566063dSJacob Faibussowitsch PetscCall(MatGetRowMin(A,min,imin)); 115fa213d2fSHong Zhang 1169566063dSJacob Faibussowitsch PetscCall(VecWAXPY(e,1.0,max,min)); /* e = max + min */ 1179566063dSJacob Faibussowitsch PetscCall(VecNorm(e,NORM_INFINITY,&enorm)); 118*e00437b9SBarry Smith PetscCheck(enorm <= PETSC_MACHINE_EPSILON,PETSC_COMM_WORLD,PETSC_ERR_PLIB,"max+min > PETSC_MACHINE_EPSILON "); 119f07e67edSHong Zhang for (j = 0; j < n; j++) { 120*e00437b9SBarry Smith PetscCheck(imin[j] == imax[j],PETSC_COMM_SELF,PETSC_ERR_PLIB,"imin[%" PetscInt_FMT "] %" PetscInt_FMT " != imax %" PetscInt_FMT,j,imin[j],imax[j]); 121f07e67edSHong Zhang } 122fa213d2fSHong Zhang 123f07e67edSHong Zhang /* MatGetRowMaxAbs() */ 1249566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\n MatGetRowMaxAbs\n")); 1259566063dSJacob Faibussowitsch PetscCall(MatGetRowMaxAbs(A,maxabs,NULL)); 1269566063dSJacob Faibussowitsch PetscCall(MatGetRowMaxAbs(A,maxabs,imaxabs)); 1279566063dSJacob Faibussowitsch PetscCall(VecView(maxabs,PETSC_VIEWER_STDOUT_WORLD)); 1289566063dSJacob Faibussowitsch PetscCall(PetscIntView(n,imaxabs,PETSC_VIEWER_STDOUT_WORLD)); 1291a254869SHong Zhang 130f07e67edSHong Zhang /* MatGetRowMinAbs() */ 1319566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\n MatGetRowMinAbs\n")); 1329566063dSJacob Faibussowitsch PetscCall(MatGetRowMinAbs(A,min,NULL)); 1339566063dSJacob Faibussowitsch PetscCall(MatGetRowMinAbs(A,min,imin)); 1349566063dSJacob Faibussowitsch PetscCall(VecView(min,PETSC_VIEWER_STDOUT_WORLD)); 1359566063dSJacob Faibussowitsch PetscCall(PetscIntView(n,imin,PETSC_VIEWER_STDOUT_WORLD)); 136f07e67edSHong Zhang 137f07e67edSHong Zhang if (size == 1) { 138f07e67edSHong Zhang /* Test MatGetRowMax, MatGetRowMin and MatGetRowMaxAbs for SeqDense and MPIBAIJ matrix */ 1394e879edeSHong Zhang Mat Adense; 1404e879edeSHong Zhang Vec max_d,maxabs_d; 1419566063dSJacob Faibussowitsch PetscCall(VecDuplicate(min,&max_d)); 1429566063dSJacob Faibussowitsch PetscCall(VecDuplicate(min,&maxabs_d)); 143f07e67edSHong Zhang 1449566063dSJacob Faibussowitsch PetscCall(MatScale(A,-1.0)); 1459566063dSJacob Faibussowitsch PetscCall(MatConvert(A,MATDENSE,MAT_INITIAL_MATRIX,&Adense)); 1469566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"MatGetRowMax for seqdense matrix\n")); 1479566063dSJacob Faibussowitsch PetscCall(MatGetRowMax(Adense,max_d,imax)); 1484e879edeSHong Zhang 1499566063dSJacob Faibussowitsch PetscCall(VecWAXPY(e,-1.0,max,max_d)); /* e = -max + max_d */ 1509566063dSJacob Faibussowitsch PetscCall(VecNorm(e,NORM_INFINITY,&enorm)); 151*e00437b9SBarry Smith PetscCheck(enorm <= PETSC_MACHINE_EPSILON,PETSC_COMM_WORLD,PETSC_ERR_PLIB,"norm(-max + max_d) %g > PETSC_MACHINE_EPSILON",(double)enorm); 1524e879edeSHong Zhang 1539566063dSJacob Faibussowitsch PetscCall(MatScale(Adense,-1.0)); 1549566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"MatGetRowMin for seqdense matrix\n")); 1559566063dSJacob Faibussowitsch PetscCall(MatGetRowMin(Adense,min,imin)); 156f07e67edSHong Zhang 1579566063dSJacob Faibussowitsch PetscCall(VecWAXPY(e,1.0,max,min)); /* e = max + min */ 1589566063dSJacob Faibussowitsch PetscCall(VecNorm(e,NORM_INFINITY,&enorm)); 159*e00437b9SBarry Smith PetscCheck(enorm <= PETSC_MACHINE_EPSILON,PETSC_COMM_WORLD,PETSC_ERR_PLIB,"max+min > PETSC_MACHINE_EPSILON "); 160f07e67edSHong Zhang for (j = 0; j < n; j++) { 161f07e67edSHong Zhang if (imin[j] != imax[j]) { 16298921bdaSJacob Faibussowitsch SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"imin[%" PetscInt_FMT "] %" PetscInt_FMT " != imax %" PetscInt_FMT " for seqdense matrix",j,imin[j],imax[j]); 163f07e67edSHong Zhang } 164f07e67edSHong Zhang } 165f07e67edSHong Zhang 1669566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"MatGetRowMaxAbs for seqdense matrix\n")); 1679566063dSJacob Faibussowitsch PetscCall(MatGetRowMaxAbs(Adense,maxabs_d,imaxabs)); 1689566063dSJacob Faibussowitsch PetscCall(VecWAXPY(e,-1.0,maxabs,maxabs_d)); /* e = -maxabs + maxabs_d */ 1699566063dSJacob Faibussowitsch PetscCall(VecNorm(e,NORM_INFINITY,&enorm)); 170*e00437b9SBarry Smith PetscCheck(enorm <= PETSC_MACHINE_EPSILON,PETSC_COMM_WORLD,PETSC_ERR_PLIB,"norm(-maxabs + maxabs_d) %g > PETSC_MACHINE_EPSILON",(double)enorm); 171c4762a1bSJed Brown 1729566063dSJacob Faibussowitsch PetscCall(MatDestroy(&Adense)); 1739566063dSJacob Faibussowitsch PetscCall(VecDestroy(&max_d)); 1749566063dSJacob Faibussowitsch PetscCall(VecDestroy(&maxabs_d)); 17543359b5eSHong Zhang } 17643359b5eSHong Zhang 17743359b5eSHong Zhang { /* BAIJ matrix */ 1784e879edeSHong Zhang Mat B; 17943359b5eSHong Zhang Vec maxabsB,maxabsB2; 18043359b5eSHong Zhang PetscInt bs=2,*imaxabsB,*imaxabsB2,rstart,rend,cstart,cend,ncols,col,Brows[2],Bcols[2]; 18143359b5eSHong Zhang const PetscInt *cols; 18243359b5eSHong Zhang const PetscScalar *vals,*vals2; 18343359b5eSHong Zhang PetscScalar Bvals[4]; 18443359b5eSHong Zhang 1859566063dSJacob Faibussowitsch PetscCall(PetscMalloc2(M,&imaxabsB,bs*M,&imaxabsB2)); 18643359b5eSHong Zhang 18743359b5eSHong Zhang /* bs = 1 */ 1889566063dSJacob Faibussowitsch PetscCall(MatConvert(A,MATMPIBAIJ,MAT_INITIAL_MATRIX,&B)); 1899566063dSJacob Faibussowitsch PetscCall(VecDuplicate(min,&maxabsB)); 1909566063dSJacob Faibussowitsch PetscCall(MatGetRowMaxAbs(B,maxabsB,NULL)); 1919566063dSJacob Faibussowitsch PetscCall(MatGetRowMaxAbs(B,maxabsB,imaxabsB)); 1929566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\n MatGetRowMaxAbs for BAIJ matrix\n")); 1939566063dSJacob Faibussowitsch PetscCall(VecWAXPY(e,-1.0,maxabs,maxabsB)); /* e = -maxabs + maxabsB */ 1949566063dSJacob Faibussowitsch PetscCall(VecNorm(e,NORM_INFINITY,&enorm)); 195*e00437b9SBarry Smith PetscCheck(enorm <= PETSC_MACHINE_EPSILON,PETSC_COMM_WORLD,PETSC_ERR_PLIB,"norm(-maxabs + maxabs_d) %g > PETSC_MACHINE_EPSILON",(double)enorm); 1964e879edeSHong Zhang 1974e879edeSHong Zhang for (j = 0; j < n; j++) { 198*e00437b9SBarry Smith PetscCheck(imaxabs[j] == imaxabsB[j],PETSC_COMM_SELF,PETSC_ERR_PLIB,"imaxabs[%" PetscInt_FMT "] %" PetscInt_FMT " != imaxabsB %" PetscInt_FMT,j,imin[j],imax[j]); 199c4762a1bSJed Brown } 2009566063dSJacob Faibussowitsch PetscCall(MatDestroy(&B)); 20143359b5eSHong Zhang 20243359b5eSHong Zhang /* Test bs = 2: Create B with bs*bs block structure of A */ 2039566063dSJacob Faibussowitsch PetscCall(VecCreate(PETSC_COMM_WORLD,&maxabsB2)); 2049566063dSJacob Faibussowitsch PetscCall(VecSetSizes(maxabsB2,bs*m,PETSC_DECIDE)); 2059566063dSJacob Faibussowitsch PetscCall(VecSetFromOptions(maxabsB2)); 20643359b5eSHong Zhang 2079566063dSJacob Faibussowitsch PetscCall(MatGetOwnershipRange(A,&rstart,&rend)); 2089566063dSJacob Faibussowitsch PetscCall(MatGetOwnershipRangeColumn(A,&cstart,&cend)); 2099566063dSJacob Faibussowitsch PetscCall(MatCreate(PETSC_COMM_WORLD,&B)); 2109566063dSJacob Faibussowitsch PetscCall(MatSetSizes(B,bs*(rend-rstart),bs*(cend-cstart),PETSC_DECIDE,PETSC_DECIDE)); 2119566063dSJacob Faibussowitsch PetscCall(MatSetFromOptions(B)); 2129566063dSJacob Faibussowitsch PetscCall(MatSetUp(B)); 21343359b5eSHong Zhang 21443359b5eSHong Zhang for (row=rstart; row<rend; row++) { 2159566063dSJacob Faibussowitsch PetscCall(MatGetRow(A,row,&ncols,&cols,&vals)); 21643359b5eSHong Zhang for (col=0; col<ncols; col++) { 21743359b5eSHong Zhang for (j=0; j<bs; j++) { 21843359b5eSHong Zhang Brows[j] = bs*row + j; 21943359b5eSHong Zhang Bcols[j] = bs*cols[col]+j; 22043359b5eSHong Zhang } 22143359b5eSHong Zhang for (j=0; j<bs*bs; j++) Bvals[j] = vals[col]; 2229566063dSJacob Faibussowitsch PetscCall(MatSetValues(B,bs,Brows,bs,Bcols,Bvals,INSERT_VALUES)); 22343359b5eSHong Zhang } 2249566063dSJacob Faibussowitsch PetscCall(MatRestoreRow(A,row,&ncols,&cols,&vals)); 22543359b5eSHong Zhang } 2269566063dSJacob Faibussowitsch PetscCall(MatAssemblyBegin(B,MAT_FINAL_ASSEMBLY)); 2279566063dSJacob Faibussowitsch PetscCall(MatAssemblyEnd(B,MAT_FINAL_ASSEMBLY)); 22843359b5eSHong Zhang 2299566063dSJacob Faibussowitsch PetscCall(MatGetRowMaxAbs(B,maxabsB2,imaxabsB2)); 23043359b5eSHong Zhang 23143359b5eSHong Zhang /* Check maxabsB2 and imaxabsB2 */ 2329566063dSJacob Faibussowitsch PetscCall(VecGetArrayRead(maxabsB,&vals)); 2339566063dSJacob Faibussowitsch PetscCall(VecGetArrayRead(maxabsB2,&vals2)); 23443359b5eSHong Zhang for (row=0; row<m; row++) { 23543359b5eSHong Zhang if (PetscAbsScalar(vals[row] - vals2[bs*row]) > PETSC_MACHINE_EPSILON) 23698921bdaSJacob Faibussowitsch SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"row %" PetscInt_FMT " maxabsB != maxabsB2",row); 23743359b5eSHong Zhang } 2389566063dSJacob Faibussowitsch PetscCall(VecRestoreArrayRead(maxabsB,&vals)); 2399566063dSJacob Faibussowitsch PetscCall(VecRestoreArrayRead(maxabsB2,&vals2)); 24043359b5eSHong Zhang 24143359b5eSHong Zhang for (col=0; col<n; col++) { 24243359b5eSHong Zhang if (imaxabsB[col] != imaxabsB2[bs*col]/bs) 24398921bdaSJacob Faibussowitsch SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"col %" PetscInt_FMT " imaxabsB != imaxabsB2",col); 24443359b5eSHong Zhang } 2459566063dSJacob Faibussowitsch PetscCall(VecDestroy(&maxabsB)); 2469566063dSJacob Faibussowitsch PetscCall(MatDestroy(&B)); 2479566063dSJacob Faibussowitsch PetscCall(VecDestroy(&maxabsB2)); 2489566063dSJacob Faibussowitsch PetscCall(PetscFree2(imaxabsB,imaxabsB2)); 249c4762a1bSJed Brown } 250c4762a1bSJed Brown 2519566063dSJacob Faibussowitsch PetscCall(VecDestroy(&min)); 2529566063dSJacob Faibussowitsch PetscCall(VecDestroy(&max)); 2539566063dSJacob Faibussowitsch PetscCall(VecDestroy(&maxabs)); 2549566063dSJacob Faibussowitsch PetscCall(VecDestroy(&e)); 2559566063dSJacob Faibussowitsch PetscCall(MatDestroy(&A)); 2569566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 257b122ec5aSJacob Faibussowitsch return 0; 258c4762a1bSJed Brown } 259c4762a1bSJed Brown 260c4762a1bSJed Brown /*TEST 261c4762a1bSJed Brown 262c4762a1bSJed Brown test: 263c4762a1bSJed Brown output_file: output/ex114.out 264c4762a1bSJed Brown 265c4762a1bSJed Brown test: 266c4762a1bSJed Brown suffix: 2 2674e879edeSHong Zhang args: -testcase 1 2684e879edeSHong Zhang output_file: output/ex114.out 269c4762a1bSJed Brown 270c4762a1bSJed Brown test: 271c4762a1bSJed Brown suffix: 3 2724e879edeSHong Zhang args: -testcase 2 2734e879edeSHong Zhang output_file: output/ex114_3.out 2744e879edeSHong Zhang 2754e879edeSHong Zhang test: 2764e879edeSHong Zhang suffix: 4 2774e879edeSHong Zhang args: -testcase 3 2784e879edeSHong Zhang output_file: output/ex114_4.out 2794e879edeSHong Zhang 2804e879edeSHong Zhang test: 2814e879edeSHong Zhang suffix: 5 2824e879edeSHong Zhang nsize: 3 2834e879edeSHong Zhang args: -testcase 0 2844e879edeSHong Zhang output_file: output/ex114_5.out 2854e879edeSHong Zhang 2864e879edeSHong Zhang test: 2874e879edeSHong Zhang suffix: 6 2884e879edeSHong Zhang nsize: 3 2894e879edeSHong Zhang args: -testcase 1 2904e879edeSHong Zhang output_file: output/ex114_6.out 2914e879edeSHong Zhang 2924e879edeSHong Zhang test: 2934e879edeSHong Zhang suffix: 7 2944e879edeSHong Zhang nsize: 3 2954e879edeSHong Zhang args: -testcase 2 2964e879edeSHong Zhang output_file: output/ex114_7.out 2974e879edeSHong Zhang 2984e879edeSHong Zhang test: 2994e879edeSHong Zhang suffix: 8 3004e879edeSHong Zhang nsize: 3 3014e879edeSHong Zhang args: -testcase 3 3024e879edeSHong Zhang output_file: output/ex114_8.out 303c4762a1bSJed Brown 304c4762a1bSJed Brown TEST*/ 305