CellTopology getBasicCellTopology( TopologyId id) { if (id == INVALID) return CellTopology(); CellTopologyIdMap &cell_topology_map = get_cell_topology_id_map(); CellTopologyIdMap::const_iterator it = cell_topology_map.find(id); if (it == cell_topology_map.end()) { //throw RuntimeError() << "Cell topology " << id << " is not defined"; std::ostringstream msg; msg << "Cell topology " << id << " is not defined"; throw std::runtime_error(msg.str()); } return (*it).second; }
void getTopologies(std::vector<shards::CellTopology>& topologies, const unsigned cellDim, const ECellType cellType, const ETopologyType topologyType) { if ( 4 < cellDim ) { std::ostringstream msg ; msg << "shards::CellTopology::getTopologies( ERROR: dim = " << cellDim << " > 4 )" ; throw std::invalid_argument( msg.str() ); } // clear the vector topologies.clear(); // 0-dimensional cells if( (cellDim == 0) || (cellDim == 4) ) { if( cellType == STANDARD_CELL || cellType == ALL_CELLS){ if(topologyType == BASE_TOPOLOGY || topologyType == ALL_TOPOLOGIES) { topologies.push_back( CellTopology( shards::getCellTopologyData<Node>() ) ); } if(topologyType == EXTENDED_TOPOLOGY || topologyType == ALL_TOPOLOGIES) { // No such cells exist } } if( cellType == NONSTANDARD_CELL || cellType == ALL_CELLS){ if(topologyType == BASE_TOPOLOGY || topologyType == ALL_TOPOLOGIES) { // No such cells exist } if(topologyType == EXTENDED_TOPOLOGY || topologyType == ALL_TOPOLOGIES) { // No such cells exist } } } // dim 0 // 1-dimensional cells if((cellDim == 1) || (cellDim == 4)) { if( cellType == STANDARD_CELL || cellType == ALL_CELLS){ if(topologyType == BASE_TOPOLOGY || topologyType == ALL_TOPOLOGIES) { topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Line<2> >() ) ); } if(topologyType == EXTENDED_TOPOLOGY || topologyType == ALL_TOPOLOGIES) { topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Line<3> >() ) ); } } if( cellType == NONSTANDARD_CELL || cellType == ALL_CELLS){ if(topologyType == BASE_TOPOLOGY || topologyType == ALL_TOPOLOGIES) { topologies.push_back( CellTopology( shards::getCellTopologyData<Particle>() ) ); } if(topologyType == EXTENDED_TOPOLOGY || topologyType == ALL_TOPOLOGIES) { // No such cells exist } } } // dim 1 // 2-dimensional cells if((cellDim == 2) || (cellDim == 4)) { if( cellType == STANDARD_CELL || cellType == ALL_CELLS){ if(topologyType == BASE_TOPOLOGY || topologyType == ALL_TOPOLOGIES) { topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Triangle<3> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Quadrilateral<4> >() ) ); } if (topologyType == EXTENDED_TOPOLOGY || topologyType == ALL_TOPOLOGIES) { topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Triangle<4> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Triangle<6> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Quadrilateral<8> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Quadrilateral<9> >() ) ); } } if( cellType == NONSTANDARD_CELL || cellType == ALL_CELLS){ if(topologyType == BASE_TOPOLOGY || topologyType == ALL_TOPOLOGIES) { topologies.push_back( CellTopology( shards::getCellTopologyData<shards::ShellLine<2> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Beam<2> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Pentagon<5> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Hexagon<6> >() ) ); } if(topologyType == EXTENDED_TOPOLOGY || topologyType == ALL_TOPOLOGIES) { topologies.push_back( CellTopology( shards::getCellTopologyData<shards::ShellLine<3> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Beam<3> >() ) ); } } } // dim 2 if((cellDim == 3) || (cellDim == 4)) { if( cellType == STANDARD_CELL || cellType == ALL_CELLS){ if(topologyType == BASE_TOPOLOGY || topologyType == ALL_TOPOLOGIES) { topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Tetrahedron<4> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Hexahedron<8> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Pyramid<5> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Wedge<6> >() ) ); } if(topologyType == EXTENDED_TOPOLOGY || topologyType == ALL_TOPOLOGIES) { topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Tetrahedron<8> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Tetrahedron<10> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Tetrahedron<11> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Hexahedron<20> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Hexahedron<27> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Pyramid<13> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Pyramid<14> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Wedge<15> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::Wedge<18> >() ) ); } } if( cellType == NONSTANDARD_CELL || cellType == ALL_CELLS){ // Predefined Polyhedrons should go here if(topologyType == BASE_TOPOLOGY || topologyType == ALL_TOPOLOGIES) { topologies.push_back( CellTopology( shards::getCellTopologyData<shards::ShellTriangle<3> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::ShellQuadrilateral<4> >() ) ); } if(topologyType == EXTENDED_TOPOLOGY || topologyType == ALL_TOPOLOGIES) { topologies.push_back( CellTopology( shards::getCellTopologyData<shards::ShellTriangle<6> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::ShellQuadrilateral<8> >() ) ); topologies.push_back( CellTopology( shards::getCellTopologyData<shards::ShellQuadrilateral<9> >() ) ); } } } // dim 3 } // getTopologies
CellTopology child_cell_topology(UInt ordinal) const { return (ordinal < m_numChild) ? m_childCellTopology[ordinal] : CellTopology(); }