v0.15.0
Loading...
Searching...
No Matches
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
 
using interface_type_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.
 
boost::shared_ptr< FENumeredDofEntity_multiIndexgetRowDofsPtr () const
 get FE dof on row
 
boost::shared_ptr< FENumeredDofEntity_multiIndexgetColDofsPtr () const
 get FE dof on column
 
boost::weak_ptr< FENumeredDofEntitygetRowDofsByPetscGlobalDofIdx (const int idx) const
 get FE dof by petsc index
 
boost::weak_ptr< FENumeredDofEntitygetColDofsByPetscGlobalDofIdx (const int idx) const
 get FE dof by petsc index
 
- 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.
 
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.
 
BitFEId getId () const
 Get finite element id.
 
EntityHandle getMeshset () const
 Get meshset containing element entities.
 
boost::string_ref getNameRef () const
 Get finite element name.
 
std::string getName () const
 Get finite element name.
 
BitFieldId getBitFieldIdCol () const
 Get field ids on columns.
 
BitFieldId getBitFieldIdRow () const
 Get field ids on rows.
 
BitFieldId getBitFieldIdData () const
 Get field ids on data.
 
unsigned int getBitNumber () const
 Get bit identifying this element.
 
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
 
const boost::shared_ptr< BasicEntityDatagetBasicDataPtr () const
 
EntityHandle getEnt () const
 
EntityType getParentEntType () const
 
EntityHandle getParentEnt () const
 
BitRefLevelgetBitRefLevelPtr () const
 
const BitRefLevelgetBitRefLevel () const
 
unsigned long int getBitRefLevelULong () const
 
EntityType getEntType () const
 
int getEntDimension () const
 
const char * getEntTypeName () const
 
EntityID getEntId () const
 
EntityHandle getOwnerEnt () const
 
EntityHandlegetOwnerEnt ()
 
int getOwnerProc () const
 
int getPartProc () const
 
int * getPartProcPtr () const
 
unsigned char getPStatus () const
 
int * getSharingProcsPtr () const
 
EntityHandlegetSharingHandlersPtr () const
 
boost::shared_ptr< EntFiniteElement > & getRefEntityPtr () const
 

Public Attributes

unsigned int part
 Partition number.
 
- 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

Initial value:
interface_EntFiniteElement<EntFiniteElement>

Definition at line 735 of file FEMultiIndices.hpp.

◆ interface_type_FiniteElement

Initial value:
interface_FiniteElement<EntFiniteElement, EntFiniteElement>

Definition at line 733 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){};
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 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}
constexpr double a
#define THROW_MESSAGE(msg)
Throw MoFEM exception.

◆ getColDofsPtr()

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

get FE dof on column

Definition at line 602 of file FEMultiIndices.cpp.

602 {
603 RefEntityTmp<0>::refElementPtr = this->getRefElement();
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 {
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}
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)
boost::shared_ptr< FieldEntity_vector_view > & getColFieldEntsPtr() const
const boost::shared_ptr< RefElement > & getRefElement() const

◆ getEntFiniteElement()

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

Definition at line 740 of file FEMultiIndices.hpp.

740 {
741 return this->sPtr;
742 }
boost::shared_ptr< EntFiniteElement > sPtr

◆ 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 {
575 RefEntityTmp<0>::refElementPtr = this->getRefElement();
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 {
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}
boost::shared_ptr< FieldEntity_vector_view > & getRowFieldEntsPtr() const

Friends And Related Symbol 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: