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