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 *); 25d2b2dc1eSMatthew G. Knepley PETSC_INTERN PetscErrorCode DMCeedCreate_Internal(DM, IS, PetscBool, CeedQFunctionUser, const char *, DMCeed *); 26d2b2dc1eSMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMCeedCreate(DM, PetscBool, CeedQFunctionUser, const char *); 27*5962854dSMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMCeedCreateFVM(DM, PetscBool, CeedQFunctionUser, const char *, CeedQFunctionContext); 28d2b2dc1eSMatthew G. Knepley 29d2b2dc1eSMatthew G. Knepley struct _PETSc_DMCEED { 30d2b2dc1eSMatthew G. Knepley CeedBasis basis; // Basis for element function space 31*5962854dSMatthew G. Knepley CeedElemRestriction er; // Map from PETSc local vector to FE element vectors 32*5962854dSMatthew G. Knepley CeedElemRestriction erL; // Map from PETSc local vector to FV left cell vectors 33*5962854dSMatthew G. Knepley CeedElemRestriction erR; // Map from PETSc local vector to FV right cell vectors 34d2b2dc1eSMatthew G. Knepley CeedQFunctionUser func; // Plex Function for this operator 35d2b2dc1eSMatthew G. Knepley char *funcSource; // Plex Function source as text 36d2b2dc1eSMatthew G. Knepley CeedQFunction qf; // QFunction expressing the operator action 37d2b2dc1eSMatthew G. Knepley CeedOperator op; // Operator action for this object 38d2b2dc1eSMatthew G. Knepley DMCeed geom; // Operator computing geometric data at quadrature points 39d2b2dc1eSMatthew G. Knepley CeedElemRestriction erq; // Map from PETSc local vector to quadrature points 40d2b2dc1eSMatthew G. Knepley CeedVector qd; // Geometric data at quadrature points used in calculating the qfunction 41d2b2dc1eSMatthew G. Knepley }; 42d2b2dc1eSMatthew G. Knepley 43d2b2dc1eSMatthew G. Knepley #else 44d2b2dc1eSMatthew G. Knepley 45d2b2dc1eSMatthew G. Knepley struct _PETSc_DMCEED { 46d2b2dc1eSMatthew G. Knepley PetscInt dummy; 47d2b2dc1eSMatthew G. Knepley }; 48d2b2dc1eSMatthew G. Knepley 49f918ec44SMatthew G. Knepley #endif 50d2b2dc1eSMatthew G. Knepley 51d2b2dc1eSMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMCeedComputeGeometry(DM, DMCeed); 52d2b2dc1eSMatthew G. Knepley PETSC_EXTERN PetscErrorCode DMCeedDestroy(DMCeed *); 53