1 #if !defined(PETSCDSTYPES_H) 2 #define PETSCDSTYPES_H 3 4 #include <petscdmlabel.h> 5 6 /* SUBMANSEC = DT */ 7 8 /*S 9 PetscDS - PETSc object that manages a discrete system, which is a set of discretizations + continuum equations from a PetscWeakForm 10 11 Level: intermediate 12 13 .seealso: `PetscDSCreate()`, `PetscDSSetType()`, `PetscDSType`, `PetscWeakForm`, `PetscFECreate()`, `PetscFVCreate()` 14 S*/ 15 typedef struct _p_PetscDS *PetscDS; 16 17 /*S 18 PetscWeakForm - PETSc object that manages a sets of pointwise functions defining a system of equations 19 20 Level: intermediate 21 22 .seealso: `PetscWeakFormCreate()`, `PetscDS`, `PetscFECreate()`, `PetscFVCreate()` 23 S*/ 24 typedef struct _p_PetscWeakForm *PetscWeakForm; 25 26 /*S 27 PetscFormKey - This key indicates how to use a set of pointwise functions defining part of a system of equations 28 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. 32 33 Level: intermediate 34 35 .seealso: `DMPlexSNESComputeResidualFEM()`, `DMPlexSNESComputeJacobianFEM()`, `DMPlexSNESComputeBoundaryFEM()` 36 S*/ 37 typedef struct _PetscFormKey 38 { 39 DMLabel label; /* The (label, value) select a subdomain */ 40 PetscInt value; 41 PetscInt field; /* Selects the field for the test function */ 42 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. */ 43 } PetscFormKey; 44 45 /*E 46 PetscWeakFormKind - The kind of weak form. The specific forms are given in the documentation for the integraton functions. 47 48 Supported kinds include: 49 $ OBJECTIVE - Objective form 50 $ F0, F1 - Residual forms 51 $ G0, G1, G2, G3 - Jacobian forms 52 $ GP0, GP1, GP2, GP3 - Jacobian preconditioner matrix forms 53 $ GT0, GT1, GT2, GT3 - Dynamic Jacobian matrix forms 54 $ BDF0, BDF1 - Boundary Residual forms 55 $ BDG0, BDG1, BDG2, BDG3 - Jacobian forms 56 $ BDGP0, BDGP1, BDGP2, BDGP3 - Jacobian preconditioner matrix forms 57 $ R - Riemann solver 58 59 Level: beginner 60 61 .seealso: `PetscFEIntegrateResidual()`, `PetscFEIntegrateJacobian()`, `PetscFEIntegrateBdResidual()`, `PetscFEIntegrateBdJacobian()`, `PetscFVIntegrateRHSFunction()`, `PetscWeakFormSetIndexResidual()`, `PetscWeakFormClearIndex()` 62 E*/ 63 typedef enum {PETSC_WF_OBJECTIVE, PETSC_WF_F0, PETSC_WF_F1, PETSC_WF_G0, PETSC_WF_G1, PETSC_WF_G2, PETSC_WF_G3, PETSC_WF_GP0, PETSC_WF_GP1, PETSC_WF_GP2, PETSC_WF_GP3, PETSC_WF_GT0, PETSC_WF_GT1, PETSC_WF_GT2, PETSC_WF_GT3, PETSC_WF_BDF0, PETSC_WF_BDF1, PETSC_WF_BDG0, PETSC_WF_BDG1, PETSC_WF_BDG2, PETSC_WF_BDG3, PETSC_WF_BDGP0, PETSC_WF_BDGP1, PETSC_WF_BDGP2, PETSC_WF_BDGP3, PETSC_WF_R, PETSC_NUM_WF} PetscWeakFormKind; 64 PETSC_EXTERN const char *const PetscWeakFormKinds[]; 65 66 #endif 67