Actual source code: petscsftypes.h

  1: #ifndef PETSCSFTYPES_H
  2: #define PETSCSFTYPES_H

  4: /* SUBMANSEC = PetscSF */

  6: /*S
  7:    PetscSF - PETSc object for setting up and managing the communication of certain entries of arrays and `Vec` between MPI ranks.

  9:    Level: intermediate

 11:        `PetscSF` uses the concept of star forests to indicate and determine the communication patterns concisely and efficiently.
 12:   A star  https://en.wikipedia.org/wiki/Star_(graph_theory) forest is simply a collection of trees of height 1. The leave nodes represent
 13:   "ghost locations" for the root nodes.

 15: .seealso: `PetscSFCreate()`, `VecScatter`, `VecScatterCreate()`
 16: S*/
 17: typedef struct _p_PetscSF *PetscSF;

 19: /*J
 20:     PetscSFType - String with the name of a `PetscSF` type

 22:    Level: beginner

 24: .seealso: `PetscSFSetType()`, `PetscSF`
 25: J*/
 26: typedef const char *PetscSFType;
 27: #define PETSCSFBASIC      "basic"
 28: #define PETSCSFNEIGHBOR   "neighbor"
 29: #define PETSCSFALLGATHERV "allgatherv"
 30: #define PETSCSFALLGATHER  "allgather"
 31: #define PETSCSFGATHERV    "gatherv"
 32: #define PETSCSFGATHER     "gather"
 33: #define PETSCSFALLTOALL   "alltoall"
 34: #define PETSCSFWINDOW     "window"

 36: /*S
 37:    PetscSFNode - specifier of owner and index

 39:    Level: beginner

 41:   Sample Usage:
 42: $      PetscSFNode    *remote;
 43: $    PetscCall(PetscMalloc1(nleaves,&remote));
 44: $    for (i=0; i<size; i++) {
 45: $      remote[i].rank = i;
 46: $      remote[i].index = rank;
 47: $    }

 49:   Sample Fortran Usage:
 50: $     type(PetscSFNode) remote(6)
 51: $      remote(1)%rank  = modulo(rank+size-1,size)
 52: $      remote(1)%index = 1 * stride

 54: .seealso: `PetscSFSetGraph()`
 55: S*/
 56: typedef struct {
 57:   PetscInt rank;  /* Rank of owner */
 58:   PetscInt index; /* Index of node on rank */
 59: } PetscSFNode;

 61: /*S
 62:      VecScatter - Object used to manage communication of data
 63:        between vectors in parallel. Manages both scatters and gathers

 65:    Level: beginner

 67: .seealso: `Vec`, `PetscSF`, `VecScatterCreate()`, `VecScatterBegin()`, `VecScatterEnd()`
 68: S*/
 69: typedef PetscSF VecScatter;

 71: /*J
 72:     VecScatterType - String with the name of a PETSc vector scatter type

 74:    Level: beginner

 76: .seealso: `PetscSFType`, `VecScatterSetType()`, `VecScatter`, `VecScatterCreate()`, `VecScatterDestroy()`
 77: J*/
 78: typedef PetscSFType VecScatterType;
 79: #endif