Branch data Line data Source code
1 : : // ***************************************************************************** 2 : : /*! 3 : : \file src/IO/UGRIDMeshReader.cpp 4 : : \copyright 2012-2015 J. Bakosi, 5 : : 2016-2018 Los Alamos National Security, LLC., 6 : : 2019-2021 Triad National Security, LLC. 7 : : All rights reserved. See the LICENSE file for details. 8 : : \brief UGRID mesh reader class declaration 9 : : \details UGRID mesh reader class declaration. Mesh reader facilitating 10 : : reading a mesh from a simple text file used by NASA. 11 : : \see http://www.simcenter.msstate.edu/software/downloads/doc/ug_io/3d_grid_file_type_ugrid.html, http://www.simcenter.msstate.edu/software/downloads/doc/aflr3/aflr3_io_summary.html 12 : : */ 13 : : // ***************************************************************************** 14 : : 15 : : #include <array> 16 : : #include <istream> 17 : : #include <string> 18 : : #include <vector> 19 : : #include <cstddef> 20 : : 21 : : #include "Types.hpp" 22 : : #include "Exception.hpp" 23 : : #include "UnsMesh.hpp" 24 : : #include "Reorder.hpp" 25 : : #include "UGRIDMeshReader.hpp" 26 : : 27 : : using tk::UGRIDMeshReader; 28 : : 29 : : void 30 : 1 : UGRIDMeshReader::readHeader() 31 : : // ***************************************************************************** 32 : : // Read UGRID mesh header 33 : : // ***************************************************************************** 34 : : { 35 : 2 : std::string s; 36 : : 37 : : // Number_of_Nodes 38 [ + - ]: 1 : m_inFile >> m_nnode; 39 : : 40 : : // Number_of_Surf_Trias 41 [ + - ]: 1 : m_inFile >> m_ntri; 42 : : 43 : : // Number_of_Surf_Quads 44 : : int nquad; 45 [ + - ]: 1 : m_inFile >> nquad; 46 : : 47 : : // Number_of_Vol_Tets 48 [ + - ]: 1 : m_inFile >> m_ntet; 49 : : 50 : : // Number_of_Vol_Pents_5 51 : : int pent5; 52 [ + - ]: 1 : m_inFile >> pent5; 53 : : 54 : : // Number_of_Vol_Pents_6 55 : : int pent6; 56 [ + - ]: 1 : m_inFile >> pent6; 57 : : 58 : : // Number_of_Vol_Hexs 59 : : int nhex; 60 [ + - ]: 1 : m_inFile >> nhex; 61 : 1 : } 62 : : 63 : : void 64 : 1 : UGRIDMeshReader::readMesh( UnsMesh& mesh ) 65 : : // ***************************************************************************** 66 : : // Read UGRID mesh 67 : : //! \param[in] mesh Unstructured mesh object 68 : : // ***************************************************************************** 69 : : { 70 : : // Read header 71 : 1 : readHeader(); 72 : : // Read nodes 73 : 1 : readNodes( mesh ); 74 : : // Read elements 75 : 1 : readElements( mesh ); 76 : 1 : } 77 : : 78 : : void 79 : 1 : UGRIDMeshReader::readNodes( UnsMesh& mesh ) 80 : : // ***************************************************************************** 81 : : // Read nodes 82 : : //! \param[in] mesh Unstructured mesh object 83 : : // ***************************************************************************** 84 : : { 85 : : // Read in node coordinates: x-coord y-coord z-coord 86 [ + + ]: 8067 : for (std::size_t i=0; i<m_nnode; ++i) { 87 : : tk::real x, y, z; 88 [ + - ][ + - ]: 8066 : m_inFile >> x >> y >> z; [ + - ] 89 [ + - ]: 8066 : mesh.x().push_back( x ); 90 [ + - ]: 8066 : mesh.y().push_back( y ); 91 [ + - ]: 8066 : mesh.z().push_back( z ); 92 : : } 93 : 1 : } 94 : : 95 : : void 96 : 1 : UGRIDMeshReader::readElements( UnsMesh& mesh ) 97 : : // ***************************************************************************** 98 : : // Read element connectivity 99 : : //! \param[in] mesh Unstructured mesh object 100 : : // ***************************************************************************** 101 : : { 102 : : // Read in triangle element connectivity 103 [ + + ]: 865 : for (std::size_t i=0; i<m_ntri; ++i) { 104 : : std::array< std::size_t, 3 > n; 105 [ + - ][ + - ]: 864 : m_inFile >> n[0] >> n[1] >> n[2]; [ + - ] 106 [ + - ]: 864 : mesh.triinpoel().push_back( n[0] ); 107 [ + - ]: 864 : mesh.triinpoel().push_back( n[1] ); 108 [ + - ]: 864 : mesh.triinpoel().push_back( n[2] ); 109 : : } 110 : : 111 : : // Read side sets of triangle elements 112 [ + + ]: 865 : for (std::size_t i=0; i<m_ntri; ++i) { 113 : : int setid; 114 [ + - ]: 864 : m_inFile >> setid; 115 [ + - ][ + - ]: 864 : mesh.bface()[ setid ].push_back( m_ntet + i ); 116 [ + - ][ + - ]: 864 : mesh.faceid()[ setid ].push_back( 0 ); 117 : : } 118 : : 119 : : // Read in tetrahedra element connectivity 120 [ + + ]: 46657 : for (std::size_t i=0; i<m_ntet; ++i) { 121 : : std::array< std::size_t, 4 > n; 122 [ + - ][ + - ]: 46656 : m_inFile >> n[0] >> n[1] >> n[2] >> n[3]; [ + - ][ + - ] 123 [ + - ]: 46656 : mesh.tetinpoel().push_back( n[0] ); 124 [ + - ]: 46656 : mesh.tetinpoel().push_back( n[1] ); 125 [ + - ]: 46656 : mesh.tetinpoel().push_back( n[2] ); 126 [ + - ]: 46656 : mesh.tetinpoel().push_back( n[3] ); 127 : : } 128 : : 129 : : // Shift node IDs to start from zero 130 : 1 : shiftToZero( mesh.triinpoel() ); 131 : 1 : shiftToZero( mesh.tetinpoel() ); 132 : 1 : }