471 const int num_nodes = gaussPts.size2();
475 switch (numeredEntFiniteElementPtr->getEntType()) {
479 &gaussPts(0, 0), &gaussPts(1, 0), num_nodes);
483 for (
int gg = 0; gg != num_nodes; gg++) {
484 double ksi = gaussPts(0, gg);
485 double eta = gaussPts(1, gg);
495 &gaussPts(0, 0), &gaussPts(1, 0),
496 &gaussPts(2, 0), num_nodes);
500 for (
int gg = 0; gg != num_nodes; gg++) {
501 double ksi = gaussPts(0, gg);
502 double eta = gaussPts(1, gg);
503 double zeta = gaussPts(2, gg);
516 "Not implemented element type");
522 ReadUtilIface *iface;
523 CHKERR getPostProcMesh().query_interface(iface);
525 std::vector<double *> arrays;
530 CHKERR iface->get_node_coords(3, num_nodes, 0, startv, arrays);
532 mapGaussPts.resize(gaussPts.size2());
533 for (
int gg = 0; gg != num_nodes; ++gg)
534 mapGaussPts[gg] = startv + gg;
537 int def_in_the_loop = -1;
538 CHKERR getPostProcMesh().tag_get_handle(
"NB_IN_THE_LOOP", 1, MB_TYPE_INTEGER,
539 th, MB_TAG_CREAT | MB_TAG_SPARSE,
545 const int num_nodes_on_ele =
refEleMap.size2();
552 CHKERR iface->get_element_connect(num_el, num_nodes_on_ele, MBTRI, 0,
555 CHKERR iface->get_element_connect(num_el, num_nodes_on_ele, MBTET, 0,
559 "Dimension not implemented");
563 for (
unsigned int tt = 0; tt !=
refEleMap.size1(); ++tt) {
564 for (
int nn = 0; nn != num_nodes_on_ele; ++nn)
565 conn[num_nodes_on_ele * tt + nn] = mapGaussPts[
refEleMap(tt, nn)];
570 CHKERR iface->update_adjacencies(starte, num_el, num_nodes_on_ele, conn);
572 auto physical_elements =
Range(starte, starte + num_el - 1);
573 CHKERR getPostProcMesh().tag_clear_data(
th, physical_elements, &(nInTheLoop));
575 EntityHandle fe_ent = numeredEntFiniteElementPtr->getEnt();
579 mField.get_moab().get_connectivity(fe_ent, conn, fe_num_nodes,
true);
580 coords.resize(3 * fe_num_nodes,
false);
581 CHKERR mField.get_moab().get_coords(conn, fe_num_nodes, &coords[0]);
590 arrays[0], arrays[1], arrays[2]);
591 const double *t_coords_ele_x = &coords[0];
592 const double *t_coords_ele_y = &coords[1];
593 const double *t_coords_ele_z = &coords[2];
594 for (
int gg = 0; gg != num_nodes; ++gg) {
596 t_coords_ele_x, t_coords_ele_y, t_coords_ele_z);
598 for (
int nn = 0; nn != fe_num_nodes; ++nn) {
599 t_coords(
i) += t_n * t_ele_coords(
i);
600 for (
auto ii : {0, 1, 2})
601 if (std::abs(t_coords(ii)) < std::numeric_limits<float>::epsilon())