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*/