VTK-m  2.0
ZFPCodec.h
Go to the documentation of this file.
1 //============================================================================
2 // Copyright (c) Kitware, Inc.
3 // All rights reserved.
4 // See LICENSE.txt for details.
5 //
6 // This software is distributed WITHOUT ANY WARRANTY; without even
7 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
8 // PURPOSE. See the above copyright notice for more information.
9 //============================================================================
10 #ifndef vtk_m_worklet_zfp_codec_h
11 #define vtk_m_worklet_zfp_codec_h
12 
13 #define index3(i, j, k) ((i) + 4 * ((j) + 4 * (k)))
14 #define index2(i, j) ((i) + 4 * (j))
15 
16 #include <vtkm/Types.h>
18 
19 namespace vtkm
20 {
21 namespace worklet
22 {
23 namespace zfp
24 {
25 
26 template <vtkm::Int32 BlockSize>
27 struct ZFPCodec;
28 
29 template <>
30 struct ZFPCodec<4>
31 {
34  {
35  VTKM_STATIC_CONSTEXPR_ARRAY vtkm::UInt8 perm_1[4] = { 0, 1, 2, 3 };
36  return perm_1[x];
37  }
38 };
39 
40 template <>
41 struct ZFPCodec<16>
42 {
45  {
46  /* order coefficients (i, j) by i + j, then i^2 + j^2 */
48  index2(0, 0), /* 0 : 0 */
49 
50  index2(1, 0), /* 1 : 1 */
51  index2(0, 1), /* 2 : 1 */
52 
53  index2(1, 1), /* 3 : 2 */
54 
55  index2(2, 0), /* 4 : 2 */
56  index2(0, 2), /* 5 : 2 */
57 
58  index2(2, 1), /* 6 : 3 */
59  index2(1, 2), /* 7 : 3 */
60 
61  index2(3, 0), /* 8 : 3 */
62  index2(0, 3), /* 9 : 3 */
63 
64  index2(2, 2), /* 10 : 4 */
65 
66  index2(3, 1), /* 11 : 4 */
67  index2(1, 3), /* 12 : 4 */
68 
69  index2(3, 2), /* 13 : 5 */
70  index2(2, 3), /* 14 : 5 */
71 
72  index2(3, 3), /* 15 : 6 */
73  };
74  return perm_2[x];
75  }
76 };
77 
78 template <>
79 struct ZFPCodec<64>
80 {
83  {
84  /* order coefficients (i, j, k) by i + j + k, then i^2 + j^2 + k^2 */
86  index3(0, 0, 0), /* 0 : 0 */
87 
88  index3(1, 0, 0), /* 1 : 1 */
89  index3(0, 1, 0), /* 2 : 1 */
90  index3(0, 0, 1), /* 3 : 1 */
91 
92  index3(0, 1, 1), /* 4 : 2 */
93  index3(1, 0, 1), /* 5 : 2 */
94  index3(1, 1, 0), /* 6 : 2 */
95 
96  index3(2, 0, 0), /* 7 : 2 */
97  index3(0, 2, 0), /* 8 : 2 */
98  index3(0, 0, 2), /* 9 : 2 */
99 
100  index3(1, 1, 1), /* 10 : 3 */
101 
102  index3(2, 1, 0), /* 11 : 3 */
103  index3(2, 0, 1), /* 12 : 3 */
104  index3(0, 2, 1), /* 13 : 3 */
105  index3(1, 2, 0), /* 14 : 3 */
106  index3(1, 0, 2), /* 15 : 3 */
107  index3(0, 1, 2), /* 16 : 3 */
108 
109  index3(3, 0, 0), /* 17 : 3 */
110  index3(0, 3, 0), /* 18 : 3 */
111  index3(0, 0, 3), /* 19 : 3 */
112 
113  index3(2, 1, 1), /* 20 : 4 */
114  index3(1, 2, 1), /* 21 : 4 */
115  index3(1, 1, 2), /* 22 : 4 */
116 
117  index3(0, 2, 2), /* 23 : 4 */
118  index3(2, 0, 2), /* 24 : 4 */
119  index3(2, 2, 0), /* 25 : 4 */
120 
121  index3(3, 1, 0), /* 26 : 4 */
122  index3(3, 0, 1), /* 27 : 4 */
123  index3(0, 3, 1), /* 28 : 4 */
124  index3(1, 3, 0), /* 29 : 4 */
125  index3(1, 0, 3), /* 30 : 4 */
126  index3(0, 1, 3), /* 31 : 4 */
127 
128  index3(1, 2, 2), /* 32 : 5 */
129  index3(2, 1, 2), /* 33 : 5 */
130  index3(2, 2, 1), /* 34 : 5 */
131 
132  index3(3, 1, 1), /* 35 : 5 */
133  index3(1, 3, 1), /* 36 : 5 */
134  index3(1, 1, 3), /* 37 : 5 */
135 
136  index3(3, 2, 0), /* 38 : 5 */
137  index3(3, 0, 2), /* 39 : 5 */
138  index3(0, 3, 2), /* 40 : 5 */
139  index3(2, 3, 0), /* 41 : 5 */
140  index3(2, 0, 3), /* 42 : 5 */
141  index3(0, 2, 3), /* 43 : 5 */
142 
143  index3(2, 2, 2), /* 44 : 6 */
144 
145  index3(3, 2, 1), /* 45 : 6 */
146  index3(3, 1, 2), /* 46 : 6 */
147  index3(1, 3, 2), /* 47 : 6 */
148  index3(2, 3, 1), /* 48 : 6 */
149  index3(2, 1, 3), /* 49 : 6 */
150  index3(1, 2, 3), /* 50 : 6 */
151 
152  index3(0, 3, 3), /* 51 : 6 */
153  index3(3, 0, 3), /* 52 : 6 */
154  index3(3, 3, 0), /* 53 : 6 */
155 
156  index3(3, 2, 2), /* 54 : 7 */
157  index3(2, 3, 2), /* 55 : 7 */
158  index3(2, 2, 3), /* 56 : 7 */
159 
160  index3(1, 3, 3), /* 57 : 7 */
161  index3(3, 1, 3), /* 58 : 7 */
162  index3(3, 3, 1), /* 59 : 7 */
163 
164  index3(2, 3, 3), /* 60 : 8 */
165  index3(3, 2, 3), /* 61 : 8 */
166  index3(3, 3, 2), /* 62 : 8 */
167 
168  index3(3, 3, 3), /* 63 : 9 */
169  };
170  return perm_3[x];
171  }
172 };
173 
174 #undef index3
175 #undef index2
176 }
177 }
178 } // namespace vtkm::worklet::zfp
179 #endif
vtkm::worklet::zfp::ZFPCodec
Definition: ZFPCodec.h:27
VTKM_EXEC
#define VTKM_EXEC
Definition: ExportMacros.h:51
vtkm
Groups connected points that have the same field value.
Definition: Atomic.h:19
Types.h
VTKM_EXEC_CONT
#define VTKM_EXEC_CONT
Definition: ExportMacros.h:52
VTKM_STATIC_CONSTEXPR_ARRAY
#define VTKM_STATIC_CONSTEXPR_ARRAY
Definition: ExportMacros.h:107
vtkm::worklet::zfp::ZFPCodec< 64 >::CodecLookup
VTKM_EXEC vtkm::UInt8 CodecLookup(vtkm::Int32 x) const
Definition: ZFPCodec.h:82
ExportMacros.h
index2
#define index2(i, j)
Definition: ZFPCodec.h:14
vtkm::worklet::zfp::ZFPCodec< 4 >::CodecLookup
VTKM_EXEC vtkm::UInt8 CodecLookup(vtkm::Int32 x) const
Definition: ZFPCodec.h:33
vtkm::UInt8
uint8_t UInt8
Definition: Types.h:157
vtkm::Int32
int32_t Int32
Definition: Types.h:160
vtkm::worklet::zfp::ZFPCodec< 16 >::CodecLookup
VTKM_EXEC vtkm::UInt8 CodecLookup(vtkm::Int32 x) const
Definition: ZFPCodec.h:44
index3
#define index3(i, j, k)
Definition: ZFPCodec.h:13
vtkm::worklet::zfp::ZFPCodec< 16 >::ZFPCodec
VTKM_EXEC_CONT ZFPCodec()
Definition: ZFPCodec.h:43
vtkm::worklet::zfp::ZFPCodec< 64 >::ZFPCodec
VTKM_EXEC_CONT ZFPCodec()
Definition: ZFPCodec.h:81
vtkm::worklet::zfp::ZFPCodec< 4 >::ZFPCodec
VTKM_EXEC_CONT ZFPCodec()
Definition: ZFPCodec.h:32