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