xref: /petsc/src/vec/is/tests/ex2.c (revision 0e03b746557e2551025fde0294144c0532d12f68)
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