1 #ifndef structs_h 2 #define structs_h 3 4 #include <ceed.h> 5 #include <petsc.h> 6 7 // ----------------------------------------------------------------------------- 8 // PETSc Operator Structs 9 // ----------------------------------------------------------------------------- 10 11 // Data for PETSc Matshell 12 typedef struct UserO_ *UserO; 13 struct UserO_ { 14 MPI_Comm comm; 15 DM dm; 16 Vec Xloc, Yloc, diag; 17 CeedVector Xceed, Yceed; 18 CeedOperator op; 19 Ceed ceed; 20 }; 21 22 // Data for PETSc Prolong/Restrict Matshells 23 typedef struct UserProlongRestr_ *UserProlongRestr; 24 struct UserProlongRestr_ { 25 MPI_Comm comm; 26 DM dmc, dmf; 27 Vec locvecc, locvecf, multvec; 28 CeedVector ceedvecc, ceedvecf; 29 CeedOperator opProlong, opRestrict; 30 Ceed ceed; 31 }; 32 33 // ----------------------------------------------------------------------------- 34 // libCEED Data Structs 35 // ----------------------------------------------------------------------------- 36 37 // libCEED data struct for level 38 typedef struct CeedData_ *CeedData; 39 struct CeedData_ { 40 Ceed ceed; 41 CeedBasis basisx, basisu, basisctof; 42 CeedElemRestriction Erestrictx, Erestrictu, Erestrictui, Erestrictqdi; 43 CeedQFunction qfApply; 44 CeedOperator opApply, opRestrict, opProlong; 45 CeedVector qdata, Xceed, Yceed; 46 }; 47 48 // BP specific data 49 typedef struct { 50 CeedInt ncompx, ncompu, topodim, qdatasize, qextra; 51 CeedQFunctionUser setupgeo, setuprhs, apply, error; 52 const char *setupgeofname, *setuprhsfname, *applyfname, *errorfname; 53 CeedEvalMode inmode, outmode; 54 CeedQuadMode qmode; 55 PetscBool enforcebc; 56 PetscErrorCode (*bcsfunc)(PetscInt, PetscReal, const PetscReal *, 57 PetscInt, PetscScalar *, void *); 58 } bpData; 59 60 #endif // structs_h 61