v0.14.0
Public Types | Public Member Functions | Public Attributes | Friends | List of all members
MoFEM::NumeredEntFiniteElement Struct Reference

Partitioned (Indexed) Finite Element in Problem. More...

#include <src/multi_indices/FEMultiIndices.hpp>

Inheritance diagram for MoFEM::NumeredEntFiniteElement:
[legend]
Collaboration diagram for MoFEM::NumeredEntFiniteElement:
[legend]

Public Types

using interface_type_FiniteElement = interface_FiniteElement< EntFiniteElement, EntFiniteElement >
 
using interface_type_EntFiniteElement = interface_EntFiniteElement< EntFiniteElement >
 
- Public Types inherited from MoFEM::interface_RefElement< EntFiniteElement >
typedef interface_RefEntity< EntFiniteElementinterface_type_RefEntity
 
typedef interface_RefElement< EntFiniteElementinterface_type_RefElement
 

Public Member Functions

virtual ~NumeredEntFiniteElement ()=default
 
boost::shared_ptr< EntFiniteElement > & getEntFiniteElement () const
 
 NumeredEntFiniteElement (const boost::shared_ptr< EntFiniteElement > &sptr)
 
unsigned int getPart () const
 Get partition number. More...
 
boost::shared_ptr< FENumeredDofEntity_multiIndexgetRowDofsPtr () const
 get FE dof on row More...
 
boost::shared_ptr< FENumeredDofEntity_multiIndexgetColDofsPtr () const
 get FE dof on column More...
 
boost::weak_ptr< FENumeredDofEntitygetRowDofsByPetscGlobalDofIdx (const int idx) const
 get FE dof by petsc index More...
 
boost::weak_ptr< FENumeredDofEntitygetColDofsByPetscGlobalDofIdx (const int idx) const
 get FE dof by petsc index More...
 
- Public Member Functions inherited from MoFEM::interface_EntFiniteElement< EntFiniteElement >
 interface_EntFiniteElement (const boost::shared_ptr< EntFiniteElement > &sptr)
 
virtual ~interface_EntFiniteElement ()=default
 
auto getDataDofsPtr () const
 
auto getDataVectorDofsPtr () const
 
FieldEntity_vector_viewgetDataFieldEnts () const
 
boost::shared_ptr< FieldEntity_vector_view > & getDataFieldEntsPtr ()
 
FieldEntity_vector_viewgetRowFieldEnts () const
 
boost::shared_ptr< FieldEntity_vector_view > & getRowFieldEntsPtr () const
 
FieldEntity_vector_viewgetColFieldEnts () const
 
boost::shared_ptr< FieldEntity_vector_view > & getColFieldEntsPtr () const
 
UId getLocalUniqueId () const
 Get unique UId for finite element entity. More...
 
SideNumber_multiIndexgetSideNumberTable () const
 
MoFEMErrorCode getElementAdjacency (const Field *field_ptr, Range &adjacency)
 
const boost::shared_ptr< RefElement > & getRefElement () const
 
- Public Member Functions inherited from MoFEM::interface_FiniteElement< EntFiniteElement, EntFiniteElement >
 interface_FiniteElement (const boost::shared_ptr< EntFiniteElement > fe_ptr, const boost::shared_ptr< EntFiniteElement > ref_ents_ptr)
 
virtual ~interface_FiniteElement ()=default
 
const UIdgetFEUId () const
 Get finite element uid. More...
 
BitFEId getId () const
 Get finite element id. More...
 
EntityHandle getMeshset () const
 Get meshset containing element entities. More...
 
boost::string_ref getNameRef () const
 Get finite element name. More...
 
std::string getName () const
 Get finite element name. More...
 
BitFieldId getBitFieldIdCol () const
 Get field ids on columns. More...
 
BitFieldId getBitFieldIdRow () const
 Get field ids on rows. More...
 
BitFieldId getBitFieldIdData () const
 Get field ids on data. More...
 
unsigned int getBitNumber () const
 Get bit identifying this element. More...
 
