1 /* 2 Objects which encapsulate finite volume spaces and operations 3 */ 4 #pragma once 5 6 #include <petscdm.h> 7 #include <petscdt.h> 8 #include <petscspace.h> 9 #include <petscdualspace.h> 10 #include <petscfvtypes.h> 11 #include <petscdstypes.h> 12 13 /* MANSEC = DM */ 14 /* SUBMANSEC = FV */ 15 16 PETSC_EXTERN PetscClassId PETSCLIMITER_CLASSID; 17 18 /*J 19 PetscLimiterType - String with the name of a PETSc finite volume slope limiter 20 21 Level: beginner 22 23 .seealso: `PetscLimiterSetType()`, `PetscLimiter` 24 J*/ 25 typedef const char *PetscLimiterType; 26 #define PETSCLIMITERSIN "sin" 27 #define PETSCLIMITERZERO "zero" 28 #define PETSCLIMITERNONE "none" 29 #define PETSCLIMITERMINMOD "minmod" 30 #define PETSCLIMITERVANLEER "vanleer" 31 #define PETSCLIMITERVANALBADA "vanalbada" 32 #define PETSCLIMITERSUPERBEE "superbee" 33 #define PETSCLIMITERMC "mc" 34 35 PETSC_EXTERN PetscFunctionList PetscLimiterList; 36 PETSC_EXTERN PetscErrorCode PetscLimiterCreate(MPI_Comm, PetscLimiter *); 37 PETSC_EXTERN PetscErrorCode PetscLimiterDestroy(PetscLimiter *); 38 PETSC_EXTERN PetscErrorCode PetscLimiterSetType(PetscLimiter, PetscLimiterType); 39 PETSC_EXTERN PetscErrorCode PetscLimiterGetType(PetscLimiter, PetscLimiterType *); 40 PETSC_EXTERN PetscErrorCode PetscLimiterSetUp(PetscLimiter); 41 PETSC_EXTERN PetscErrorCode PetscLimiterSetFromOptions(PetscLimiter); 42 PETSC_EXTERN PetscErrorCode PetscLimiterViewFromOptions(PetscLimiter, PetscObject, const char[]); 43 PETSC_EXTERN PetscErrorCode PetscLimiterView(PetscLimiter, PetscViewer); 44 PETSC_EXTERN PetscErrorCode PetscLimiterRegister(const char[], PetscErrorCode (*)(PetscLimiter)); 45 PETSC_EXTERN PetscErrorCode PetscLimiterRegisterDestroy(void); 46 47 PETSC_EXTERN PetscErrorCode PetscLimiterLimit(PetscLimiter, PetscReal, PetscReal *); 48 49 PETSC_EXTERN PetscErrorCode PetscFVInitializePackage(void); 50 PETSC_EXTERN PetscErrorCode PetscFVFinalizePackage(void); 51 52 PETSC_EXTERN PetscClassId PETSCFV_CLASSID; 53 54 /*J 55 PetscFVType - String with the name of a PETSc finite volume discretization 56 57 Level: beginner 58 59 .seealso: `PetscFVSetType()`, `PetscFV` 60 J*/ 61 typedef const char *PetscFVType; 62 #define PETSCFVUPWIND "upwind" 63 #define PETSCFVLEASTSQUARES "leastsquares" 64 65 PETSC_EXTERN PetscFunctionList PetscFVList; 66 PETSC_EXTERN PetscErrorCode PetscFVCreate(MPI_Comm, PetscFV *); 67 PETSC_EXTERN PetscErrorCode PetscFVDestroy(PetscFV *); 68 PETSC_EXTERN PetscErrorCode PetscFVSetType(PetscFV, PetscFVType); 69 PETSC_EXTERN PetscErrorCode PetscFVGetType(PetscFV, PetscFVType *); 70 PETSC_EXTERN PetscErrorCode PetscFVSetUp(PetscFV); 71 PETSC_EXTERN PetscErrorCode PetscFVSetFromOptions(PetscFV); 72 PETSC_EXTERN PetscErrorCode PetscFVViewFromOptions(PetscFV, PetscObject, const char[]); 73 PETSC_EXTERN PetscErrorCode PetscFVView(PetscFV, PetscViewer); 74 PETSC_EXTERN PetscErrorCode PetscFVRegister(const char[], PetscErrorCode (*)(PetscFV)); 75 PETSC_EXTERN PetscErrorCode PetscFVRegisterDestroy(void); 76 PETSC_EXTERN PetscErrorCode PetscFVSetComponentName(PetscFV, PetscInt, const char[]); 77 PETSC_EXTERN PetscErrorCode PetscFVGetComponentName(PetscFV, PetscInt, const char *[]); 78 79 PETSC_EXTERN PetscErrorCode PetscFVSetLimiter(PetscFV, PetscLimiter); 80 PETSC_EXTERN PetscErrorCode PetscFVGetLimiter(PetscFV, PetscLimiter *); 81 PETSC_EXTERN PetscErrorCode PetscFVSetNumComponents(PetscFV, PetscInt); 82 PETSC_EXTERN PetscErrorCode PetscFVGetNumComponents(PetscFV, PetscInt *); 83 PETSC_EXTERN PetscErrorCode PetscFVSetSpatialDimension(PetscFV, PetscInt); 84 PETSC_EXTERN PetscErrorCode PetscFVGetSpatialDimension(PetscFV, PetscInt *); 85 PETSC_EXTERN PetscErrorCode PetscFVSetComputeGradients(PetscFV, PetscBool); 86 PETSC_EXTERN PetscErrorCode PetscFVGetComputeGradients(PetscFV, PetscBool *); 87 PETSC_EXTERN PetscErrorCode PetscFVSetQuadrature(PetscFV, PetscQuadrature); 88 PETSC_EXTERN PetscErrorCode PetscFVGetQuadrature(PetscFV, PetscQuadrature *); 89 PETSC_EXTERN PetscErrorCode PetscFVSetDualSpace(PetscFV, PetscDualSpace); 90 PETSC_EXTERN PetscErrorCode PetscFVGetDualSpace(PetscFV, PetscDualSpace *); 91 PETSC_EXTERN PetscErrorCode PetscFVCreateDualSpace(PetscFV, DMPolytopeType); 92 93 PETSC_EXTERN PetscErrorCode PetscFVClone(PetscFV, PetscFV *); 94 PETSC_EXTERN PetscErrorCode PetscFVRefine(PetscFV, PetscFV *); 95 96 PETSC_EXTERN PetscErrorCode PetscFVGetCellTabulation(PetscFV, PetscTabulation *); 97 PETSC_EXTERN PetscErrorCode PetscFVCreateTabulation(PetscFV, PetscInt, PetscInt, const PetscReal[], PetscInt, PetscTabulation *); 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 PETSC_EXTERN PetscErrorCode PetscDualSpaceApplyFVM(PetscDualSpace, PetscInt, PetscReal, PetscFVCellGeom *, PetscInt, PetscErrorCode (*)(PetscInt, PetscReal, const PetscReal[], PetscInt, PetscScalar *, void *), void *, PetscScalar *); 105