Date: 2022-08-02T03:13:39+00:00

Actual source code: ex1.c

      2: static char help[] = "Creating a general index set.\n\n";

      4: /*
      5:     Include petscis.h so we can use PETSc IS objects. Note that this automatically
      6:   includes petscsys.h.
      7: */
      8: #include <petscis.h>
      9: #include <petscviewer.h>

     11: int main(int argc,char **argv)
     12: {
     13:   PetscInt       *indices,n;
     14:   const PetscInt *nindices;
     15:   PetscMPIInt    rank;
     16:   IS             is;

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

     21:   /*
     22:      Create an index set with 5 entries. Each processor creates
     23:    its own index set with its own list of integers.
     24:   */
     25:   PetscMalloc1(5,&indices);
     26:   indices[0] = rank + 1;
     27:   indices[1] = rank + 2;
     28:   indices[2] = rank + 3;
     29:   indices[3] = rank + 4;
     30:   indices[4] = rank + 5;
     31:   ISCreateGeneral(PETSC_COMM_SELF,5,indices,PETSC_COPY_VALUES,&is);
     32:   /*
     33:      Note that ISCreateGeneral() has made a copy of the indices
     34:      so we may (and generally should) free indices[]
     35:   */
     36:   PetscFree(indices);

     38:   /*
     39:      Print the index set to stdout
     40:   */
     41:   ISView(is,PETSC_VIEWER_STDOUT_SELF);

     43:   /*
     44:      Get the number of indices in the set
     45:   */
     46:   ISGetLocalSize(is,&n);

     48:   /*
     49:      Get the indices in the index set
     50:   */
     51:   ISGetIndices(is,&nindices);
     52:   /*
     53:      Now any code that needs access to the list of integers
     54:    has access to it here through indices[].
     55:    */
     56:   PetscPrintf(PETSC_COMM_SELF,"[%d] First index %" PetscInt_FMT "\n",rank,nindices[0]);

     58:   /*
     59:      Once we no longer need access to the indices they should
     60:      returned to the system
     61:   */
     62:   ISRestoreIndices(is,&nindices);

     64:   /*
     65:      One should destroy any PETSc object once one is completely
     66:     done with it.
     67:   */
     68:   ISDestroy(&is);
     69:   PetscFinalize();
     70:   return 0;
     71: }

     73: /*TEST

     75:    test:

     77: TEST*/