xref: /petsc/include/petscsectiontypes.h (revision db7814771ca77b190574494e87b584e981451db0)
1ea844a1aSMatthew Knepley #if !defined(PETSCSECTIONTYPES_H)
2ea844a1aSMatthew Knepley #define PETSCSECTIONTYPES_H
3ea844a1aSMatthew Knepley 
4ea844a1aSMatthew Knepley /*S
5ea844a1aSMatthew Knepley   PetscSection - Mapping from integers in a designated range to contiguous sets of integers.
6ea844a1aSMatthew Knepley 
7ea844a1aSMatthew Knepley   In contrast to IS, which maps from integers to single integers, the range of a PetscSection is in the space of
8ea844a1aSMatthew Knepley   contiguous sets of integers. These ranges are frequently interpreted as domains of other array-like objects,
9ea844a1aSMatthew Knepley   especially other PetscSections, Vecs, and ISs. The domain is set with PetscSectionSetChart() and does not need to
10ea844a1aSMatthew Knepley   start at 0. For each point in the domain of a PetscSection, the output set is represented through an offset and a
11ea844a1aSMatthew Knepley   count, which are set using PetscSectionSetOffset() and PetscSectionSetDof() respectively. Lookup is typically using
12ea844a1aSMatthew Knepley   accessors or routines like VecGetValuesSection().
13ea844a1aSMatthew Knepley 
14ea844a1aSMatthew Knepley   Level: beginner
15ea844a1aSMatthew Knepley 
16*db781477SPatrick Sanan .seealso: `PetscSectionCreate()`, `PetscSectionDestroy()`, `PetscSectionSym`
17ea844a1aSMatthew Knepley S*/
18ea844a1aSMatthew Knepley typedef struct _p_PetscSection *PetscSection;
19ea844a1aSMatthew Knepley 
20ea844a1aSMatthew Knepley /*S
21ea844a1aSMatthew Knepley   PetscSectionSym - Symmetries of the data referenced by a PetscSection.
22ea844a1aSMatthew Knepley 
23ea844a1aSMatthew Knepley   Often the order of data index by a PetscSection is meaningful, and describes additional structure, such as points on a
24ea844a1aSMatthew Knepley   line, grid, or lattice.  If the data is accessed from a different "orientation", then the image of the data under
25ea844a1aSMatthew Knepley   access then undergoes a symmetry transformation.  A PetscSectionSym specifies these symmetries.  The types of
26ea844a1aSMatthew Knepley   symmetries that can be specified are of the form R * P, where R is a diagonal matrix of scalars, and P is a permutation.
27ea844a1aSMatthew Knepley 
28ea844a1aSMatthew Knepley   Level: developer
29ea844a1aSMatthew Knepley 
30*db781477SPatrick Sanan .seealso: `PetscSection`, `PetscSectionSymCreate()`, `PetscSectionSymDestroy()`, `PetscSectionSetSym()`, `PetscSectionGetSym()`, `PetscSectionSetFieldSym()`,
31*db781477SPatrick Sanan           `PetscSectionGetFieldSym()`, `PetscSectionGetSymPoints()`, `PetscSectionSymType`, `PetscSectionSymSetType()`, `PetscSectionSymGetType()`
32ea844a1aSMatthew Knepley S*/
33ea844a1aSMatthew Knepley typedef struct _p_PetscSectionSym *PetscSectionSym;
34ea844a1aSMatthew Knepley 
35ea844a1aSMatthew Knepley /*J
36ea844a1aSMatthew Knepley   PetscSectionSymType - String with the name of a PetscSectionSym type.
37ea844a1aSMatthew Knepley 
38ea844a1aSMatthew Knepley   Level: developer
39ea844a1aSMatthew Knepley 
40ea844a1aSMatthew Knepley   Notes:
41ea844a1aSMatthew Knepley     PetscSectionSym has no default implementation, but is used by DM in PetscSectionSymCreateLabel().
42ea844a1aSMatthew Knepley 
43*db781477SPatrick Sanan .seealso: `PetscSectionSymSetType()`, `PetscSectionSymGetType()`, `PetscSectionSym`, `PetscSectionSymCreate()`, `PetscSectionSymRegister()`
44ea844a1aSMatthew Knepley J*/
45ea844a1aSMatthew Knepley typedef const char *PetscSectionSymType;
46ea844a1aSMatthew Knepley 
47ea844a1aSMatthew Knepley #endif
48