46 {
49
50 Range all_boundary_ents;
52 all_boundary_ents);
53
54 Range domain_ents_part;
56 Range domain_faces, boundary_faces;
58 true, domain_faces,
59 moab::Interface::UNION);
60 boundary_faces = intersect(domain_faces, all_boundary_ents);
61
64
65 for (auto &face_ent : boundary_faces) {
68 adj_tet, moab::Interface::UNION);
69 if (adj_tet.size() != 1)
72 "There should be only one ent adjacent to the boundary ent");
73
74 std::variant<int, double> data;
75
77 case MB_TYPE_INTEGER:
78 data = int{};
79 break;
80 case MB_TYPE_DOUBLE:
81 data = double{};
82 break;
83 default:
85 "Wrong data type %d for tag",
type);
86 }
87
88 std::visit(
89 [&](auto &val) {
92 },
93 data);
94 }
95
97}
static MoFEMErrorCode getTagHandle(MoFEM::Interface &m_field, const char *name, DataType type, Tag &tag_handle)
static MoFEMErrorCode getDomainEntsPart(MoFEM::Interface &m_field, Range &domain_ents_part)
void simple(double P1[], double P2[], double P3[], double c[], const int N)
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
virtual moab::Interface & get_moab()=0
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.