boost::shared_ptr< EntFiniteElement > & getFiniteElementPtr () const
 
- Public Member Functions inherited from MoFEM::interface_RefElement< EntFiniteElement >
 interface_RefElement (const boost::shared_ptr< EntFiniteElement > &sptr)
 
virtual ~interface_RefElement ()=default
 
int getBitRefEdgesUlong () const
 
SideNumber_multiIndexgetSideNumberTable () const
 
const boost::shared_ptr< SideNumber > & getSideNumberPtr (const EntityHandle ent) const
 
boost::shared_ptr< RefEntity > & getRefEntityPtr () const
 
boost::shared_ptr< EntFiniteElement > & getRefElement () const
 
- Public Member Functions inherited from MoFEM::interface_RefEntity< EntFiniteElement >
 interface_RefEntity (const boost::shared_ptr< EntFiniteElement > &sptr)
 
 interface_RefEntity (const interface_RefEntity< EntFiniteElement > &interface)
 
virtual ~interface_RefEntity ()=default
 
int getSideNumber () const
 
boost::shared_ptr< SideNumbergetSideNumberPtr () const
 Get the Side number. More...
 
const boost::shared_ptr< BasicEntityDatagetBasicDataPtr () const
 Get pointer to basic data struture. More...
 
EntityHandle getEnt () const
 Get the entity handle. More...
 
EntityType getParentEntType () const
 Get patent entity. More...
 
EntityHandle getParentEnt () const
 
BitRefLevelgetBitRefLevelPtr () const
 Get pointer to bit ref level tag. More...
 
const BitRefLevelgetBitRefLevel () const
 
unsigned long int getBitRefLevelULong () const
 Get entity ref bit refinement as ulong. More...
 
EntityType getEntType () const
 Get entity type. More...
 
int getEntDimension () const
 Get the Ent Dimension. More...
 
const char * getEntTypeName () const
 Get the Ent Type Name. More...
 
EntityID getEntId () const
 get entity id More...
 
EntityHandle getOwnerEnt () const
 
EntityHandlegetOwnerEnt ()
 
int getOwnerProc () const
 
int getPartProc () const
 
int * getPartProcPtr () const
 Get pointer to partition tag. More...
 
unsigned char getPStatus () const
 
int * getSharingProcsPtr () const
 get shared processors More...
 
EntityHandlegetSharingHandlersPtr () const
 get sharid entity handlers More...
 
boost::shared_ptr< EntFiniteElement > & getRefEntityPtr () const
 

Public Attributes

unsigned int part
 Partition number. More...
 
- Public Attributes inherited from MoFEM::interface_RefEntity< EntFiniteElement >
boost::shared_ptr< EntFiniteElementsPtr
 

Friends

std::ostream & operator<< (std::ostream &os, const NumeredEntFiniteElement &e)
 

Detailed Description

Partitioned (Indexed) Finite Element in Problem.

This type of structure is used to compose problem. Problem is build from indexed finite elements. This data structure carry information about partition, which is specific to problem.

Definition at line 728 of file FEMultiIndices.hpp.

Member Typedef Documentation

◆ interface_type_EntFiniteElement

Definition at line 736 of file FEMultiIndices.hpp.

◆ interface_type_FiniteElement

Definition at line 734 of file FEMultiIndices.hpp.

Constructor & Destructor Documentation

◆ ~NumeredEntFiniteElement()

virtual MoFEM::NumeredEntFiniteElement::~NumeredEntFiniteElement ( )
virtualdefault

◆ NumeredEntFiniteElement()

MoFEM::NumeredEntFiniteElement::NumeredEntFiniteElement ( const boost::shared_ptr< EntFiniteElement > &  sptr)

\Construct indexed finite element

Definition at line 446 of file FEMultiIndices.cpp.

448  : interface_EntFiniteElement<EntFiniteElement>(sptr), part(-1){};

Member Function Documentation

◆ getColDofsByPetscGlobalDofIdx()

boost::weak_ptr< FENumeredDofEntity > MoFEM::NumeredEntFiniteElement::getColDofsByPetscGlobalDofIdx ( const int  idx) const

get FE dof by petsc index

Definition at line 469 of file FEMultiIndices.cpp.

469  {
470 
471  auto comp = [idx](const auto &a) { return a->getPetscGlobalDofIdx() == idx; };
472 
473  for (auto &it : getColFieldEnts()) {
474  if (auto e = it.lock()) {
475  if (auto cache = e->entityCacheColDofs.lock()) {
476  auto dit = std::find_if(cache->loHi[0], cache->loHi[1], comp);
477  if (dit != cache->loHi[1])
478  return boost::reinterpret_pointer_cast<FENumeredDofEntity>(*dit);
479  } else
480  THROW_MESSAGE("Cache not set");
481  }
482  }
483 
484  return boost::weak_ptr<FENumeredDofEntity>();
485 }

◆ getColDofsPtr()

boost::shared_ptr< FENumeredDofEntity_multiIndex > MoFEM::NumeredEntFiniteElement::getColDofsPtr ( ) const

get FE dof on column

Definition at line 602 of file FEMultiIndices.cpp.

602  {
604 
605  struct Extractor {
606  boost::weak_ptr<EntityCacheNumeredDofs>
607  operator()(boost::shared_ptr<FieldEntity> &e) {
608  return e->entityCacheColDofs;
609  }
610  };
611 
612  struct Inserter {
613  using Idx = FENumeredDofEntity_multiIndex;
614  using It = Idx::iterator;
615  It operator()(boost::shared_ptr<Idx> &dofs_view, It &hint,
616  boost::shared_ptr<FENumeredDofEntity> &&dof) {
617  return dofs_view->emplace_hint(hint, dof);
618  }
619  };
620 
621  auto col_dofs = boost::make_shared<FENumeredDofEntity_multiIndex>();
622  if (get_cache_data_dofs_view(getColFieldEntsPtr(), col_dofs, Extractor(),
623  Inserter()))
624  THROW_MESSAGE("col_dofs can not be created");
625 
626  return col_dofs;
627 }

◆ getEntFiniteElement()

boost::shared_ptr<EntFiniteElement>& MoFEM::NumeredEntFiniteElement::getEntFiniteElement ( ) const
inline

Definition at line 740 of file FEMultiIndices.hpp.

740  {
741  return this->sPtr;
742  }

◆ getPart()

unsigned int MoFEM::NumeredEntFiniteElement::getPart ( ) const
inline

Get partition number.

Returns
[description]

Definition at line 753 of file FEMultiIndices.hpp.

753 { return part; };

◆ getRowDofsByPetscGlobalDofIdx()

boost::weak_ptr< FENumeredDofEntity > MoFEM::NumeredEntFiniteElement::getRowDofsByPetscGlobalDofIdx ( const int  idx) const

get FE dof by petsc index

Definition at line 451 of file FEMultiIndices.cpp.

451  {
452  auto comp = [idx](const auto &a) { return a->getPetscGlobalDofIdx() == idx; };
453 
454  for (auto &it : getRowFieldEnts()) {
455  if (auto e = it.lock()) {
456  if (auto cache = e->entityCacheColDofs.lock()) {
457  auto dit = std::find_if(cache->loHi[0], cache->loHi[1], comp);
458  if (dit != cache->loHi[1])
459  return boost::reinterpret_pointer_cast<FENumeredDofEntity>(*dit);
460  } else
461  THROW_MESSAGE("Cache not set");
462  }
463  }
464 
465  return boost::weak_ptr<FENumeredDofEntity>();
466 }

◆ getRowDofsPtr()

boost::shared_ptr< FENumeredDofEntity_multiIndex > MoFEM::NumeredEntFiniteElement::getRowDofsPtr ( ) const

get FE dof on row

Definition at line 574 of file FEMultiIndices.cpp.

