Actual source code: ex6.c

petsc-3.3-p6 2013-02-11
  1: /*
  2:        Formatted test for ISGeneral routines.
  3: */

  5: static char help[] = "Tests ISComplement.\n\n";

  7: #include <petscis.h>

 11: int main(int argc,char **argv)
 12: {
 13:   PetscMPIInt    rank,size;
 14:   PetscInt       i,j,n,cnt=0,rstart,rend,*indices;
 15:   IS             is,isc;

 18:   PetscInitialize(&argc,&argv,(char*)0,help);
 19:   MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
 20:   MPI_Comm_size(PETSC_COMM_WORLD,&size);

 22:   n = 3*size;                   /* Number of local indices, same on each process. */
 23:   rstart = 3*(size+2)*rank;     /* start of local range */
 24:   rend   = 3*(size+2)*(rank+1); /* end of local range */
 25:   PetscMalloc(n*sizeof(PetscInt),&indices);
 26:   for (i=0; i<3; i++) {
 27:     for (j=0; j<size; j++) indices[cnt++] = rstart+i*(size+2)+j;
 28:   }
 29:   if (cnt != n) SETERRQ(PETSC_COMM_SELF,1,"inconsistent count");
 30:   ISCreateGeneral(PETSC_COMM_WORLD,n,indices,PETSC_COPY_VALUES,&is);
 31:   PetscFree(indices);
 32:   ISComplement(is,rstart,rend,&isc);
 33:   ISView(is,PETSC_VIEWER_STDOUT_WORLD);
 34:   ISView(isc,PETSC_VIEWER_STDOUT_WORLD);

 36:   ISDestroy(&is);
 37:   ISDestroy(&isc);
 38:   PetscFinalize();
 39:   return 0;
 40: }