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