xref: /petsc/include/petscdmceed.h (revision 0ff9d02ecf1627951ed050a8344155223c6ca4ea)
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