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