xref: /libCEED/examples/petsc/include/structs.h (revision d4d455536df293f3f9ba6a974c8a4079393bc3b8)
1b7c563b6SJeremy L Thompson #ifndef libceed_petsc_examples_structs_h
2b7c563b6SJeremy L Thompson #define libceed_petsc_examples_structs_h
3e83e87a5Sjeremylt 
4e83e87a5Sjeremylt #include <ceed.h>
5e83e87a5Sjeremylt #include <petsc.h>
6e83e87a5Sjeremylt 
7e83e87a5Sjeremylt // -----------------------------------------------------------------------------
8e83e87a5Sjeremylt // PETSc Operator Structs
9e83e87a5Sjeremylt // -----------------------------------------------------------------------------
10e83e87a5Sjeremylt 
11e83e87a5Sjeremylt // Data for PETSc Matshell
12*d4d45553Srezgarshakeri typedef struct OperatorApplyContext_ *OperatorApplyContext;
13*d4d45553Srezgarshakeri struct OperatorApplyContext_ {
14e83e87a5Sjeremylt   MPI_Comm comm;
15e83e87a5Sjeremylt   DM dm;
169b072555Sjeremylt   Vec X_loc, Y_loc, diag;
179b072555Sjeremylt   CeedVector x_ceed, y_ceed;
18e83e87a5Sjeremylt   CeedOperator op;
19e83e87a5Sjeremylt   Ceed ceed;
20e83e87a5Sjeremylt };
21e83e87a5Sjeremylt 
22e83e87a5Sjeremylt // Data for PETSc Prolong/Restrict Matshells
23*d4d45553Srezgarshakeri typedef struct ProlongRestrContext_ *ProlongRestrContext;
24*d4d45553Srezgarshakeri struct ProlongRestrContext_ {
25e83e87a5Sjeremylt   MPI_Comm comm;
26e83e87a5Sjeremylt   DM dmc, dmf;
279b072555Sjeremylt   Vec loc_vec_c, loc_vec_f, mult_vec;
289b072555Sjeremylt   CeedVector ceed_vec_c, ceed_vec_f;
299b072555Sjeremylt   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;
411c9a79dbSrezgarshakeri   CeedBasis basis_x, basis_u;
429b072555Sjeremylt   CeedElemRestriction elem_restr_x, elem_restr_u, elem_restr_u_i, elem_restr_qd_i;
439b072555Sjeremylt   CeedQFunction qf_apply;
449b072555Sjeremylt   CeedOperator op_apply, op_restrict, op_prolong;
459b072555Sjeremylt   CeedVector q_data, x_ceed, y_ceed;
46*d4d45553Srezgarshakeri   CeedInt q_data_size;
47e83e87a5Sjeremylt };
48e83e87a5Sjeremylt 
49e83e87a5Sjeremylt // BP specific data
50e83e87a5Sjeremylt typedef struct {
519b072555Sjeremylt   CeedInt num_comp_x, num_comp_u, topo_dim, q_data_size, q_extra;
529b072555Sjeremylt   CeedQFunctionUser setup_geo, setup_rhs, apply, error;
539b072555Sjeremylt   const char *setup_geo_loc, *setup_rhs_loc, *apply_loc, *error_loc;
549b072555Sjeremylt   CeedEvalMode in_mode, out_mode;
559b072555Sjeremylt   CeedQuadMode q_mode;
569b072555Sjeremylt   PetscBool enforce_bc;
579b072555Sjeremylt   PetscErrorCode (*bc_func)(PetscInt, PetscReal, const PetscReal *,
58e83e87a5Sjeremylt                             PetscInt, PetscScalar *, void *);
599b072555Sjeremylt } BPData;
60e83e87a5Sjeremylt 
61de1229c5Srezgarshakeri // BP options
62de1229c5Srezgarshakeri typedef enum {
63de1229c5Srezgarshakeri   CEED_BP1 = 0, CEED_BP2 = 1, CEED_BP3 = 2,
64de1229c5Srezgarshakeri   CEED_BP4 = 3, CEED_BP5 = 4, CEED_BP6 = 5
65de1229c5Srezgarshakeri } BPType;
66de1229c5Srezgarshakeri 
67de1229c5Srezgarshakeri // -----------------------------------------------------------------------------
68de1229c5Srezgarshakeri // Parameter structure for running problems
69de1229c5Srezgarshakeri // -----------------------------------------------------------------------------
70de1229c5Srezgarshakeri typedef struct RunParams_ *RunParams;
71de1229c5Srezgarshakeri struct RunParams_ {
72de1229c5Srezgarshakeri   MPI_Comm comm;
73de1229c5Srezgarshakeri   PetscBool test_mode, read_mesh, user_l_nodes, write_solution, simplex;
74de1229c5Srezgarshakeri   char *filename, *hostname;
75de1229c5Srezgarshakeri   PetscInt local_nodes, degree, q_extra, dim, num_comp_u, *mesh_elem;
76de1229c5Srezgarshakeri   PetscInt ksp_max_it_clip[2];
77de1229c5Srezgarshakeri   PetscMPIInt ranks_per_node;
78de1229c5Srezgarshakeri   BPType bp_choice;
79de1229c5Srezgarshakeri   PetscLogStage solve_stage;
80*d4d45553Srezgarshakeri 
81de1229c5Srezgarshakeri };
82de1229c5Srezgarshakeri 
83b7c563b6SJeremy L Thompson #endif // libceed_petsc_examples_structs_h
84