Actual source code: ex4.c

  1: static char help[] = "Demonstrates using ISLocalToGlobalMappings.\n\n";

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

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

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

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

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

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

 35:   /*
 36:      Map some global indices to local, dropping the ones without a local index.
 37:   */
 38:   PetscCall(ISGlobalToLocalMappingApply(mapping, IS_GTOLM_DROP, 13, inglobals, &m, outlocals));
 39:   PetscCall(PetscIntView(m, outlocals, PETSC_VIEWER_STDOUT_WORLD));

 41:   PetscCall(ISLocalToGlobalMappingView(mapping, PETSC_VIEWER_STDOUT_WORLD));
 42:   /*
 43:      Free the space used by the local to global mapping
 44:   */
 45:   PetscCall(ISLocalToGlobalMappingDestroy(&mapping));

 47:   PetscCall(PetscFinalize());
 48:   return 0;
 49: }

 51: /*TEST

 53:    test:

 55:    test:
 56:       suffix: 2
 57:       args: -islocaltoglobalmapping_type hash

 59: TEST*/