OGS
anonymous_namespace{MeshIO.cpp} Namespace Reference

Functions

std::size_t 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 193 of file MeshIO.cpp.

194{
196 {
197 return "line";
198 }
200 {
201 return "quad";
202 }
204 {
205 return "hex";
206 }
208 {
209 return "tri";
210 }
212 {
213 return "tet";
214 }
216 {
217 return "pris";
218 }
220 {
221 return "pyra";
222 }
223 return "none";
224}

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 43 of file MeshIO.cpp.

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

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

◆ readMaterialID()

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

Definition at line 32 of file MeshIO.cpp.

33{
34 unsigned index;
35 unsigned material_id;
36 if (!(in >> index >> material_id))
37 {
38 return std::numeric_limits<std::size_t>::max();
39 }
40 return material_id;
41}

◆ 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 226 of file MeshIO.cpp.

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

References ElemType2StringOutput(), and OGS_FATAL.