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