Actual source code: petscfvimpl.h

petsc-3.10.5 2019-03-28
Report Typos and Errors
  1: #if !defined(_PETSCFVIMPL_H)
  2: #define _PETSCFVIMPL_H

  4:  #include <petscfv.h>
  5:  #include <petsc/private/petscimpl.h>

  7: PETSC_EXTERN PetscBool PetscLimiterRegisterAllCalled;
  8: PETSC_EXTERN PetscBool PetscFVRegisterAllCalled;
  9: PETSC_EXTERN PetscErrorCode PetscLimiterRegisterAll(void);
 10: PETSC_EXTERN PetscErrorCode PetscFVRegisterAll(void);

 12: typedef struct _PetscLimiterOps *PetscLimiterOps;
 13: struct _PetscLimiterOps {
 14:   PetscErrorCode (*setfromoptions)(PetscLimiter);
 15:   PetscErrorCode (*setup)(PetscLimiter);
 16:   PetscErrorCode (*view)(PetscLimiter,PetscViewer);
 17:   PetscErrorCode (*destroy)(PetscLimiter);
 18:   PetscErrorCode (*limit)(PetscLimiter, PetscReal, PetscReal *);
 19: };

 21: struct _p_PetscLimiter {
 22:   PETSCHEADER(struct _PetscLimiterOps);
 23:   void           *data;             /* Implementation object */
 24: };

 26: typedef struct {
 27:   PetscInt dummy;
 28: } PetscLimiter_Sin;

 30: typedef struct {
 31:   PetscInt dummy;
 32: } PetscLimiter_Zero;

 34: typedef struct {
 35:   PetscInt dummy;
 36: } PetscLimiter_None;

 38: typedef struct {
 39:   PetscInt dummy;
 40: } PetscLimiter_Minmod;

 42: typedef struct {
 43:   PetscInt dummy;
 44: } PetscLimiter_VanLeer;

 46: typedef struct {
 47:   PetscInt dummy;
 48: } PetscLimiter_VanAlbada;

 50: typedef struct {
 51:   PetscInt dummy;
 52: } PetscLimiter_Superbee;

 54: typedef struct {
 55:   PetscInt dummy;
 56: } PetscLimiter_MC;

 58: typedef struct _PetscFVOps *PetscFVOps;
 59: struct _PetscFVOps {
 60:   PetscErrorCode (*setfromoptions)(PetscFV);
 61:   PetscErrorCode (*setup)(PetscFV);
 62:   PetscErrorCode (*view)(PetscFV,PetscViewer);
 63:   PetscErrorCode (*destroy)(PetscFV);
 64:   PetscErrorCode (*computegradient)(PetscFV, PetscInt, const PetscScalar[], PetscScalar []);
 65:   PetscErrorCode (*integraterhsfunction)(PetscFV, PetscDS, PetscInt, PetscInt, PetscFVFaceGeom *, PetscReal *, PetscScalar[], PetscScalar[], PetscScalar[], PetscScalar[]);
 66: };

 68: struct _p_PetscFV {
 69:   PETSCHEADER(struct _PetscFVOps);
 70:   void           *data;             /* Implementation object */
 71:   PetscLimiter    limiter;          /* The slope limiter */
 72:   PetscDualSpace  dualSpace;        /* The dual space P', usually simple */
 73:   PetscInt        numComponents;    /* The number of field components */
 74:   PetscInt        dim;              /* The spatial dimension */
 75:   PetscBool       computeGradients; /* Flag for gradient computation */
 76:   PetscScalar    *fluxWork;         /* The work array for flux calculation */
 77:   PetscQuadrature quadrature;       /* Suitable quadrature on the volume */
 78:   PetscReal      *B, *D, *H;        /* Tabulation of pseudo-basis and derivatives at quadrature points */
 79:   char          **componentNames;   /* Names of the component fields */
 80: };

 82: typedef struct {
 83:   PetscInt cellType;
 84: } PetscFV_Upwind;

 86: typedef struct {
 87:   PetscInt     maxFaces, workSize;
 88:   PetscScalar *B, *Binv, *tau, *work;
 89: } PetscFV_LeastSquares;

 91: PETSC_STATIC_INLINE PetscErrorCode PetscFVInterpolate_Static(PetscFV fv, const PetscScalar x[], PetscInt q, PetscScalar interpolant[])
 92: {
 93:   PetscInt       Nc, fc;

 97:   PetscFVGetNumComponents(fv, &Nc);
 98:   for (fc = 0; fc < Nc; ++fc) {interpolant[fc] = x[fc];}
 99:   return(0);
100: }

102: #endif