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 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 PetscErrorCode PetscFVCreate(MPI_Comm, PetscFV *); 75 PETSC_EXTERN PetscErrorCode PetscFVDestroy(PetscFV *); 76 PETSC_EXTERN PetscErrorCode PetscFVSetType(PetscFV, PetscFVType); 77 PETSC_EXTERN PetscErrorCode PetscFVGetType(PetscFV, PetscFVType *); 78 PETSC_EXTERN PetscErrorCode PetscFVSetUp(PetscFV); 79 PETSC_EXTERN PetscErrorCode PetscFVSetFromOptions(PetscFV); 80 PETSC_EXTERN PetscErrorCode PetscFVViewFromOptions(PetscFV, const char[], const char[]); 81 PETSC_EXTERN PetscErrorCode PetscFVView(PetscFV, PetscViewer); 82 PETSC_EXTERN PetscErrorCode PetscFVRegister(const char [], PetscErrorCode (*)(PetscFV)); 83 PETSC_EXTERN PetscErrorCode PetscFVRegisterAll(void); 84 PETSC_EXTERN PetscErrorCode PetscFVRegisterDestroy(void); 85 86 PETSC_EXTERN PetscErrorCode PetscFVSetLimiter(PetscFV, PetscLimiter); 87 PETSC_EXTERN PetscErrorCode PetscFVGetLimiter(PetscFV, PetscLimiter *); 88 PETSC_EXTERN PetscErrorCode PetscFVSetNumComponents(PetscFV, PetscInt); 89 PETSC_EXTERN PetscErrorCode PetscFVGetNumComponents(PetscFV, PetscInt *); 90 PETSC_EXTERN PetscErrorCode PetscFVSetSpatialDimension(PetscFV, PetscInt); 91 PETSC_EXTERN PetscErrorCode PetscFVGetSpatialDimension(PetscFV, PetscInt *); 92 PETSC_EXTERN PetscErrorCode PetscFVSetComputeGradients(PetscFV, PetscBool); 93 PETSC_EXTERN PetscErrorCode PetscFVGetComputeGradients(PetscFV, PetscBool *); 94 PETSC_EXTERN PetscErrorCode PetscFVSetQuadrature(PetscFV, PetscQuadrature); 95 PETSC_EXTERN PetscErrorCode PetscFVGetQuadrature(PetscFV, PetscQuadrature *); 96 97 PETSC_EXTERN PetscErrorCode PetscFVComputeGradient(PetscFV, PetscInt, PetscScalar[], PetscScalar[]); 98 PETSC_EXTERN PetscErrorCode PetscFVIntegrateRHSFunction(PetscFV, PetscDS, PetscInt, PetscInt, PetscFVFaceGeom *, PetscReal *, PetscScalar[], PetscScalar[], PetscScalar[], PetscScalar[]); 99 100 PETSC_EXTERN PetscErrorCode PetscFVLeastSquaresSetMaxFaces(PetscFV, PetscInt); 101 102 #endif 103