v0.13.2
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | List of all members
MoFEM::ParentFiniteElementAdjacencyFunctionSkeleton< DIM > Struct Template Reference

Create adjacency to parent skeleton elements. More...

#include <src/finite_elements/MeshProjectionDataOperators.hpp>

Inheritance diagram for MoFEM::ParentFiniteElementAdjacencyFunctionSkeleton< DIM >:
[legend]
Collaboration diagram for MoFEM::ParentFiniteElementAdjacencyFunctionSkeleton< DIM >:
[legend]

Public Member Functions

 ParentFiniteElementAdjacencyFunctionSkeleton (BitRefLevel bit_parent, BitRefLevel bit_parent_mask, BitRefLevel bit_ent, BitRefLevel bit_ent_mask)
 
MoFEMErrorCode operator() (moab::Interface &moab, const Field &field, const EntFiniteElement &fe, std::vector< EntityHandle > &adjacency)
 Function setting adjacencies to DOFs of parent element. More...
 
- Public Member Functions inherited from MoFEM::ParentFiniteElementAdjacencyFunction< DIM >
 ParentFiniteElementAdjacencyFunction (BitRefLevel bit_parent, BitRefLevel bit_parent_mask, BitRefLevel bit_ent, BitRefLevel bit_ent_mask)
 
MoFEMErrorCode operator() (moab::Interface &moab, const Field &field, const EntFiniteElement &fe, std::vector< EntityHandle > &adjacency)
 Function setting adjacencies to DOFs of parent element. More...
 

Protected Attributes

std::vector< EntityHandlebrideAdjacencyEdge
 
- Protected Attributes inherited from MoFEM::ParentFiniteElementAdjacencyFunction< DIM >
BitRefLevel bitParent
 
BitRefLevel bitParentMask
 
BitRefLevel bitEnt
 
BitRefLevel bitEntMask
 
std::vector< EntityHandleadjTmp
 

Additional Inherited Members

- Protected Member Functions inherited from MoFEM::ParentFiniteElementAdjacencyFunction< DIM >
MoFEMErrorCode getParent (EntityHandle fe, std::vector< EntityHandle > &parents, moab::Interface &moab, Tag th_parent_handle, Tag th_bit_level)
 
MoFEMErrorCode getParentsAdjacencies (const Field &field, moab::Interface &moab, std::vector< EntityHandle > &parents, std::vector< EntityHandle > &adjacency)
 
MoFEMErrorCode getDefaultAdjacencies (moab::Interface &moab, const Field &field, const EntFiniteElement &fe, std::vector< EntityHandle > &adjacency)
 

Detailed Description

template<int DIM>
struct MoFEM::ParentFiniteElementAdjacencyFunctionSkeleton< DIM >

Create adjacency to parent skeleton elements.

That class is used during entity finite element construction.

Template Parameters
DIMdimension of parent element

Definition at line 312 of file MeshProjectionDataOperators.hpp.

Constructor & Destructor Documentation

◆ ParentFiniteElementAdjacencyFunctionSkeleton()

template<int DIM>
MoFEM::ParentFiniteElementAdjacencyFunctionSkeleton< DIM >::ParentFiniteElementAdjacencyFunctionSkeleton ( BitRefLevel  bit_parent,
BitRefLevel  bit_parent_mask,
BitRefLevel  bit_ent,
BitRefLevel  bit_ent_mask 
)
inline

Definition at line 315 of file MeshProjectionDataOperators.hpp.

319 : ParentFiniteElementAdjacencyFunction<DIM>(bit_parent, bit_parent_mask,
320 bit_ent, bit_ent_mask) {}

Member Function Documentation

◆ operator()()

template<int DIM>
MoFEMErrorCode MoFEM::ParentFiniteElementAdjacencyFunctionSkeleton< DIM >::operator() ( moab::Interface &  moab,
const Field field,
const EntFiniteElement fe,
std::vector< EntityHandle > &  adjacency 
)
inline

