1 static char help[] = "Tests HDF5 ISView() / ISLoad(), and ISSetLayout()\n\n";
2
3 #include <petscis.h>
4 #include <petscviewerhdf5.h>
5
main(int argc,char ** argv)6 int main(int argc, char **argv)
7 {
8 const char filename[] = "ex12.h5";
9 const char objname[] = "is0";
10 IS is0, is1;
11 PetscLayout map;
12 PetscViewer viewer;
13 PetscMPIInt size, rank;
14 MPI_Comm comm;
15
16 PetscFunctionBeginUser;
17 PetscCall(PetscInitialize(&argc, &argv, NULL, help));
18 comm = PETSC_COMM_WORLD;
19 PetscCallMPI(MPI_Comm_size(comm, &size));
20 PetscCallMPI(MPI_Comm_rank(comm, &rank));
21
22 {
23 PetscInt *idx, i, n, start, end;
24
25 n = rank + 2;
26 PetscCall(PetscCalloc1(n, &idx));
27 PetscCall(ISCreateGeneral(comm, n, idx, PETSC_OWN_POINTER, &is0));
28 PetscCall(PetscObjectSetName((PetscObject)is0, objname));
29 PetscCall(ISGetLayout(is0, &map));
30 PetscCall(PetscLayoutGetRange(map, &start, &end));
31 PetscCheck(end - start == n, PETSC_COMM_SELF, PETSC_ERR_PLIB, "end - start == n");
32 for (i = 0; i < n; i++) idx[i] = i + start;
33 }
34
35 PetscCall(PetscViewerHDF5Open(comm, filename, FILE_MODE_WRITE, &viewer));
36 PetscCall(ISView(is0, viewer));
37
38 PetscCall(ISCreate(comm, &is1));
39 PetscCall(PetscObjectSetName((PetscObject)is1, objname));
40 PetscCall(ISSetLayout(is1, map));
41 PetscCall(ISLoad(is1, viewer));
42
43 {
44 PetscBool flg;
45
46 PetscCall(ISEqual(is0, is1, &flg));
47 PetscCheck(flg, comm, PETSC_ERR_PLIB, "is0 and is1 differ");
48 }
49
50 PetscCall(ISDestroy(&is0));
51 PetscCall(ISDestroy(&is1));
52 PetscCall(PetscViewerDestroy(&viewer));
53 PetscCall(PetscFinalize());
54 return 0;
55 }
56
57 /*TEST
58
59 build:
60 requires: hdf5
61 test:
62 nsize: {{1 3}}
63 output_file: output/empty.out
64
65 TEST*/
66