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 PetscBool PetscLimiterRegisterAllCalled; 44 PETSC_EXTERN PetscErrorCode PetscLimiterCreate(MPI_Comm, PetscLimiter *); 45 PETSC_EXTERN PetscErrorCode PetscLimiterDestroy(PetscLimiter *); 46 PETSC_EXTERN PetscErrorCode PetscLimiterSetType(PetscLimiter, PetscLimiterType); 47 PETSC_EXTERN PetscErrorCode PetscLimiterGetType(PetscLimiter, PetscLimiterType *); 48 PETSC_EXTERN PetscErrorCode PetscLimiterSetUp(PetscLimiter); 49 PETSC_EXTERN PetscErrorCode PetscLimiterSetFromOptions(PetscLimiter); 50 PETSC_EXTERN PetscErrorCode PetscLimiterViewFromOptions(PetscLimiter, const char[], const char[]); 51 PETSC_EXTERN PetscErrorCode PetscLimiterView(PetscLimiter, PetscViewer); 52 PETSC_EXTERN PetscErrorCode PetscLimiterRegister(const char [], PetscErrorCode (*)(PetscLimiter)); 53 PETSC_EXTERN PetscErrorCode PetscLimiterRegisterAll(void); 54 PETSC_EXTERN PetscErrorCode PetscLimiterRegisterDestroy(void); 55 56 PETSC_EXTERN PetscErrorCode PetscLimiterLimit(PetscLimiter, PetscReal, PetscReal *); 57 58 59 PETSC_EXTERN PetscErrorCode PetscFVInitializePackage(void); 60 61 PETSC_EXTERN PetscClassId PETSCFV_CLASSID; 62 63 /*J 64 PetscFVType - String with the name of a PETSc finite volume discretization 65 66 Level: beginner 67 68 .seealso: PetscFVSetType(), PetscFV 69 J*/ 70 typedef const char *PetscFVType; 71 #define PETSCFVUPWIND "upwind" 72 #define PETSCFVLEASTSQUARES "leastsquares" 73 74 PETSC_EXTERN PetscFunctionList PetscFVList; 75 PETSC_EXTERN PetscBool PetscFVRegisterAllCalled; 76 PETSC_EXTERN PetscErrorCode PetscFVCreate(MPI_Comm, PetscFV *); 77 PETSC_EXTERN PetscErrorCode PetscFVDestroy(PetscFV *); 78 PETSC_EXTERN PetscErrorCode PetscFVSetType(PetscFV, PetscFVType); 79 PETSC_EXTERN PetscErrorCode PetscFVGetType(PetscFV, PetscFVType *); 80 PETSC_EXTERN PetscErrorCode PetscFVSetUp(PetscFV); 81 PETSC_EXTERN PetscErrorCode PetscFVSetFromOptions(PetscFV); 82 PETSC_EXTERN PetscErrorCode PetscFVViewFromOptions(PetscFV, const char[], const char[]); 83 PETSC_EXTERN PetscErrorCode PetscFVView(PetscFV, PetscViewer); 84 PETSC_EXTERN PetscErrorCode PetscFVRegister(const char [], PetscErrorCode (*)(PetscFV)); 85 PETSC_EXTERN PetscErrorCode PetscFVRegisterAll(void); 86 PETSC_EXTERN PetscErrorCode PetscFVRegisterDestroy(void); 87 88 PETSC_EXTERN PetscErrorCode PetscFVSetLimiter(PetscFV, PetscLimiter); 89 PETSC_EXTERN PetscErrorCode PetscFVGetLimiter(PetscFV, PetscLimiter *); 90 PETSC_EXTERN PetscErrorCode PetscFVSetNumComponents(PetscFV, PetscInt); 91 PETSC_EXTERN PetscErrorCode PetscFVGetNumComponents(PetscFV, PetscInt *); 92 PETSC_EXTERN PetscErrorCode PetscFVSetSpatialDimension(PetscFV, PetscInt); 93 PETSC_EXTERN PetscErrorCode PetscFVGetSpatialDimension(PetscFV, PetscInt *); 94 PETSC_EXTERN PetscErrorCode PetscFVSetComputeGradients(PetscFV, PetscBool); 95 PETSC_EXTERN PetscErrorCode PetscFVGetComputeGradients(PetscFV, PetscBool *); 96 PETSC_EXTERN PetscErrorCode PetscFVSetQuadrature(PetscFV, PetscQuadrature); 97 PETSC_EXTERN PetscErrorCode PetscFVGetQuadrature(PetscFV, PetscQuadrature *); 98 99 PETSC_EXTERN PetscErrorCode PetscFVComputeGradient(PetscFV, PetscInt, PetscScalar[], PetscScalar[]); 100 PETSC_EXTERN PetscErrorCode PetscFVIntegrateRHSFunction(PetscFV, PetscDS, PetscInt, PetscInt, PetscFVFaceGeom *, PetscReal *, PetscScalar[], PetscScalar[], PetscScalar[], PetscScalar[]); 101 102 PETSC_EXTERN PetscErrorCode PetscFVLeastSquaresSetMaxFaces(PetscFV, PetscInt); 103 104 #endif 105