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