1 #pragma once 2 3 /* SUBMANSEC = PetscSection */ 4 5 /*S 6 PetscSection - Mapping from integers in a designated range to contiguous sets of integers. 7 8 The range of a `PetscSection` is in the space of 9 contiguous sets of integers. These ranges are frequently interpreted as domains of other array-like objects, 10 especially other `PetscSection`, `Vec`s, and `IS`s. The domain is set with `PetscSectionSetChart()` and does not need to 11 start at 0. For each point in the domain of a `PetscSection`, the output set is represented through an offset and a 12 count, which are set using `PetscSectionSetOffset()` and `PetscSectionSetDof()` respectively. Lookup is typically using 13 accessors or routines like `VecGetValuesSection()`. 14 15 The `PetscSection` object and methods are intended to be used in the PETSc `Vec` and `Mat` implementations. The indices returned by the `PetscSection` 16 are appropriate for the kind of `Vec` it is associated with. For example, if the vector being indexed is a local vector, we call the section a 17 local section. If the section indexes a global vector, we call it a global section. For parallel vectors, like global vectors, we use negative 18 indices to indicate dofs owned by other processes. 19 20 Level: beginner 21 22 .seealso: [PetscSection](sec_petscsection), `PetscSectionCreate()`, `PetscSectionDestroy()`, `PetscSectionSym` 23 S*/ 24 typedef struct _p_PetscSection *PetscSection; 25 26 /*S 27 PetscSectionSym - Symmetries of the data referenced by a `PetscSection`. 28 29 Often the order of data index by a `PetscSection` is meaningful, and describes additional structure, such as points on a 30 line, grid, or lattice. If the data is accessed from a different "orientation", then the image of the data under 31 access then undergoes a symmetry transformation. A `PetscSectionSym` specifies these symmetries. The types of 32 symmetries that can be specified are of the form R * P, where R is a diagonal matrix of scalars, and P is a permutation. 33 34 Level: developer 35 36 .seealso: [PetscSection](sec_petscsection), `PetscSection`, `PetscSectionSymCreate()`, `PetscSectionSymDestroy()`, `PetscSectionSetSym()`, `PetscSectionGetSym()`, `PetscSectionSetFieldSym()`, 37 `PetscSectionGetFieldSym()`, `PetscSectionGetSymPoints()`, `PetscSectionSymType`, `PetscSectionSymSetType()`, `PetscSectionSymGetType()` 38 S*/ 39 typedef struct _p_PetscSectionSym *PetscSectionSym; 40 41 /*J 42 PetscSectionSymType - String with the name of a `PetscSectionSym` type. 43 44 Level: developer 45 46 Note: 47 `PetscSectionSym` has no default implementation, but is used by `DM` in `PetscSectionSymCreateLabel()`. 48 49 .seealso: [PetscSection](sec_petscsection), `PetscSectionSymSetType()`, `PetscSectionSymGetType()`, `PetscSectionSym`, `PetscSectionSymCreate()`, `PetscSectionSymRegister()` 50 J*/ 51 typedef const char *PetscSectionSymType; 52