dune-grid 2.12-git
Loading...
Searching...
No Matches
common.hh
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file LICENSE.md in module root
2// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
3// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
4// vi: set et ts=4 sw=2 sts=2:
5
6#ifndef DUNE_GRID_IO_FILE_VTK_COMMON_HH
7#define DUNE_GRID_IO_FILE_VTK_COMMON_HH
8
9#include <limits>
10#include <sstream>
11#include <string>
12#include <cstdint>
13
15#include <dune/geometry/type.hh>
17
25namespace Dune
26{
29
30 namespace VTK {
31
33 //
34 // VTKOptions
35 //
36
38
52 // //! Output to the file is compressed inline binary.
53 // binarycompressed,
54 // //! Output is compressed and appended to the file.
55 // compressedappended
56 };
58
83
85 //
86 // PrintType
87 //
88
90
94 template<typename T>
95 struct PrintType {
97 typedef T Type;
98 };
99
100 template<>
101 struct PrintType<unsigned char> {
102 typedef unsigned Type;
103 };
104
105 template<>
106 struct PrintType<signed char> {
107 typedef int Type;
108 };
109
110 template<>
111 struct PrintType<char> {
113 int, unsigned>::type
115 };
116
118 //
119 // VTK::GeometryType related stuff
120 //
121
123
144
146
152 {
153 if (t.isVertex()) return vertex;
154 if (t.isLine()) return line;
155 if (t.isTriangle()) return triangle;
156 if (t.isQuadrilateral()) return quadrilateral;
157 if (t.isTetrahedron()) return tetrahedron;
158 if (t.isPyramid()) return pyramid;
159 if (t.isPrism()) return prism;
160 if (t.isHexahedron()) return hexahedron;
161
162 if (t.isNone() )
163 {
164 if( t.dim() == 2 ) return polygon;
165 if( t.dim() == 3 ) return polyhedron;
166 }
167
168 DUNE_THROW(IOError,"VTKWriter: unsupported GeometryType " << t);
169 }
170
172 //
173 // Functions for transforming the index of a corner inside an entity
174 // between Dune and VTK
175 //
176
178
186 inline int renumber(const Dune::GeometryType &t, int i)
187 {
188 static const int quadRenumbering[4] = {0,1,3,2};
189 static const int cubeRenumbering[8] = {0,1,3,2,4,5,7,6};
190 static const int prismRenumbering[6] = {0,2,1,3,5,4};
191 static const int pyramidRenumbering[5] = {0,1,3,2,4};
192
193 if (t.isQuadrilateral()) return quadRenumbering[i];
194 if (t.isPyramid()) return pyramidRenumbering[i];
195 if (t.isPrism()) return prismRenumbering[i];
196 if (t.isHexahedron()) return cubeRenumbering[i];
197
198 return i;
199 }
200
202
216 template<typename T>
217 int renumber(const T& t, int i)
218 {
219 return renumber(t.type(), i);
220 }
221
223 //
224 // Determine Endianness
225 //
226
228
233 {
234 short i = 1;
235 if (reinterpret_cast<char*>(&i)[1] == 1)
236 return "BigEndian";
237 else
238 return "LittleEndian";
239 }
240
242 //
243 // which type of vtkfile to write
244 //
245
247
258
259
261 //
262 // which precision to use when writing out data
263 //
264
266
271 enum class Precision {
272 int32,
273 uint8,
274 uint32,
275 float32,
276 float64
277 };
278
281 {
282 switch(p)
283 {
285 return "Float32";
287 return "Float64";
289 return "UInt32";
290 case Precision::uint8:
291 return "UInt8";
292 case Precision::int32:
293 return "Int32";
294 default:
295 DUNE_THROW(Dune::NotImplemented, "Unknown precision type");
296 }
297 }
298
301 {
302 switch(p)
303 {
305 return sizeof(float);
307 return sizeof(double);
309 return sizeof(std::uint32_t);
310 case Precision::uint8:
311 return sizeof(std::uint8_t);
312 case Precision::int32:
313 return sizeof(std::int32_t);
314 default:
315 DUNE_THROW(Dune::NotImplemented, "Unknown precision type");
316 }
317 }
318
320
328 {
329
330 public:
331
333 enum class Type {
336 scalar,
338 vector,
340 tensor
341 };
342
345 : _name(name)
346 , _type(type)
347 , _size(size)
348 , _prec(prec)
349 {}
350
353 {
354 return _name;
355 }
356
358 Type type() const
359 {
360 return _type;
361 }
362
365 {
366 return _size;
367 }
368
371 {
372 return _prec;
373 }
374
375 private:
376
377 std::string _name;
378 Type _type;
379 std::size_t _size;
380 Precision _prec;
381
382 };
383
384
385 } // namespace VTK
386
388
389} // namespace Dune
390
391#endif // DUNE_GRID_IO_FILE_VTK_COMMON_HH
#define DUNE_THROW(E,...)
Precision
which precision to use when writing out data to vtk files
Definition common.hh:271
OutputType
How the bulk data should be stored in the file.
Definition common.hh:43
@ ascii
Output to the file is in ascii.
Definition common.hh:45
@ appendedraw
Output is to the file is appended raw binary.
Definition common.hh:49
@ appendedbase64
Output is to the file is appended base64 binary.
Definition common.hh:51
@ base64
Output to the file is inline base64 binary.
Definition common.hh:47
int renumber(const Dune::GeometryType &t, int i)
renumber VTK <-> Dune
Definition common.hh:186
FileType
which type of VTK file to write
Definition common.hh:252
@ polyData
for .vtp files (PolyData)
Definition common.hh:254
@ unstructuredGrid
for .vtu files (UnstructuredGrid)
Definition common.hh:256
std::string toString(Precision p)
map precision to VTK type name
Definition common.hh:280
DataMode
Whether to produce conforming or non-conforming output.
Definition common.hh:67
@ conforming
Output conforming data.
Definition common.hh:73
@ nonconforming
Output non-conforming data.
Definition common.hh:81
std::size_t typeSize(Precision p)
map precision to byte size
Definition common.hh:300
GeometryType geometryType(const Dune::GeometryType &t)
mapping from GeometryType to VTKGeometryType
Definition common.hh:151
std::string getEndiannessString()
determine endianness of this C++ implementation
Definition common.hh:232
GeometryType
Type representing VTK's entity geometry types.
Definition common.hh:132
@ line
Definition common.hh:134
@ pyramid
Definition common.hh:141
@ polyhedron
Definition common.hh:142
@ quadrilateral
Definition common.hh:137
@ vertex
Definition common.hh:133
@ tetrahedron
Definition common.hh:138
@ prism
Definition common.hh:140
@ hexahedron
Definition common.hh:139
@ triangle
Definition common.hh:135
@ polygon
Definition common.hh:136
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:95
T Type
type to convert T to before putting it into a stream with <<
Definition common.hh:97
unsigned Type
Definition common.hh:102
int Type
Definition common.hh:107
std::conditional< std::numeric_limits< char >::is_signed, int, unsigned >::type Type
Definition common.hh:114
Descriptor struct for VTK fields.
Definition common.hh:328
std::size_t size() const
The number of components in the data field.
Definition common.hh:364
Precision precision() const
The precision used for the output of the data field.
Definition common.hh:370
Type
VTK data type.
Definition common.hh:333
@ 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:344
Type type() const
The type of the data field.
Definition common.hh:358
std::string name() const
The name of the data field.
Definition common.hh:352