145 {
147
150 PetscErrorCode (*base_polynomials)(
int p,
double s,
double *diff_s,
double *
L,
151 double *diffL, const int dim) =
153
154 int nb_gauss_pts = pts.size2();
155
156
157 if (data.dataOnEntities[MBEDGE].size() != 9)
159
160 int sense[9],
order[9];
161 double *H1edgeN[9], *diffH1edgeN[9];
162
163 auto set_edge_base_data = [&](const int ee) {
165 auto &ent_data = data.dataOnEntities[MBEDGE][ee];
166 if (ent_data.getSense() == 0)
168 sense[ee] = ent_data.getSense();
169 order[ee] = ent_data.getOrder();
170 int nb_dofs =
NBEDGE_H1(ent_data.getOrder());
171 ent_data.getN(base).resize(nb_gauss_pts, nb_dofs, false);
172 ent_data.getDiffN(base).resize(nb_gauss_pts, 2 * nb_dofs, false);
173 H1edgeN[ee] = &*ent_data.getN(base).data().begin();
174 diffH1edgeN[ee] = &*ent_data.getDiffN(base).data().begin();
176 };
177
178 if ((data.spacesOnEntities[MBEDGE]).test(
H1)) {
179
180 for (int ee = 0; ee != 3; ++ee)
181 CHKERR set_edge_base_data(ee);
182 for (int ee = 6; ee != 9; ++ee)
183 CHKERR set_edge_base_data(ee);
184
185
187 &sense[0], &
order[0], &*
N.data().begin(), &*
diffN.data().begin(),
188 &H1edgeN[0], &diffH1edgeN[0], nb_gauss_pts, base_polynomials);
189
191 &sense[6], &
order[6], &*
N.data().begin(), &*
diffN.data().begin(),
192 &H1edgeN[6], &diffH1edgeN[6], nb_gauss_pts, base_polynomials);
193 }
194
195
196 if (data.dataOnEntities[MBTRI].size() != 5)
198
199 if ((data.spacesOnEntities[MBTRI]).test(
H1)) {
200 for (int ff = 3; ff <= 4; ff++) {
201 int nb_dofs =
NBFACETRI_H1(data.dataOnEntities[MBTRI][ff].getOrder());
202 data.dataOnEntities[MBTRI][ff].getN(base).resize(nb_gauss_pts, nb_dofs,
203 false);
204 data.dataOnEntities[MBTRI][ff].getDiffN(base).resize(nb_gauss_pts,
205 2 * nb_dofs, false);
207 faceNodes[ff - 3], data.dataOnEntities[MBTRI][ff].getOrder(),
208 &*
N.data().begin(), &*
diffN.data().begin(),
209 &*data.dataOnEntities[MBTRI][ff].getN(base).data().begin(),
210 &*data.dataOnEntities[MBTRI][ff].getDiffN(base).data().begin(),
211 nb_gauss_pts, base_polynomials);
212 }
213 }
214
216}
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define NBEDGE_H1(P)
Number of base function on edge for H1 space.
PetscErrorCode H1_EdgeShapeFunctions_MBTRI(int *sense, int *p, double *N, double *diffN, double *edgeN[3], double *diff_edgeN[3], int GDIM, PetscErrorCode(*base_polynomials)(int p, double s, double *diff_s, double *L, double *diffL, const int dim))
H1_EdgeShapeFunctions_MBTRI.
PetscErrorCode H1_FaceShapeFunctions_MBTRI(const int *face_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 NBFACETRI_H1(P)
Number of base function on triangle for H1 space.
PetscErrorCode(* basePolynomialsType0)(int p, double s, double *diff_s, double *L, double *diffL, const int dim)