xref: /petsc/include/petscfv.h (revision b6aca0f901ce8cabf317a793e98f08224c7a2c6f)
1 /*
2       Objects which encapsulate finite volume spaces and operations
3 */
4 #if !defined(__PETSCFV_H)
5 #define __PETSCFV_H
6 #include <petscdm.h>
7 #include <petscdt.h>
8 #include <petscfvtypes.h>
9 
10 /* Assuming dim <= 3 */
11 typedef struct {
12   PetscReal   normal[3];   /* Area-scaled normals */
13   PetscReal   centroid[3]; /* Location of centroid (quadrature point) */
14   PetscScalar grad[2][3];  /* Face contribution to gradient in left and right cell */
15 } PetscFVFaceGeom;
16 
17 typedef struct {
18   PetscReal centroid[3];
19   PetscReal volume;
20 } PetscFVCellGeom;
21 
22 PETSC_EXTERN PetscClassId PETSCLIMITER_CLASSID;
23 
24 /*J
25   PetscLimiterType - String with the name of a PETSc finite volume slope limiter
26 
27   Level: beginner
28 
29 .seealso: PetscLimiterSetType(), PetscLimiter
30 J*/
31 typedef const char *PetscLimiterType;
32 #define PETSCLIMITERSIN       "sin"
33 #define PETSCLIMITERZERO      "zero"
34 #define PETSCLIMITERNONE      "none"
35 #define PETSCLIMITERMINMOD    "minmod"
36 #define PETSCLIMITERVANLEER   "vanleer"
37 #define PETSCLIMITERVANALBADA "vanalbada"
38 #define PETSCLIMITERSUPERBEE  "superbee"
39 #define PETSCLIMITERMC        "mc"
40 
41 PETSC_EXTERN PetscFunctionList PetscLimiterList;
42 PETSC_EXTERN PetscBool         PetscLimiterRegisterAllCalled;
43 PETSC_EXTERN PetscErrorCode PetscLimiterCreate(MPI_Comm, PetscLimiter *);
44 PETSC_EXTERN PetscErrorCode PetscLimiterDestroy(PetscLimiter *);
45 PETSC_EXTERN PetscErrorCode PetscLimiterSetType(PetscLimiter, PetscLimiterType);
46 PETSC_EXTERN PetscErrorCode PetscLimiterGetType(PetscLimiter, PetscLimiterType *);
47 PETSC_EXTERN PetscErrorCode PetscLimiterSetUp(PetscLimiter);
48 PETSC_EXTERN PetscErrorCode PetscLimiterSetFromOptions(PetscLimiter);
49 PETSC_EXTERN PetscErrorCode PetscLimiterViewFromOptions(PetscLimiter, const char[], const char[]);
50 PETSC_EXTERN PetscErrorCode PetscLimiterView(PetscLimiter, PetscViewer);
51 PETSC_EXTERN PetscErrorCode PetscLimiterRegister(const char [], PetscErrorCode (*)(PetscLimiter));
52 PETSC_EXTERN PetscErrorCode PetscLimiterRegisterAll(void);
53 PETSC_EXTERN PetscErrorCode PetscLimiterRegisterDestroy(void);
54 
55 PETSC_EXTERN PetscErrorCode PetscLimiterLimit(PetscLimiter, PetscReal, PetscReal *);
56 
57 
58 PETSC_EXTERN PetscErrorCode PetscFVInitializePackage(void);
59 
60 PETSC_EXTERN PetscClassId PETSCFV_CLASSID;
61 
62 /*J
63   PetscFVType - String with the name of a PETSc finite volume discretization
64 
65   Level: beginner
66 
67 .seealso: PetscFVSetType(), PetscFV
68 J*/
69 typedef const char *PetscFVType;
70 #define PETSCFVUPWIND       "upwind"
71 #define PETSCFVLEASTSQUARES "leastsquares"
72 
73 PETSC_EXTERN PetscFunctionList PetscFVList;
74 PETSC_EXTERN PetscBool         PetscFVRegisterAllCalled;
75 PETSC_EXTERN PetscErrorCode PetscFVCreate(MPI_Comm, PetscFV *);
76 PETSC_EXTERN PetscErrorCode PetscFVDestroy(PetscFV *);
77 PETSC_EXTERN PetscErrorCode PetscFVSetType(PetscFV, PetscFVType);
78 PETSC_EXTERN PetscErrorCode PetscFVGetType(PetscFV, PetscFVType *);
79 PETSC_EXTERN PetscErrorCode PetscFVSetUp(PetscFV);
80 PETSC_EXTERN PetscErrorCode PetscFVSetFromOptions(PetscFV);
81 PETSC_EXTERN PetscErrorCode PetscFVViewFromOptions(PetscFV, const char[], const char[]);
82 PETSC_EXTERN PetscErrorCode PetscFVView(PetscFV, PetscViewer);
83 PETSC_EXTERN PetscErrorCode PetscFVRegister(const char [], PetscErrorCode (*)(PetscFV));
84 PETSC_EXTERN PetscErrorCode PetscFVRegisterAll(void);
85 PETSC_EXTERN PetscErrorCode PetscFVRegisterDestroy(void);
86 
87 PETSC_EXTERN PetscErrorCode PetscFVSetLimiter(PetscFV, PetscLimiter);
88 PETSC_EXTERN PetscErrorCode PetscFVGetLimiter(PetscFV, PetscLimiter *);
89 PETSC_EXTERN PetscErrorCode PetscFVSetNumComponents(PetscFV, PetscInt);
90 PETSC_EXTERN PetscErrorCode PetscFVGetNumComponents(PetscFV, PetscInt *);
91 PETSC_EXTERN PetscErrorCode PetscFVSetSpatialDimension(PetscFV, PetscInt);
92 PETSC_EXTERN PetscErrorCode PetscFVGetSpatialDimension(PetscFV, PetscInt *);
93 PETSC_EXTERN PetscErrorCode PetscFVSetComputeGradients(PetscFV, PetscBool);
94 PETSC_EXTERN PetscErrorCode PetscFVGetComputeGradients(PetscFV, PetscBool *);
95 PETSC_EXTERN PetscErrorCode PetscFVSetQuadrature(PetscFV, PetscQuadrature);
96 PETSC_EXTERN PetscErrorCode PetscFVGetQuadrature(PetscFV, PetscQuadrature *);
97 
98 PETSC_EXTERN PetscErrorCode PetscFVComputeGradient(PetscFV, PetscInt, PetscScalar[], PetscScalar[]);
99 PETSC_EXTERN PetscErrorCode PetscFVIntegrateRHSFunction(PetscFV, PetscInt, PetscInt, PetscFV[], PetscInt, PetscFVFaceGeom *, PetscReal *, PetscScalar[], PetscScalar[],
100                                                         void (*)(const PetscReal[], const PetscReal[], const PetscScalar[], const PetscScalar[], PetscScalar[], void *),
101                                                         PetscScalar[], PetscScalar[], void *);
102 
103 PETSC_EXTERN PetscErrorCode PetscFVLeastSquaresSetMaxFaces(PetscFV, PetscInt);
104 
105 #endif
106