IOSS 2.0
Loading...
Searching...
No Matches
Ioexnl_Internals.h
Go to the documentation of this file.
1/*
2 * Copyright(C) 1999-2024 National Technology & Engineering Solutions
3 * of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
4 * NTESS, the U.S. Government retains certain rights in this software.
5 *
6 * See packages/seacas/LICENSE for details
7 */
8
9#pragma once
10
11#include <cstdint> // for int64_t
12#include <exodusII.h> // for MAX_LINE_LENGTH, etc
13#include <string> // for string
14#include <vector> // for vector
15
16#include "Ioss_ParallelUtils.h" // for ParallelUtils
17#include "Ioss_Utils.h"
18#include "ioexnl_export.h"
19
20namespace Ioss {
21 class Assembly;
22 class Blob;
23 class EdgeBlock;
24 class EdgeSet;
25 class ElementBlock;
26 class ElementSet;
27 class FaceBlock;
28 class FaceSet;
29 class NodeBlock;
30 class NodeSet;
31 class SideBlock;
32 class SideSet;
33 class Region;
34} // namespace Ioss
35
36using entity_id = int64_t;
37
38namespace Ioss {
39} // namespace Ioss
40/*!
41 * This set of classes provides a thin wrapper around the exodusII
42 * internals. It supplants several of the exodusII API calls in
43 * order to avoid ncredef calls which totally rewrite the existing
44 * database and can be very expensive. These routines provide all
45 * required variable, dimension, and attribute definitions to the
46 * underlying netcdf file with only a single ncredef call.
47 *
48 * To use the application must create an Internals instance
49 * and call the Internals::write_meta_data() function. This
50 * function requires several classes as arguments including:
51 * <ul>
52 * <li> Mesh -- defines mesh global metadata
53 * <li> Block -- defines metadata for each block
54 * <li> NodeSet -- defines metadata for each nodeset
55 * <li> SideSet -- defines metadata for each sideset
56 * <li> CommunicationMetaData -- global metadata relating to
57 * parallel info.
58 * </ul>
59 *
60 * Calling Internals::write_meta_data(), replaces the
61 * following exodusII and nemesis API calls:
62 * <ul>
63 * <li> ex_put_init(),
64 * <li> ex_put_elem_block(),
65 * <li> ex_put_node_set_param(),
66 * <li> ex_put_side_set_param(),
67 * <li> ne_put_init_info(),
68 * <li> ne_put_loadbal_param(),
69 * <li> ne_put_cmap_params(),
70 * </ul>
71 */
72namespace Ioexnl {
73 struct IOEXNL_EXPORT NodeBlock
74 {
75 explicit NodeBlock(const Ioss::NodeBlock &other);
76
77 std::string name{};
78 entity_id id{0};
79 int64_t entityCount{0};
80 int64_t localOwnedCount{0};
81 int64_t attributeCount{0};
82 int64_t procOffset{0};
83 };
84
85 struct IOEXNL_EXPORT Assembly
86 {
87 explicit Assembly(const Ioss::Assembly &other);
88
89 std::string name{};
90 entity_id id{0};
91 int64_t entityCount{0};
92 int64_t attributeCount{0};
93 ex_entity_type type{};
94 std::vector<int64_t> memberIdList;
95 };
96
97 struct IOEXNL_EXPORT Blob
98 {
99 explicit Blob(const Ioss::Blob &other);
100
101 std::string name{};
103 int64_t entityCount{0};
104 int64_t localOwnedCount{0};
105 int64_t attributeCount{0};
106 int64_t procOffset{0};
107 };
108
109 struct IOEXNL_EXPORT EdgeBlock
110 {
112
113 EdgeBlock(const EdgeBlock &other)
114 : name(other.name), id(other.id), entityCount(other.entityCount),
115 nodesPerEntity(other.nodesPerEntity), attributeCount(other.attributeCount),
116 procOffset(other.procOffset)
117 {
118 Ioss::Utils::copy_string(elType, other.elType);
119 }
120
121 explicit EdgeBlock(const Ioss::EdgeBlock &other);
122
123 char elType[MAX_STR_LENGTH + 1]{};
124 std::string name{};
126 int64_t entityCount{0};
127 int64_t nodesPerEntity{0};
128 int64_t attributeCount{0};
129 int64_t procOffset{0};
130
131 private:
132 };
133
134 struct IOEXNL_EXPORT FaceBlock
135 {
137
138 FaceBlock(const FaceBlock &other)
139 : name(other.name), id(other.id), entityCount(other.entityCount),
140 nodesPerEntity(other.nodesPerEntity), edgesPerEntity(other.edgesPerEntity),
141 attributeCount(other.attributeCount), procOffset(other.procOffset)
142 {
143 Ioss::Utils::copy_string(elType, other.elType);
144 }
145
146 explicit FaceBlock(const Ioss::FaceBlock &other);
147
148 char elType[MAX_STR_LENGTH + 1]{};
149 std::string name{};
151 int64_t entityCount{0};
152 int64_t nodesPerEntity{0};
153 int64_t edgesPerEntity{0};
154 int64_t attributeCount{0};
155 int64_t procOffset{0};
156
157 private:
158 };
159
160 struct IOEXNL_EXPORT ElemBlock
161 {
163
164 ElemBlock(const ElemBlock &other)
165 : name(other.name), id(other.id), entityCount(other.entityCount),
166 globalEntityCount(other.globalEntityCount), nodesPerEntity(other.nodesPerEntity),
167 edgesPerEntity(other.edgesPerEntity), facesPerEntity(other.facesPerEntity),
168 attributeCount(other.attributeCount), offset_(other.offset_), procOffset(other.procOffset)
169 {
170 Ioss::Utils::copy_string(elType, other.elType);
171 }
172
173 explicit ElemBlock(const Ioss::ElementBlock &other);
174
175 char elType[MAX_STR_LENGTH + 1]{};
176 std::string name{};
178 int64_t entityCount{0};
179 int64_t globalEntityCount{0};
180 int64_t nodesPerEntity{0};
181 int64_t edgesPerEntity{0};
182 int64_t facesPerEntity{0};
183 int64_t attributeCount{0};
184 int64_t offset_{-1};
185 int64_t procOffset{0};
186 };
187
188 struct IOEXNL_EXPORT NodeSet
189 {
190 explicit NodeSet(const Ioss::NodeSet &other);
191
192 std::string name{};
194 int64_t entityCount{0};
195 int64_t globalEntityCount{0};
196 int64_t localOwnedCount{0};
197 int64_t attributeCount{0};
198 int64_t dfCount{0};
199 int64_t procOffset{0};
200 };
201
202 struct IOEXNL_EXPORT EdgeSet
203 {
204 explicit EdgeSet(const Ioss::EdgeSet &other);
205
206 std::string name{};
208 int64_t entityCount{0};
209 int64_t attributeCount{0};
210 int64_t dfCount{0};
211 int64_t procOffset{0};
212 };
213
214 struct IOEXNL_EXPORT FaceSet
215 {
216 explicit FaceSet(const Ioss::FaceSet &other);
217
218 std::string name{};
220 int64_t entityCount{0};
221 int64_t attributeCount{0};
222 int64_t dfCount{0};
223 int64_t procOffset{0};
224 };
225
226 struct IOEXNL_EXPORT ElemSet
227 {
228 explicit ElemSet(const Ioss::ElementSet &other);
229
230 std::string name{};
232 int64_t entityCount{0};
233 int64_t attributeCount{0};
234 int64_t dfCount{0};
235 int64_t procOffset{0};
236 };
237
238 struct IOEXNL_EXPORT SideSet
239 {
240 explicit SideSet(const Ioss::SideBlock &other);
241 explicit SideSet(const Ioss::SideSet &other);
242
243 std::string name{};
245 int64_t entityCount{0};
246 int64_t globalEntityCount{0};
247 int64_t dfCount{0};
248 int64_t procOffset{0};
249 int64_t dfProcOffset{0};
250 };
251
252 struct IOEXNL_EXPORT CommunicationMap
253 {
254 CommunicationMap(entity_id the_id, int64_t count, char the_type)
255 : id(the_id), entityCount(count), type(the_type)
256 {
257 }
259 int64_t entityCount{0};
260 char type{'U'}; // 'n' for node, 'e' for element
261 };
262
263 struct IOEXNL_EXPORT CommunicationMetaData
264 {
265 std::vector<CommunicationMap> nodeMap{};
266 std::vector<CommunicationMap> elementMap{};
267 int processorId{0};
268 int processorCount{0};
269 int64_t globalNodes{0};
270 int64_t globalElements{0};
271 int64_t globalElementBlocks{0};
272 int64_t globalNodeSets{0};
273 int64_t globalSideSets{0};
274 int64_t nodesInternal{0};
275 int64_t nodesBorder{0};
276 int64_t nodesExternal{0};
277 int64_t elementsInternal{0};
278 int64_t elementsBorder{0};
279 bool outputNemesis{false};
280 };
281
282 class IOEXNL_EXPORT Redefine
283 {
284 public:
285 explicit Redefine(int exoid);
286 Redefine(const Redefine &from) = delete;
287 Redefine &operator=(const Redefine &from) = delete;
288
289 private:
291 };
292
293 class IOEXNL_EXPORT Mesh
294 {
295 public:
296 Mesh(int dim, const char *the_title, const Ioss::ParallelUtils &util, bool file_pp)
297 : dimensionality(dim), file_per_processor(file_pp), parallelUtil(util)
298 {
299 Ioss::Utils::copy_string(title, the_title);
300 }
301
302 void populate(Ioss::Region *region);
303 void get_global_counts();
304
305 char title[MAX_LINE_LENGTH + 1]{};
306 int dimensionality{};
307 bool file_per_processor{true};
308 bool use_node_map{true};
309 bool use_elem_map{true};
310 bool use_face_map{true};
311 bool use_edge_map{true};
312 bool full_nemesis_data{true};
313
314 std::vector<Assembly> assemblies{};
315 std::vector<Blob> blobs{};
316
317 std::vector<NodeBlock> nodeblocks{};
318 std::vector<EdgeBlock> edgeblocks{};
319 std::vector<FaceBlock> faceblocks{};
320 std::vector<ElemBlock> elemblocks{};
321 std::vector<NodeSet> nodesets{};
322 std::vector<EdgeSet> edgesets{};
323 std::vector<FaceSet> facesets{};
324 std::vector<ElemSet> elemsets{};
325 std::vector<SideSet> sidesets{};
328 };
329} // namespace Ioexnl
int64_t entity_id
Definition Ioex_Internals.h:36
Definition Ioexnl_Internals.h:294
Mesh(int dim, const char *the_title, const Ioss::ParallelUtils &util, bool file_pp)
Definition Ioexnl_Internals.h:296
Ioss::ParallelUtils parallelUtil
Definition Ioexnl_Internals.h:327
Definition Ioexnl_Internals.h:283
int exodusFilePtr
Definition Ioexnl_Internals.h:290
Redefine(const Redefine &from)=delete
Redefine & operator=(const Redefine &from)=delete
Redefine(int exoid)
A homogeneous collection of other GroupingEntities.
Definition Ioss_Assembly.h:31
A homogeneous collection of other GroupingEntities.
Definition Ioss_Blob.h:31
A collection of element edges with the same topology.
Definition Ioss_EdgeBlock.h:29
A collection of element edges.
Definition Ioss_EdgeSet.h:30
A collection of elements having the same topology.
Definition Ioss_ElementBlock.h:29
A collection of elements.
Definition Ioss_ElementSet.h:30
A collection of element faces with the same topology.
Definition Ioss_FaceBlock.h:29
A collection of element faces.
Definition Ioss_FaceSet.h:30
A collection of all nodes in the region.
Definition Ioss_NodeBlock.h:33
A collection of nodes.
Definition Ioss_NodeSet.h:29
Definition Ioss_ParallelUtils.h:32
A grouping entity that contains other grouping entities.
Definition Ioss_Region.h:93
A collection of element sides having the same topology.
Definition Ioss_SideBlock.h:37
A collection of element sides.
Definition Ioss_SideSet.h:29
static void copy_string(char *dest, char const *source, size_t elements)
Definition Ioss_Utils.C:1276
A namespace for the exodus database format.
Definition Ioexnl_BaseDatabaseIO.C:93
The main namespace for the Ioss library.
Definition Ioad_DatabaseIO.C:40
Definition Ioexnl_Internals.h:86
std::vector< int64_t > memberIdList
Definition Ioexnl_Internals.h:94
Definition Ioexnl_Internals.h:98
Definition Ioexnl_Internals.h:253
CommunicationMap(entity_id the_id, int64_t count, char the_type)
Definition Ioexnl_Internals.h:254
Definition Ioexnl_Internals.h:264
Definition Ioexnl_Internals.h:110
EdgeBlock()
Definition Ioexnl_Internals.h:111
char elType[MAX_STR_LENGTH+1]
Definition Ioexnl_Internals.h:123
EdgeBlock(const EdgeBlock &other)
Definition Ioexnl_Internals.h:113
Definition Ioexnl_Internals.h:203
Definition Ioexnl_Internals.h:161
ElemBlock()
Definition Ioexnl_Internals.h:162
char elType[MAX_STR_LENGTH+1]
Definition Ioexnl_Internals.h:175
ElemBlock(const ElemBlock &other)
Definition Ioexnl_Internals.h:164
Definition Ioexnl_Internals.h:227
Definition Ioexnl_Internals.h:135
char elType[MAX_STR_LENGTH+1]
Definition Ioexnl_Internals.h:148
FaceBlock(const FaceBlock &other)
Definition Ioexnl_Internals.h:138
FaceBlock()
Definition Ioexnl_Internals.h:136
Definition Ioexnl_Internals.h:215
Definition Ioexnl_Internals.h:74
Definition Ioexnl_Internals.h:189
Definition Ioexnl_Internals.h:239