IOSS 2.0
Loading...
Searching...
No Matches
Iogn_DashSurfaceMesh.h
Go to the documentation of this file.
1// Copyright(C) 1999-2024 National Technology & Engineering Solutions
2// of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
3// NTESS, the U.S. Government retains certain rights in this software.
4//
5// See packages/seacas/LICENSE for details
6
7#pragma once
8
9#include "Ioss_Beam2.h"
10#include "Ioss_CodeTypes.h"
11#include "Ioss_Hex8.h"
12#include "Ioss_Shell4.h"
13#include "generated/Iogn_GeneratedMesh.h" // for GeneratedMesh
14#include <cstddef> // for size_t
15#include <cstdint> // for int64_t
16#include <exception> // for exception
17#include <string> // for string
18#include <utility> // for pair
19#include <vector> // for vector
20
21#include "iogn_export.h"
22
23namespace Iogn {
24
26
27 struct IOGN_EXPORT SharedNode
28 {
29 SharedNode() = default;
30 int nodeId{-1};
31 int procId{-1};
32 };
33
34 enum Topology { Beam2 = 2, Shell4 = 4, Hex8 = 8 };
35
36 IOSS_NODISCARD inline std::string getTopologyName(Topology topology)
37 {
38 switch (topology) {
39 case Shell4: return {Ioss::Shell4::name};
40 case Hex8: return {Ioss::Hex8::name};
41 case Beam2: return {Ioss::Beam2::name};
42 }
43 throw std::exception();
44 }
45
46 struct IOGN_EXPORT ExodusData
47 {
48 std::vector<double> coordinates{};
49 const std::vector<std::vector<int>> elementBlockConnectivity;
50 const std::vector<int> globalNumberOfElementsInBlock{};
51 const std::vector<int> localNumberOfElementsInBlock{};
52 const std::vector<Topology> blockTopologicalData{};
53
54 const int globalNumberOfNodes{0};
55
56 const std::vector<int> globalIdsOfLocalElements{};
57 const std::vector<int> globalIdsOfLocalNodes{};
58
59 std::vector<SharedNode> sharedNodes{};
60
61 // A sideset' is basically an exodus sideset. A
62 // sideset has a list of elements and a corresponding local
63 // element side (1-based) The side id is: side_id =
64 // 10*element_id + local_side_number This assumes that all
65 // sides in a sideset are boundary sides.
66 std::vector<std::vector<int>> sidesetConnectivity;
67 std::vector<std::vector<std::string>> sidesetTouchingBlocks;
68
69 ExodusData() = delete;
70 ExodusData(std::vector<double> coords, std::vector<std::vector<int>> elemBlockConnectivity,
71 std::vector<int> globalNumOfElemsInBlock, std::vector<int> localNumOfElemsInBlock,
72 std::vector<Topology> blockTopoData, int globalNumNodes,
73 std::vector<int> globalIdsOfLocalElems, std::vector<int> globalIdsLocalNodes,
74 std::vector<std::vector<int>> sidesetConn = std::vector<std::vector<int>>(),
75 std::vector<std::vector<std::string>> sidesetBlocks =
76 std::vector<std::vector<std::string>>())
77 : coordinates(std::move(coords)),
78 elementBlockConnectivity(std::move(elemBlockConnectivity)),
79 globalNumberOfElementsInBlock(std::move(globalNumOfElemsInBlock)),
80 localNumberOfElementsInBlock(std::move(localNumOfElemsInBlock)),
81 blockTopologicalData(std::move(blockTopoData)), globalNumberOfNodes(globalNumNodes),
82 globalIdsOfLocalElements(std::move(globalIdsOfLocalElems)),
83 globalIdsOfLocalNodes(std::move(globalIdsLocalNodes)),
84 sidesetConnectivity(std::move(sidesetConn)),
85 sidesetTouchingBlocks(std::move(sidesetBlocks))
86 {
87 }
88 };
89
90 struct IOGN_EXPORT DashSurfaceData
91 {
92 const std::vector<double> coordinates{};
93 const std::vector<int> surfaceAConnectivity{};
94 const std::vector<int> surfaceBConnectivity{};
95
96 int globalNumberOfNodes{};
97 int globalNumberOfElements{};
98
99 int globalNumberOfElementsSurface1{};
100 int globalNumberOfElementsSurface2{};
101
102 std::vector<int> globalIdsOfLocalElements{};
103 std::vector<int> globalIdsOfLocalNodes{};
104
105 std::vector<SharedNode> sharedNodes{};
106
107 DashSurfaceData(std::vector<double> coords, std::vector<int> connectivity1,
108 std::vector<int> connectivity2)
109 : coordinates(std::move(coords)), surfaceAConnectivity(std::move(connectivity1)),
110 surfaceBConnectivity(std::move(connectivity2))
111 {
112 this->setSerialDefaults();
113 }
114
115 private:
117 {
118 globalNumberOfNodes = coordinates.size() / SPATIAL_DIMENSION;
119
120 globalNumberOfElementsSurface1 = surfaceBConnectivity.size() / NUM_NODES_PER_QUAD_FACE;
121 globalNumberOfElementsSurface2 = surfaceAConnectivity.size() / NUM_NODES_PER_QUAD_FACE;
122 globalNumberOfElements = globalNumberOfElementsSurface1 + globalNumberOfElementsSurface2;
123
124 globalIdsOfLocalElements.resize(globalNumberOfElements);
125 globalIdsOfLocalNodes.resize(globalNumberOfNodes);
126
127 for (size_t i = 0; i < globalIdsOfLocalElements.size(); i++) {
128 globalIdsOfLocalElements[i] = i + 1;
129 }
130
131 for (size_t i = 0; i < globalIdsOfLocalNodes.size(); i++) {
132 globalIdsOfLocalNodes[i] = i + 1;
133 }
134 }
135 };
136
137 class IOGN_EXPORT DashSurfaceMesh : public GeneratedMesh
138 {
139 public:
140 explicit DashSurfaceMesh(DashSurfaceData &dashSurfaceData) : mDashSurfaceData(dashSurfaceData)
141 {
142 }
143
144 IOSS_NODISCARD int64_t node_count() const override;
145 IOSS_NODISCARD int64_t node_count_proc() const override;
146
147 IOSS_NODISCARD int64_t element_count() const override;
148 IOSS_NODISCARD int64_t element_count(int64_t surfaceNumber) const override;
149 IOSS_NODISCARD int64_t element_count_proc() const override;
150 IOSS_NODISCARD int64_t element_count_proc(int64_t block_number) const override;
151
152 IOSS_NODISCARD int block_count() const override;
153
154 IOSS_NODISCARD int nodeset_count() const override;
155 IOSS_NODISCARD int64_t nodeset_node_count_proc(int64_t id) const override;
156
157 IOSS_NODISCARD int sideset_count() const override;
158 IOSS_NODISCARD int64_t sideset_side_count_proc(int64_t id) const override;
159
160 IOSS_NODISCARD int64_t communication_node_count_proc() const override;
161
162 void coordinates(double *coord) const override;
163 void coordinates(std::vector<double> &coord) const override;
164 void coordinates(int component, std::vector<double> &xyz) const override;
165 void coordinates(int component, double *xyz) const override;
166 void coordinates(std::vector<double> &x, std::vector<double> &y,
167 std::vector<double> &z) const override;
168
169 void connectivity(int64_t block_number, int *connect) const override;
170
171 IOSS_NODISCARD std::pair<std::string, int> topology_type(int64_t block_number) const override;
172
173 void sideset_elem_sides(int64_t setId, std::vector<int64_t> &elem_sides) const override;
174
175 void nodeset_nodes(int64_t nset_id, std::vector<int64_t> &nodes) const override;
176
177 void node_communication_map(std::vector<int64_t> &map, std::vector<int> &proc) override;
178
179 void node_map(std::vector<int> &map) const override;
180 void node_map(std::vector<int64_t> &map) const override;
181
182 void element_map(int64_t block_number, std::vector<int> &map) const override;
183 void element_map(int64_t block_number, std::vector<int64_t> &map) const override;
184 void element_map(std::vector<int64_t> &map) const override;
185 void element_map(std::vector<int> &map) const override;
186
187 private:
188 std::string get_sideset_topology() const override;
189
191 };
192
193 class IOGN_EXPORT ExodusMesh : public GeneratedMesh
194 {
195 public:
196 explicit ExodusMesh(const ExodusData &exodusData);
197
198 IOSS_NODISCARD int64_t node_count() const override;
199 IOSS_NODISCARD int64_t node_count_proc() const override;
200
201 IOSS_NODISCARD int64_t element_count() const override;
202 IOSS_NODISCARD int64_t element_count(int64_t blockNumber) const override;
203 IOSS_NODISCARD int64_t element_count_proc() const override;
204 IOSS_NODISCARD int64_t element_count_proc(int64_t blockNumber) const override;
205
206 IOSS_NODISCARD int block_count() const override;
207
208 IOSS_NODISCARD int nodeset_count() const override;
209 IOSS_NODISCARD int64_t nodeset_node_count_proc(int64_t id) const override;
210
211 IOSS_NODISCARD int sideset_count() const override;
212 IOSS_NODISCARD int64_t sideset_side_count_proc(int64_t id) const override;
213
214 IOSS_NODISCARD int64_t communication_node_count_proc() const override;
215
216 void coordinates(double *coord) const override;
217 void coordinates(std::vector<double> &coord) const override;
218 void coordinates(int component, std::vector<double> &xyz) const override;
219 void coordinates(int component, double *xyz) const override;
220 void coordinates(std::vector<double> &x, std::vector<double> &y,
221 std::vector<double> &z) const override;
222
223 void connectivity(int64_t blockNumber, int *connectivityForBlock) const override;
224
225 IOSS_NODISCARD std::pair<std::string, int> topology_type(int64_t blockNumber) const override;
226
227 void sideset_elem_sides(int64_t setId, std::vector<int64_t> &elem_sides) const override;
228
229 std::vector<std::string> sideset_touching_blocks(int64_t setId) const override;
230
231 void nodeset_nodes(int64_t nset_id, std::vector<int64_t> &nodes) const override;
232
233 void node_communication_map(std::vector<int64_t> &map, std::vector<int> &proc) override;
234
235 void node_map(std::vector<int> &map) const override;
236 void node_map(std::vector<int64_t> &map) const override;
237
238 void element_map(int64_t blockNumber, std::vector<int> &map) const override;
239 void element_map(int64_t blockNumber, std::vector<int64_t> &map) const override;
240 void element_map(std::vector<int64_t> &map) const override;
241 void element_map(std::vector<int> &map) const override;
242
243 private:
244 std::string get_sideset_topology() const override;
245
248
250 std::vector<int64_t> mElementOffsetForBlock;
251 };
252} // namespace Iogn
#define IOSS_NODISCARD
Definition Ioss_CodeTypes.h:54
Definition Iogn_DashSurfaceMesh.h:138
DashSurfaceMesh(DashSurfaceData &dashSurfaceData)
Definition Iogn_DashSurfaceMesh.h:140
DashSurfaceData mDashSurfaceData
Definition Iogn_DashSurfaceMesh.h:190
Definition Iogn_DashSurfaceMesh.h:194
int64_t mLocalNumberOfElements
Definition Iogn_DashSurfaceMesh.h:247
int64_t mGlobalNumberOfElements
Definition Iogn_DashSurfaceMesh.h:246
std::vector< int64_t > mElementOffsetForBlock
Definition Iogn_DashSurfaceMesh.h:250
const ExodusData & mExodusData
Definition Iogn_DashSurfaceMesh.h:249
Definition Iogn_GeneratedMesh.h:23
static const char * name
Definition Ioss_Beam2.h:21
static const char * name
Definition Ioss_Hex8.h:21
static const char * name
Definition Ioss_Shell4.h:21
A namespace for the generated database format.
Definition Iogn_DashSurfaceMesh.C:12
Topology
Definition Iogn_DashSurfaceMesh.h:34
@ Hex8
Definition Iogn_DashSurfaceMesh.h:34
@ Beam2
Definition Iogn_DashSurfaceMesh.h:34
@ Shell4
Definition Iogn_DashSurfaceMesh.h:34
@ NUMBER_OF_SURFACES
Definition Iogn_DashSurfaceMesh.h:25
@ NUM_NODES_PER_QUAD_FACE
Definition Iogn_DashSurfaceMesh.h:25
@ SPATIAL_DIMENSION
Definition Iogn_DashSurfaceMesh.h:25
@ INVALID
Definition Iogn_DashSurfaceMesh.h:25
IOSS_NODISCARD std::string getTopologyName(Topology topology)
Definition Iogn_DashSurfaceMesh.h:36
Definition Iogn_DashSurfaceMesh.h:91
DashSurfaceData(std::vector< double > coords, std::vector< int > connectivity1, std::vector< int > connectivity2)
Definition Iogn_DashSurfaceMesh.h:107
void setSerialDefaults()
Definition Iogn_DashSurfaceMesh.h:116
Definition Iogn_DashSurfaceMesh.h:47
ExodusData()=delete
std::vector< std::vector< int > > sidesetConnectivity
Definition Iogn_DashSurfaceMesh.h:66
ExodusData(std::vector< double > coords, std::vector< std::vector< int > > elemBlockConnectivity, std::vector< int > globalNumOfElemsInBlock, std::vector< int > localNumOfElemsInBlock, std::vector< Topology > blockTopoData, int globalNumNodes, std::vector< int > globalIdsOfLocalElems, std::vector< int > globalIdsLocalNodes, std::vector< std::vector< int > > sidesetConn=std::vector< std::vector< int > >(), std::vector< std::vector< std::string > > sidesetBlocks=std::vector< std::vector< std::string > >())
Definition Iogn_DashSurfaceMesh.h:70
std::vector< std::vector< std::string > > sidesetTouchingBlocks
Definition Iogn_DashSurfaceMesh.h:67
const std::vector< std::vector< int > > elementBlockConnectivity
Definition Iogn_DashSurfaceMesh.h:49
Definition Iogn_DashSurfaceMesh.h:28
SharedNode()=default