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