1a4963045SJacob Faibussowitsch #pragma once 2f918ec44SMatthew G. Knepley 3f918ec44SMatthew G. Knepley #include <petscdm.h> 4f918ec44SMatthew G. Knepley 5*1850900dSBarry Smith /* MANSEC = DM */ 6*1850900dSBarry Smith 7f918ec44SMatthew G. Knepley #if defined(PETSC_HAVE_LIBCEED) 8f918ec44SMatthew G. Knepley #include <ceed.h> 9f918ec44SMatthew G. Knepley 105f80ce2aSJacob Faibussowitsch #if defined(PETSC_CLANG_STATIC_ANALYZER) 113ba16761SJacob Faibussowitsch void PetscCallCEED(CeedErrorType); 125f80ce2aSJacob Faibussowitsch #else 139566063dSJacob Faibussowitsch #define PetscCallCEED(...) \ 14a2c9b50fSJeremy L Thompson do { \ 153ba16761SJacob Faibussowitsch CeedErrorType ierr_ceed_ = __VA_ARGS__; \ 165f80ce2aSJacob Faibussowitsch PetscCheck(ierr_ceed_ == CEED_ERROR_SUCCESS, PETSC_COMM_SELF, PETSC_ERR_LIB, "libCEED error: %s", CeedErrorTypes[ierr_ceed_]); \ 17a2c9b50fSJeremy L Thompson } while (0) 185f80ce2aSJacob Faibussowitsch #endif /* PETSC_CLANG_STATIC_ANALYZER */ 199566063dSJacob Faibussowitsch #define CHKERRQ_CEED(...) PetscCallCEED(__VA_ARGS__) 20a2c9b50fSJeremy L Thompson 21f918ec44SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMGetCeed(DM, Ceed *); 22a2c9b50fSJeremy L Thompson 237ce467fcSMatthew G. Knepley PETSC_EXTERN PetscErrorCode VecGetCeedVector(Vec, Ceed, CeedVector *); 247ce467fcSMatthew G. Knepley PETSC_EXTERN PetscErrorCode VecGetCeedVectorRead(Vec, Ceed, CeedVector *); 257ce467fcSMatthew G. Knepley PETSC_EXTERN PetscErrorCode VecRestoreCeedVector(Vec, CeedVector *); 267ce467fcSMatthew G. Knepley PETSC_EXTERN PetscErrorCode VecRestoreCeedVectorRead(Vec, CeedVector *); 27d2b2dc1eSMatthew G. Knepley PETSC_INTERN PetscErrorCode DMCeedCreate_Internal(DM, IS, PetscBool, CeedQFunctionUser, const char *, DMCeed *); 28d2b2dc1eSMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMCeedCreate(DM, PetscBool, CeedQFunctionUser, const char *); 295962854dSMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMCeedCreateFVM(DM, PetscBool, CeedQFunctionUser, const char *, CeedQFunctionContext); 30d2b2dc1eSMatthew G. Knepley 31d2b2dc1eSMatthew G. Knepley struct _PETSc_DMCEED { 32d2b2dc1eSMatthew G. Knepley CeedBasis basis; // Basis for element function space 335962854dSMatthew G. Knepley CeedElemRestriction er; // Map from PETSc local vector to FE element vectors 345962854dSMatthew G. Knepley CeedElemRestriction erL; // Map from PETSc local vector to FV left cell vectors 355962854dSMatthew G. Knepley CeedElemRestriction erR; // Map from PETSc local vector to FV right cell vectors 36d2b2dc1eSMatthew G. Knepley CeedQFunctionUser func; // Plex Function for this operator 37d2b2dc1eSMatthew G. Knepley char *funcSource; // Plex Function source as text 38d2b2dc1eSMatthew G. Knepley CeedQFunction qf; // QFunction expressing the operator action 39d2b2dc1eSMatthew G. Knepley CeedOperator op; // Operator action for this object 40d2b2dc1eSMatthew G. Knepley DMCeed geom; // Operator computing geometric data at quadrature points 41d2b2dc1eSMatthew G. Knepley CeedElemRestriction erq; // Map from PETSc local vector to quadrature points 42d2b2dc1eSMatthew G. Knepley CeedVector qd; // Geometric data at quadrature points used in calculating the qfunction 43354b609cSMatthew G. Knepley DMCeed info; // Mesh information at quadrature points 44354b609cSMatthew G. Knepley CeedElemRestriction eri; // Map from PETSc local vector to quadrature points 45354b609cSMatthew G. Knepley CeedVector qi; // Mesh information at quadrature points 46d2b2dc1eSMatthew G. Knepley }; 47d2b2dc1eSMatthew G. Knepley 48d2b2dc1eSMatthew G. Knepley #else 49d2b2dc1eSMatthew G. Knepley 50d2b2dc1eSMatthew G. Knepley struct _PETSc_DMCEED { 51d2b2dc1eSMatthew G. Knepley PetscInt dummy; 52d2b2dc1eSMatthew G. Knepley }; 53d2b2dc1eSMatthew G. Knepley 54f918ec44SMatthew G. Knepley #endif 55d2b2dc1eSMatthew G. Knepley 56d2b2dc1eSMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMCeedComputeGeometry(DM, DMCeed); 57354b609cSMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMCeedComputeInfo(DM, DMCeed); 58d2b2dc1eSMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMCeedDestroy(DMCeed *); 59