xref: /libCEED/examples/petsc/include/structs.h (revision cd88d23c377cb39cade98b31cad31ac580d0d240)
1 #ifndef libceed_petsc_examples_structs_h
2 #define libceed_petsc_examples_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 X_loc, Y_loc, diag;
17   CeedVector x_ceed, y_ceed;
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 loc_vec_c, loc_vec_f, mult_vec;
28   CeedVector ceed_vec_c, ceed_vec_f;
29   CeedOperator op_prolong, op_restrict;
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 basis_x, basis_u, basis_c_to_f;
42   CeedElemRestriction elem_restr_x, elem_restr_u, elem_restr_u_i, elem_restr_qd_i;
43   CeedQFunction qf_apply;
44   CeedOperator op_apply, op_restrict, op_prolong;
45   CeedVector q_data, x_ceed, y_ceed;
46 };
47 
48 // BP specific data
49 typedef struct {
50   CeedInt num_comp_x, num_comp_u, topo_dim, q_data_size, q_extra;
51   CeedQFunctionUser setup_geo, setup_rhs, apply, error;
52   const char *setup_geo_loc, *setup_rhs_loc, *apply_loc, *error_loc;
53   CeedEvalMode in_mode, out_mode;
54   CeedQuadMode q_mode;
55   PetscBool enforce_bc;
56   PetscErrorCode (*bc_func)(PetscInt, PetscReal, const PetscReal *,
57                             PetscInt, PetscScalar *, void *);
58 } BPData;
59 
60 #endif // libceed_petsc_examples_structs_h
61