xref: /libCEED/examples/petsc/include/structs.h (revision 9b072555b57804a6f4e0fc2b1ad83be89838f0e5) !
1e83e87a5Sjeremylt #ifndef structs_h
2e83e87a5Sjeremylt #define structs_h
3e83e87a5Sjeremylt 
4e83e87a5Sjeremylt #include <ceed.h>
5e83e87a5Sjeremylt #include <petsc.h>
6e83e87a5Sjeremylt 
7e83e87a5Sjeremylt // -----------------------------------------------------------------------------
8e83e87a5Sjeremylt // PETSc Operator Structs
9e83e87a5Sjeremylt // -----------------------------------------------------------------------------
10e83e87a5Sjeremylt 
11e83e87a5Sjeremylt // Data for PETSc Matshell
12e83e87a5Sjeremylt typedef struct UserO_ *UserO;
13e83e87a5Sjeremylt struct UserO_ {
14e83e87a5Sjeremylt   MPI_Comm comm;
15e83e87a5Sjeremylt   DM dm;
16*9b072555Sjeremylt   Vec X_loc, Y_loc, diag;
17*9b072555Sjeremylt   CeedVector x_ceed, y_ceed;
18e83e87a5Sjeremylt   CeedOperator op;
19e83e87a5Sjeremylt   Ceed ceed;
20e83e87a5Sjeremylt };
21e83e87a5Sjeremylt 
22e83e87a5Sjeremylt // Data for PETSc Prolong/Restrict Matshells
23e83e87a5Sjeremylt typedef struct UserProlongRestr_ *UserProlongRestr;
24e83e87a5Sjeremylt struct UserProlongRestr_ {
25e83e87a5Sjeremylt   MPI_Comm comm;
26e83e87a5Sjeremylt   DM dmc, dmf;
27*9b072555Sjeremylt   Vec loc_vec_c, loc_vec_f, mult_vec;
28*9b072555Sjeremylt   CeedVector ceed_vec_c, ceed_vec_f;
29*9b072555Sjeremylt   CeedOperator op_prolong, op_restrict;
30e83e87a5Sjeremylt   Ceed ceed;
31e83e87a5Sjeremylt };
32e83e87a5Sjeremylt 
33e83e87a5Sjeremylt // -----------------------------------------------------------------------------
34e83e87a5Sjeremylt // libCEED Data Structs
35e83e87a5Sjeremylt // -----------------------------------------------------------------------------
36e83e87a5Sjeremylt 
37e83e87a5Sjeremylt // libCEED data struct for level
38e83e87a5Sjeremylt typedef struct CeedData_ *CeedData;
39e83e87a5Sjeremylt struct CeedData_ {
40e83e87a5Sjeremylt   Ceed ceed;
41*9b072555Sjeremylt   CeedBasis basis_x, basis_u, basis_c_to_f;
42*9b072555Sjeremylt   CeedElemRestriction elem_restr_x, elem_restr_u, elem_restr_u_i, elem_restr_qd_i;
43*9b072555Sjeremylt   CeedQFunction qf_apply;
44*9b072555Sjeremylt   CeedOperator op_apply, op_restrict, op_prolong;
45*9b072555Sjeremylt   CeedVector q_data, x_ceed, y_ceed;
46e83e87a5Sjeremylt };
47e83e87a5Sjeremylt 
48e83e87a5Sjeremylt // BP specific data
49e83e87a5Sjeremylt typedef struct {
50*9b072555Sjeremylt   CeedInt num_comp_x, num_comp_u, topo_dim, q_data_size, q_extra;
51*9b072555Sjeremylt   CeedQFunctionUser setup_geo, setup_rhs, apply, error;
52*9b072555Sjeremylt   const char *setup_geo_loc, *setup_rhs_loc, *apply_loc, *error_loc;
53*9b072555Sjeremylt   CeedEvalMode in_mode, out_mode;
54*9b072555Sjeremylt   CeedQuadMode q_mode;
55*9b072555Sjeremylt   PetscBool enforce_bc;
56*9b072555Sjeremylt   PetscErrorCode (*bc_func)(PetscInt, PetscReal, const PetscReal *,
57e83e87a5Sjeremylt                             PetscInt, PetscScalar *, void *);
58*9b072555Sjeremylt } BPData;
59e83e87a5Sjeremylt 
60e83e87a5Sjeremylt #endif // structs_h
61