Actual source code: ex2.c
1: static char help[]= "Tests ISView() and ISLoad() \n\n";
3: #include <petscis.h>
4: #include <petscviewer.h>
6: int main(int argc,char **argv)
7: {
8: PetscInt n = 3, *izero, j, i;
9: PetscInt ix[3][3][3] = {{{3,5,4},{1,7,9},{0,2,8}},
10: {{0,2,8},{3,5,4},{1,7,9}},
11: {{1,7,9},{0,2,8},{3,5,4}}};
12: IS isx[3],il;
13: PetscMPIInt size,rank;
14: PetscViewer vx,vl;
15: PetscBool equal;
17: PetscInitialize(&argc,&argv,NULL,help);
18: MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
19: MPI_Comm_size(PETSC_COMM_WORLD,&size);
22: PetscCalloc1(size*n,&izero);
23: for (i = 0; i < 3; i++) {
24: ISCreateGeneral(PETSC_COMM_WORLD,n,ix[i][rank],PETSC_COPY_VALUES,&isx[i]);
25: }
27: for (j = 0; j < 3; j++) {
28: PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile",FILE_MODE_WRITE,&vx);
29: ISView(isx[0],vx);
30: PetscViewerDestroy(&vx);
32: PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile",FILE_MODE_READ,&vl);
33: ISCreate(PETSC_COMM_WORLD,&il);
34: ISLoad(il,vl);
35: ISEqual(il,isx[0],&equal);
37: ISDestroy(&il);
38: PetscViewerDestroy(&vl);
40: PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile",FILE_MODE_APPEND,&vx);
41: ISView(isx[1],vx);
42: ISView(isx[2],vx);
43: PetscViewerDestroy(&vx);
45: PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile",FILE_MODE_READ,&vl);
46: for (i = 0; i < 3; i++) {
47: ISCreate(PETSC_COMM_WORLD,&il);
48: ISLoad(il,vl);
49: ISEqual(il,isx[i],&equal);
51: ISDestroy(&il);
52: }
53: PetscViewerDestroy(&vl);
55: PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile",FILE_MODE_READ,&vl);
56: for (i = 0; i < 3; i++) {
57: ISCreateGeneral(PETSC_COMM_WORLD,n,izero,PETSC_COPY_VALUES,&il);
58: ISLoad(il,vl);
59: ISEqual(il,isx[i],&equal);
61: ISDestroy(&il);
62: }
63: PetscViewerDestroy(&vl);
64: }
66: for (j = 0; j < 3; j++) {
67: PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile_noheader",FILE_MODE_WRITE,&vx);
68: PetscViewerBinarySetSkipHeader(vx,PETSC_TRUE);
69: for (i = 0; i < 3; i++) {
70: ISView(isx[i],vx);
71: }
72: PetscViewerDestroy(&vx);
74: PetscViewerBinaryOpen(PETSC_COMM_WORLD,"testfile_noheader",FILE_MODE_READ,&vl);
75: PetscViewerBinarySetSkipHeader(vl,PETSC_TRUE);
76: for (i = 0; i < 3; i++) {
77: ISCreateGeneral(PETSC_COMM_WORLD,n,izero,PETSC_COPY_VALUES,&il);
78: ISLoad(il,vl);
79: ISEqual(il,isx[i],&equal);
81: ISDestroy(&il);
82: }
83: PetscViewerDestroy(&vl);
84: }
86: for (i = 0; i < 3; i++) {
87: ISDestroy(&isx[i]);
88: }
90: for (j = 0; j < 2; j++) {
91: const char *filename = (j == 0) ? "testfile_isstride" : "testfile_isblock";
92: PetscInt blocksize = (j == 0) ? 1 : size;
93: PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,FILE_MODE_WRITE,&vx);
94: for (i = 0; i < 3; i++) {
95: if (j == 0) {
96: ISCreateStride(PETSC_COMM_WORLD,n,rank,rank+1,&isx[i]);
97: } else {
98: ISCreateBlock(PETSC_COMM_WORLD,blocksize,n,ix[i][rank],PETSC_COPY_VALUES,&isx[i]);
99: }
100: ISView(isx[i],vx);
101: ISToGeneral(isx[i]);
102: }
103: PetscViewerDestroy(&vx);
104: PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,FILE_MODE_READ,&vl);
105: for (i = 0; i < 3; i++) {
106: ISCreateGeneral(PETSC_COMM_WORLD,blocksize*n,izero,PETSC_COPY_VALUES,&il);
107: ISLoad(il,vl);
108: ISEqual(il,isx[i],&equal);
110: ISDestroy(&il);
111: }
112: PetscViewerDestroy(&vl);
113: for (i = 0; i < 3; i++) {
114: ISDestroy(&isx[i]);
115: }
116: }
117: PetscFree(izero);
119: PetscFinalize();
120: return 0;
121: }
123: /*TEST
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
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
152: TEST*/