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);CHKERRQ(ierr); 20 ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size);CHKERRQ(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 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 %D - Index set %D 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 119 ierr = PetscFinalize(); 120 return ierr; 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