v0.13.1
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
 
EntityHandle & getOwnerEnt ()
 
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...
 
EntityHandle * getSharingHandlersPtr () 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 724 of file FEMultiIndices.hpp.

Member Typedef Documentation

◆ interface_type_EntFiniteElement

Definition at line 731 of file FEMultiIndices.hpp.

◆ interface_type_FiniteElement

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

452 : 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 473 of file FEMultiIndices.cpp.

473 {
474
475 auto comp = [idx](const auto &a) { return a->getPetscGlobalDofIdx() == idx; };
476
477 for (auto &it : getColFieldEnts()) {
478 if (auto e = it.lock()) {
479 if (auto cache = e->entityCacheColDofs.lock()) {
480 auto dit = std::find_if(cache->loHi[0], cache->loHi[1], comp);
481 if (dit != cache->loHi[1])
482 return boost::reinterpret_pointer_cast<FENumeredDofEntity>(*dit);
483 } else
484 THROW_MESSAGE("Cache not set");
485 }
486 }
487
488 return boost::weak_ptr<FENumeredDofEntity>();
489}
constexpr double a
#define THROW_MESSAGE(msg)
Throw MoFEM exception.
Definition: definitions.h:561
BlockParamData * cache

◆ getColDofsPtr()

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

get FE dof on column

Definition at line 606 of file FEMultiIndices.cpp.

606 {
608
609 struct Extractor {
610 boost::weak_ptr<EntityCacheNumeredDofs>
611 operator()(boost::shared_ptr<FieldEntity> &e) {
612 return e->entityCacheColDofs;
613 }
614 };
615
616 struct Inserter {
618 using It = Idx::iterator;
619 It operator()(boost::shared_ptr<Idx> &dofs_view, It &hint,
620 boost::shared_ptr<FENumeredDofEntity> &&dof) {
621 return dofs_view->emplace_hint(hint, dof);
622 }
623 };
624
625 auto col_dofs = boost::make_shared<FENumeredDofEntity_multiIndex>();
626 if (get_cache_data_dofs_view(getColFieldEntsPtr(), col_dofs, Extractor(),
627 Inserter()))
628 THROW_MESSAGE("col_dofs can not be created");
629
630 return col_dofs;
631}
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
boost::shared_ptr< FieldEntity_vector_view > & getColFieldEntsPtr() const
const boost::shared_ptr< RefElement > & getRefElement() const

◆ getEntFiniteElement()

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

Definition at line 736 of file FEMultiIndices.hpp.

736 {
737 return this->sPtr;
738 }
boost::shared_ptr< EntFiniteElement > sPtr

◆ getPart()

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

Get partition number.

Returns
[description]

Definition at line 749 of file FEMultiIndices.hpp.

749{ return part; };

◆ getRowDofsByPetscGlobalDofIdx()

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

get FE dof by petsc index

Definition at line 455 of file FEMultiIndices.cpp.

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

◆ getRowDofsPtr()

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

get FE dof on row

Definition at line 578 of file FEMultiIndices.cpp.

578 {
580
581 struct Extractor {
582 boost::weak_ptr<EntityCacheNumeredDofs>
583 operator()(boost::shared_ptr<FieldEntity> &e) {
584 return e->entityCacheRowDofs;
585 }
586 };
587
588 struct Inserter {
590 using It = Idx::iterator;
591 It operator()(boost::shared_ptr<Idx> &dofs_view, It &hint,
592 boost::shared_ptr<FENumeredDofEntity> &&dof) {
593 return dofs_view->emplace_hint(hint, dof);
594 }
595 };
596
597 auto row_dofs = boost::make_shared<FENumeredDofEntity_multiIndex>();
598 if (get_cache_data_dofs_view(getRowFieldEntsPtr(), row_dofs, Extractor(),
599 Inserter()))
600 THROW_MESSAGE("row_dofs can not be created");
601
602 return row_dofs;
603}
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 491 of file FEMultiIndices.cpp.

491 {
492 os << "part " << e.part << " " << *(e.getEntFiniteElement());
493 return os;
494}

Member Data Documentation

◆ part

unsigned int MoFEM::NumeredEntFiniteElement::part

Partition number.

Definition at line 734 of file FEMultiIndices.hpp.


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