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 28 /*S 29 PetscSFNode - specifier of owner and index 30 31 Level: beginner 32 33 Sample Usage: 34 $ PetscSFNode *remote; 35 $ PetscCall(PetscMalloc1(nleaves,&remote)); 36 $ for (i=0; i<size; i++) { 37 $ remote[i].rank = i; 38 $ remote[i].index = rank; 39 $ } 40 41 Sample Fortran Usage: 42 $ type(PetscSFNode) remote(6) 43 $ remote(1)%rank = modulo(rank+size-1,size) 44 $ remote(1)%index = 1 * stride 45 46 .seealso: `PetscSFSetGraph()` 47 S*/ 48 typedef struct { 49 PetscInt rank; /* Rank of owner */ 50 PetscInt index; /* Index of node on rank */ 51 } PetscSFNode; 52 53 /*S 54 VecScatter - Object used to manage communication of data 55 between vectors in parallel. Manages both scatters and gathers 56 57 Level: beginner 58 59 .seealso: `Vec`, `PetscSF`, `VecScatterCreate()`, `VecScatterBegin()`, `VecScatterEnd()` 60 S*/ 61 typedef PetscSF VecScatter; 62 63 /*J 64 VecScatterType - String with the name of a PETSc vector scatter type 65 66 Level: beginner 67 68 .seealso: `PetscSFType`, `VecScatterSetType()`, `VecScatter`, `VecScatterCreate()`, `VecScatterDestroy()` 69 J*/ 70 typedef PetscSFType VecScatterType; 71 #endif 72