574  {
576 
577  struct Extractor {
578  boost::weak_ptr<EntityCacheNumeredDofs>
579  operator()(boost::shared_ptr<FieldEntity> &e) {
580  return e->entityCacheRowDofs;
581  }
582  };
583 
584  struct Inserter {
585  using Idx = FENumeredDofEntity_multiIndex;
586  using It = Idx::iterator;
587  It operator()(boost::shared_ptr<Idx> &dofs_view, It &hint,
588  boost::shared_ptr<FENumeredDofEntity> &&dof) {
589  return dofs_view->emplace_hint(hint, dof);
590  }
591  };
592 
593  auto row_dofs = boost::make_shared<FENumeredDofEntity_multiIndex>();
594  if (get_cache_data_dofs_view(getRowFieldEntsPtr(), row_dofs, Extractor(),
595  Inserter()))
596  THROW_MESSAGE("row_dofs can not be created");
597 
598  return row_dofs;
599 }

Friends And Related Function Documentation

◆ operator<<

std::ostream& operator<< ( std::ostream &  os,
const NumeredEntFiniteElement e 
)
friend

Definition at line 487 of file FEMultiIndices.cpp.

487  {
488  os << "part " << e.part << " " << *(e.getEntFiniteElement());
489  return os;
490 }

Member Data Documentation

◆ part

unsigned int MoFEM::NumeredEntFiniteElement::part

Partition number.

Definition at line 738 of file FEMultiIndices.hpp.


The documentation for this struct was generated from the following files:
MoFEM::RefEntityTmp< 0 >::refElementPtr
static boost::weak_ptr< RefElement > refElementPtr
Definition: RefEntsMultiIndices.hpp:540
MoFEM::interface_RefEntity< EntFiniteElement >::sPtr
boost::shared_ptr< EntFiniteElement > sPtr
Definition: RefEntsMultiIndices.hpp:711
THROW_MESSAGE
#define THROW_MESSAGE(msg)
Throw MoFEM exception.
Definition: definitions.h:574
MoFEM::interface_EntFiniteElement< EntFiniteElement >::getRowFieldEntsPtr
boost::shared_ptr< FieldEntity_vector_view > & getRowFieldEntsPtr() const
Definition: FEMultiIndices.hpp:686
a
constexpr double a
Definition: approx_sphere.cpp:30
MoFEM::interface_EntFiniteElement< EntFiniteElement >::getRefElement
const boost::shared_ptr< RefElement > & getRefElement() const
Definition: FEMultiIndices.hpp:714
MoFEM::NumeredEntFiniteElement::part
unsigned int part
Partition number.
Definition: FEMultiIndices.hpp:738
MoFEM::interface_EntFiniteElement< EntFiniteElement >::getColFieldEnts
FieldEntity_vector_view & getColFieldEnts() const
Definition: FEMultiIndices.hpp:690
MoFEM::interface_EntFiniteElement< EntFiniteElement >::getColFieldEntsPtr
boost::shared_ptr< FieldEntity_vector_view > & getColFieldEntsPtr() const
Definition: FEMultiIndices.hpp:695
MoFEM::interface_EntFiniteElement< EntFiniteElement >::getRowFieldEnts
FieldEntity_vector_view & getRowFieldEnts() const
Definition: FEMultiIndices.hpp:681
MoFEM::get_cache_data_dofs_view
static MoFEMErrorCode get_cache_data_dofs_view(ENTSVIEW &ents_view, DOFSVIEW &dofs_view, EXTRACTOR &&extractor, INSERTER &&inserter)
Definition: FEMultiIndices.cpp:495
FENumeredDofEntity_multiIndex
multi_index_container< boost::shared_ptr< FENumeredDofEntity >, indexed_by< ordered_unique< tag< Unique_mi_tag >, const_mem_fun< FENumeredDofEntity::interface_type_DofEntity, UId, &FENumeredDofEntity::getLocalUniqueId > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< FENumeredDofEntity::interface_type_DofEntity, EntityHandle, &FENumeredDofEntity::getEnt > > > > FENumeredDofEntity_multiIndex
MultiIndex container keeps FENumeredDofEntity.
Definition: DofsMultiIndices.hpp:417