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