Actual source code: ex5.c


  2: static char help[] = "Demonstrates using ISLocalToGlobalMappings with block size.\n\n";

  4: #include <petscis.h>
  5: #include <petscviewer.h>

  7: int main(int argc,char **argv)
  8: {
  9:   PetscInt               i,n = 4,indices[] = {0,3,9,12},m = 2,input[] = {0,2};
 10:   PetscInt               output[2],inglobals[13],outlocals[13];
 11:   ISLocalToGlobalMapping mapping;

 13:   PetscInitialize(&argc,&argv,(char*)0,help);

 15:   /*
 16:       Create a local to global mapping. Each processor independently
 17:      creates a mapping
 18:   */
 19:   PetscIntView(n,indices,PETSC_VIEWER_STDOUT_WORLD);
 20:   ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD,2,n,indices,PETSC_COPY_VALUES,&mapping);

 22:   /*
 23:      Map a set of local indices to their global values
 24:   */
 25:   PetscIntView(m,input,PETSC_VIEWER_STDOUT_WORLD);
 26:   ISLocalToGlobalMappingApply(mapping,m,input,output);
 27:   PetscIntView(m,output,PETSC_VIEWER_STDOUT_WORLD);

 29:   /*
 30:      Map some global indices to local, retaining the ones without a local index by -1
 31:   */
 32:   for (i=0; i<13; i++) inglobals[i] = i;
 33:   PetscIntView(13,inglobals,PETSC_VIEWER_STDOUT_WORLD);
 34:   ISGlobalToLocalMappingApply(mapping,IS_GTOLM_MASK,13,inglobals,NULL,outlocals);
 35:   PetscIntView(13,outlocals,PETSC_VIEWER_STDOUT_WORLD);

 37:   /*
 38:      Map some block global indices to local, dropping the ones without a local index.
 39:   */
 40:   PetscIntView(13,inglobals,PETSC_VIEWER_STDOUT_WORLD);
 41:   ISGlobalToLocalMappingApplyBlock(mapping,IS_GTOLM_DROP,13,inglobals,&m,outlocals);
 42:   PetscIntView(m,outlocals,PETSC_VIEWER_STDOUT_WORLD);

 44:   /*
 45:      Free the space used by the local to global mapping
 46:   */
 47:   ISLocalToGlobalMappingDestroy(&mapping);

 49:   PetscFinalize();
 50:   return 0;
 51: }

 53: /*TEST

 55:    test:

 57: TEST*/