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