1c4762a1bSJed Brown static char help[] = "Tests ISView() and ISLoad() \n\n"; 2c4762a1bSJed Brown 3c4762a1bSJed Brown #include <petscis.h> 4c4762a1bSJed Brown #include <petscviewer.h> 5c4762a1bSJed Brown 69371c9d4SSatish Balay int main(int argc, char **argv) { 72cf5aabcSBarry Smith PetscInt n = 3, *izero, j, i; 89371c9d4SSatish Balay PetscInt ix[3][3][3] = { 99371c9d4SSatish Balay {{3, 5, 4}, {1, 7, 9}, {0, 2, 8}}, 10c4762a1bSJed Brown {{0, 2, 8}, {3, 5, 4}, {1, 7, 9}}, 119371c9d4SSatish Balay {{1, 7, 9}, {0, 2, 8}, {3, 5, 4}} 129371c9d4SSatish Balay }; 13c4762a1bSJed Brown IS isx[3], il; 14c4762a1bSJed Brown PetscMPIInt size, rank; 15c4762a1bSJed Brown PetscViewer vx, vl; 16c4762a1bSJed Brown PetscBool equal; 17c4762a1bSJed Brown 18327415f7SBarry Smith PetscFunctionBeginUser; 199566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 209566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank)); 219566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size)); 22be096a46SBarry Smith PetscCheck(size < 4, PETSC_COMM_WORLD, PETSC_ERR_WRONG_MPI_SIZE, "Example only works with up to three processes"); 23c4762a1bSJed Brown 249566063dSJacob Faibussowitsch PetscCall(PetscCalloc1(size * n, &izero)); 25*48a46eb9SPierre Jolivet for (i = 0; i < 3; i++) PetscCall(ISCreateGeneral(PETSC_COMM_WORLD, n, ix[i][rank], PETSC_COPY_VALUES, &isx[i])); 26c4762a1bSJed Brown 27c4762a1bSJed Brown for (j = 0; j < 3; j++) { 289566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, "testfile", FILE_MODE_WRITE, &vx)); 299566063dSJacob Faibussowitsch PetscCall(ISView(isx[0], vx)); 309566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&vx)); 31c4762a1bSJed Brown 329566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, "testfile", FILE_MODE_READ, &vl)); 339566063dSJacob Faibussowitsch PetscCall(ISCreate(PETSC_COMM_WORLD, &il)); 349566063dSJacob Faibussowitsch PetscCall(ISLoad(il, vl)); 359566063dSJacob Faibussowitsch PetscCall(ISEqual(il, isx[0], &equal)); 3628b400f6SJacob Faibussowitsch PetscCheck(equal, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "Iteration %" PetscInt_FMT " - Index set loaded from file does not match", j); 379566063dSJacob Faibussowitsch PetscCall(ISDestroy(&il)); 389566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&vl)); 39c4762a1bSJed Brown 409566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, "testfile", FILE_MODE_APPEND, &vx)); 419566063dSJacob Faibussowitsch PetscCall(ISView(isx[1], vx)); 429566063dSJacob Faibussowitsch PetscCall(ISView(isx[2], vx)); 439566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&vx)); 44c4762a1bSJed Brown 459566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, "testfile", FILE_MODE_READ, &vl)); 46c4762a1bSJed Brown for (i = 0; i < 3; i++) { 479566063dSJacob Faibussowitsch PetscCall(ISCreate(PETSC_COMM_WORLD, &il)); 489566063dSJacob Faibussowitsch PetscCall(ISLoad(il, vl)); 499566063dSJacob Faibussowitsch PetscCall(ISEqual(il, isx[i], &equal)); 5028b400f6SJacob Faibussowitsch PetscCheck(equal, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "Iteration %" PetscInt_FMT " - Index set %" PetscInt_FMT " loaded from file does not match", j, i); 519566063dSJacob Faibussowitsch PetscCall(ISDestroy(&il)); 52c4762a1bSJed Brown } 539566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&vl)); 54c4762a1bSJed Brown 559566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, "testfile", FILE_MODE_READ, &vl)); 56c4762a1bSJed Brown for (i = 0; i < 3; i++) { 579566063dSJacob Faibussowitsch PetscCall(ISCreateGeneral(PETSC_COMM_WORLD, n, izero, PETSC_COPY_VALUES, &il)); 589566063dSJacob Faibussowitsch PetscCall(ISLoad(il, vl)); 599566063dSJacob Faibussowitsch PetscCall(ISEqual(il, isx[i], &equal)); 6028b400f6SJacob Faibussowitsch PetscCheck(equal, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "Iteration %" PetscInt_FMT " - Index set %" PetscInt_FMT " loaded from file does not match", j, i); 619566063dSJacob Faibussowitsch PetscCall(ISDestroy(&il)); 62c4762a1bSJed Brown } 639566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&vl)); 64c4762a1bSJed Brown } 65c4762a1bSJed Brown 66c4762a1bSJed Brown for (j = 0; j < 3; j++) { 679566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, "testfile_noheader", FILE_MODE_WRITE, &vx)); 689566063dSJacob Faibussowitsch PetscCall(PetscViewerBinarySetSkipHeader(vx, PETSC_TRUE)); 69*48a46eb9SPierre Jolivet for (i = 0; i < 3; i++) PetscCall(ISView(isx[i], vx)); 709566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&vx)); 71c4762a1bSJed Brown 729566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, "testfile_noheader", FILE_MODE_READ, &vl)); 739566063dSJacob Faibussowitsch PetscCall(PetscViewerBinarySetSkipHeader(vl, PETSC_TRUE)); 74c4762a1bSJed Brown for (i = 0; i < 3; i++) { 759566063dSJacob Faibussowitsch PetscCall(ISCreateGeneral(PETSC_COMM_WORLD, n, izero, PETSC_COPY_VALUES, &il)); 769566063dSJacob Faibussowitsch PetscCall(ISLoad(il, vl)); 779566063dSJacob Faibussowitsch PetscCall(ISEqual(il, isx[i], &equal)); 7828b400f6SJacob Faibussowitsch PetscCheck(equal, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "Iteration %" PetscInt_FMT " - Index set %" PetscInt_FMT " loaded from file does not match", j, i); 799566063dSJacob Faibussowitsch PetscCall(ISDestroy(&il)); 80c4762a1bSJed Brown } 819566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&vl)); 82c4762a1bSJed Brown } 83c4762a1bSJed Brown 84*48a46eb9SPierre Jolivet for (i = 0; i < 3; i++) PetscCall(ISDestroy(&isx[i])); 85c4762a1bSJed Brown 86c4762a1bSJed Brown for (j = 0; j < 2; j++) { 87c4762a1bSJed Brown const char *filename = (j == 0) ? "testfile_isstride" : "testfile_isblock"; 88c4762a1bSJed Brown PetscInt blocksize = (j == 0) ? 1 : size; 899566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, filename, FILE_MODE_WRITE, &vx)); 90c4762a1bSJed Brown for (i = 0; i < 3; i++) { 91c4762a1bSJed Brown if (j == 0) { 929566063dSJacob Faibussowitsch PetscCall(ISCreateStride(PETSC_COMM_WORLD, n, rank, rank + 1, &isx[i])); 93c4762a1bSJed Brown } else { 949566063dSJacob Faibussowitsch PetscCall(ISCreateBlock(PETSC_COMM_WORLD, blocksize, n, ix[i][rank], PETSC_COPY_VALUES, &isx[i])); 95c4762a1bSJed Brown } 969566063dSJacob Faibussowitsch PetscCall(ISView(isx[i], vx)); 979566063dSJacob Faibussowitsch PetscCall(ISToGeneral(isx[i])); 98c4762a1bSJed Brown } 999566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&vx)); 1009566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, filename, FILE_MODE_READ, &vl)); 101c4762a1bSJed Brown for (i = 0; i < 3; i++) { 1029566063dSJacob Faibussowitsch PetscCall(ISCreateGeneral(PETSC_COMM_WORLD, blocksize * n, izero, PETSC_COPY_VALUES, &il)); 1039566063dSJacob Faibussowitsch PetscCall(ISLoad(il, vl)); 1049566063dSJacob Faibussowitsch PetscCall(ISEqual(il, isx[i], &equal)); 10528b400f6SJacob Faibussowitsch PetscCheck(equal, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "Iteration %" PetscInt_FMT " - Index set %" PetscInt_FMT " loaded from file does not match", j, i); 1069566063dSJacob Faibussowitsch PetscCall(ISDestroy(&il)); 107c4762a1bSJed Brown } 1089566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&vl)); 109*48a46eb9SPierre Jolivet for (i = 0; i < 3; i++) PetscCall(ISDestroy(&isx[i])); 110c4762a1bSJed Brown } 1119566063dSJacob Faibussowitsch PetscCall(PetscFree(izero)); 112c4762a1bSJed Brown 1139566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 114b122ec5aSJacob Faibussowitsch return 0; 115c4762a1bSJed Brown } 116c4762a1bSJed Brown 117c4762a1bSJed Brown /*TEST 118c4762a1bSJed Brown 119c4762a1bSJed Brown testset: 120c4762a1bSJed Brown args: -viewer_binary_mpiio 0 121c4762a1bSJed Brown output_file: output/ex2_1.out 122c4762a1bSJed Brown test: 123c4762a1bSJed Brown suffix: stdio_1 124c4762a1bSJed Brown nsize: 1 125c4762a1bSJed Brown test: 126c4762a1bSJed Brown suffix: stdio_2 127c4762a1bSJed Brown nsize: 2 128c4762a1bSJed Brown test: 129c4762a1bSJed Brown suffix: stdio_3 130c4762a1bSJed Brown nsize: 3 131c4762a1bSJed Brown 132c4762a1bSJed Brown testset: 133c4762a1bSJed Brown requires: mpiio 134c4762a1bSJed Brown args: -viewer_binary_mpiio 1 135c4762a1bSJed Brown output_file: output/ex2_1.out 136c4762a1bSJed Brown test: 137c4762a1bSJed Brown suffix: mpiio_1 138c4762a1bSJed Brown nsize: 1 139c4762a1bSJed Brown test: 140c4762a1bSJed Brown suffix: mpiio_2 141c4762a1bSJed Brown nsize: 2 142c4762a1bSJed Brown test: 143c4762a1bSJed Brown suffix: mpiio_3 144c4762a1bSJed Brown nsize: 3 145c4762a1bSJed Brown 146c4762a1bSJed Brown TEST*/ 147