498 {
500
501 const int num_nodes = gaussPts.size2();
502
503
504
505 switch (numeredEntFiniteElementPtr->getEntType()) {
506 case MBTRI:
509 &gaussPts(0, 0), &gaussPts(1, 0), num_nodes);
510 break;
511 case MBQUAD: {
513 for (int gg = 0; gg != num_nodes; gg++) {
514 double ksi = gaussPts(0, gg);
515 double eta = gaussPts(1, gg);
520 }
521 } break;
522 case MBTET: {
525 &gaussPts(0, 0), &gaussPts(1, 0),
526 &gaussPts(2, 0), num_nodes);
527 } break;
528 case MBHEX: {
530 for (int gg = 0; gg != num_nodes; gg++) {
531 double ksi = gaussPts(0, gg);
532 double eta = gaussPts(1, gg);
533 double zeta = gaussPts(2, gg);
542 }
543 } break;
544 default:
546 "Not implemented element type");
547 }
548
549
550
551
552 ReadUtilIface *iface;
553 CHKERR getPostProcMesh().query_interface(iface);
554
555 std::vector<double *> arrays;
556
558
559
560 CHKERR iface->get_node_coords(3, num_nodes, 0, startv, arrays);
561
562 mapGaussPts.resize(gaussPts.size2());
563 for (int gg = 0; gg != num_nodes; ++gg)
564 mapGaussPts[gg] = startv + gg;
565
567 int def_in_the_loop = -1;
568 CHKERR getPostProcMesh().tag_get_handle(
"NB_IN_THE_LOOP", 1, MB_TYPE_INTEGER,
569 th, MB_TAG_CREAT | MB_TAG_SPARSE,
570 &def_in_the_loop);
571
572
573
575 const int num_nodes_on_ele =
refEleMap.size2();
576
579
580
582 CHKERR iface->get_element_connect(num_el, num_nodes_on_ele, MBTRI, 0,
583 starte, conn);
585 CHKERR iface->get_element_connect(num_el, num_nodes_on_ele, MBTET, 0,
586 starte, conn);
587 else
589 "Dimension not implemented");
590
591
592
593 for (
unsigned int tt = 0; tt !=
refEleMap.size1(); ++tt) {
594 for (int nn = 0; nn != num_nodes_on_ele; ++nn)
595 conn[num_nodes_on_ele * tt + nn] = mapGaussPts[
refEleMap(tt, nn)];
596 }
597
598
599
600 CHKERR iface->update_adjacencies(starte, num_el, num_nodes_on_ele, conn);
601
602 auto physical_elements =
Range(starte, starte + num_el - 1);
603 CHKERR getPostProcMesh().tag_clear_data(
th, physical_elements, &(nInTheLoop));
604
605 EntityHandle fe_ent = numeredEntFiniteElementPtr->getEnt();
606 int fe_num_nodes;
607 {
609 mField.get_moab().get_connectivity(fe_ent, conn, fe_num_nodes, true);
610 coords.resize(3 * fe_num_nodes, false);
611 CHKERR mField.get_moab().get_coords(conn, fe_num_nodes, &coords[0]);
612 }
613
614
618
620 arrays[0], arrays[1], arrays[2]);
621 const double *t_coords_ele_x = &coords[0];
622 const double *t_coords_ele_y = &coords[1];
623 const double *t_coords_ele_z = &coords[2];
624 for (int gg = 0; gg != num_nodes; ++gg) {
626 t_coords_ele_x, t_coords_ele_y, t_coords_ele_z);
628 for (int nn = 0; nn != fe_num_nodes; ++nn) {
629 t_coords(
i) += t_n * t_ele_coords(
i);
630 for (auto ii : {0, 1, 2})
631 if (std::abs(t_coords(ii)) < std::numeric_limits<float>::epsilon())
632 t_coords(ii) = 0;
633 ++t_ele_coords;
634 ++t_n;
635 }
636 ++t_coords;
637 }
638
640}
FTensor::Index< 'i', SPACE_DIM > i
double zeta
Viscous hardening.
MatrixDouble shapeFunctions