v0.16.3
Loading...
Searching...
No Matches
Public Member Functions | Friends | List of all members
MoFEM::RefElementFace Struct Reference

keeps data about abstract TRI finite element More...

#include "src/multi_indices/RefElementMultiIndices.hpp"

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

Public Member Functions

 RefElementFace (const boost::shared_ptr< RefEntity > &ref_ents_ptr)
 
virtual ~RefElementFace ()=default
 
const boost::shared_ptr< SideNumber > & getSideNumberPtr (const EntityHandle ent) const
 
- Public Member Functions inherited from MoFEM::RefElement
 RefElement (const boost::shared_ptr< RefEntity > &ref_ents_ptr)
 
virtual ~RefElement ()=default
 
virtual const BitRefEdges & getBitRefEdges () const
 
virtual int getBitRefEdgesUlong () const
 
SideNumber_multiIndex & getSideNumberTable () const
 
boost::shared_ptr< RefEntity > & getRefEntityPtr () const
 Get pointer to RefEntity.
 
- Public Member Functions inherited from MoFEM::interface_RefEntity< RefEntity >
 interface_RefEntity (const boost::shared_ptr< RefEntity > &sptr)
 
 interface_RefEntity (const interface_RefEntity< RefEntity > &interface)
 
virtual ~interface_RefEntity ()=default
 
int getSideNumber () const
 
boost::shared_ptr< SideNumber > getSideNumberPtr () const
 
const boost::shared_ptr< BasicEntityData > getBasicDataPtr () const
 
EntityHandle getEnt () const
 
EntityType getParentEntType () const
 
EntityHandle getParentEnt () const
 
BitRefLevel * getBitRefLevelPtr () const
 
const BitRefLevel & getBitRefLevel () const
 
unsigned long int getBitRefLevelULong () const
 
EntityType getEntType () const
 
int getEntDimension () const
 
const char * getEntTypeName () const
 
EntityID getEntId () const
 
EntityHandle getOwnerEnt () const
 
EntityHandle & getOwnerEnt ()
 
int getOwnerProc () const
 
int getPartProc () const
 
int * getPartProcPtr () const
 
unsigned char getPStatus () const
 
int * getSharingProcsPtr () const
 
EntityHandle * getSharingHandlersPtr () const
 
boost::shared_ptr< RefEntity > & getRefEntityPtr () const
 

Friends

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

Additional Inherited Members

- Public Types inherited from MoFEM::RefElement
using interface_type_RefEntity = interface_RefEntity< RefEntity >
 
- Public Attributes inherited from MoFEM::interface_RefEntity< RefEntity >
boost::shared_ptr< RefEntity > sPtr
 
- Protected Attributes inherited from MoFEM::RefElement
SideNumber_multiIndex sideNumberTable
 
- Static Protected Attributes inherited from MoFEM::RefElement
static BitRefEdges DummyBitRefEdges = BitRefEdges(0)
 
static const boost::shared_ptr< SideNumber > nullSideNumber
 

Detailed Description

keeps data about abstract TRI finite element

Definition at line 100 of file RefElementMultiIndices.hpp.

Constructor & Destructor Documentation

◆ RefElementFace()

MoFEM::RefElementFace::RefElementFace ( const boost::shared_ptr< RefEntity > &  ref_ents_ptr)

Definition at line 338 of file RefElementMultiIndices.cpp.

339 : RefElement(ref_ents_ptr) {
340
341 int nb_nodes = 0;
342 int nb_edges = 0;
343 switch (ref_ents_ptr->getEntType()) {
344 case MBTRI:
345 nb_nodes = nb_edges = 3;
346 break;
347 case MBQUAD:
348 nb_nodes = nb_edges = 4;
349 break;
350 default:
351 THROW_MESSAGE("this works only for TRIs and QUADs");
352 }
353 int side_number, sense, offset;
354 EntityHandle tri = getEnt();
355 int num_nodes;
356 const EntityHandle *conn;
357 moab::Interface &moab = getRefEntityPtr()->getBasicDataPtr()->moab;
358 rval = moab.get_connectivity(tri, conn, num_nodes, true);
360 for (int nn = 0; nn < nb_nodes; nn++) {
362 .insert(
363 boost::shared_ptr<SideNumber>(new SideNumber(conn[nn], nn, 0, 0)));
364 }
365 for (int ee = 0; ee < nb_edges; ee++) {
366 EntityHandle edge;
367 rval = moab.side_element(tri, 1, ee, edge);
369 rval = moab.side_number(tri, edge, side_number, sense, offset);
372 .insert(boost::shared_ptr<SideNumber>(
373 new SideNumber(edge, ee, sense, offset)));
374 }
376 .insert(boost::shared_ptr<SideNumber>(new SideNumber(tri, 0, 0, 0)));
377}
#define MOAB_THROW(err)
Check error code of MoAB function and throw MoFEM exception.
#define THROW_MESSAGE(msg)
Throw MoFEM exception.
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.
static MoFEMErrorCodeGeneric< moab::ErrorCode > rval
SideNumber_multiIndex sideNumberTable
RefElement(const boost::shared_ptr< RefEntity > &ref_ents_ptr)
boost::shared_ptr< RefEntity > & getRefEntityPtr() const
Get pointer to RefEntity.

◆ ~RefElementFace()

virtual MoFEM::RefElementFace::~RefElementFace ( )
virtualdefault

Member Function Documentation

◆ getSideNumberPtr()

const boost::shared_ptr< SideNumber > & MoFEM::RefElementFace::getSideNumberPtr ( const EntityHandle  ent) const
virtual

Reimplemented from MoFEM::RefElement.

Definition at line 379 of file RefElementMultiIndices.cpp.

379 {
380 moab::Interface &moab = getRefEntityPtr()->getBasicDataPtr()->moab;
381 SideNumber_multiIndex::iterator miit = sideNumberTable.find(ent);
382 if (miit != sideNumberTable.end())
383 return *miit;
384 if (sPtr->ent == ent) {
385 miit =
387 .insert(boost::shared_ptr<SideNumber>(new SideNumber(ent, 0, 0, 0)))
388 .first;
389 return *miit;
390 }
391 if (type_from_handle(ent) == MBENTITYSET) {
392 miit =
394 .insert(boost::shared_ptr<SideNumber>(new SideNumber(ent, 0, 0, 0)))
395 .first;
396 return *miit;
397 }
398 int side_number, sense, offset;
399 rval = moab.side_number(sPtr->ent, ent, side_number, sense, offset);
401 miit = const_cast<SideNumber_multiIndex &>(sideNumberTable)
402 .insert(boost::shared_ptr<SideNumber>(
403 new SideNumber(ent, side_number, sense, offset)))
404 .first;
405 // std::cerr << side_number << " " << sense << " " << offset << std::endl;
406 return *miit;
407}
auto type_from_handle(const EntityHandle h)
get type from entity handle

Friends And Related Symbol Documentation

◆ operator<<

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

Definition at line 408 of file RefElementMultiIndices.cpp.

408 {
409 os << *e.sPtr;
410 return os;
411}

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