Actual source code: petscsftypes.h
1: #pragma once
3: /* SUBMANSEC = PetscSF */
5: /*S
6: PetscSF - PETSc object for setting up and managing the communication of certain entries of arrays and `Vec` between MPI ranks.
8: Level: intermediate
10: `PetscSF` uses the concept of star forests to indicate and determine the communication patterns concisely and efficiently.
11: A star <https://en.wikipedia.org/wiki/Star_(graph_theory)> forest is simply a collection of trees of height 1. The leave nodes represent
12: "ghost locations" for the root nodes.
14: .seealso: `PetscSFCreate()`, `VecScatter`, `VecScatterCreate()`
15: S*/
16: typedef struct _p_PetscSF *PetscSF;
18: /*J
19: PetscSFType - String with the name of a `PetscSF` type
21: Level: beginner
23: .seealso: `PetscSFSetType()`, `PetscSF`
24: J*/
25: typedef const char *PetscSFType;
26: #define PETSCSFBASIC "basic"
27: #define PETSCSFNEIGHBOR "neighbor"
28: #define PETSCSFALLGATHERV "allgatherv"
29: #define PETSCSFALLGATHER "allgather"
30: #define PETSCSFGATHERV "gatherv"
31: #define PETSCSFGATHER "gather"
32: #define PETSCSFALLTOALL "alltoall"
33: #define PETSCSFWINDOW "window"
35: /*S
36: PetscSFNode - specifier of owner and index
38: Level: beginner
40: Sample Usage:
41: .vb
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: }
48: .ve
50: Sample Fortran Usage:
51: .vb
52: type(PetscSFNode) remote(6)
53: remote(1)%rank = modulo(rank+size-1,size)
54: remote(1)%index = 1 * stride
55: .ve
57: Notes:
58: Use `MPIU_SF_NODE` when performing MPI operations on arrays of `PetscSFNode`
60: Generally the values of `rank` should be in $[ 0,size)$ and the value of `index` greater than or equal to 0, but there are some situations that violate this.
62: .seealso: `PetscSF`, `PetscSFSetGraph()`
63: S*/
64: typedef struct {
65: PetscInt rank; /* Rank of owner */
66: PetscInt index; /* Index of node on rank */
67: } PetscSFNode;
69: #define MPIU_SF_NODE MPIU_2INT
71: /*S
72: VecScatter - Object used to manage communication of data
73: between vectors in parallel. Manages both scatters and gathers
75: Level: beginner
77: .seealso: `Vec`, `PetscSF`, `VecScatterCreate()`, `VecScatterBegin()`, `VecScatterEnd()`
78: S*/
79: typedef PetscSF VecScatter;
81: /*J
82: VecScatterType - String with the name of a PETSc vector scatter type
84: Level: beginner
86: .seealso: `PetscSFType`, `VecScatterSetType()`, `VecScatter`, `VecScatterCreate()`, `VecScatterDestroy()`
87: J*/
88: typedef PetscSFType VecScatterType;