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() ); }
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; }