libMesh
exodus_header_info.h
Go to the documentation of this file.
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"
24 
25 // C++ includes
26 #include <vector>
27 
28 namespace libMesh
29 {
30 
38 {
39 public:
40  // All special functions can be defaulted for this simple class.
41  ExodusHeaderInfo () = default;
42  ExodusHeaderInfo (ExodusHeaderInfo &&) = default;
43  ExodusHeaderInfo (const ExodusHeaderInfo &) = default;
44  ExodusHeaderInfo & operator= (const ExodusHeaderInfo &) = default;
46  ~ExodusHeaderInfo() = default;
47 
52  void broadcast(const Parallel::Communicator & comm)
53  {
54  // broadcast vector<char> separately
55  comm.broadcast(title);
56 
57  // Pack individual integers into vector
58  std::vector<int> buffer =
61 
62  // broadcast integers
63  comm.broadcast(buffer);
64 
65  // unpack
66  unsigned int ctr = 0;
67  num_dim = buffer[ctr++];
68  num_elem = buffer[ctr++];
69  num_elem_blk = buffer[ctr++];
70  num_node_sets = buffer[ctr++];
71  num_side_sets = buffer[ctr++];
72  num_elem_sets = buffer[ctr++];
73  num_edge_blk = buffer[ctr++];
74  num_edge = buffer[ctr++];
75  }
76 
77  std::vector<char> title;
78  int num_dim;
79  int num_nodes;
80  int num_elem;
86  int num_edge;
87 };
88 
89 } // namespace libMesh
90 
91 #endif
This class is used as both an external data structure for passing around Exodus file header informati...
The libMesh namespace provides an interface to certain functionality in the library.
void broadcast(const Parallel::Communicator &comm)
Broadcasts data from processor 0 to other procs using the provided Communicator.
std::vector< char > title
void broadcast(T &data, const unsigned int root_id=0, const bool identical_sizes=false) const
ExodusHeaderInfo & operator=(const ExodusHeaderInfo &)=default