36 {
37
39 try {
42
44
45 PetscBool flg = PETSC_TRUE;
47#if PETSC_VERSION_GE(3, 6, 4)
49 255, &flg);
50#else
53#endif
54 if (flg != PETSC_TRUE) {
55 SETERRQ(PETSC_COMM_SELF, 1, "Error -my_file (mesh file needed)");
56 }
57
58 const char *option;
59 option = "";
61 Range verts;
62 CHKERR moab.get_entities_by_type(0, MBVERTEX, verts,
true);
63
67 CHKERR moab.get_coords(verts, &coords(0, 0));
68 for (
int i = 0;
i < verts.size(); ++
i) {
73
82 }
83
84
85 {
86 std::array<int, 4> faces_nodes = {0, 1, 2, 3};
91 constexpr double eps = 1e-4;
92 double quad_bubbles_sum = 3.275491e+01;
93 double quad_diff_bubbles_sum = 5.838131e+02;
94
96 faces_nodes.data(),
p, &*
N.data().begin(), &*diffN.data().begin(),
97 &*quad_bubbles.data().begin(), &*quad_diff_bubbles.data().begin(),
99
100 if (std::abs(quad_bubbles_sum -
sum_matrix(quad_bubbles)) >
eps) {
102 "wrong result = %8.6e",
sum_matrix(quad_bubbles));
103 }
104 if (std::abs(quad_diff_bubbles_sum -
sum_matrix(quad_diff_bubbles)) >
107 "wrong result = %8.6e",
sum_matrix(quad_diff_bubbles));
108 }
109 }
110
111
112 {
113 int sense[] = {1, -1, 1, -1};
114 int p[] = {3, 4, 5, 6};
115 int P[4];
116 int ee = 0;
117 for (; ee < 4; ee++) {
119 }
120
121 double *quad_edges_ptr[4];
122 std::array<MatrixDouble, 4> quad_edges;
123 for (auto ee : {0, 1, 2, 3}) {
125 quad_edges_ptr[ee] = &quad_edges[ee](0, 0);
126 }
127
128 double *quad_diff_edges_ptr[4];
129 std::array<MatrixDouble, 4> quad_diff_edges;
130 for (auto ee : {0, 1, 2, 3}) {
131 quad_diff_edges[ee] =
MatrixDouble(verts.size(), P[ee] * 2);
132 quad_diff_edges_ptr[ee] = &quad_diff_edges[ee](0, 0);
133 }
134
136 double quad_edges_sum[] = {1.237500e+01, 1.535050e+01, 1.781890e+01,
137 2.015678e+01};
138 double quad_diff_edges_sum[] = {8.470000e+01, 1.192510e+02, 1.580128e+02,
139 1.976378e+02};
140
142 sense,
p, &*
N.data().begin(), &*diffN.data().begin(), quad_edges_ptr,
144
145 for (int ee = 0; ee < 4; ++ee) {
146 if (std::abs(quad_edges_sum[ee] -
sum_matrix(quad_edges[ee])) >
eps)
148 "edge %d wrong result = %8.6e", ee,
150
151 if (std::abs(quad_diff_edges_sum[ee] -
154 "edge %d wrong result = %8.6e", ee,
156 }
157 }
158 }
160
162}
#define CATCH_ERRORS
Catch errors.
@ MOFEM_ATOM_TEST_INVALID
#define CHKERR
Inline error check.
static double sum_matrix(MatrixDouble &m)
PetscErrorCode Legendre_polynomials(int p, double s, double *diff_s, double *L, double *diffL, const int dim)
Calculate Legendre approximation basis.
#define NBFACEQUAD_H1(P)
Number of base functions on quad for H1 space.
PetscErrorCode H1_QuadShapeFunctions_MBQUAD(int *faces_nodes, int p, double *N, double *diffN, double *faceN, double *diff_faceN, int GDIM, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
#define NBEDGE_H1(P)
Numer of base function on edge for H1 space.
PetscErrorCode H1_EdgeShapeFunctions_MBQUAD(int *sense, int *p, double *N, double *diffN, double *edgeN[4], double *diff_edgeN[4], int GDIM, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
FTensor::Index< 'i', SPACE_DIM > i
UBlasMatrix< double > MatrixDouble
PetscErrorCode PetscOptionsGetString(PetscOptions *, const char pre[], const char name[], char str[], size_t size, PetscBool *set)
DeprecatedCoreInterface Interface
static MoFEMErrorCode Initialize(int *argc, char ***args, const char file[], const char help[])
Initializes the MoFEM database PETSc, MOAB and MPI.
static MoFEMErrorCode Finalize()
Checks for options to be called at the conclusion of the program.