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