LCOV - code coverage report
Current view: top level - include/mesh - exodus_header_info.h (source / functions) Hit Total Coverage
Test: libMesh/libmesh: #4229 (6a9aeb) with base 727f46 Lines: 19 19 100.0 %
Date: 2025-08-19 19:27:09 Functions: 4 4 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // The libMesh Finite Element Library.
       2             : // Copyright (C) 2002-2025 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
       3             : 
       4             : // This library is free software; you can redistribute it and/or
       5             : // modify it under the terms of the GNU Lesser General Public
       6             : // License as published by the Free Software Foundation; either
       7             : // version 2.1 of the License, or (at your option) any later version.
       8             : 
       9             : // This library is distributed in the hope that it will be useful,
      10             : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      11             : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12             : // Lesser General Public License for more details.
      13             : 
      14             : // You should have received a copy of the GNU Lesser General Public
      15             : // License along with this library; if not, write to the Free Software
      16             : // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
      17             : 
      18             : #ifndef LIBMESH_EXODUS_HEADER_INFO_H
      19             : #define LIBMESH_EXODUS_HEADER_INFO_H
      20             : 
      21             : // TIMPI includes
      22             : #include "timpi/communicator.h"
      23             : #include "timpi/parallel_implementation.h"
      24             : 
      25             : // C++ includes
      26             : #include <vector>
      27             : 
      28             : namespace libMesh
      29             : {
      30             : 
      31             : /**
      32             :  * This class is used as both an external data structure for passing
      33             :  * around Exodus file header information, and for storing information
      34             :  * internally in ExodusII_IO_Helper. It can't really be defined in
      35             :  * either of those existing headers, so it has its own header...
      36             :  */
      37         328 : class ExodusHeaderInfo
      38             : {
      39             : public:
      40             :   // All special functions can be defaulted for this simple class.
      41        1304 :   ExodusHeaderInfo () = default;
      42             :   ExodusHeaderInfo (ExodusHeaderInfo &&) = default;
      43             :   ExodusHeaderInfo (const ExodusHeaderInfo &) = default;
      44             :   ExodusHeaderInfo & operator= (const ExodusHeaderInfo &) = default;
      45        2672 :   ExodusHeaderInfo & operator= (ExodusHeaderInfo &&) = default;
      46         705 :   ~ExodusHeaderInfo() = default;
      47             : 
      48             :   /**
      49             :    * Broadcasts data from processor 0 to other procs using the
      50             :    * provided Communicator.
      51             :    */
      52          71 :   void broadcast(const Parallel::Communicator & comm)
      53             :   {
      54             :     // broadcast vector<char> separately
      55          71 :     comm.broadcast(title);
      56             : 
      57             :     // Pack individual integers into vector
      58             :     std::vector<int> buffer =
      59          83 :       {num_dim, num_elem, num_elem_blk, num_node_sets,
      60          71 :        num_side_sets, num_elem_sets, num_edge_blk, num_edge};
      61             : 
      62             :     // broadcast integers
      63          71 :     comm.broadcast(buffer);
      64             : 
      65             :     // unpack
      66           2 :     unsigned int ctr = 0;
      67          71 :     num_dim       = buffer[ctr++];
      68          71 :     num_elem      = buffer[ctr++];
      69          71 :     num_elem_blk  = buffer[ctr++];
      70          71 :     num_node_sets = buffer[ctr++];
      71          71 :     num_side_sets = buffer[ctr++];
      72          71 :     num_elem_sets = buffer[ctr++];
      73          71 :     num_edge_blk  = buffer[ctr++];
      74          71 :     num_edge      = buffer[ctr++];
      75          71 :   }
      76             : 
      77             :   std::vector<char> title;
      78             :   int num_dim;
      79             :   int num_nodes;
      80             :   int num_elem;
      81             :   int num_elem_blk;
      82             :   int num_node_sets;
      83             :   int num_side_sets;
      84             :   int num_elem_sets;
      85             :   int num_edge_blk;
      86             :   int num_edge;
      87             : };
      88             : 
      89             : } // namespace libMesh
      90             : 
      91             : #endif

Generated by: LCOV version 1.14