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[3] = {0,0,0}, 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 for (i = 0; i < 3; i++) { 24 ierr = ISCreateGeneral(PETSC_COMM_WORLD,n,ix[i][rank],PETSC_COPY_VALUES,&isx[i]);CHKERRQ(ierr); 25 } 26 27 for (j = 0; j < 3; j++) { 28 ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile",FILE_MODE_WRITE,&vx);CHKERRQ(ierr); 29 ierr = ISView(isx[0],vx);CHKERRQ(ierr); 30 ierr = PetscViewerDestroy(&vx);CHKERRQ(ierr); 31 32 ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile",FILE_MODE_READ,&vl);CHKERRQ(ierr); 33 ierr = ISCreate(PETSC_COMM_WORLD,&il);CHKERRQ(ierr); 34 ierr = ISLoad(il,vl);CHKERRQ(ierr); 35 ierr = ISEqual(il,isx[0],&equal);CHKERRQ(ierr); 36 if (!equal) SETERRQ1(PETSC_COMM_WORLD,PETSC_ERR_PLIB,"Iteration %D - Index set loaded from file does not match",j); 37 ierr = ISDestroy(&il);CHKERRQ(ierr); 38 ierr = PetscViewerDestroy(&vl);CHKERRQ(ierr); 39 40 ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile",FILE_MODE_APPEND,&vx);CHKERRQ(ierr); 41 ierr = ISView(isx[1],vx);CHKERRQ(ierr); 42 ierr = ISView(isx[2],vx);CHKERRQ(ierr); 43 ierr = PetscViewerDestroy(&vx);CHKERRQ(ierr); 44 45 ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile",FILE_MODE_READ,&vl);CHKERRQ(ierr); 46 for (i = 0; i < 3; i++) { 47 ierr = ISCreate(PETSC_COMM_WORLD,&il);CHKERRQ(ierr); 48 ierr = ISLoad(il,vl);CHKERRQ(ierr); 49 ierr = ISEqual(il,isx[i],&equal);CHKERRQ(ierr); 50 if (!equal) SETERRQ2(PETSC_COMM_WORLD,PETSC_ERR_PLIB,"Iteration %D - Index set %D loaded from file does not match",j,i); 51 ierr = ISDestroy(&il);CHKERRQ(ierr); 52 } 53 ierr = PetscViewerDestroy(&vl);CHKERRQ(ierr); 54 55 ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile",FILE_MODE_READ,&vl);CHKERRQ(ierr); 56 for (i = 0; i < 3; i++) { 57 ierr = ISCreateGeneral(PETSC_COMM_WORLD,n,izero,PETSC_COPY_VALUES,&il);CHKERRQ(ierr); 58 ierr = ISLoad(il,vl);CHKERRQ(ierr); 59 ierr = ISEqual(il,isx[i],&equal);CHKERRQ(ierr); 60 if (!equal) SETERRQ2(PETSC_COMM_WORLD,PETSC_ERR_PLIB,"Iteration %D - Index set %D loaded from file does not match",j,i); 61 ierr = ISDestroy(&il);CHKERRQ(ierr); 62 } 63 ierr = PetscViewerDestroy(&vl);CHKERRQ(ierr); 64 } 65 66 for (j = 0; j < 3; j++) { 67 ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile_noheader",FILE_MODE_WRITE,&vx);CHKERRQ(ierr); 68 ierr = PetscViewerBinarySetSkipHeader(vx,PETSC_TRUE);CHKERRQ(ierr); 69 for (i = 0; i < 3; i++) { 70 ierr = ISView(isx[i],vx);CHKERRQ(ierr); 71 } 72 ierr = PetscViewerDestroy(&vx);CHKERRQ(ierr); 73 74 ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile_noheader",FILE_MODE_READ,&vl);CHKERRQ(ierr); 75 ierr = PetscViewerBinarySetSkipHeader(vl,PETSC_TRUE);CHKERRQ(ierr); 76 for (i = 0; i < 3; i++) { 77 ierr = ISCreateGeneral(PETSC_COMM_WORLD,n,izero,PETSC_COPY_VALUES,&il);CHKERRQ(ierr); 78 ierr = ISLoad(il,vl);CHKERRQ(ierr); 79 ierr = ISEqual(il,isx[i],&equal);CHKERRQ(ierr); 80 if (!equal) SETERRQ2(PETSC_COMM_WORLD,PETSC_ERR_PLIB,"Iteration %D - Index set %D loaded from file does not match",j,i); 81 ierr = ISDestroy(&il);CHKERRQ(ierr); 82 } 83 ierr = PetscViewerDestroy(&vl);CHKERRQ(ierr); 84 } 85 86 for (i = 0; i < 3; i++) { 87 ierr = ISDestroy(&isx[i]);CHKERRQ(ierr); 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 ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,FILE_MODE_WRITE,&vx);CHKERRQ(ierr); 94 for (i = 0; i < 3; i++) { 95 if (j == 0) { 96 ierr = ISCreateStride(PETSC_COMM_WORLD,n,rank,rank+1,&isx[i]);CHKERRQ(ierr); 97 } else { 98 ierr = ISCreateBlock(PETSC_COMM_WORLD,blocksize,n,ix[i][rank],PETSC_COPY_VALUES,&isx[i]);CHKERRQ(ierr); 99 } 100 ierr = ISView(isx[i],vx);CHKERRQ(ierr); 101 ierr = ISToGeneral(isx[i]);CHKERRQ(ierr); 102 } 103 ierr = PetscViewerDestroy(&vx);CHKERRQ(ierr); 104 ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,FILE_MODE_READ,&vl);CHKERRQ(ierr); 105 for (i = 0; i < 3; i++) { 106 ierr = ISCreateGeneral(PETSC_COMM_WORLD,blocksize*n,izero,PETSC_COPY_VALUES,&il);CHKERRQ(ierr); 107 ierr = ISLoad(il,vl);CHKERRQ(ierr); 108 ierr = ISEqual(il,isx[i],&equal);CHKERRQ(ierr); 109 if (!equal) SETERRQ2(PETSC_COMM_WORLD,PETSC_ERR_PLIB,"Iteration %D - Index set %D loaded from file does not match",j,i); 110 ierr = ISDestroy(&il);CHKERRQ(ierr); 111 } 112 ierr = PetscViewerDestroy(&vl);CHKERRQ(ierr); 113 for (i = 0; i < 3; i++) { 114 ierr = ISDestroy(&isx[i]);CHKERRQ(ierr); 115 } 116 } 117 118 ierr = PetscFinalize(); 119 return ierr; 120 } 121 122 /*TEST 123 124 testset: 125 args: -viewer_binary_mpiio 0 126 output_file: output/ex2_1.out 127 test: 128 suffix: stdio_1 129 nsize: 1 130 test: 131 suffix: stdio_2 132 nsize: 2 133 test: 134 suffix: stdio_3 135 nsize: 3 136 137 testset: 138 requires: mpiio 139 args: -viewer_binary_mpiio 1 140 output_file: output/ex2_1.out 141 test: 142 suffix: mpiio_1 143 nsize: 1 144 test: 145 suffix: mpiio_2 146 nsize: 2 147 test: 148 suffix: mpiio_3 149 nsize: 3 150 151 TEST*/ 152