v0.13.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< REFENT >
typedef interface_RefEntity< REFENT > interface_type_RefEntity
 
typedef interface_RefElement< REFENT > interface_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< FE, REFENT >
 interface_FiniteElement (const boost::shared_ptr< FE > fe_ptr, const boost::shared_ptr< REFENT > 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< FE > & getFiniteElementPtr () const
 
- Public Member Functions inherited from MoFEM::interface_RefElement< REFENT >
 interface_RefElement (const boost::shared_ptr< REFENT > &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< REFENT > & getRefElement () const
 
- Public Member Functions inherited from MoFEM::interface_RefEntity< REFENT >
 interface_RefEntity (const boost::shared_ptr< REFENT > &sptr)
 
 interface_RefEntity (const interface_RefEntity< REFENT > &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< REFENT > & getRefEntityPtr () const
 

Public Attributes

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

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 738 of file FEMultiIndices.hpp.

Member Typedef Documentation

◆ interface_type_EntFiniteElement

Definition at line 745 of file FEMultiIndices.hpp.

◆ interface_type_FiniteElement

Definition at line 743 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 463 of file FEMultiIndices.cpp.

465  : interface_EntFiniteElement<EntFiniteElement>(sptr), part(-1){};
unsigned int part
Partition number.

Member Function Documentation

◆ getColDofsByPetscGlobalDofIdx()

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

get FE dof by petsc index

Definition at line 486 of file FEMultiIndices.cpp.

486  {
487 
488  auto comp = [idx](const auto &a) { return a->getPetscGlobalDofIdx() == idx; };
489 
490  for (auto &it : getColFieldEnts()) {
491  if (auto e = it.lock()) {
492  if (auto cache = e->entityCacheColDofs.lock()) {
493  auto dit = std::find_if(cache->loHi[0], cache->loHi[1], comp);
494  if (dit != cache->loHi[1])
495  return boost::reinterpret_pointer_cast<FENumeredDofEntity>(*dit);
496  } else
497  THROW_MESSAGE("Cache not set");
498  }
499  }
500 
501  return boost::weak_ptr<FENumeredDofEntity>();
502 }
constexpr double a
#define THROW_MESSAGE(msg)
Throw MoFEM exception.
Definition: definitions.h:574
BlockParamData * cache

◆ getColDofsPtr()

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

get FE dof on column

Definition at line 619 of file FEMultiIndices.cpp.

619  {
621 
622  struct Extractor {
623  boost::weak_ptr<EntityCacheNumeredDofs>
624  operator()(boost::shared_ptr<FieldEntity> &e) {
625  return e->entityCacheColDofs;
626  }
627  };
628 
629  struct Inserter {
630  using Idx = FENumeredDofEntity_multiIndex;
631  using It = Idx::iterator;
632  It operator()(boost::shared_ptr<Idx> &dofs_view, It &hint,
633  boost::shared_ptr<FENumeredDofEntity> &&dof) {
634  return dofs_view->emplace_hint(hint, dof);
635  }
636  };
637 
638  auto col_dofs = boost::make_shared<FENumeredDofEntity_multiIndex>();
639  if (get_cache_data_dofs_view(getColFieldEntsPtr(), col_dofs, Extractor(),
640  Inserter()))
641  THROW_MESSAGE("col_dofs can not be created");
642 
643  return col_dofs;
644 }
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.
static MoFEMErrorCode get_cache_data_dofs_view(ENTSVIEW &ents_view, DOFSVIEW &dofs_view, EXTRACTOR &&extractor, INSERTER &&inserter)
static boost::weak_ptr< RefElement > refElementPtr
const boost::shared_ptr< RefElement > & getRefElement() const
boost::shared_ptr< FieldEntity_vector_view > & getColFieldEntsPtr() const

◆ getEntFiniteElement()

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

Definition at line 750 of file FEMultiIndices.hpp.

750  {
751  return this->sPtr;
752  }

◆ getPart()

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

Get partition number.

Returns
[description]

Definition at line 763 of file FEMultiIndices.hpp.

763 { return part; };

◆ getRowDofsByPetscGlobalDofIdx()

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

get FE dof by petsc index

Definition at line 468 of file FEMultiIndices.cpp.

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

◆ getRowDofsPtr()

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

get FE dof on row

Definition at line 591 of file FEMultiIndices.cpp.

591  {
593 
594  struct Extractor {
595  boost::weak_ptr<EntityCacheNumeredDofs>
596  operator()(boost::shared_ptr<FieldEntity> &e) {
597  return e->entityCacheRowDofs;
598  }
599  };
600 
601  struct Inserter {
602  using Idx = FENumeredDofEntity_multiIndex;
603  using It = Idx::iterator;
604  It operator()(boost::shared_ptr<Idx> &dofs_view, It &hint,
605  boost::shared_ptr<FENumeredDofEntity> &&dof) {
606  return dofs_view->emplace_hint(hint, dof);
607  }
608  };
609 
610  auto row_dofs = boost::make_shared<FENumeredDofEntity_multiIndex>();
611  if (get_cache_data_dofs_view(getRowFieldEntsPtr(), row_dofs, Extractor(),
612  Inserter()))
613  THROW_MESSAGE("row_dofs can not be created");
614 
615  return row_dofs;
616 }
boost::shared_ptr< FieldEntity_vector_view > & getRowFieldEntsPtr() const

Friends And Related Function Documentation

◆ operator<<

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

Definition at line 504 of file FEMultiIndices.cpp.

504  {
505  os << "part " << e.part << " " << *(e.getEntFiniteElement());
506  return os;
507 }

Member Data Documentation

◆ part

unsigned int MoFEM::NumeredEntFiniteElement::part

Partition number.

Definition at line 748 of file FEMultiIndices.hpp.


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