428 const int num_nodes = gaussPts.size2();
432 switch (numeredEntFiniteElementPtr->getEntType()) {
436 &gaussPts(0, 0), &gaussPts(1, 0), num_nodes);
440 for (
int gg = 0; gg != num_nodes; gg++) {
441 double ksi = gaussPts(0, gg);
442 double eta = gaussPts(1, gg);
452 &gaussPts(0, 0), &gaussPts(1, 0),
453 &gaussPts(2, 0), num_nodes);
457 for (
int gg = 0; gg != num_nodes; gg++) {
458 double ksi = gaussPts(0, gg);
459 double eta = gaussPts(1, gg);
460 double zeta = gaussPts(2, gg);
473 "Not implemented element type");
480 ReadUtilIface *iface;
481 CHKERR postProcMesh.query_interface(iface);
483 std::vector<double *> arrays;
488 CHKERR iface->get_node_coords(3, num_nodes, 0, startv, arrays);
490 mapGaussPts.resize(gaussPts.size2());
491 for (
int gg = 0; gg != num_nodes; ++gg)
492 mapGaussPts[gg] = startv + gg;
495 int def_in_the_loop = -1;
496 CHKERR postProcMesh.tag_get_handle(
"NB_IN_THE_LOOP", 1, MB_TYPE_INTEGER,
th,
497 MB_TAG_CREAT | MB_TAG_SPARSE,
503 const int num_nodes_on_ele =
refEleMap.size2();
510 CHKERR iface->get_element_connect(num_el, num_nodes_on_ele, MBTRI, 0,
513 CHKERR iface->get_element_connect(num_el, num_nodes_on_ele, MBTET, 0,
517 "Dimension not implemented");
521 for (
unsigned int tt = 0; tt !=
refEleMap.size1(); ++tt) {
522 for (
int nn = 0; nn != num_nodes_on_ele; ++nn)
523 conn[num_nodes_on_ele * tt + nn] = mapGaussPts[
refEleMap(tt, nn)];
528 CHKERR iface->update_adjacencies(starte, num_el, num_nodes_on_ele, conn);
530 auto physical_elements = Range(starte, starte + num_el - 1);
531 CHKERR postProcMesh.tag_clear_data(
th, physical_elements, &(nInTheLoop));
533 EntityHandle fe_ent = numeredEntFiniteElementPtr->getEnt();
537 mField.get_moab().get_connectivity(fe_ent, conn, fe_num_nodes,
true);
538 coords.resize(3 * fe_num_nodes,
false);
539 CHKERR mField.get_moab().get_coords(conn, fe_num_nodes, &coords[0]);
548 arrays[0], arrays[1], arrays[2]);
549 const double *t_coords_ele_x = &coords[0];
550 const double *t_coords_ele_y = &coords[1];
551 const double *t_coords_ele_z = &coords[2];
552 for (
int gg = 0; gg != num_nodes; ++gg) {
554 t_coords_ele_x, t_coords_ele_y, t_coords_ele_z);
556 for (
int nn = 0; nn != fe_num_nodes; ++nn) {
557 t_coords(
i) += t_n * t_ele_coords(
i);
558 for (
auto ii : {0, 1, 2})
559 if (std::abs(t_coords(ii)) < std::numeric_limits<float>::epsilon())
FTensor::Index< 'i', SPACE_DIM > i
MatrixDouble shapeFunctions