Actual source code: petscfvimpl.h
petsc-3.10.5 2019-03-28
1: #if !defined(_PETSCFVIMPL_H)
2: #define _PETSCFVIMPL_H
4: #include <petscfv.h>
5: #include <petsc/private/petscimpl.h>
7: PETSC_EXTERN PetscBool PetscLimiterRegisterAllCalled;
8: PETSC_EXTERN PetscBool PetscFVRegisterAllCalled;
9: PETSC_EXTERN PetscErrorCode PetscLimiterRegisterAll(void);
10: PETSC_EXTERN PetscErrorCode PetscFVRegisterAll(void);
12: typedef struct _PetscLimiterOps *PetscLimiterOps;
13: struct _PetscLimiterOps {
14: PetscErrorCode (*setfromoptions)(PetscLimiter);
15: PetscErrorCode (*setup)(PetscLimiter);
16: PetscErrorCode (*view)(PetscLimiter,PetscViewer);
17: PetscErrorCode (*destroy)(PetscLimiter);
18: PetscErrorCode (*limit)(PetscLimiter, PetscReal, PetscReal *);
19: };
21: struct _p_PetscLimiter {
22: PETSCHEADER(struct _PetscLimiterOps);
23: void *data; /* Implementation object */
24: };
26: typedef struct {
27: PetscInt dummy;
28: } PetscLimiter_Sin;
30: typedef struct {
31: PetscInt dummy;
32: } PetscLimiter_Zero;
34: typedef struct {
35: PetscInt dummy;
36: } PetscLimiter_None;
38: typedef struct {
39: PetscInt dummy;
40: } PetscLimiter_Minmod;
42: typedef struct {
43: PetscInt dummy;
44: } PetscLimiter_VanLeer;
46: typedef struct {
47: PetscInt dummy;
48: } PetscLimiter_VanAlbada;
50: typedef struct {
51: PetscInt dummy;
52: } PetscLimiter_Superbee;
54: typedef struct {
55: PetscInt dummy;
56: } PetscLimiter_MC;
58: typedef struct _PetscFVOps *PetscFVOps;
59: struct _PetscFVOps {
60: PetscErrorCode (*setfromoptions)(PetscFV);
61: PetscErrorCode (*setup)(PetscFV);
62: PetscErrorCode (*view)(PetscFV,PetscViewer);
63: PetscErrorCode (*destroy)(PetscFV);
64: PetscErrorCode (*computegradient)(PetscFV, PetscInt, const PetscScalar[], PetscScalar []);
65: PetscErrorCode (*integraterhsfunction)(PetscFV, PetscDS, PetscInt, PetscInt, PetscFVFaceGeom *, PetscReal *, PetscScalar[], PetscScalar[], PetscScalar[], PetscScalar[]);
66: };
68: struct _p_PetscFV {
69: PETSCHEADER(struct _PetscFVOps);
70: void *data; /* Implementation object */
71: PetscLimiter limiter; /* The slope limiter */
72: PetscDualSpace dualSpace; /* The dual space P', usually simple */
73: PetscInt numComponents; /* The number of field components */
74: PetscInt dim; /* The spatial dimension */
75: PetscBool computeGradients; /* Flag for gradient computation */
76: PetscScalar *fluxWork; /* The work array for flux calculation */
77: PetscQuadrature quadrature; /* Suitable quadrature on the volume */
78: PetscReal *B, *D, *H; /* Tabulation of pseudo-basis and derivatives at quadrature points */
79: char **componentNames; /* Names of the component fields */
80: };
82: typedef struct {
83: PetscInt cellType;
84: } PetscFV_Upwind;
86: typedef struct {
87: PetscInt maxFaces, workSize;
88: PetscScalar *B, *Binv, *tau, *work;
89: } PetscFV_LeastSquares;
91: PETSC_STATIC_INLINE PetscErrorCode PetscFVInterpolate_Static(PetscFV fv, const PetscScalar x[], PetscInt q, PetscScalar interpolant[])
92: {
93: PetscInt Nc, fc;
97: PetscFVGetNumComponents(fv, &Nc);
98: for (fc = 0; fc < Nc; ++fc) {interpolant[fc] = x[fc];}
99: return(0);
100: }
102: #endif