209 {
213
214 fe.getRefElement()->getSideNumberPtr(prism);
216 CHKERR moab.side_element(prism, 2, 3, face_side3);
217 CHKERR moab.side_element(prism, 2, 4, face_side4);
218 fe.getRefElement()->getSideNumberPtr(face_side3);
219 fe.getRefElement()->getSideNumberPtr(face_side4);
220 for (int qq = 0; qq < 3; qq++) {
222 rval = moab.side_element(prism, 2, qq, quad);
223 if (
rval != MB_SUCCESS || quad == 0)
224 continue;
225 int side_number, sense, offset;
226 rval = moab.side_number(prism, quad, side_number, sense, offset);
227 if (side_number == -1 ||
rval != MB_SUCCESS)
228 continue;
230 .insert(boost::shared_ptr<SideNumber>(
231 new SideNumber(quad, side_number, sense, offset)));
232 }
233 int ee = 0;
234 for (; ee < 3; ee++) {
236 CHKERR moab.side_element(prism, 1, ee, edge);
237 boost::shared_ptr<SideNumber> side_ptr =
238 fe.getRefElement()->getSideNumberPtr(edge);
239 if (side_ptr->side_number != ee) {
241 "data inconsistency for edge %d while in FE data structure is "
242 "numbered %d.",
243 ee, side_ptr->side_number);
244 }
245 CHKERR moab.side_element(prism, 1, 6 + ee, edge);
246 side_ptr = fe.getRefElement()->getSideNumberPtr(edge);
247 if (side_ptr->side_number != ee + 6) {
248 if (side_ptr->side_number != ee) {
250 "data inconsistency for edge %d while in FE data structure "
251 "is numbered %d.",
252 ee, side_ptr->side_number);
253 } else {
254 side_ptr->brother_side_number = ee + 6;
255 }
256 }
257 }
258 for (; ee < 6; ee++) {
260 rval = moab.side_element(prism, 1, ee, edge);
261 if (
rval != MB_SUCCESS || edge == 0)
262 continue;
263 int side_number, sense, offset;
264 rval = moab.side_number(prism, edge, side_number, sense, offset);
265 if (side_number == -1 ||
rval != MB_SUCCESS)
266 continue;
268 .insert(boost::shared_ptr<SideNumber>(
269 new SideNumber(edge, side_number, sense, offset)));
270 }
271 int nn = 0;
272 for (; nn < 3; nn++) {
274 CHKERR moab.side_element(prism, 0, nn, node);
275 boost::shared_ptr<SideNumber> side_ptr =
276 fe.getRefElement()->getSideNumberPtr(node);
277 if (side_ptr->side_number != nn) {
279 "data inconsistency for node %d while in FE datastructure is "
280 "numbered %d.",
281 nn, side_ptr->side_number);
282 }
283 CHKERR moab.side_element(prism, 0, nn + 3, node);
284 side_ptr = fe.getRefElement()->getSideNumberPtr(node);
285 if (side_ptr->side_number != nn + 3) {
286 if (side_ptr->side_number != nn) {
288 "data inconsistency for node %d while in FE datastructure is "
289 "numbered %d.",
290 nn, side_ptr->side_number);
291 } else {
292 side_ptr->brother_side_number = nn + 3;
293 }
294 }
295 }
296
297
299 switch (field.getSpace()) {
301
302
303 CHKERR moab.get_adjacencies(&prism, 1, 0,
false, nodes,
304 moab::Interface::UNION);
305 {
307 CHKERR moab.get_connectivity(&prism, 1, topo_nodes,
true);
309 CHKERR moab.get_connectivity(&prism, 1, mid_nodes,
false);
310 mid_nodes = subtract(mid_nodes, topo_nodes);
311 nodes = subtract(nodes, mid_nodes);
312 }
313 adjacency.insert(adjacency.end(), nodes.begin(), nodes.end());
316 auto hi_siit =
318 for (; siit != hi_siit; siit++)
319 adjacency.push_back(siit->get()->ent);
320 }
323 auto hi_siit =
325 for (; siit != hi_siit; siit++)
326 adjacency.push_back(siit->get()->ent);
327 }
329 adjacency.push_back(prism);
330 break;
332 auto adjacency_meshset =
334 CHKERR moab.get_entities_by_handle(adjacency_meshset, adjacency,
false);
335 for (auto ent : adjacency) {
337 .insert(boost::shared_ptr<SideNumber>(new SideNumber(ent, -1, 0, 0)));
338 }
339 } break;
340 default:
342 "this field is not implemented for TRI finite element");
343 }
345}
static MoFEMErrorCodeGeneric< moab::ErrorCode > rval
EntityHandle get_id_for_max_type()
EntityHandle get_id_for_min_type()