xref: /libCEED/examples/petsc/include/structs.h (revision e83e87a50f1b2e8810b376a735430565127e4d25)
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