v0.8.20
Public Member Functions | Friends | List of all members
MoFEM::RefElement_TRI Struct Reference

keeps data about abstract TRI finite element More...

#include <src/multi_indices/FEMultiIndices.hpp>

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

Public Member Functions

 RefElement_TRI (const boost::shared_ptr< RefEntity > &ref_ent_ptr)
 
const boost::shared_ptr< SideNumber > & getSideNumberPtr (const EntityHandle ent) const
 
- Public Member Functions inherited from MoFEM::RefElement
 RefElement (const boost::shared_ptr< RefEntity > &ref_ent_ptr)
 
virtual const BitRefEdgesgetBitRefEdges () const
 
virtual int getBitRefEdgesUlong () const
 
SideNumber_multiIndexgetSideNumberTable () const
 
boost::shared_ptr< RefEntity > & getRefEntityPtr () const
 Get pointer to RefEntity. More...
 
- 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 ()
 
boost::shared_ptr< BasicEntityData > & getBasicDataPtr ()
 
const boost::shared_ptr< BasicEntityData > & getBasicDataPtr () const
 
EntityHandle getRefEnt () const
 
EntityType getParentEntType () const
 
EntityHandle getParentEnt () const
 
BitRefLevelgetBitRefLevelPtr () const
 
const BitRefLevelgetBitRefLevel () const
 
unsigned long int getBitRefLevelULong () const
 
EntityType getEntType () const
 
EntityID getEntId () const
 
EntityHandle getOwnerEnt () const
 
EntityHandlegetOwnerEnt ()
 
int getOwnerProc () const
 
intgetOwnerProc ()
 
int getPartProc () const
 
intgetPartProc ()
 
unsigned char getPStatus () const
 
intgetSharingProcsPtr () const
 
EntityHandlegetSharingHandlersPtr () const
 
boost::shared_ptr< RefEntity > & getRefEntityPtr () const
 

Friends

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

Additional Inherited Members

- Public Types inherited from MoFEM::RefElement
typedef interface_RefEntity< RefEntityinterface_type_RefEntity
 
- Public Attributes inherited from MoFEM::RefElement
SideNumber_multiIndex side_number_table
 
- Public Attributes inherited from MoFEM::interface_RefEntity< RefEntity >
boost::shared_ptr< RefEntitysPtr
 
- Static Public 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 106 of file FEMultiIndices.hpp.

Constructor & Destructor Documentation

◆ RefElement_TRI()

MoFEM::RefElement_TRI::RefElement_TRI ( const boost::shared_ptr< RefEntity > &  ref_ent_ptr)

Definition at line 355 of file FEMultiIndices.cpp.

356  : RefElement(ref_ent_ptr) {
357  switch (ref_ent_ptr->getEntType()) {
358  case MBTRI:
359  break;
360  default:
361  THROW_MESSAGE("this work only for TRIs");
362  }
363  int side_number, sense, offset;
364  EntityHandle tri = getRefEnt();
365  int num_nodes;
366  const EntityHandle *conn;
367  moab::Interface &moab = getRefEntityPtr()->basicDataPtr->moab;
368  rval = moab.get_connectivity(tri, conn, num_nodes, true);
369  MOAB_THROW(rval);
370  for (int nn = 0; nn < 3; nn++) {
372  .insert(
373  boost::shared_ptr<SideNumber>(new SideNumber(conn[nn], nn, 0, 0)));
374  }
375  for (int ee = 0; ee < 3; ee++) {
376  EntityHandle edge;
377  rval = moab.side_element(tri, 1, ee, edge);
378  MOAB_THROW(rval);
379  rval = moab.side_number(tri, edge, side_number, sense, offset);
380  MOAB_THROW(rval);
382  .insert(boost::shared_ptr<SideNumber>(
383  new SideNumber(edge, ee, sense, offset)));
384  }
386  .insert(boost::shared_ptr<SideNumber>(new SideNumber(tri, 0, 0, 0)));
387 }
SideNumber_multiIndex side_number_table
multi_index_container< boost::shared_ptr< SideNumber >, indexed_by< hashed_unique< member< SideNumber, EntityHandle, &SideNumber::ent > >, ordered_non_unique< composite_key< SideNumber, const_mem_fun< SideNumber, EntityType, &SideNumber::getEntType >, member< SideNumber, char, &SideNumber::side_number > > >, ordered_non_unique< const_mem_fun< SideNumber, EntityType, &SideNumber::getEntType > > > > SideNumber_multiIndex
SideNumber_multiIndex for SideNumber.
#define THROW_MESSAGE(a)
Throw MoFEM exception.
Definition: definitions.h:618
#define MOAB_THROW(a)
Check error code of MoAB function and throw MoFEM exception.
Definition: definitions.h:600
static MoFEMErrorCodeGeneric< moab::ErrorCode > rval
Definition: Exceptions.hpp:84
RefElement(const boost::shared_ptr< RefEntity > &ref_ent_ptr)
boost::shared_ptr< RefEntity > & getRefEntityPtr() const
Get pointer to RefEntity.

Member Function Documentation

◆ getSideNumberPtr()

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

Reimplemented from MoFEM::RefElement.

Definition at line 389 of file FEMultiIndices.cpp.

389  {
390  moab::Interface &moab = getRefEntityPtr()->basicDataPtr->moab;
391  SideNumber_multiIndex::iterator miit = side_number_table.find(ent);
392  if (miit != side_number_table.end())
393  return *miit;
394  if (sPtr->ent == ent) {
395  miit =
397  .insert(boost::shared_ptr<SideNumber>(new SideNumber(ent, 0, 0, 0)))
398  .first;
399  return *miit;
400  }
401  if (moab.type_from_handle(ent) == MBENTITYSET) {
402  miit =
404  .insert(boost::shared_ptr<SideNumber>(new SideNumber(ent, 0, 0, 0)))
405  .first;
406  return *miit;
407  }
408  int side_number, sense, offset;
409  rval = moab.side_number(sPtr->ent, ent, side_number, sense, offset);
410  MOAB_THROW(rval);
411  miit = const_cast<SideNumber_multiIndex &>(side_number_table)
412  .insert(boost::shared_ptr<SideNumber>(
413  new SideNumber(ent, side_number, sense, offset)))
414  .first;
415  // std::cerr << side_number << " " << sense << " " << offset << std::endl;
416  return *miit;
417 }
boost::shared_ptr< RefEntity > sPtr
SideNumber_multiIndex side_number_table
multi_index_container< boost::shared_ptr< SideNumber >, indexed_by< hashed_unique< member< SideNumber, EntityHandle, &SideNumber::ent > >, ordered_non_unique< composite_key< SideNumber, const_mem_fun< SideNumber, EntityType, &SideNumber::getEntType >, member< SideNumber, char, &SideNumber::side_number > > >, ordered_non_unique< const_mem_fun< SideNumber, EntityType, &SideNumber::getEntType > > > > SideNumber_multiIndex
SideNumber_multiIndex for SideNumber.
#define MOAB_THROW(a)
Check error code of MoAB function and throw MoFEM exception.
Definition: definitions.h:600
static MoFEMErrorCodeGeneric< moab::ErrorCode > rval
Definition: Exceptions.hpp:84
boost::shared_ptr< RefEntity > & getRefEntityPtr() const
Get pointer to RefEntity.

Friends And Related Function Documentation

◆ operator<<

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

Definition at line 418 of file FEMultiIndices.cpp.

418  {
419  os << *e.sPtr;
420  return os;
421 }

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