OGS
anonymous_namespace{MeshIO.cpp} Namespace Reference

Functions

int readMaterialID (std::istream &in)
MeshLib::ElementreadElement (std::istream &in, const std::vector< MeshLib::Node * > &nodes)
std::string ElemType2StringOutput (const MeshLib::MeshElemType t)
void writeElements (std::vector< MeshLib::Element * > const &ele_vec, MeshLib::PropertyVector< int > const *const material_ids, std::ostream &out)

Function Documentation

◆ ElemType2StringOutput()

std::string anonymous_namespace{MeshIO.cpp}::ElemType2StringOutput ( const MeshLib::MeshElemType t)

Definition at line 187 of file MeshIO.cpp.

188{
190 {
191 return "line";
192 }
194 {
195 return "quad";
196 }
198 {
199 return "hex";
200 }
202 {
203 return "tri";
204 }
206 {
207 return "tet";
208 }
210 {
211 return "pris";
212 }
214 {
215 return "pyra";
216 }
217 return "none";
218}

References MeshLib::HEXAHEDRON, MeshLib::LINE, MeshLib::PRISM, MeshLib::PYRAMID, MeshLib::QUAD, MeshLib::TETRAHEDRON, and MeshLib::TRIANGLE.

Referenced by writeElements().

◆ readElement()

MeshLib::Element * anonymous_namespace{MeshIO.cpp}::readElement ( std::istream & in,
const std::vector< MeshLib::Node * > & nodes )

Definition at line 37 of file MeshIO.cpp.

39{
40 std::string elem_type_str;
42
43 do
44 {
45 if (!(in >> elem_type_str))
46 {
47 return nullptr;
48 }
49 elem_type = MeshLib::String2MeshElemType(elem_type_str);
50 } while (elem_type == MeshLib::MeshElemType::INVALID);
51
52 auto* idx = new unsigned[8];
53 MeshLib::Element* elem;
54
55 switch (elem_type)
56 {
58 {
59 for (int i = 0; i < 2; ++i)
60 {
61 if (!(in >> idx[i]))
62 {
63 return nullptr;
64 }
65 }
66 // edge_nodes array will be deleted from Line object
67 auto** edge_nodes = new MeshLib::Node*[2];
68 for (unsigned k(0); k < 2; ++k)
69 {
70 edge_nodes[k] = nodes[idx[k]];
71 }
72 elem = new MeshLib::Line(edge_nodes);
73 break;
74 }
76 {
77 for (int i = 0; i < 3; ++i)
78 {
79 if (!(in >> idx[i]))
80 {
81 return nullptr;
82 }
83 }
84 auto** tri_nodes = new MeshLib::Node*[3];
85 for (unsigned k(0); k < 3; ++k)
86 {
87 tri_nodes[k] = nodes[idx[k]];
88 }
89 elem = new MeshLib::Tri(tri_nodes);
90 break;
91 }
93 {
94 for (int i = 0; i < 4; ++i)
95 {
96 if (!(in >> idx[i]))
97 {
98 return nullptr;
99 }
100 }
101 auto** quad_nodes = new MeshLib::Node*[4];
102 for (unsigned k(0); k < 4; ++k)
103 {
104 quad_nodes[k] = nodes[idx[k]];
105 }
106 elem = new MeshLib::Quad(quad_nodes);
107 break;
108 }
110 {
111 for (int i = 0; i < 4; ++i)
112 {
113 if (!(in >> idx[i]))
114 {
115 return nullptr;
116 }
117 }
118 auto** tet_nodes = new MeshLib::Node*[4];
119 for (unsigned k(0); k < 4; ++k)
120 {
121 tet_nodes[k] = nodes[idx[k]];
122 }
123 elem = new MeshLib::Tet(tet_nodes);
124 break;
125 }
127 {
128 for (int i = 0; i < 8; ++i)
129 {
130 if (!(in >> idx[i]))
131 {
132 return nullptr;
133 }
134 }
135 auto** hex_nodes = new MeshLib::Node*[8];
136 for (unsigned k(0); k < 8; ++k)
137 {
138 hex_nodes[k] = nodes[idx[k]];
139 }
140 elem = new MeshLib::Hex(hex_nodes);
141 break;
142 }
144 {
145 for (int i = 0; i < 5; ++i)
146 {
147 if (!(in >> idx[i]))
148 {
149 return nullptr;
150 }
151 }
152 auto** pyramid_nodes = new MeshLib::Node*[5];
153 for (unsigned k(0); k < 5; ++k)
154 {
155 pyramid_nodes[k] = nodes[idx[k]];
156 }
157 elem = new MeshLib::Pyramid(pyramid_nodes);
158 break;
159 }
161 {
162 for (int i = 0; i < 6; ++i)
163 {
164 if (!(in >> idx[i]))
165 {
166 return nullptr;
167 }
168 }
169 auto** prism_nodes = new MeshLib::Node*[6];
170 for (unsigned k(0); k < 6; ++k)
171 {
172 prism_nodes[k] = nodes[idx[k]];
173 }
174 elem = new MeshLib::Prism(prism_nodes);
175 break;
176 }
177 default:
178 elem = nullptr;
179 break;
180 }
181
182 delete[] idx;
183
184 return elem;
185}
MeshElemType String2MeshElemType(const std::string &s)
Given a string of the shortened name of the element type, this returns the corresponding MeshElemType...
Definition MeshEnums.cpp:84
TemplateElement< MeshLib::TetRule4 > Tet
Definition Tet.h:14
TemplateElement< MeshLib::LineRule2 > Line
Definition Line.h:14
TemplateElement< MeshLib::QuadRule4 > Quad
Definition Quad.h:17
TemplateElement< MeshLib::TriRule3 > Tri
Definition Tri.h:15
TemplateElement< MeshLib::PyramidRule5 > Pyramid
Definition Pyramid.h:14
TemplateElement< MeshLib::PrismRule6 > Prism
Definition Prism.h:14
MeshElemType
Types of mesh elements supported by OpenGeoSys. Values are from VTKCellType enum.
Definition MeshEnums.h:37
TemplateElement< MeshLib::HexRule8 > Hex
Definition Hex.h:14

References MeshLib::HEXAHEDRON, MeshLib::INVALID, MeshLib::LINE, MeshLib::PRISM, MeshLib::PYRAMID, MeshLib::QUAD, MeshLib::String2MeshElemType(), MeshLib::TETRAHEDRON, and MeshLib::TRIANGLE.

◆ readMaterialID()

int anonymous_namespace{MeshIO.cpp}::readMaterialID ( std::istream & in)

Definition at line 21 of file MeshIO.cpp.

22{
23 unsigned index;
24 unsigned material_id;
25
26 if (!(in >> index >> material_id) ||
27 material_id > static_cast<unsigned>(std::numeric_limits<int>::max()))
28 {
29 // If read incorrectly or the material_id is not safely convertible to
30 // int.
31 return std::numeric_limits<int>::max();
32 }
33 // Safe conversion was checked above.
34 return static_cast<int>(material_id);
35}

◆ writeElements()

void anonymous_namespace{MeshIO.cpp}::writeElements ( std::vector< MeshLib::Element * > const & ele_vec,
MeshLib::PropertyVector< int > const *const material_ids,
std::ostream & out )

Definition at line 220 of file MeshIO.cpp.

223{
224 const std::size_t ele_vector_size(ele_vec.size());
225
226 out << ele_vector_size << "\n";
227 for (std::size_t i(0); i < ele_vector_size; ++i)
228 {
229 auto const& element = *ele_vec[i];
230 if (element.getNumberOfBaseNodes() != element.getNumberOfNodes())
231 {
232 OGS_FATAL(
233 "Found high order element in the mesh that is not required by "
234 "OGS 5 input. High order elements are generated in OGS 5 on "
235 "demand.");
236 }
237
238 out << i << " ";
239 if (!material_ids)
240 {
241 out << "0 ";
242 }
243 else
244 {
245 out << (*material_ids)[i] << " ";
246 }
247 out << ElemType2StringOutput(element.getGeomType()) << " ";
248 unsigned nElemNodes(element.getNumberOfBaseNodes());
249 for (std::size_t j = 0; j < nElemNodes; ++j)
250 {
251 out << element.getNode(j)->getID() << " ";
252 }
253 out << "\n";
254 }
255}
#define OGS_FATAL(...)
Definition Error.h:19
std::string ElemType2StringOutput(const MeshLib::MeshElemType t)
Definition MeshIO.cpp:187

References ElemType2StringOutput(), and OGS_FATAL.