1 static char help[]= "Tests ISView() and ISLoad() \n\n"; 2 3 #include <petscis.h> 4 #include <petscviewer.h> 5 6 int main(int argc,char **argv) 7 { 8 PetscInt n = 3, *izero, j, i; 9 PetscInt ix[3][3][3] = {{{3,5,4},{1,7,9},{0,2,8}}, 10 {{0,2,8},{3,5,4},{1,7,9}}, 11 {{1,7,9},{0,2,8},{3,5,4}}}; 12 IS isx[3],il; 13 PetscMPIInt size,rank; 14 PetscViewer vx,vl; 15 PetscBool equal; 16 17 CHKERRQ(PetscInitialize(&argc,&argv,NULL,help)); 18 CHKERRMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 19 CHKERRMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); 20 PetscCheckFalse(size > 3,PETSC_COMM_WORLD,PETSC_ERR_ARG_SIZ,"Example only works with up to three processes"); 21 22 CHKERRQ(PetscCalloc1(size*n,&izero)); 23 for (i = 0; i < 3; i++) { 24 CHKERRQ(ISCreateGeneral(PETSC_COMM_WORLD,n,ix[i][rank],PETSC_COPY_VALUES,&isx[i])); 25 } 26 27 for (j = 0; j < 3; j++) { 28 CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile",FILE_MODE_WRITE,&vx)); 29 CHKERRQ(ISView(isx[0],vx)); 30 CHKERRQ(PetscViewerDestroy(&vx)); 31 32 CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile",FILE_MODE_READ,&vl)); 33 CHKERRQ(ISCreate(PETSC_COMM_WORLD,&il)); 34 CHKERRQ(ISLoad(il,vl)); 35 CHKERRQ(ISEqual(il,isx[0],&equal)); 36 PetscCheck(equal,PETSC_COMM_WORLD,PETSC_ERR_PLIB,"Iteration %" PetscInt_FMT " - Index set loaded from file does not match",j); 37 CHKERRQ(ISDestroy(&il)); 38 CHKERRQ(PetscViewerDestroy(&vl)); 39 40 CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile",FILE_MODE_APPEND,&vx)); 41 CHKERRQ(ISView(isx[1],vx)); 42 CHKERRQ(ISView(isx[2],vx)); 43 CHKERRQ(PetscViewerDestroy(&vx)); 44 45 CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile",FILE_MODE_READ,&vl)); 46 for (i = 0; i < 3; i++) { 47 CHKERRQ(ISCreate(PETSC_COMM_WORLD,&il)); 48 CHKERRQ(ISLoad(il,vl)); 49 CHKERRQ(ISEqual(il,isx[i],&equal)); 50 PetscCheck(equal,PETSC_COMM_WORLD,PETSC_ERR_PLIB,"Iteration %" PetscInt_FMT " - Index set %" PetscInt_FMT " loaded from file does not match",j,i); 51 CHKERRQ(ISDestroy(&il)); 52 } 53 CHKERRQ(PetscViewerDestroy(&vl)); 54 55 CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile",FILE_MODE_READ,&vl)); 56 for (i = 0; i < 3; i++) { 57 CHKERRQ(ISCreateGeneral(PETSC_COMM_WORLD,n,izero,PETSC_COPY_VALUES,&il)); 58 CHKERRQ(ISLoad(il,vl)); 59 CHKERRQ(ISEqual(il,isx[i],&equal)); 60 PetscCheck(equal,PETSC_COMM_WORLD,PETSC_ERR_PLIB,"Iteration %" PetscInt_FMT " - Index set %" PetscInt_FMT " loaded from file does not match",j,i); 61 CHKERRQ(ISDestroy(&il)); 62 } 63 CHKERRQ(PetscViewerDestroy(&vl)); 64 } 65 66 for (j = 0; j < 3; j++) { 67 CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile_noheader",FILE_MODE_WRITE,&vx)); 68 CHKERRQ(PetscViewerBinarySetSkipHeader(vx,PETSC_TRUE)); 69 for (i = 0; i < 3; i++) { 70 CHKERRQ(ISView(isx[i],vx)); 71 } 72 CHKERRQ(PetscViewerDestroy(&vx)); 73 74 CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile_noheader",FILE_MODE_READ,&vl)); 75 CHKERRQ(PetscViewerBinarySetSkipHeader(vl,PETSC_TRUE)); 76 for (i = 0; i < 3; i++) { 77 CHKERRQ(ISCreateGeneral(PETSC_COMM_WORLD,n,izero,PETSC_COPY_VALUES,&il)); 78 CHKERRQ(ISLoad(il,vl)); 79 CHKERRQ(ISEqual(il,isx[i],&equal)); 80 PetscCheck(equal,PETSC_COMM_WORLD,PETSC_ERR_PLIB,"Iteration %" PetscInt_FMT " - Index set %" PetscInt_FMT " loaded from file does not match",j,i); 81 CHKERRQ(ISDestroy(&il)); 82 } 83 CHKERRQ(PetscViewerDestroy(&vl)); 84 } 85 86 for (i = 0; i < 3; i++) { 87 CHKERRQ(ISDestroy(&isx[i])); 88 } 89 90 for (j = 0; j < 2; j++) { 91 const char *filename = (j == 0) ? "testfile_isstride" : "testfile_isblock"; 92 PetscInt blocksize = (j == 0) ? 1 : size; 93 CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,FILE_MODE_WRITE,&vx)); 94 for (i = 0; i < 3; i++) { 95 if (j == 0) { 96 CHKERRQ(ISCreateStride(PETSC_COMM_WORLD,n,rank,rank+1,&isx[i])); 97 } else { 98 CHKERRQ(ISCreateBlock(PETSC_COMM_WORLD,blocksize,n,ix[i][rank],PETSC_COPY_VALUES,&isx[i])); 99 } 100 CHKERRQ(ISView(isx[i],vx)); 101 CHKERRQ(ISToGeneral(isx[i])); 102 } 103 CHKERRQ(PetscViewerDestroy(&vx)); 104 CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,FILE_MODE_READ,&vl)); 105 for (i = 0; i < 3; i++) { 106 CHKERRQ(ISCreateGeneral(PETSC_COMM_WORLD,blocksize*n,izero,PETSC_COPY_VALUES,&il)); 107 CHKERRQ(ISLoad(il,vl)); 108 CHKERRQ(ISEqual(il,isx[i],&equal)); 109 PetscCheck(equal,PETSC_COMM_WORLD,PETSC_ERR_PLIB,"Iteration %" PetscInt_FMT " - Index set %" PetscInt_FMT " loaded from file does not match",j,i); 110 CHKERRQ(ISDestroy(&il)); 111 } 112 CHKERRQ(PetscViewerDestroy(&vl)); 113 for (i = 0; i < 3; i++) { 114 CHKERRQ(ISDestroy(&isx[i])); 115 } 116 } 117 CHKERRQ(PetscFree(izero)); 118 119 CHKERRQ(PetscFinalize()); 120 return 0; 121 } 122 123 /*TEST 124 125 testset: 126 args: -viewer_binary_mpiio 0 127 output_file: output/ex2_1.out 128 test: 129 suffix: stdio_1 130 nsize: 1 131 test: 132 suffix: stdio_2 133 nsize: 2 134 test: 135 suffix: stdio_3 136 nsize: 3 137 138 testset: 139 requires: mpiio 140 args: -viewer_binary_mpiio 1 141 output_file: output/ex2_1.out 142 test: 143 suffix: mpiio_1 144 nsize: 1 145 test: 146 suffix: mpiio_2 147 nsize: 2 148 test: 149 suffix: mpiio_3 150 nsize: 3 151 152 TEST*/ 153