Xyst test code coverage report
Current view: top level - IO - UGRIDMeshReader.cpp (source / functions) Hit Total Coverage
Commit: ac3d28f3f8b86b070d167d5aee7fb8740cd81df6 Lines: 40 40 100.0 %
Date: 2024-11-28 13:48:12 Functions: 4 4 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 8 8 100.0 %

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

Generated by: LCOV version 1.16