18 boost::shared_ptr<BaseFunctionCtx> ctx_ptr) {
23 int nb_gauss_pts = pts.size2();
30 "Wrong dimension of pts, should be at least 3 rows with coordinates");
37 data.
dataOnEntities[MBVERTEX][0].getN(base).resize(nb_gauss_pts, 2,
41 &pts(0, 0), nb_gauss_pts);
47 (
unsigned int)nb_gauss_pts)
49 "Base functions or nodes has wrong number of integration points "
53 data.
dataOnEntities[MBVERTEX][0].getDiffN(base).resize(nb_gauss_pts, 2 * 1,
55 for (
auto gg = 0; gg != nb_gauss_pts; ++gg)
108 const int nb_gauss_pts = pts.size2();
111 auto &ptr = data.getBBAlphaIndicesSharedPtr(
field_name);
125 auto &ptr = data.getBBDiffNSharedPtr(
field_name);
132 auto &get_diff_n = get_diff_base(data.
dataOnEntities[MBVERTEX][0]);
133 get_n.resize(nb_gauss_pts, 2,
false);
134 get_diff_n.resize(nb_gauss_pts, 2,
false);
139 (
unsigned int)nb_gauss_pts)
141 "Base functions or nodes has wrong number of integration points "
147 vertex_alpha.resize(2, 2,
false);
148 vertex_alpha(0, 0) = data.
dataOnEntities[MBVERTEX][0].getBBNodeOrder()[0];
149 vertex_alpha(0, 1) = 0;
150 vertex_alpha(1, 0) = 0;
151 vertex_alpha(1, 1) = data.
dataOnEntities[MBVERTEX][0].getBBNodeOrder()[1];
154 1, nb_gauss_pts, vertex_alpha.size1(), &vertex_alpha(0, 0), &
lambda(0, 0),
156 std::array<double, 2>
f = {
157 boost::math::factorial<double>(
159 boost::math::factorial<double>(
162 for (
int g = 0;
g != nb_gauss_pts; ++
g)
163 for (
int n = 0;
n != 2; ++
n) {
165 get_diff_n(
g,
n) *=
f[
n];
171 "Wrong size ent of ent data");
178 get_n.resize(nb_gauss_pts, nb_dofs,
false);
179 get_diff_n.resize(nb_gauss_pts, nb_dofs,
false);
183 edge_alpha.resize(nb_dofs, 2);
186 order, nb_gauss_pts, edge_alpha.size1(), &edge_alpha(0, 0),
191 get_n.resize(nb_gauss_pts, 0,
false);
192 get_diff_n.resize(nb_gauss_pts, 0,
false);
203 PetscErrorCode (*base_polynomials)(
int p,
double s,
double *diff_s,
double *
L,
204 double *
diffL,
const int dim) =
207 int nb_gauss_pts = pts.size2();
209 const int side_number = 0;
226 for (
int gg = 0; gg != nb_gauss_pts; gg++) {
228 double s = 2 * pts(0, gg) - 1;
236 &*
L.data().begin(), &*
diffL.data().begin(), 1);
238 for (
unsigned int pp = 0;
268 int nb_gauss_pts = pts.size2();
270 const int side_number = 0;
281 double diff_shape[] = {-1, 1};
285 for (
int gg = 0; gg != nb_gauss_pts; gg++) {
286 const double mu0 = 1.0 - pts(0, gg);
287 const double mu1 = pts(0, gg);
293 order, &*shape.data().begin(), diff_shape,
294 &*data.
dataOnEntities[MBEDGE][side_number].getN(base).data().begin(),
325 int nb_gauss_pts = pts.size2();
327 const int side_number = 0;
337 double diff_n[] = {-1, 1};
340 for (
int gg = 0; gg != nb_gauss_pts; gg++) {
341 const double mu0 = 1.0 - pts(0, gg);
342 const double mu1 = pts(0, gg);
348 order, &*shape.data().begin(), diff_n,
349 &*data.
dataOnEntities[MBEDGE][side_number].getN(base).data().begin(),
362 "Make no sense, unless problem is 2d (2d not implemented yet)");
372 PetscErrorCode (*base_polynomials)(
int p,
double s,
double *diff_s,
double *
L,
373 double *
diffL,
const int dim) =
376 int nb_gauss_pts = pts.size2();
386 data.
dataOnEntities[MBEDGE][0].getN(base).resize(nb_gauss_pts, 3 * nb_dofs,
388 data.
dataOnEntities[MBEDGE][0].getDiffN(base).resize(nb_gauss_pts, 0,
394 &*data.
dataOnEntities[MBEDGE][0].getN(base).data().begin(),
nullptr,
395 nb_gauss_pts, base_polynomials);
398 data.
dataOnEntities[MBEDGE][0].getN(base).resize(nb_gauss_pts, 0,
false);
399 data.
dataOnEntities[MBEDGE][0].getDiffN(base).resize(nb_gauss_pts, 0,
413 int nb_gauss_pts = pts.size2();
418 "No data structure to store base functions");
426 data.
dataOnEntities[MBEDGE][0].getDiffN(base).resize(nb_gauss_pts, 0,
437 data.
dataOnEntities[MBEDGE][0].getN(base).resize(nb_gauss_pts, 0,
false);
438 data.
dataOnEntities[MBEDGE][0].getDiffN(base).resize(nb_gauss_pts, 0,