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