-
Notifications
You must be signed in to change notification settings - Fork 45
/
structs.h
80 lines (71 loc) · 2.22 KB
/
structs.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#ifndef structs_h
#define structs_h
#include <ceed.h>
#include <petsc.h>
// -----------------------------------------------------------------------------
// PETSc Operator Structs
// -----------------------------------------------------------------------------
// Data for PETSc Matshell
typedef struct UserO_ *UserO;
struct UserO_ {
MPI_Comm comm;
DM dm;
Vec X_loc, Y_loc, diag;
CeedVector x_ceed, y_ceed;
CeedOperator op;
Ceed ceed;
};
// Data for PETSc Prolong/Restrict Matshells
typedef struct UserProlongRestr_ *UserProlongRestr;
struct UserProlongRestr_ {
MPI_Comm comm;
DM dmc, dmf;
Vec loc_vec_c, loc_vec_f, mult_vec;
CeedVector ceed_vec_c, ceed_vec_f;
CeedOperator op_prolong, op_restrict;
Ceed ceed;
};
// Data for PETSc PCshell
typedef struct UserBDDC_ *UserBDDC;
struct UserBDDC_ {
MPI_Comm comm;
DM dm, dm_Pi;
Vec X_loc, Y_loc, diag;
CeedVector x_ceed, y_ceed;
CeedOperator op;
Ceed ceed;
};
// -----------------------------------------------------------------------------
// libCEED Data Structs
// -----------------------------------------------------------------------------
// libCEED data struct for level
typedef struct CeedData_ *CeedData;
struct CeedData_ {
Ceed ceed;
CeedBasis basis_x, basis_u, basis_c_to_f;
CeedElemRestriction elem_restr_x, elem_restr_u, elem_restr_u_i, elem_restr_qd_i;
CeedQFunction qf_apply;
CeedOperator op_apply, op_restrict, op_prolong;
CeedVector q_data, x_ceed, y_ceed;
};
// libCEED data struct for BDDC
typedef struct CeedDataBDDC_ *CeedDataBDDC;
struct CeedDataBDDC_ {
CeedBasis basis_Pi;
CeedInt strides[3];
CeedElemRestriction elem_restr_Pi, elem_restr_r;
CeedOperator op_Pi_r, op_r_Pi, op_Pi_Pi, op_r_r, op_r_r_inv;
CeedVector x_Pi_ceed, y_Pi_ceed, x_r_ceed, y_r_ceed, mult_ceed;
};
// BP specific data
typedef struct {
CeedInt num_comp_x, num_comp_u, topo_dim, q_data_size, q_extra;
CeedQFunctionUser setup_geo, setup_rhs, apply, error;
const char *setup_geo_loc, *setup_rhs_loc, *apply_loc, *error_loc;
CeedEvalMode in_mode, out_mode;
CeedQuadMode q_mode;
PetscBool enforce_bc;
PetscErrorCode (*bc_func)(PetscInt, PetscReal, const PetscReal *,
PetscInt, PetscScalar *, void *);
} BPData;
#endif // structs_h