Actual source code: petscdstypes.h
1: #pragma once
3: #include <petscdmlabel.h>
5: /* MANSEC = DM */
6: /* SUBMANSEC = DT */
8: /*S
9: PetscDS - PETSc object that manages a discrete system, which is a set of discretizations + continuum equations from a `PetscWeakForm`
11: Level: intermediate
13: .seealso: `PetscDSCreate()`, `PetscDSSetType()`, `PetscDSType`, `PetscWeakForm`, `PetscFECreate()`, `PetscFVCreate()`
14: S*/
15: typedef struct _p_PetscDS *PetscDS;
17: /*S
18: PetscWeakForm - PETSc object that manages a sets of pointwise functions defining a system of equations
20: Level: intermediate
22: .seealso: `PetscWeakFormCreate()`, `PetscDS`, `PetscFECreate()`, `PetscFVCreate()`
23: S*/
24: typedef struct _p_PetscWeakForm *PetscWeakForm;
26: /*S
27: PetscFormKey - This key indicates how to use a set of pointwise functions defining part of a system of equations
29: The subdomain on which to integrate is specified by (label, value), the test function field by (field), and the
30: piece of the equation by (part). For example, LHS = 0 and RHS = 1 in IMEX methods. More pieces can be present for
31: operator splitting methods.
33: Level: intermediate
35: Note:
36: This is a struct, not a `PetscObject`
38: .seealso: `DMPlexSNESComputeResidualFEM()`, `DMPlexSNESComputeJacobianFEM()`, `DMPlexSNESComputeBoundaryFEM()`
39: S*/
40: typedef struct {
41: DMLabel label; /* The (label, value) select a subdomain */
42: PetscInt value;
43: PetscInt field; /* Selects the field for the test function */
44: PetscInt part; /* Selects the equation part. For example, LHS = 0 and RHS = 1 in IMEX methods. More pieces can be present for operator splitting methods. */
45: } PetscFormKey;
47: /*E
48: PetscWeakFormKind - The kind of weak form. The specific forms are given in the documentation for the integraton functions.
50: Values:
51: + OBJECTIVE - Objective form
52: . F0, F1 - Residual forms
53: . G0, G1, G2, G3 - Jacobian forms
54: . GP0, GP1, GP2, GP3 - Jacobian preconditioner matrix forms
55: . GT0, GT1, GT2, GT3 - Dynamic Jacobian matrix forms
56: . BDF0, BDF1 - Boundary Residual forms
57: . BDG0, BDG1, BDG2, BDG3 - Jacobian forms
58: . BDGP0, BDGP1, BDGP2, BDGP3 - Jacobian preconditioner matrix forms
59: . R - Riemann solver
60: - CEED - libCEED QFunction
62: Level: beginner
64: .seealso: `PetscWeakForm`, `PetscFEIntegrateResidual()`, `PetscFEIntegrateJacobian()`, `PetscFEIntegrateBdResidual()`, `PetscFEIntegrateBdJacobian()`,
65: `PetscFVIntegrateRHSFunction()`, `PetscWeakFormSetIndexResidual()`, `PetscWeakFormClearIndex()`
66: E*/
67: typedef enum {
68: PETSC_WF_OBJECTIVE,
69: PETSC_WF_F0,
70: PETSC_WF_F1,
71: PETSC_WF_G0,
72: PETSC_WF_G1,
73: PETSC_WF_G2,
74: PETSC_WF_G3,
75: PETSC_WF_GP0,
76: PETSC_WF_GP1,
77: PETSC_WF_GP2,
78: PETSC_WF_GP3,
79: PETSC_WF_GT0,
80: PETSC_WF_GT1,
81: PETSC_WF_GT2,
82: PETSC_WF_GT3,
83: PETSC_WF_BDF0,
84: PETSC_WF_BDF1,
85: PETSC_WF_BDG0,
86: PETSC_WF_BDG1,
87: PETSC_WF_BDG2,
88: PETSC_WF_BDG3,
89: PETSC_WF_BDGP0,
90: PETSC_WF_BDGP1,
91: PETSC_WF_BDGP2,
92: PETSC_WF_BDGP3,
93: PETSC_WF_R,
94: PETSC_WF_CEED,
95: PETSC_NUM_WF
96: } PetscWeakFormKind;
97: PETSC_EXTERN const char *const PetscWeakFormKinds[];
99: typedef void (*PetscPointFunc)(PetscInt, PetscInt, PetscInt, const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]);
100: typedef void (*PetscPointJac)(PetscInt, PetscInt, PetscInt, const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], PetscReal, PetscReal, const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]);
101: typedef void (*PetscBdPointFunc)(PetscInt, PetscInt, PetscInt, const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]);
102: typedef void (*PetscBdPointJac)(PetscInt, PetscInt, PetscInt, const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], const PetscInt[], const PetscInt[], const PetscScalar[], const PetscScalar[], const PetscScalar[], PetscReal, PetscReal, const PetscReal[], const PetscReal[], PetscInt, const PetscScalar[], PetscScalar[]);
103: typedef void (*PetscRiemannFunc)(PetscInt, PetscInt, const PetscReal[], const PetscReal[], const PetscScalar[], const PetscScalar[], PetscInt, const PetscScalar[], PetscScalar[], void *);
105: /*S
106: PetscSimplePointFn - A prototype of a simple pointwise function that can be passed to, for example, `DMPlexTransformExtrudeSetNormalFunction()`
108: Calling Sequence:
109: + dim - The coordinate dimension of the original mesh (usually a surface)
110: . time - The current time, or 0.
111: . x - The location of the current normal, in the coordinate space of the original mesh
112: . r - The layer number of this point
113: . u - The user provides the computed normal on output
114: - ctx - An optional user context
116: Level: beginner
118: Note:
119: The deprecated `PetscSimplePointFunc` works as a replacement for `PetscSimplePointFn` *
121: .seealso: `DMPlexTransformExtrudeSetNormalFunction()`
122: S*/
123: PETSC_EXTERN_TYPEDEF typedef PetscErrorCode(PetscSimplePointFn)(PetscInt dim, PetscReal time, const PetscReal x[], PetscInt r, PetscScalar u[], void *ctx);
125: PETSC_EXTERN_TYPEDEF typedef PetscSimplePointFn *PetscSimplePointFunc;