Date: 2022-03-04T17:37:33+00:00

Actual source code: ex5.c

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

      4: /*T
      5:     Concepts: local to global mappings
      6:     Concepts: global to local mappings

      8:     Description:  Creates an index set based on blocks of integers. Views that index set
      9:     and then destroys it.
     10: T*/

     12: #include <petscis.h>
     13: #include <petscviewer.h>

     15: int main(int argc,char **argv)
     16: {
     17:   PetscErrorCode         ierr;
     18:   PetscInt               i,n = 4,indices[] = {0,3,9,12},m = 2,input[] = {0,2};
     19:   PetscInt               output[2],inglobals[13],outlocals[13];
     20:   ISLocalToGlobalMapping mapping;

     22:   PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr;

     24:   /*
     25:       Create a local to global mapping. Each processor independently
     26:      creates a mapping
     27:   */
     28:   PetscIntView(n,indices,PETSC_VIEWER_STDOUT_WORLD);
     29:   ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD,2,n,indices,PETSC_COPY_VALUES,&mapping);

     31:   /*
     32:      Map a set of local indices to their global values
     33:   */
     34:   PetscIntView(m,input,PETSC_VIEWER_STDOUT_WORLD);
     35:   ISLocalToGlobalMappingApply(mapping,m,input,output);
     36:   PetscIntView(m,output,PETSC_VIEWER_STDOUT_WORLD);

     38:   /*
     39:      Map some global indices to local, retaining the ones without a local index by -1
     40:   */
     41:   for (i=0; i<13; i++) inglobals[i] = i;
     42:   PetscIntView(13,inglobals,PETSC_VIEWER_STDOUT_WORLD);
     43:   ISGlobalToLocalMappingApply(mapping,IS_GTOLM_MASK,13,inglobals,NULL,outlocals);
     44:   PetscIntView(13,outlocals,PETSC_VIEWER_STDOUT_WORLD);

     46:   /*
     47:      Map some block global indices to local, dropping the ones without a local index.
     48:   */
     49:   PetscIntView(13,inglobals,PETSC_VIEWER_STDOUT_WORLD);
     50:   ISGlobalToLocalMappingApplyBlock(mapping,IS_GTOLM_DROP,13,inglobals,&m,outlocals);
     51:   PetscIntView(m,outlocals,PETSC_VIEWER_STDOUT_WORLD);

     53:   /*
     54:      Free the space used by the local to global mapping
     55:   */
     56:   ISLocalToGlobalMappingDestroy(&mapping);

     58:   PetscFinalize();
     59:   return ierr;
     60: }

     62: /*TEST

     64:    test:

     66: TEST*/