xref: /petsc/include/petscsftypes.h (revision 0619917b5a674bb687c64e7daba2ab22be99af31)
1 #ifndef PETSCSFTYPES_H
2 #define PETSCSFTYPES_H
3 
4 /* SUBMANSEC = PetscSF */
5 
6 /*S
7    PetscSF - PETSc object for setting up and managing the communication of certain entries of arrays and `Vec` between MPI ranks.
8 
9    Level: intermediate
10 
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.
14 
15 .seealso: `PetscSFCreate()`, `VecScatter`, `VecScatterCreate()`
16 S*/
17 typedef struct _p_PetscSF *PetscSF;
18 
19 /*J
20     PetscSFType - String with the name of a `PetscSF` type
21 
22    Level: beginner
23 
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"
35 
36 /*S
37    PetscSFNode - specifier of owner and index
38 
39    Level: beginner
40 
41   Sample Usage:
42 .vb
43     PetscSFNode    *remote;
44     PetscCall(PetscMalloc1(nleaves,&remote));
45     for (i=0; i<size; i++) {
46       remote[i].rank = i;
47       remote[i].index = rank;
48     }
49 .ve
50 
51   Sample Fortran Usage:
52 .vb
53     type(PetscSFNode) remote(6)
54     remote(1)%rank  = modulo(rank+size-1,size)
55     remote(1)%index = 1 * stride
56 .ve
57 
58 .seealso: `PetscSF`, `PetscSFSetGraph()`
59 S*/
60 typedef struct {
61   PetscInt rank;  /* Rank of owner */
62   PetscInt index; /* Index of node on rank */
63 } PetscSFNode;
64 
65 /*S
66      VecScatter - Object used to manage communication of data
67        between vectors in parallel. Manages both scatters and gathers
68 
69    Level: beginner
70 
71 .seealso: `Vec`, `PetscSF`, `VecScatterCreate()`, `VecScatterBegin()`, `VecScatterEnd()`
72 S*/
73 typedef PetscSF VecScatter;
74 
75 /*J
76     VecScatterType - String with the name of a PETSc vector scatter type
77 
78    Level: beginner
79 
80 .seealso: `PetscSFType`, `VecScatterSetType()`, `VecScatter`, `VecScatterCreate()`, `VecScatterDestroy()`
81 J*/
82 typedef PetscSFType VecScatterType;
83 #endif
84