예제 #1
0
void
NetgenMeshReader::readElements( UnsMesh& mesh )
//******************************************************************************
//  Read element connectivity
//! \param[in] mesh Unstructured mesh object
//! \author J. Bakosi
//******************************************************************************
{
  int nel;

  // Read in number of tetrahedra
  m_inFile >> nel;
  if (!m_inFile.eof()) {
    ErrChk( nel > 0, "Number of tetrahedra (volume elements) must be greater "
                     "than zero in file " + m_filename );
    std::string s;
    getline( m_inFile, s );  // finish reading the last line

    // Read in tetrahedra element tags and connectivity
    for (int i=0; i<nel; ++i) {
      int tag;
      std::array< std::size_t, 4 > n;
      // tag n[1-4]
      m_inFile >> tag >> n[3] >> n[0] >> n[1] >> n[2];
      mesh.tettag().push_back( { tag } );
      mesh.tetinpoel().push_back( n[0] );
      mesh.tetinpoel().push_back( n[1] );
      mesh.tetinpoel().push_back( n[2] );
      mesh.tetinpoel().push_back( n[3] );
    }

    // Shift node IDs to start from zero
    shiftToZero( mesh.tetinpoel() );
  }
예제 #2
0
void
GmshMeshWriter::writeElements( const UnsMesh& mesh )
//******************************************************************************
//  Write "$Elements--$EndElements" section
//! \param[in] mesh Unstructured mesh object
//! \author J. Bakosi
//******************************************************************************
{
  m_outFile << "$Elements" << std::endl;

  // Write out number of elements
  m_outFile << mesh.lininpoel().size()/2 +
               mesh.triinpoel().size()/3 +
               mesh.tetinpoel().size()/4
            << std::endl;

  // Write out line element ids, tags, and connectivity (node list)
  writeElemBlock( 2, GmshElemType::LIN, mesh.lintag(), mesh.lininpoel() );

  // Write out triangle element ids, tags, and connectivity (node list)
  writeElemBlock( 3, GmshElemType::TRI, mesh.tritag(), mesh.triinpoel() );

  // Write out terahedron element ids, tags, and connectivity (node list)
  writeElemBlock( 4, GmshElemType::TET, mesh.tettag(), mesh.tetinpoel() );

  if (isBinary()) m_outFile << std::endl;
  m_outFile << "$EndElements" << std::endl;
}