1a4963045SJacob Faibussowitsch #pragma once 2f918ec44SMatthew G. Knepley 3f918ec44SMatthew G. Knepley #include <petscdm.h> 4f918ec44SMatthew G. Knepley 5f918ec44SMatthew G. Knepley #if defined(PETSC_HAVE_LIBCEED) 6f918ec44SMatthew G. Knepley #include <ceed.h> 7f918ec44SMatthew G. Knepley 85f80ce2aSJacob Faibussowitsch #if defined(PETSC_CLANG_STATIC_ANALYZER) 93ba16761SJacob Faibussowitsch void PetscCallCEED(CeedErrorType); 105f80ce2aSJacob Faibussowitsch #else 119566063dSJacob Faibussowitsch #define PetscCallCEED(...) \ 12a2c9b50fSJeremy L Thompson do { \ 133ba16761SJacob Faibussowitsch CeedErrorType ierr_ceed_ = __VA_ARGS__; \ 145f80ce2aSJacob Faibussowitsch PetscCheck(ierr_ceed_ == CEED_ERROR_SUCCESS, PETSC_COMM_SELF, PETSC_ERR_LIB, "libCEED error: %s", CeedErrorTypes[ierr_ceed_]); \ 15a2c9b50fSJeremy L Thompson } while (0) 165f80ce2aSJacob Faibussowitsch #endif /* PETSC_CLANG_STATIC_ANALYZER */ 179566063dSJacob Faibussowitsch #define CHKERRQ_CEED(...) PetscCallCEED(__VA_ARGS__) 18a2c9b50fSJeremy L Thompson 19f918ec44SMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMGetCeed(DM, Ceed *); 20a2c9b50fSJeremy L Thompson 217ce467fcSMatthew G. Knepley PETSC_EXTERN PetscErrorCode VecGetCeedVector(Vec, Ceed, CeedVector *); 227ce467fcSMatthew G. Knepley PETSC_EXTERN PetscErrorCode VecGetCeedVectorRead(Vec, Ceed, CeedVector *); 237ce467fcSMatthew G. Knepley PETSC_EXTERN PetscErrorCode VecRestoreCeedVector(Vec, CeedVector *); 247ce467fcSMatthew G. Knepley PETSC_EXTERN PetscErrorCode VecRestoreCeedVectorRead(Vec, CeedVector *); 25*d2b2dc1eSMatthew G. Knepley PETSC_INTERN PetscErrorCode DMCeedCreate_Internal(DM, IS, PetscBool, CeedQFunctionUser, const char *, DMCeed *); 26*d2b2dc1eSMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMCeedCreate(DM, PetscBool, CeedQFunctionUser, const char *); 27*d2b2dc1eSMatthew G. Knepley 28*d2b2dc1eSMatthew G. Knepley struct _PETSc_DMCEED { 29*d2b2dc1eSMatthew G. Knepley CeedBasis basis; // Basis for element function space 30*d2b2dc1eSMatthew G. Knepley CeedElemRestriction er; // Map from PETSc local vector to element vectors 31*d2b2dc1eSMatthew G. Knepley CeedQFunctionUser func; // Plex Function for this operator 32*d2b2dc1eSMatthew G. Knepley char *funcSource; // Plex Function source as text 33*d2b2dc1eSMatthew G. Knepley CeedQFunction qf; // QFunction expressing the operator action 34*d2b2dc1eSMatthew G. Knepley CeedOperator op; // Operator action for this object 35*d2b2dc1eSMatthew G. Knepley DMCeed geom; // Operator computing geometric data at quadrature points 36*d2b2dc1eSMatthew G. Knepley CeedElemRestriction erq; // Map from PETSc local vector to quadrature points 37*d2b2dc1eSMatthew G. Knepley CeedVector qd; // Geometric data at quadrature points used in calculating the qfunction 38*d2b2dc1eSMatthew G. Knepley }; 39*d2b2dc1eSMatthew G. Knepley 40*d2b2dc1eSMatthew G. Knepley #else 41*d2b2dc1eSMatthew G. Knepley 42*d2b2dc1eSMatthew G. Knepley struct _PETSc_DMCEED { 43*d2b2dc1eSMatthew G. Knepley PetscInt dummy; 44*d2b2dc1eSMatthew G. Knepley }; 45*d2b2dc1eSMatthew G. Knepley 46f918ec44SMatthew G. Knepley #endif 47*d2b2dc1eSMatthew G. Knepley 48*d2b2dc1eSMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMCeedComputeGeometry(DM, DMCeed); 49*d2b2dc1eSMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMCeedDestroy(DMCeed *); 50