Example #1
0
    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;
    }
Example #2
0
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();
 }