Function setting adjacencies to DOFs of parent element.

Note
elements form child, see dofs from parent, so DOFs located on adjacencies of parent entity has adjacent to dofs of child.
Template Parameters
DIMdimension of the element entity
Parameters
moab
field
fe
adjacency
Returns
MoFEMErrorCode

Definition at line 335 of file MeshProjectionDataOperators.hpp.

337 {
339
340 adjacency.clear();
341 CHKERR this->getDefaultAdjacencies(moab, field, fe, adjacency);
342
343 if (field.getSpace() != NOFIELD) {
344
345 const auto fe_ent = fe.getEnt();
346 brideAdjacencyEdge.clear();
347 CHKERR moab.get_adjacencies(&fe_ent, 1, DIM + 1, false,
349
350 std::vector<EntityHandle> parents;
351
352 if (this->bitParent.any()) {
353 auto basic_entity_data_ptr = fe.getBasicDataPtr();
354 auto th_parent_handle = basic_entity_data_ptr->th_RefParentHandle;
355 auto th_bit_level = basic_entity_data_ptr->th_RefBitLevel;
356 parents.reserve(BITREFLEVEL_SIZE);
357 for (auto bridge_fe : brideAdjacencyEdge) {
358 CHKERR this->getParent(bridge_fe, parents, moab, th_parent_handle,
359 th_bit_level);
360 };
361 parents.insert(parents.end(), brideAdjacencyEdge.begin(),
362 brideAdjacencyEdge.end());
363 } else {
364 parents.swap(brideAdjacencyEdge);
365 }
366
367 CHKERR this->getParentsAdjacencies(field, moab, parents, adjacency);
368
369 std::sort(adjacency.begin(), adjacency.end());
370 auto it = std::unique(adjacency.begin(), adjacency.end());
371 adjacency.resize(std::distance(adjacency.begin(), it));
372
373 for (auto e : adjacency) {
374 auto &side_table = fe.getSideNumberTable();
375 if (side_table.find(e) == side_table.end())
376 const_cast<SideNumber_multiIndex &>(side_table)
377 .insert(
378 boost::shared_ptr<SideNumber>(new SideNumber(e, -1, 0, 0)));
379 }
380 }
381
383 }
#define BITREFLEVEL_SIZE
max number of refinements
Definition: definitions.h:219
@ NOFIELD
scalar or vector of scalars describe (no true field)
Definition: definitions.h:84
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:346
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:416
#define CHKERR
Inline error check.
Definition: definitions.h:535
multi_index_container< boost::shared_ptr< SideNumber >, indexed_by< ordered_unique< member< SideNumber, EntityHandle, &SideNumber::ent > >, ordered_non_unique< composite_key< SideNumber, const_mem_fun< SideNumber, EntityType, &SideNumber::getEntType >, member< SideNumber, signed char, &SideNumber::side_number > > > > > SideNumber_multiIndex
SideNumber_multiIndex for SideNumber.
MoFEMErrorCode getParent(EntityHandle fe, std::vector< EntityHandle > &parents, moab::Interface &moab, Tag th_parent_handle, Tag th_bit_level)
MoFEMErrorCode getParentsAdjacencies(const Field &field, moab::Interface &moab, std::vector< EntityHandle > &parents, std::vector< EntityHandle > &adjacency)
MoFEMErrorCode getDefaultAdjacencies(moab::Interface &moab, const Field &field, const EntFiniteElement &fe, std::vector< EntityHandle > &adjacency)

Member Data Documentation

◆ brideAdjacencyEdge

template<int DIM>
std::vector<EntityHandle> MoFEM::ParentFiniteElementAdjacencyFunctionSkeleton< DIM >::brideAdjacencyEdge
protected

Definition at line 386 of file MeshProjectionDataOperators.hpp.


The documentation for this struct was generated from the following file: