dune-grid 2.8.0
Loading...
Searching...
No Matches
common.hh
Go to the documentation of this file.
1// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2// vi: set et ts=4 sw=2 sts=2:
3
4#ifndef DUNE_GRID_IO_FILE_VTK_COMMON_HH
5#define DUNE_GRID_IO_FILE_VTK_COMMON_HH
6
7#include <limits>
8#include <sstream>
9#include <string>
10#include <cstdint>
11
13#include <dune/geometry/type.hh>
15
23namespace Dune
24{
27
28 namespace VTK {
29
31 //
32 // VTKOptions
33 //
34
36
50 // //! Output to the file is compressed inline binary.
51 // binarycompressed,
52 // //! Output is compressed and appended to the file.
53 // compressedappended
54 };
56
81
83 //
84 // PrintType
85 //
86
88
92 template<typename T>
93 struct PrintType {
95 typedef T Type;
96 };
97
98 template<>
99 struct PrintType<unsigned char> {
100 typedef unsigned Type;
101 };
102
103 template<>
104 struct PrintType<signed char> {
105 typedef int Type;
106 };
107
108 template<>
109 struct PrintType<char> {
111 int, unsigned>::type
113 };
114
116 //
117 // VTK::GeometryType related stuff
118 //
119
121
142
144
150 {
151 if (t.isVertex()) return vertex;
152 if (t.isLine()) return line;
153 if (t.isTriangle()) return triangle;
154 if (t.isQuadrilateral()) return quadrilateral;
155 if (t.isTetrahedron()) return tetrahedron;
156 if (t.isPyramid()) return pyramid;
157 if (t.isPrism()) return prism;
158 if (t.isHexahedron()) return hexahedron;
159
160 if (t.isNone() )
161 {
162 if( t.dim() == 2 ) return polygon;
163 if( t.dim() == 3 ) return polyhedron;
164 }
165
166 DUNE_THROW(IOError,"VTKWriter: unsupported GeometryType " << t);
167 }
168
170 //
171 // Functions for transforming the index of a corner inside an entity
172 // between Dune and VTK
173 //
174
176
184 inline int renumber(const Dune::GeometryType &t, int i)
185 {
186 static const int quadRenumbering[4] = {0,1,3,2};
187 static const int cubeRenumbering[8] = {0,1,3,2,4,5,7,6};
188 static const int prismRenumbering[6] = {0,2,1,3,5,4};
189 static const int pyramidRenumbering[5] = {0,1,3,2,4};
190
191 if (t.isQuadrilateral()) return quadRenumbering[i];
192 if (t.isPyramid()) return pyramidRenumbering[i];
193 if (t.isPrism()) return prismRenumbering[i];
194 if (t.isHexahedron()) return cubeRenumbering[i];
195
196 return i;
197 }
198
200
214 template<typename T>
215 int renumber(const T& t, int i)
216 {
217 return renumber(t.type(), i);
218 }
219
221 //
222 // Determine Endianness
223 //
224
226
231 {
232 short i = 1;
233 if (reinterpret_cast<char*>(&i)[1] == 1)
234 return "BigEndian";
235 else
236 return "LittleEndian";
237 }
238
240 //
241 // which type of vtkfile to write
242 //
243
245
256
257
259 //
260 // which precision to use when writing out data
261 //
262
264
269 enum class Precision {
270 int32,
271 uint8,
272 uint32,
273 float32,
274 float64
275 };
276
279 {
280 switch(p)
281 {
283 return "Float32";
285 return "Float64";
287 return "UInt32";
288 case Precision::uint8:
289 return "UInt8";
290 case Precision::int32:
291 return "Int32";
292 default:
293 DUNE_THROW(Dune::NotImplemented, "Unknown precision type");
294 }
295 }
296
299 {
300 switch(p)
301 {
303 return sizeof(float);
305 return sizeof(double);
307 return sizeof(std::uint32_t);
308 case Precision::uint8:
309 return sizeof(std::uint8_t);
310 case Precision::int32:
311 return sizeof(std::int32_t);
312 default:
313 DUNE_THROW(Dune::NotImplemented, "Unknown precision type");
314 }
315 }
316
318
326 {
327
328 public:
329
331 enum class Type {
334 scalar,
336 vector,
338 tensor
339 };
340
343 : _name(name)
344 , _type(type)
345 , _size(size)
346 , _prec(prec)
347 {}
348
351 {
352 return _name;
353 }
354
356 Type type() const
357 {
358 return _type;
359 }
360
363 {
364 return _size;
365 }
366
369 {
370 return _prec;
371 }
372
373 private:
374
375 std::string _name;
376 Type _type;
377 std::size_t _size;
378 Precision _prec;
379
380 };
381
382
383 } // namespace VTK
384
386
387} // namespace Dune
388
389#endif // DUNE_GRID_IO_FILE_VTK_COMMON_HH
#define DUNE_THROW(E, m)
Precision
which precision to use when writing out data to vtk files
Definition common.hh:269
OutputType
How the bulk data should be stored in the file.
Definition common.hh:41
@ ascii
Output to the file is in ascii.
Definition common.hh:43
@ appendedraw
Output is to the file is appended raw binary.
Definition common.hh:47
@ appendedbase64
Output is to the file is appended base64 binary.
Definition common.hh:49
@ base64
Output to the file is inline base64 binary.
Definition common.hh:45
int renumber(const Dune::GeometryType &t, int i)
renumber VTK <-> Dune
Definition common.hh:184
FileType
which type of VTK file to write
Definition common.hh:250
@ polyData
for .vtp files (PolyData)
Definition common.hh:252
@ unstructuredGrid
for .vtu files (UnstructuredGrid)
Definition common.hh:254
std::string toString(Precision p)
map precision to VTK type name
Definition common.hh:278
DataMode
Whether to produce conforming or non-conforming output.
Definition common.hh:65
@ conforming
Output conforming data.
Definition common.hh:71
@ nonconforming
Output non-conforming data.
Definition common.hh:79
std::size_t typeSize(Precision p)
map precision to byte size
Definition common.hh:298
GeometryType geometryType(const Dune::GeometryType &t)
mapping from GeometryType to VTKGeometryType
Definition common.hh:149
std::string getEndiannessString()
determine endianness of this C++ implementation
Definition common.hh:230
GeometryType
Type representing VTK's entity geometry types.
Definition common.hh:130
@ line
Definition common.hh:132
@ pyramid
Definition common.hh:139
@ polyhedron
Definition common.hh:140
@ quadrilateral
Definition common.hh:135
@ vertex
Definition common.hh:131
@ tetrahedron
Definition common.hh:136
@ prism
Definition common.hh:138
@ hexahedron
Definition common.hh:137
@ triangle
Definition common.hh:133
@ polygon
Definition common.hh:134
Include standard header files.
constexpr bool isPyramid() const
constexpr bool isTetrahedron() const
constexpr bool isPrism() const
constexpr bool isVertex() const
constexpr unsigned int dim() const
constexpr bool isTriangle() const
constexpr bool isLine() const
constexpr bool isQuadrilateral() const
constexpr bool isNone() const
constexpr bool isHexahedron() const
determine a type to safely put another type into a stream
Definition common.hh:93
T Type
type to convert T to before putting it into a stream with <<
Definition common.hh:95
unsigned Type
Definition common.hh:100
int Type
Definition common.hh:105
std::conditional< std::numeric_limits< char >::is_signed, int, unsigned >::type Type
Definition common.hh:112
Descriptor struct for VTK fields.
Definition common.hh:326
std::size_t size() const
The number of components in the data field.
Definition common.hh:362
Precision precision() const
The precision used for the output of the data field.
Definition common.hh:368
Type
VTK data type.
Definition common.hh:331
@ tensor
tensor field (always 3x3)
@ vector
vector-valued field (always 3D, will be padded if necessary)
FieldInfo(std::string name, Type type, std::size_t size, Precision prec=Precision::float32)
Create a FieldInfo instance with the given name, type and size.
Definition common.hh:342
Type type() const
The type of the data field.
Definition common.hh:356
std::string name() const
The name of the data field.
Definition common.hh:350