49 #ifndef __INTREPID2_HGRAD_HEX_C2_FEM_DEF_HPP__
50 #define __INTREPID2_HGRAD_HEX_C2_FEM_DEF_HPP__
57 template<
bool serendipity>
58 template<EOperator opType>
59 template<
typename OutputViewType,
60 typename inputViewType>
61 KOKKOS_INLINE_FUNCTION
63 Basis_HGRAD_HEX_DEG2_FEM<serendipity>::Serial<opType>::
64 getValues( OutputViewType output,
65 const inputViewType input ) {
67 case OPERATOR_VALUE : {
68 const auto x = input(0);
69 const auto y = input(1);
70 const auto z = input(2);
72 if constexpr (!serendipity) {
73 output.access( 0) = 0.125*(-1. + x)*x*(-1. + y)*y*(-1. + z)*z;
74 output.access( 1) = 0.125*x*(1.+ x)*(-1. + y)*y*(-1. + z)*z;
75 output.access( 2) = 0.125*x*(1.+ x)*y*(1.+ y)*(-1. + z)*z;
76 output.access( 3) = 0.125*(-1. + x)*x*y*(1.+ y)*(-1. + z)*z;
77 output.access( 4) = 0.125*(-1. + x)*x*(-1. + y)*y*z*(1.+ z);
78 output.access( 5) = 0.125*x*(1.+ x)*(-1. + y)*y*z*(1.+ z);
79 output.access( 6) = 0.125*x*(1.+ x)*y*(1.+ y)*z*(1.+ z);
80 output.access( 7) = 0.125*(-1. + x)*x*y*(1.+ y)*z*(1.+ z);
81 output.access( 8) = 0.25*(1. - x)*(1. + x)*(-1. + y)*y*(-1. + z)*z;
82 output.access( 9) = 0.25*x*(1.+ x)*(1. - y)*(1. + y)*(-1. + z)*z;
83 output.access(10) = 0.25*(1. - x)*(1. + x)*y*(1.+ y)*(-1. + z)*z;
84 output.access(11) = 0.25*(-1. + x)*x*(1. - y)*(1. + y)*(-1. + z)*z;
85 output.access(12) = 0.25*(-1. + x)*x*(-1. + y)*y*(1. - z)*(1. + z);
86 output.access(13) = 0.25*x*(1.+ x)*(-1. + y)*y*(1. - z)*(1. + z);
87 output.access(14) = 0.25*x*(1.+ x)*y*(1.+ y)*(1. - z)*(1. + z);
88 output.access(15) = 0.25*(-1. + x)*x*y*(1.+ y)*(1. - z)*(1. + z);
89 output.access(16) = 0.25*(1. - x)*(1. + x)*(-1. + y)*y*z*(1.+ z);
90 output.access(17) = 0.25*x*(1.+ x)*(1. - y)*(1. + y)*z*(1.+ z);
91 output.access(18) = 0.25*(1. - x)*(1. + x)*y*(1.+ y)*z*(1.+ z);
92 output.access(19) = 0.25*(-1. + x)*x*(1. - y)*(1. + y)*z*(1.+ z);
94 output.access(20) = (1. - x)*(1. + x)*(1. - y)*(1. + y)*(1. - z)*(1. + z);
95 output.access(21) = 0.5*(1. - x)*(1. + x)*(1. - y)*(1. + y)*(-1. + z)*z;
96 output.access(22) = 0.5*(1. - x)*(1. + x)*(1. - y)*(1. + y)*z*(1.+ z);
97 output.access(23) = 0.5*(-1. + x)*x*(1. - y)*(1. + y)*(1. - z)*(1. + z);
98 output.access(24) = 0.5*x*(1.+ x)*(1. - y)*(1. + y)*(1. - z)*(1. + z);
99 output.access(25) = 0.5*(1. - x)*(1. + x)*(-1. + y)*y*(1. - z)*(1. + z);
100 output.access(26) = 0.5*(1. - x)*(1. + x)*y*(1.+ y)*(1. - z)*(1. + z);
104 output.access( 0) = 0.125*(1.0 - x)*(1.0 - y)*(1.0 - z)*(-x - y - z - 2.0);
105 output.access( 1) = 0.125*(1.0 + x)*(1.0 - y)*(1.0 - z)*( x - y - z - 2.0);
106 output.access( 2) = 0.125*(1.0 + x)*(1.0 + y)*(1.0 - z)*( x + y - z - 2.0);
107 output.access( 3) = 0.125*(1.0 - x)*(1.0 + y)*(1.0 - z)*(-x + y - z - 2.0);
108 output.access( 4) = 0.125*(1.0 - x)*(1.0 - y)*(1.0 + z)*(-x - y + z - 2.0);
109 output.access( 5) = 0.125*(1.0 + x)*(1.0 - y)*(1.0 + z)*( x - y + z - 2.0);
110 output.access( 6) = 0.125*(1.0 + x)*(1.0 + y)*(1.0 + z)*( x + y + z - 2.0);
111 output.access( 7) = 0.125*(1.0 - x)*(1.0 + y)*(1.0 + z)*(-x + y + z - 2.0);
113 output.access( 8) = 0.25*(1.0 - x*x)*(1.0 - y)*(1.0 - z);
114 output.access( 9) = 0.25*(1.0 + x)*(1.0 - y*y)*(1.0 - z);
115 output.access(10) = 0.25*(1.0 - x*x)*(1.0 + y)*(1.0 - z);
116 output.access(11) = 0.25*(1.0 - x)*(1.0 - y*y)*(1.0 - z);
118 output.access(12) = 0.25*(1.0 - x)*(1.0 - y)*(1.0 - z*z);
119 output.access(13) = 0.25*(1.0 + x)*(1.0 - y)*(1.0 - z*z);
120 output.access(14) = 0.25*(1.0 + x)*(1.0 + y)*(1.0 - z*z);
121 output.access(15) = 0.25*(1.0 - x)*(1.0 + y)*(1.0 - z*z);
123 output.access(16) = 0.25*(1.0 - x*x)*(1.0 - y)*(1.0 + z);
124 output.access(17) = 0.25*(1.0 + x)*(1.0 - y*y)*(1.0 + z);
125 output.access(18) = 0.25*(1.0 - x*x)*(1.0 + y)*(1.0 + z);
126 output.access(19) = 0.25*(1.0 - x)*(1.0 - y*y)*(1.0 + z);
133 const auto x = input(0);
134 const auto y = input(1);
135 const auto z = input(2);
138 if constexpr (!serendipity) {
139 output.access(0, 0) = (-0.125 + 0.25*x)*(-1. + y)*y*(-1. + z)*z;
140 output.access(0, 1) = (-1. + x)*x*(-0.125 + 0.25*y)*(-1. + z)*z;
141 output.access(0, 2) = (-1. + x)*x*(-1. + y)*y*(-0.125 + 0.25*z);
143 output.access(1, 0) = (0.125 + 0.25*x)*(-1. + y)*y*(-1. + z)*z;
144 output.access(1, 1) = x*(1. + x)*(-0.125 + 0.25*y)*(-1. + z)*z;
145 output.access(1, 2) = x*(1. + x)*(-1. + y)*y*(-0.125 + 0.25*z);
147 output.access(2, 0) = (0.125 + 0.25*x)*y*(1. + y)*(-1. + z)*z;
148 output.access(2, 1) = x*(1. + x)*(0.125 + 0.25*y)*(-1. + z)*z;
149 output.access(2, 2) = x*(1. + x)*y*(1. + y)*(-0.125 + 0.25*z);
151 output.access(3, 0) = (-0.125 + 0.25*x)*y*(1. + y)*(-1. + z)*z;
152 output.access(3, 1) = (-1. + x)*x*(0.125 + 0.25*y)*(-1. + z)*z;
153 output.access(3, 2) = (-1. + x)*x*y*(1. + y)*(-0.125 + 0.25*z);
155 output.access(4, 0) = (-0.125 + 0.25*x)*(-1. + y)*y*z*(1. + z);
156 output.access(4, 1) = (-1. + x)*x*(-0.125 + 0.25*y)*z*(1. + z);
157 output.access(4, 2) = (-1. + x)*x*(-1. + y)*y*(0.125 + 0.25*z);
159 output.access(5, 0) = (0.125 + 0.25*x)*(-1. + y)*y*z*(1. + z);
160 output.access(5, 1) = x*(1. + x)*(-0.125 + 0.25*y)*z*(1. + z);
161 output.access(5, 2) = x*(1. + x)*(-1. + y)*y*(0.125 + 0.25*z);
163 output.access(6, 0) = (0.125 + 0.25*x)*y*(1. + y)*z*(1. + z);
164 output.access(6, 1) = x*(1. + x)*(0.125 + 0.25*y)*z*(1. + z);
165 output.access(6, 2) = x*(1. + x)*y*(1. + y)*(0.125 + 0.25*z);
167 output.access(7, 0) = (-0.125 + 0.25*x)*y*(1. + y)*z*(1. + z);
168 output.access(7, 1) = (-1. + x)*x*(0.125 + 0.25*y)*z*(1. + z);
169 output.access(7, 2) = (-1. + x)*x*y*(1. + y)*(0.125 + 0.25*z);
171 output.access(8, 0) = -0.5*x*(-1. + y)*y*(-1. + z)*z;
172 output.access(8, 1) = (1. - x)*(1. + x)*(-0.25 + 0.5*y)*(-1. + z)*z;
173 output.access(8, 2) = (1. - x)*(1. + x)*(-1. + y)*y*(-0.25 + 0.5*z);
175 output.access(9, 0) = (0.25 + 0.5*x)*(1. - y)*(1. + y)*(-1. + z)*z;
176 output.access(9, 1) = x*(1. + x)*(-0.5*y)*(-1. + z)*z;
177 output.access(9, 2) = x*(1. + x)*(1. - y)*(1. + y)*(-0.25 + 0.5*z);
179 output.access(10, 0) = -0.5*x*y*(1. + y)*(-1. + z)*z;
180 output.access(10, 1) = (1. - x)*(1. + x)*(0.25 + 0.5*y)*(-1. + z)*z;
181 output.access(10, 2) = (1. - x)*(1. + x)*y*(1. + y)*(-0.25 + 0.5*z);
183 output.access(11, 0) = (-0.25 + 0.5*x)*(1. - y)*(1. + y)*(-1. + z)*z;
184 output.access(11, 1) = (-1. + x)*x*(-0.5*y)*(-1. + z)*z;
185 output.access(11, 2) = (-1. + x)*x*(1. - y)*(1. + y)*(-0.25 + 0.5*z);
187 output.access(12, 0) = (-0.25 + 0.5*x)*(-1. + y)*y*(1. - z)*(1. + z);
188 output.access(12, 1) = (-1. + x)*x*(-0.25 + 0.5*y)*(1. - z)*(1. + z);
189 output.access(12, 2) = (-1. + x)*x*(-1. + y)*y*(-0.5*z);
191 output.access(13, 0) = (0.25 + 0.5*x)*(-1. + y)*y*(1. - z)*(1. + z);
192 output.access(13, 1) = x*(1. + x)*(-0.25 + 0.5*y)*(1. - z)*(1. + z);
193 output.access(13, 2) = x*(1. + x)*(-1. + y)*y*(-0.5*z);
195 output.access(14, 0) = (0.25 + 0.5*x)*y*(1. + y)*(1. - z)*(1. + z);
196 output.access(14, 1) = x*(1. + x)*(0.25 + 0.5*y)*(1. - z)*(1. + z);
197 output.access(14, 2) = x*(1. + x)*y*(1. + y)*(-0.5*z);
199 output.access(15, 0) = (-0.25 + 0.5*x)*y*(1. + y)*(1. - z)*(1. + z);
200 output.access(15, 1) = (-1. + x)*x*(0.25 + 0.5*y)*(1. - z)*(1. + z);
201 output.access(15, 2) = (-1. + x)*x*y*(1. + y)*(-0.5*z);
203 output.access(16, 0) = -0.5*x*(-1. + y)*y*z*(1. + z);
204 output.access(16, 1) = (1. - x)*(1. + x)*(-0.25 + 0.5*y)*z*(1. + z);
205 output.access(16, 2) = (1. - x)*(1. + x)*(-1. + y)*y*(0.25 + 0.5*z);
207 output.access(17, 0) = (0.25 + 0.5*x)*(1. - y)*(1. + y)*z*(1. + z);
208 output.access(17, 1) = x*(1. + x)*(-0.5*y)*z*(1. + z);
209 output.access(17, 2) = x*(1. + x)*(1. - y)*(1. + y)*(0.25 + 0.5*z);
211 output.access(18, 0) = -0.5*x*y*(1. + y)*z*(1. + z);
212 output.access(18, 1) = (1. - x)*(1. + x)*(0.25 + 0.5*y)*z*(1. + z);
213 output.access(18, 2) = (1. - x)*(1. + x)*y*(1. + y)*(0.25 + 0.5*z);
215 output.access(19, 0) = (-0.25 + 0.5*x)*(1. - y)*(1. + y)*z*(1. + z);
216 output.access(19, 1) = (-1. + x)*x*(-0.5*y)*z*(1. + z);
217 output.access(19, 2) = (-1. + x)*x*(1. - y)*(1. + y)*(0.25 + 0.5*z);
219 output.access(20, 0) = -2.*x*(1. - y)*(1. + y)*(1. - z)*(1. + z);
220 output.access(20, 1) = (1. - x)*(1. + x)*(-2.*y)*(1. - z)*(1. + z);
221 output.access(20, 2) = (1. - x)*(1. + x)*(1. - y)*(1. + y)*(-2.*z);
223 output.access(21, 0) = -x*(1. - y)*(1. + y)*(-1. + z)*z;
224 output.access(21, 1) = (1. - x)*(1. + x)*(-y)*(-1. + z)*z;
225 output.access(21, 2) = (1. - x)*(1. + x)*(1. - y)*(1. + y)*(-0.5 + z);
227 output.access(22, 0) = -x*(1. - y)*(1. + y)*z*(1. + z);
228 output.access(22, 1) = (1. - x)*(1. + x)*(-y)*z*(1. + z);
229 output.access(22, 2) = (1. - x)*(1. + x)*(1. - y)*(1. + y)*(0.5 + z);
231 output.access(23, 0) = (-0.5 + x)*(1. - y)*(1. + y)*(1. - z)*(1. + z);
232 output.access(23, 1) = (-1. + x)*x*(-y)*(1. - z)*(1. + z);
233 output.access(23, 2) = (-1. + x)*x*(1. - y)*(1. + y)*(-z);
235 output.access(24, 0) = (0.5 + x)*(1. - y)*(1. + y)*(1. - z)*(1. + z);
236 output.access(24, 1) = x*(1. + x)*(-y)*(1. - z)*(1. + z);
237 output.access(24, 2) = x*(1. + x)*(1. - y)*(1. + y)*(-z);
239 output.access(25, 0) = -x*(-1. + y)*y*(1. - z)*(1. + z);
240 output.access(25, 1) = (1. - x)*(1. + x)*(-0.5 + y)*(1. - z)*(1. + z);
241 output.access(25, 2) = (1. - x)*(1. + x)*(-1. + y)*y*(-z);
243 output.access(26, 0) = -x*y*(1. + y)*(1. - z)*(1. + z);
244 output.access(26, 1) = (1. - x)*(1. + x)*(0.5 + y)*(1. - z)*(1. + z);
245 output.access(26, 2) = (1. - x)*(1. + x)*y*(1. + y)*(-z);
249 output.access(0, 0) = -0.125*(1.0-y)*(1.0-z)*(-x-y-z-2.0) - 0.125*(1.0-x)*(1.0-y)*(1.0-z);
250 output.access(0, 1) = -0.125*(1.0-x)*(1.0-z)*(-x-y-z-2.0) - 0.125*(1.0-x)*(1.0-y)*(1.0-z);
251 output.access(0, 2) = -0.125*(1.0-x)*(1.0-y)*(-x-y-z-2.0) - 0.125*(1.0-x)*(1.0-y)*(1.0-z);
253 output.access(1, 0) = 0.125*(1.0-y)*(1.0-z)*( x-y-z-2.0) + 0.125*(1.0+x)*(1.0-y)*(1.0-z);
254 output.access(1, 1) = -0.125*(1.0+x)*(1.0-z)*( x-y-z-2.0) - 0.125*(1.0+x)*(1.0-y)*(1.0-z);
255 output.access(1, 2) = -0.125*(1.0+x)*(1.0-y)*( x-y-z-2.0) - 0.125*(1.0+x)*(1.0-y)*(1.0-z);
257 output.access(2, 0) = 0.125*(1.0+y)*(1.0-z)*( x+y-z-2.0) + 0.125*(1.0+x)*(1.0+y)*(1.0-z);
258 output.access(2, 1) = 0.125*(1.0+x)*(1.0-z)*( x+y-z-2.0) + 0.125*(1.0+x)*(1.0+y)*(1.0-z);
259 output.access(2, 2) = -0.125*(1.0+x)*(1.0+y)*( x+y-z-2.0) - 0.125*(1.0+x)*(1.0+y)*(1.0-z);
261 output.access(3, 0) = -0.125*(1.0+y)*(1.0-z)*(-x+y-z-2.0) - 0.125*(1.0-x)*(1.0+y)*(1.0-z);
262 output.access(3, 1) = 0.125*(1.0-x)*(1.0-z)*(-x+y-z-2.0) + 0.125*(1.0-x)*(1.0+y)*(1.0-z);
263 output.access(3, 2) = -0.125*(1.0-x)*(1.0+y)*(-x+y-z-2.0) - 0.125*(1.0-x)*(1.0+y)*(1.0-z);
265 output.access(4, 0) = -0.125*(1.0-y)*(1.0+z)*(-x-y+z-2.0) - 0.125*(1.0-x)*(1.0-y)*(1.0+z);
266 output.access(4, 1) = -0.125*(1.0-x)*(1.0+z)*(-x-y+z-2.0) - 0.125*(1.0-x)*(1.0-y)*(1.0+z);
267 output.access(4, 2) = 0.125*(1.0-x)*(1.0-y)*(-x-y+z-2.0) + 0.125*(1.0-x)*(1.0-y)*(1.0+z);
269 output.access(5, 0) = 0.125*(1.0-y)*(1.0+z)*( x-y+z-2.0) + 0.125*(1.0+x)*(1.0-y)*(1.0+z);
270 output.access(5, 1) = -0.125*(1.0+x)*(1.0+z)*( x-y+z-2.0) - 0.125*(1.0+x)*(1.0-y)*(1.0+z);
271 output.access(5, 2) = 0.125*(1.0+x)*(1.0-y)*( x-y+z-2.0) + 0.125*(1.0+x)*(1.0-y)*(1.0+z);
273 output.access(6, 0) = 0.125*(1.0+y)*(1.0+z)*( x+y+z-2.0) + 0.125*(1.0+x)*(1.0+y)*(1.0+z);
274 output.access(6, 1) = 0.125*(1.0+x)*(1.0+z)*( x+y+z-2.0) + 0.125*(1.0+x)*(1.0+y)*(1.0+z);
275 output.access(6, 2) = 0.125*(1.0+x)*(1.0+y)*( x+y+z-2.0) + 0.125*(1.0+x)*(1.0+y)*(1.0+z);
277 output.access(7, 0) = -0.125*(1.0+y)*(1.0+z)*(-x+y+z-2.0) - 0.125*(1.0-x)*(1.0+y)*(1.0+z);
278 output.access(7, 1) = 0.125*(1.0-x)*(1.0+z)*(-x+y+z-2.0) + 0.125*(1.0-x)*(1.0+y)*(1.0+z);
279 output.access(7, 2) = 0.125*(1.0-x)*(1.0+y)*(-x+y+z-2.0) + 0.125*(1.0-x)*(1.0+y)*(1.0+z);
281 output.access(8, 0) = -0.5*x*(1.0-y)*(1.0-z);
282 output.access(8, 1) = -0.25*(1.0-x*x)*(1.0-z);
283 output.access(8, 2) = -0.25*(1.0-x*x)*(1.0-y);
285 output.access(9, 0) = 0.25*(1.0-y*y)*(1.0-z);
286 output.access(9, 1) = -0.5*y*(1.0+x)*(1.0-z);
287 output.access(9, 2) = -0.25*(1.0+x)*(1.0-y*y);
289 output.access(10, 0) = -0.5*x*(1.0+y)*(1.0-z);
290 output.access(10, 1) = 0.25*(1.0-x*x)*(1.0-z);
291 output.access(10, 2) = -0.25*(1.0-x*x)*(1.0+y);
293 output.access(11, 0) = -0.25*(1.0-y*y)*(1.0-z);
294 output.access(11, 1) = -0.5*y*(1.0-x)*(1.0-z);
295 output.access(11, 2) = -0.25*(1.0-x)*(1.0-y*y);
297 output.access(12, 0) = -0.25*(1.0-y)*(1.0-z*z);
298 output.access(12, 1) = -0.25*(1.0-x)*(1.0-z*z);
299 output.access(12, 2) = -0.5*z*(1.0-x)*(1.0-y);
301 output.access(13, 0) = 0.25*(1.0-y)*(1.0-z*z);
302 output.access(13, 1) = -0.25*(1.0+x)*(1.0-z*z);
303 output.access(13, 2) = -0.5*z*(1.0+x)*(1.0-y);
305 output.access(14, 0) = 0.25*(1.0+y)*(1.0-z*z);
306 output.access(14, 1) = 0.25*(1.0+x)*(1.0-z*z);
307 output.access(14, 2) = -0.5*z*(1.0+x)*(1.0+y);
309 output.access(15, 0) = -0.25*(1.0+y)*(1.0-z*z);
310 output.access(15, 1) = 0.25*(1.0-x)*(1.0-z*z);
311 output.access(15, 2) = -0.5*z*(1.0-x)*(1.0+y);
313 output.access(16, 0) = -0.5*x*(1.0-y)*(1.0+z);
314 output.access(16, 1) = -0.25*(1.0-x*x)*(1.0+z);
315 output.access(16, 2) = 0.25*(1.0-x*x)*(1.0-y);
317 output.access(17, 0) = 0.25*(1.0-y*y)*(1.0+z);
318 output.access(17, 1) = -0.5*y*(1.0+x)*(1.0+z);
319 output.access(17, 2) = 0.25*(1.0+x)*(1.0-y*y);
321 output.access(18, 0) = -0.5*x*(1.0+y)*(1.0+z);
322 output.access(18, 1) = 0.25*(1.0-x*x)*(1.0+z);
323 output.access(18, 2) = 0.25*(1.0-x*x)*(1.0+y);
325 output.access(19, 0) = -0.25*(1.0-y*y)*(1.0+z);
326 output.access(19, 1) = -0.5*y*(1.0-x)*(1.0+z);
327 output.access(19, 2) = 0.25*(1.0-x)*(1.0-y*y);
333 const auto x = input(0);
334 const auto y = input(1);
335 const auto z = input(2);
338 if constexpr (!serendipity) {
339 output.access(0, 0) = 0.25*(-1. + y)*y*(-1. + z)*z;
340 output.access(0, 1) = (-0.125 + y*(0.25 - 0.25*z) + x*(0.25 + y*(-0.5 + 0.5*z) - 0.25*z) + 0.125*z)*z;
341 output.access(0, 2) = y*(-0.125 + x*(0.25 + y*(-0.25 + 0.5*z) - 0.5*z) + y*(0.125 - 0.25*z) + 0.25*z);
342 output.access(0, 3) = 0.25*(-1. + x)*x*(-1. + z)*z;
343 output.access(0, 4) = x*(-0.125 + y*(0.25 - 0.5*z) + x*(0.125 + y*(-0.25 + 0.5*z) - 0.25*z) + 0.25*z);
344 output.access(0, 5) = 0.25*(-1. + x)*x*(-1. + y)*y;
346 output.access(1, 0) = 0.25*(-1. + y)*y*(-1. + z)*z;
347 output.access(1, 1) = (0.125 + x*(0.25 + y*(-0.5 + 0.5*z) - 0.25*z) + y*(-0.25 + 0.25*z) - 0.125*z)*z;
348 output.access(1, 2) = y*(0.125 + x*(0.25 + y*(-0.25 + 0.5*z) - 0.5*z) + y*(-0.125 + 0.25*z) - 0.25*z);
349 output.access(1, 3) = 0.25*x*(1 + x)*(-1. + z)*z;
350 output.access(1, 4) = x*(1. + x)*(0.125 + y*(-0.25 + 0.5*z) - 0.25*z);
351 output.access(1, 5) = 0.25*x*(1 + x)*(-1. + y)*y;
353 output.access(2, 0) = 0.25*y*(1 + y)*(-1. + z)*z;
354 output.access(2, 1) = (0.125 + x*(0.25 + 0.5*y) + 0.25*y)*(-1. + z)*z;
355 output.access(2, 2) = y*(1. + y)*(-0.125 + x*(-0.25 + 0.5*z) + 0.25*z);
356 output.access(2, 3) = 0.25*x*(1 + x)*(-1. + z)*z;
357 output.access(2, 4) = x*(1. + x)*(-0.125 + y*(-0.25 + 0.5*z) + 0.25*z);
358 output.access(2, 5) = 0.25*x*(1 + x)*y*(1 + y);
360 output.access(3, 0) = 0.25*y*(1 + y)*(-1. + z)*z;
361 output.access(3, 1) = (0.125 + y*(0.25 - 0.25*z) + x*(-0.25 + y*(-0.5 + 0.5*z) + 0.25*z) - 0.125*z)*z;
362 output.access(3, 2) = y*(1. + y)*(0.125 + x*(-0.25 + 0.5*z) - 0.25*z);
363 output.access(3, 3) = 0.25*(-1. + x)*x*(-1. + z)*z;
364 output.access(3, 4) = x*(0.125 + y*(0.25 - 0.5*z) + x*(-0.125 + y*(-0.25 + 0.5*z) + 0.25*z) - 0.25*z);
365 output.access(3, 5) = 0.25*(-1. + x)*x*y*(1 + y);
367 output.access(4, 0) = 0.25*(-1. + y)*y*z*(1 + z);
368 output.access(4, 1) = (0.125 + x*(-0.25 + 0.5*y) - 0.25*y)*z*(1. + z);
369 output.access(4, 2) = y*(0.125 + x*(-0.25 + y*(0.25 + 0.5*z) - 0.5*z) + y*(-0.125 - 0.25*z) + 0.25*z);
370 output.access(4, 3) = 0.25*(-1. + x)*x*z*(1 + z);
371 output.access(4, 4) = x*(0.125 + y*(-0.25 - 0.5*z) + x*(-0.125 + y*(0.25 + 0.5*z) - 0.25*z) + 0.25*z);
372 output.access(4, 5) = 0.25*(-1. + x)*x*(-1. + y)*y;
374 output.access(5, 0) = 0.25*(-1. + y)*y*z*(1 + z);
375 output.access(5, 1) = (-0.125 + x*(-0.25 + 0.5*y) + 0.25*y)*z*(1. + z);
376 output.access(5, 2) = (-1. + y)*y*(0.125 + x*(0.25 + 0.5*z) + 0.25*z);
377 output.access(5, 3) = 0.25*x*(1 + x)*z*(1 + z);
378 output.access(5, 4) = x*(1. + x)*(-0.125 + y*(0.25 + 0.5*z) - 0.25*z);
379 output.access(5, 5) = 0.25*x*(1 + x)*(-1. + y)*y;
381 output.access(6, 0) = 0.25*y*(1 + y)*z*(1 + z);
382 output.access(6, 1) = (0.125 + x*(0.25 + 0.5*y) + 0.25*y)*z*(1. + z);
383 output.access(6, 2) = y*(1. + y)*(0.125 + x*(0.25 + 0.5*z) + 0.25*z);
384 output.access(6, 3) = 0.25*x*(1 + x)*z*(1 + z);
385 output.access(6, 4) = x*(1. + x)*(0.125 + y*(0.25 + 0.5*z) + 0.25*z);
386 output.access(6, 5) = 0.25*x*(1 + x)*y*(1 + y);
388 output.access(7, 0) = 0.25*y*(1 + y)*z*(1 + z);
389 output.access(7, 1) = (-0.125 + x*(0.25 + 0.5*y) - 0.25*y)*z*(1. + z);
390 output.access(7, 2) = y*(1. + y)*(-0.125 + x*(0.25 + 0.5*z) - 0.25*z);
391 output.access(7, 3) = 0.25*(-1. + x)*x*z*(1 + z);
392 output.access(7, 4) = (-1. + x)*x*(0.125 + y*(0.25 + 0.5*z) + 0.25*z);
393 output.access(7, 5) = 0.25*(-1. + x)*x*y*(1 + y);
395 output.access(8, 0) = -0.5*(-1. + y)*y*(-1. + z)*z;
396 output.access(8, 1) = (0. + x*(-0.5 + y))*z + (x*(0.5 - y) )*(z*z);
397 output.access(8, 2) = (y*y)*(x*(0.5 - z) ) + y*(x*(-0.5 + z));
398 output.access(8, 3) = 0.5*(1. - x)*(1. + x)*(-1. + z)*z;
399 output.access(8, 4) = 0.25 + (x*x)*(-0.25 + y*(0.5 - z) + 0.5*z) - 0.5*z + y*(-0.5 + z);
400 output.access(8, 5) = 0.5*(1. - x)*(1. + x)*(-1. + y)*y;
402 output.access(9, 0) = 0.5*(1. - y)*(1. + y)*(-1. + z)*z;
403 output.access(9, 1) = (0.5*y + x*(y))*z + (x*(-y) - 0.5*y)*(z*z);
404 output.access(9, 2) = -0.25 + (y*y)*(0.25 - 0.5*z) + 0.5*z + x*(-0.5 + (y*y)*(0.5 - z) + z);
405 output.access(9, 3) = -0.5*x*(1 + x)*(-1. + z)*z;
406 output.access(9, 4) = x*(y*(0.5 - z) ) + (x*x)*(y*(0.5 - z) );
407 output.access(9, 5) = 0.5*x*(1 + x)*(1. - y)*(1. + y);
409 output.access(10, 0) = -0.5*y*(1 + y)*(-1. + z)*z;
410 output.access(10, 1) = (0. + x*(0.5 + y))*z + (x*(-0.5 - y) )*(z*z);
411 output.access(10, 2) = y*(x*(0.5 - z) ) + (y*y)*(x*(0.5 - z) );
412 output.access(10, 3) = 0.5*(1. - x)*(1. + x)*(-1. + z)*z;
413 output.access(10, 4) = -0.25 + (x*x)*(0.25 + y*(0.5 - z) - 0.5*z) + 0.5*z + y*(-0.5 + z);
414 output.access(10, 5) = 0.5*(1. - x)*(1. + x)*y*(1 + y);
416 output.access(11, 0) = 0.5*(1. - y)*(1. + y)*(-1. + z)*z;
417 output.access(11, 1) = (-0.5*y + x*(y))*z + (x*(-y) + 0.5*y)*(z*z);
418 output.access(11, 2) = 0.25 + (y*y)*(-0.25 + 0.5*z) - 0.5*z + x*(-0.5 + (y*y)*(0.5 - z) + z);
419 output.access(11, 3) = -0.5*(-1. + x)*x*(-1. + z)*z;
420 output.access(11, 4) = (x*x)*(y*(0.5 - z) ) + x*(y*(-0.5 + z));
421 output.access(11, 5) = 0.5*(-1. + x)*x*(1. - y)*(1. + y);
423 output.access(12, 0) = 0.5*(-1. + y)*y*(1. - z)*(1. + z);
424 output.access(12, 1) = 0.25 - 0.25*(z*z) + y*(-0.5 + 0.5*(z*z)) + x*(-0.5 + 0.5*(z*z) + y*(1. - (z*z)));
425 output.access(12, 2) = (y*y)*(x*(-z) + 0.5*z) + y*(-0.5*z + x*(z));
426 output.access(12, 3) = 0.5*(-1. + x)*x*(1. - z)*(1. + z);
427 output.access(12, 4) = (x*x)*(y*(-z) + 0.5*z) + x*(-0.5*z + y*(z));
428 output.access(12, 5) = -0.5*(-1. + x)*x*(-1. + y)*y;
430 output.access(13, 0) = 0.5*(-1. + y)*y*(1. - z)*(1. + z);
431 output.access(13, 1) = -0.25 + 0.25*(z*z) + y*(0.5 - 0.5*(z*z)) + x*(-0.5 + 0.5*(z*z) + y*(1. - (z*z)));
432 output.access(13, 2) = (y*y)*(x*(-z) - 0.5*z) + y*(0.5*z + x*(z));
433 output.access(13, 3) = 0.5*x*(1 + x)*(1. - z)*(1. + z);
434 output.access(13, 4) = x*(y*(-z) + 0.5*z) + (x*x)*(y*(-z) + 0.5*z);
435 output.access(13, 5) = -0.5*x*(1 + x)*(-1. + y)*y;
437 output.access(14, 0) = 0.5*y*(1 + y)*(1. - z)*(1. + z);
438 output.access(14, 1) = 0.25 - 0.25*(z*z) + y*(0.5 - 0.5*(z*z)) + x*(0.5 - 0.5*(z*z) + y*(1. - (z*z)));
439 output.access(14, 2) = y*(x*(-z) - 0.5*z) + (y*y)*(x*(-z) - 0.5*z);
440 output.access(14, 3) = 0.5*x*(1 + x)*(1. - z)*(1. + z);
441 output.access(14, 4) = x*(y*(-z) - 0.5*z) + (x*x)*(y*(-z) - 0.5*z);
442 output.access(14, 5) = -0.5*x*(1 + x)*y*(1 + y);
444 output.access(15, 0) = 0.5*y*(1 + y)*(1. - z)*(1. + z);
445 output.access(15, 1) = -0.25 + 0.25*(z*z) + y*(-0.5 + 0.5*(z*z)) + x*(0.5 - 0.5*(z*z) + y*(1. - (z*z)));
446 output.access(15, 2) = y*(x*(-z) + 0.5*z) + (y*y)*(x*(-z) + 0.5*z);
447 output.access(15, 3) = 0.5*(-1. + x)*x*(1. - z)*(1. + z);
448 output.access(15, 4) = (x*x)*(y*(-z) - 0.5*z) + x*(0.5*z + y*(z));
449 output.access(15, 5) = -0.5*(-1. + x)*x*y*(1 + y);
451 output.access(16, 0) = -0.5*(-1. + y)*y*z*(1 + z);
452 output.access(16, 1) = (x*(0.5 - y) )*z + (x*(0.5 - y) )*(z*z);
453 output.access(16, 2) = (y*y)*(x*(-0.5 - z) ) + y*(x*(0.5 + z));
454 output.access(16, 3) = 0.5*(1. - x)*(1. + x)*z*(1 + z);
455 output.access(16, 4) = -0.25 + (x*x)*(0.25 + y*(-0.5 - z) + 0.5*z) - 0.5*z + y*(0.5 + z);
456 output.access(16, 5) = 0.5*(1. - x)*(1. + x)*(-1. + y)*y;
458 output.access(17, 0) = 0.5*(1. - y)*(1. + y)*z*(1 + z);
459 output.access(17, 1) = (x*(-y) - 0.5*y)*z + (x*(-y) - 0.5*y)*(z*z);
460 output.access(17, 2) = 0.25 + (y*y)*(-0.25 - 0.5*z) + 0.5*z + x*(0.5 + (y*y)*(-0.5 - z) + z);
461 output.access(17, 3) = -0.5*x*(1 + x)*z*(1 + z);
462 output.access(17, 4) = x*(y*(-0.5 - z) ) + (x*x)*(y*(-0.5 - z) );
463 output.access(17, 5) = 0.5*x*(1 + x)*(1. - y)*(1. + y);
465 output.access(18, 0) = -0.5*y*(1 + y)*z*(1 + z);
466 output.access(18, 1) = (x*(-0.5 - y) )*z + (x*(-0.5 - y) )*(z*z);
467 output.access(18, 2) = y*(x*(-0.5 - z) ) + (y*y)*(x*(-0.5 - z) );
468 output.access(18, 3) = 0.5*(1. - x)*(1. + x)*z*(1 + z);
469 output.access(18, 4) = 0.25 + (x*x)*(-0.25 + y*(-0.5 - z) - 0.5*z) + 0.5*z + y*(0.5 + z);
470 output.access(18, 5) = 0.5*(1. - x)*(1. + x)*y*(1 + y);
472 output.access(19, 0) = 0.5*(1. - y)*(1. + y)*z*(1 + z);
473 output.access(19, 1) = (x*(-y) + 0.5*y)*z + (x*(-y) + 0.5*y)*(z*z);
474 output.access(19, 2) = -0.25 + (y*y)*(0.25 + 0.5*z) - 0.5*z + x*(0.5 + (y*y)*(-0.5 - z) + z);
475 output.access(19, 3) = -0.5*(-1. + x)*x*z*(1 + z);
476 output.access(19, 4) = (x*x)*(y*(-0.5 - z) ) + x*(y*(0.5 + z));
477 output.access(19, 5) = 0.5*(-1. + x)*x*(1. - y)*(1. + y);
479 output.access(20, 0) = -2.*(1. - y)*(1. + y)*(1. - z)*(1. + z);
480 output.access(20, 1) = -4.*x*y*(-1. + z*z);
481 output.access(20, 2) = x*((y*y)*(-4.*z) + 4.*z);
482 output.access(20, 3) = -2.*(1. - x)*(1. + x)*(1. - z)*(1. + z);
483 output.access(20, 4) = (x*x)*(y*(-4.*z) ) + y*(4.*z);
484 output.access(20, 5) = -2.*(1. - x)*(1. + x)*(1. - y)*(1. + y);
486 output.access(21, 0) = -(1. - y)*(1. + y)*(-1. + z)*z;
487 output.access(21, 1) = (x*(-2.*y) )*z + (0. + x*(2.*y))*(z*z);
488 output.access(21, 2) = x*(1. - 2.*z + (y*y)*(-1. + 2.*z));
489 output.access(21, 3) = -(1. - x)*(1. + x)*(-1. + z)*z;
490 output.access(21, 4) = y*(1. - 2.*z) + (x*x)*(y*(-1. + 2.*z));
491 output.access(21, 5) = (1. - x)*(1. + x)*(1. - y)*(1. + y);
493 output.access(22, 0) = -(1. - y)*(1. + y)*z*(1 + z);
494 output.access(22, 1) = (0. + x*(2.*y))*z + (0. + x*(2.*y))*(z*z);
495 output.access(22, 2) = x*(-1. - 2.*z + (y*y)*(1. + 2.*z));
496 output.access(22, 3) = -(1. - x)*(1. + x)*z*(1 + z);
497 output.access(22, 4) = y*(-1. - 2.*z) + (x*x)*(y*(1. + 2.*z));
498 output.access(22, 5) = (1. - x)*(1. + x)*(1. - y)*(1. + y);
500 output.access(23, 0) = (1. - y)*(1. + y)*(1. - z)*(1. + z);
501 output.access(23, 1) = (-1. + 2.*x)*y*(-1. + z*z);
502 output.access(23, 2) = (-1. + 2.*x)*(-1. + y*y)*z;
503 output.access(23, 3) =-(-1. + x)*x*(1. - z)*(1. + z);
504 output.access(23, 4) = 2.*(-1. + x)*x*y*z;
505 output.access(23, 5) =-(-1. + x)*x*(1. - y)*(1. + y);
507 output.access(24, 0) = (1. - y)*(1. + y)*(1. - z)*(1. + z);
508 output.access(24, 1) = (1. + 2.*x)*y*(-1. + z*z);
509 output.access(24, 2) = (1. + 2.*x)*(-1. + y*y)*z;
510 output.access(24, 3) = x*(1. + x)*(-1. + z)*(1. + z);
511 output.access(24, 4) = 2.*x*(1. + x)*y*z;
512 output.access(24, 5) = x*(1. + x)*(-1. + y)*(1. + y);
514 output.access(25, 0) = -(-1. + y)*y*(1. - z)*(1. + z);
515 output.access(25, 1) = x*(-1. + 2.*y)*(-1. + z*z);
516 output.access(25, 2) = 2.*x*(-1. + y)*y*z;
517 output.access(25, 3) = (1. - x)*(1. + x)*(1. - z)*(1. + z);
518 output.access(25, 4) = (-1. + x*x)*(-1. + 2.*y)*z;
519 output.access(25, 5) =-(1. - x)*(1. + x)*(-1. + y)*y;
521 output.access(26, 0) = y*(1. + y)*(-1. + z)*(1. + z);
522 output.access(26, 1) = x*(1. + 2.*y)*(-1. + z*z);
523 output.access(26, 2) = 2.*x*y*(1. + y)*z;
524 output.access(26, 3) = (-1. + x)*(1. + x)*(-1. + z)*(1. + z);
525 output.access(26, 4) = (-1. + x*x)*(1. + 2.*y)*z;
526 output.access(26, 5) = (-1. + x)*(1. + x)*y*(1. + y);
529 output.access(0, 0) = 0.25*(1.0 - y)*(1.0 - z);
530 output.access(0, 1) = 0.125*(1.0 - z)*(-2.0*x - 2.0*y - z);
531 output.access(0, 2) = 0.125*(1.0 - y)*(-2.0*x - y - 2.0*z);
532 output.access(0, 3) = 0.25*(1.0 - x)*(1.0 - z);
533 output.access(0, 4) = 0.125*(1.0 - x)*(-x - 2.0*y - 2.0*z);
534 output.access(0, 5) = 0.25*(1.0 - x)*(1.0 - y);
536 output.access(1, 0) = 0.25*(1.0 - y)*(1.0 - z);
537 output.access(1, 1) = -0.125*(1.0 - z)*(2.0*x - 2.0*y - z);
538 output.access(1, 2) = -0.125*(1.0 - y)*(2.0*x - y - 2.0*z);
539 output.access(1, 3) = 0.25*(1.0 + x)*(1.0 - z);
540 output.access(1, 4) = 0.125*(1.0 + x)*(x - 2.0*y - 2.0*z);
541 output.access(1, 5) = 0.25*(1.0 + x)*(1.0 - y);
543 output.access(2, 0) = 0.25*(1.0 + y)*(1.0 - z);
544 output.access(2, 1) = 0.125*(1.0 - z)*(2.0*x + 2.0*y - z);
545 output.access(2, 2) = -0.125*(1.0 + y)*(2.0*x + y - 2.0*z);
546 output.access(2, 3) = 0.25*(1.0 + x)*(1.0 - z);
547 output.access(2, 4) = -0.125*(1.0 + x)*(x + 2.0*y - 2.0*z);
548 output.access(2, 5) = 0.25*(1.0 + x)*(1.0 + y);
550 output.access(3, 0) = 0.25*(1.0 + y)*(1.0 - z);
551 output.access(3, 1) = -0.125*(1.0 - z)*(-2.0*x + 2.0*y - z);
552 output.access(3, 2) = 0.125*(1.0 + y)*(-2.0*x + y - 2.0*z);
553 output.access(3, 3) = 0.25*(1.0 - x)*(1.0 - z);
554 output.access(3, 4) = -0.125*(1.0 - x)*(-x + 2.0*y - 2.0*z);
555 output.access(3, 5) = 0.25*(1.0 - x)*(1.0 + y);
557 output.access(4, 0) = 0.25*(1.0 - y)*(1.0 + z);
558 output.access(4, 1) = 0.125*(1.0 + z)*(-2.0*x - 2.0*y + z);
559 output.access(4, 2) = -0.125*(1.0 - y)*(-2.0*x - y + 2.0*z);
560 output.access(4, 3) = 0.25*(1.0 - x)*(1.0 + z);
561 output.access(4, 4) = -0.125*(1.0 - x)*(-x - 2.0*y + 2.0*z);
562 output.access(4, 5) = 0.25*(1.0 - x)*(1.0 - y);
564 output.access(5, 0) = 0.25*(1.0 - y)*(1.0 + z);
565 output.access(5, 1) = -0.125*(1.0 + z)*(2.0*x - 2.0*y + z);
566 output.access(5, 2) = 0.125*(1.0 - y)*(2.0*x - y + 2.0*z);
567 output.access(5, 3) = 0.25*(1.0 + x)*(1.0 + z);
568 output.access(5, 4) = -0.125*(1.0 + x)*(x - 2.0*y + 2.0*z);
569 output.access(5, 5) = 0.25*(1.0 + x)*(1.0 - y);
571 output.access(6, 0) = 0.25*(1.0 + y)*(1.0 + z);
572 output.access(6, 1) = 0.125*(1.0 + z)*(2.0*x + 2.0*y + z);
573 output.access(6, 2) = 0.125*(1.0 + y)*(2.0*x + y + 2.0*z);
574 output.access(6, 3) = 0.25*(1.0 + x)*(1.0 + z);
575 output.access(6, 4) = 0.125*(1.0 + x)*(x + 2.0*y + 2.0*z);
576 output.access(6, 5) = 0.25*(1.0 + x)*(1.0 + y);
578 output.access(7, 0) = 0.25*(1.0 + y)*(1.0 + z);
579 output.access(7, 1) = -0.125*(1.0 + z)*(-2.0*x + 2.0*y + z);
580 output.access(7, 2) = -0.125*(1.0 + y)*(-2.0*x + y + 2.0*z);
581 output.access(7, 3) = 0.25*(1.0 - x)*(1.0 + z);
582 output.access(7, 4) = 0.125*(1.0 - x)*(-x + 2.0*y + 2.0*z);
583 output.access(7, 5) = 0.25*(1.0 - x)*(1.0 + y);
585 output.access(8, 0) = -0.5*(1.0 - y)*(1.0 - z);
586 output.access(8, 1) = 0.5*x*(1.0 - z);
587 output.access(8, 2) = 0.5*x*(1.0 - y);
588 output.access(8, 3) = 0.0;
589 output.access(8, 4) = 0.25*(1.0 - x*x);
590 output.access(8, 5) = 0.0;
592 output.access(9, 0) = 0.0;
593 output.access(9, 1) = -0.5*y*(1.0 - z);
594 output.access(9, 2) = -0.25*(1.0 - y*y);
595 output.access(9, 3) = -0.5*(1.0 + x)*(1.0 - z);
596 output.access(9, 4) = 0.5*y*(1.0 + x);
597 output.access(9, 5) = 0.0;
599 output.access(10, 0) = -0.5*(1.0 + y)*(1.0 - z);
600 output.access(10, 1) = -0.5*x*(1.0 - z);
601 output.access(10, 2) = 0.5*x*(1.0 + y);
602 output.access(10, 3) = 0.0;
603 output.access(10, 4) = -0.25*(1.0 - x*x);
604 output.access(10, 5) = 0.0;
606 output.access(11, 0) = 0.0;
607 output.access(11, 1) = 0.5*y*(1.0 - z);
608 output.access(11, 2) = 0.25*(1.0 - y*y);
609 output.access(11, 3) = -0.5*(1.0 - x)*(1.0 - z);
610 output.access(11, 4) = 0.5*y*(1.0 - x);
611 output.access(11, 5) = 0.0;
613 output.access(12, 0) = 0.0;
614 output.access(12, 1) = 0.25*(1.0 - z*z);
615 output.access(12, 2) = 0.5*z*(1.0 - y);
616 output.access(12, 3) = 0.0;
617 output.access(12, 4) = 0.5*z*(1.0 - x);
618 output.access(12, 5) = -0.5*(1.0 - x)*(1.0 - y);
620 output.access(13, 0) = 0.0;
621 output.access(13, 1) = -0.25*(1.0 - z*z);
622 output.access(13, 2) = -0.5*z*(1.0 - y);
623 output.access(13, 3) = 0.0;
624 output.access(13, 4) = 0.5*z*(1.0 + x);
625 output.access(13, 5) = -0.5*(1.0 + x)*(1.0 - y);
627 output.access(14, 0) = 0.0;
628 output.access(14, 1) = 0.25*(1.0 - z*z);
629 output.access(14, 2) = -0.5*z*(1.0 + y);
630 output.access(14, 3) = 0.0;
631 output.access(14, 4) = -0.5*z*(1.0 + x);
632 output.access(14, 5) = -0.5*(1.0 + x)*(1.0 + y);
634 output.access(15, 0) = 0.0;
635 output.access(15, 1) = -0.25*(1.0 - z*z);
636 output.access(15, 2) = 0.5*z*(1.0 + y);
637 output.access(15, 3) = 0.0;
638 output.access(15, 4) = -0.5*z*(1.0 - x);
639 output.access(14, 5) = -0.5*(1.0 - x)*(1.0 + y);
641 output.access(16, 0) = -0.5*(1.0 - y)*(1.0 + z);
642 output.access(16, 1) = 0.5*x*(1.0 + z);
643 output.access(16, 2) = -0.5*x*(1.0 - y);
644 output.access(16, 3) = 0.0;
645 output.access(16, 4) = -0.25*(1.0 - x*x);
646 output.access(16, 5) = 0.0;
648 output.access(17, 0) = 0.0;
649 output.access(17, 1) = -0.5*y*(1.0 + z);
650 output.access(17, 2) = 0.25*(1.0 - y*y);
651 output.access(17, 3) = -0.5*(1.0 + x)*(1.0 + z);
652 output.access(17, 4) = -0.5*y*(1.0 + x);
653 output.access(17, 5) = 0.0;
655 output.access(18, 0) = -0.5*(1.0 + y)*(1.0 + z);
656 output.access(18, 1) = -0.5*x*(1.0 + z);
657 output.access(18, 2) = -0.5*x*(1.0 + y);
658 output.access(18, 3) = 0.0;
659 output.access(18, 4) = 0.25*(1.0 - x*x);
660 output.access(18, 5) = 0.0;
662 output.access(19, 0) = 0.0;
663 output.access(19, 1) = 0.5*y*(1.0 + z);
664 output.access(19, 2) = -0.25*(1.0 - y*y);
665 output.access(19, 3) = -0.5*(1.0 - x)*(1.0 + z);
666 output.access(19, 4) = -0.5*y*(1.0 - x);
667 output.access(19, 5) = 0.0;
673 const auto x = input(0);
674 const auto y = input(1);
675 const auto z = input(2);
677 if constexpr(!serendipity) {
679 output.access(0, 0) = 0.;
680 output.access(0, 1) = ((-1.+ 2.*y)*(-1.+ z)*z)/4.;
681 output.access(0, 2) = ((-1.+ y)*y*(-1.+ 2.*z))/4.;
682 output.access(0, 3) = ((-1.+ 2.*x)*(-1.+ z)*z)/4.;
683 output.access(0, 4) = ((-1.+ 2.*x)*(-1.+ 2.*y)*(-1.+ 2.*z))/8.;
684 output.access(0, 5) = ((-1.+ 2.*x)*(-1.+ y)*y)/4.;
685 output.access(0, 6) = 0.;
686 output.access(0, 7) = ((-1.+ x)*x*(-1.+ 2.*z))/4.;
687 output.access(0, 8) = ((-1.+ x)*x*(-1.+ 2.*y))/4.;
688 output.access(0, 9) = 0.;
690 output.access(1, 0) = 0.;
691 output.access(1, 1) = ((-1.+ 2.*y)*(-1.+ z)*z)/4.;
692 output.access(1, 2) = ((-1.+ y)*y*(-1.+ 2.*z))/4.;
693 output.access(1, 3) = ((1.+ 2.*x)*(-1.+ z)*z)/4.;
694 output.access(1, 4) = ((1.+ 2.*x)*(-1.+ 2.*y)*(-1.+ 2.*z))/8.;
695 output.access(1, 5) = ((1.+ 2.*x)*(-1.+ y)*y)/4.;
696 output.access(1, 6) = 0.;
697 output.access(1, 7) = (x*(1.+ x)*(-1.+ 2.*z))/4.;
698 output.access(1, 8) = (x*(1.+ x)*(-1.+ 2.*y))/4.;
699 output.access(1, 9) = 0.;
701 output.access(2, 0) = 0.;
702 output.access(2, 1) = ((1.+ 2.*y)*(-1.+ z)*z)/4.;
703 output.access(2, 2) = (y*(1.+ y)*(-1.+ 2.*z))/4.;
704 output.access(2, 3) = ((1.+ 2.*x)*(-1.+ z)*z)/4.;
705 output.access(2, 4) = ((1.+ 2.*x)*(1.+ 2.*y)*(-1.+ 2.*z))/8.;
706 output.access(2, 5) = ((1.+ 2.*x)*y*(1.+ y))/4.;
707 output.access(2, 6) = 0.;
708 output.access(2, 7) = (x*(1.+ x)*(-1.+ 2.*z))/4.;
709 output.access(2, 8) = (x*(1.+ x)*(1.+ 2.*y))/4.;
710 output.access(2, 9) = 0.;
712 output.access(3, 0) = 0.;
713 output.access(3, 1) = ((1.+ 2.*y)*(-1.+ z)*z)/4.;
714 output.access(3, 2) = (y*(1.+ y)*(-1.+ 2.*z))/4.;
715 output.access(3, 3) = ((-1.+ 2.*x)*(-1.+ z)*z)/4.;
716 output.access(3, 4) = ((-1.+ 2.*x)*(1.+ 2.*y)*(-1.+ 2.*z))/8.;
717 output.access(3, 5) = ((-1.+ 2.*x)*y*(1.+ y))/4.;
718 output.access(3, 6) = 0.;
719 output.access(3, 7) = ((-1.+ x)*x*(-1.+ 2.*z))/4.;
720 output.access(3, 8) = ((-1.+ x)*x*(1.+ 2.*y))/4.;
721 output.access(3, 9) = 0.;
723 output.access(4, 0) = 0.;
724 output.access(4, 1) = ((-1.+ 2.*y)*z*(1.+ z))/4.;
725 output.access(4, 2) = ((-1.+ y)*y*(1.+ 2.*z))/4.;
726 output.access(4, 3) = ((-1.+ 2.*x)*z*(1.+ z))/4.;
727 output.access(4, 4) = ((-1.+ 2.*x)*(-1.+ 2.*y)*(1.+ 2.*z))/8.;
728 output.access(4, 5) = ((-1.+ 2.*x)*(-1.+ y)*y)/4.;
729 output.access(4, 6) = 0.;
730 output.access(4, 7) = ((-1.+ x)*x*(1.+ 2.*z))/4.;
731 output.access(4, 8) = ((-1.+ x)*x*(-1.+ 2.*y))/4.;
732 output.access(4, 9) = 0.;
734 output.access(5, 0) = 0.;
735 output.access(5, 1) = ((-1.+ 2.*y)*z*(1.+ z))/4.;
736 output.access(5, 2) = ((-1.+ y)*y*(1.+ 2.*z))/4.;
737 output.access(5, 3) = ((1.+ 2.*x)*z*(1.+ z))/4.;
738 output.access(5, 4) = ((1.+ 2.*x)*(-1.+ 2.*y)*(1.+ 2.*z))/8.;
739 output.access(5, 5) = ((1.+ 2.*x)*(-1.+ y)*y)/4.;
740 output.access(5, 6) = 0.;
741 output.access(5, 7) = (x*(1.+ x)*(1.+ 2.*z))/4.;
742 output.access(5, 8) = (x*(1.+ x)*(-1.+ 2.*y))/4.;
743 output.access(5, 9) = 0.;
745 output.access(6, 0) = 0.;
746 output.access(6, 1) = ((1.+ 2.*y)*z*(1.+ z))/4.;
747 output.access(6, 2) = (y*(1.+ y)*(1.+ 2.*z))/4.;
748 output.access(6, 3) = ((1.+ 2.*x)*z*(1.+ z))/4.;
749 output.access(6, 4) = ((1.+ 2.*x)*(1.+ 2.*y)*(1.+ 2.*z))/8.;
750 output.access(6, 5) = ((1.+ 2.*x)*y*(1.+ y))/4.;
751 output.access(6, 6) = 0.;
752 output.access(6, 7) = (x*(1.+ x)*(1.+ 2.*z))/4.;
753 output.access(6, 8) = (x*(1.+ x)*(1.+ 2.*y))/4.;
754 output.access(6, 9) = 0.;
756 output.access(7, 0) = 0.;
757 output.access(7, 1) = ((1.+ 2.*y)*z*(1.+ z))/4.;
758 output.access(7, 2) = (y*(1.+ y)*(1.+ 2.*z))/4.;
759 output.access(7, 3) = ((-1.+ 2.*x)*z*(1.+ z))/4.;
760 output.access(7, 4) = ((-1.+ 2.*x)*(1.+ 2.*y)*(1.+ 2.*z))/8.;
761 output.access(7, 5) = ((-1.+ 2.*x)*y*(1.+ y))/4.;
762 output.access(7, 6) = 0.;
763 output.access(7, 7) = ((-1.+ x)*x*(1.+ 2.*z))/4.;
764 output.access(7, 8) = ((-1.+ x)*x*(1.+ 2.*y))/4.;
765 output.access(7, 9) = 0.;
767 output.access(8, 0) = 0.;
768 output.access(8, 1) = -((-1.+ 2.*y)*(-1.+ z)*z)/2.;
769 output.access(8, 2) = -((-1.+ y)*y*(-1.+ 2.*z))/2.;
770 output.access(8, 3) = -(x*(-1.+ z)*z);
771 output.access(8, 4) = -(x*(-1.+ 2.*y)*(-1.+ 2.*z))/2.;
772 output.access(8, 5) = -(x*(-1.+ y)*y);
773 output.access(8, 6) = 0.;
774 output.access(8, 7) = -((-1.+ (x*x))*(-1.+ 2.*z))/2.;
775 output.access(8, 8) = -((-1.+ (x*x))*(-1.+ 2.*y))/2.;
776 output.access(8, 9) = 0.;
778 output.access(9, 0) = 0.;
779 output.access(9, 1) = -(y*(-1.+ z)*z);
780 output.access(9, 2) = -((-1.+ (y*y))*(-1.+ 2.*z))/2.;
781 output.access(9, 3) = -((1.+ 2.*x)*(-1.+ z)*z)/2.;
782 output.access(9, 4) = -((1.+ 2.*x)*y*(-1.+ 2.*z))/2.;
783 output.access(9, 5) = -((1.+ 2.*x)*(-1.+ (y*y)))/2.;
784 output.access(9, 6) = 0.;
785 output.access(9, 7) = -(x*(1.+ x)*(-1.+ 2.*z))/2.;
786 output.access(9, 8) = -(x*(1.+ x)*y);
787 output.access(9, 9) = 0.;
789 output.access(10, 0) = 0.;
790 output.access(10, 1) = -((1.+ 2.*y)*(-1.+ z)*z)/2.;
791 output.access(10, 2) = -(y*(1.+ y)*(-1.+ 2.*z))/2.;
792 output.access(10, 3) = -(x*(-1.+ z)*z);
793 output.access(10, 4) = -(x*(1.+ 2.*y)*(-1.+ 2.*z))/2.;
794 output.access(10, 5) = -(x*y*(1.+ y));
795 output.access(10, 6) = 0.;
796 output.access(10, 7) = -((-1.+ (x*x))*(-1.+ 2.*z))/2.;
797 output.access(10, 8) = -((-1.+ (x*x))*(1.+ 2.*y))/2.;
798 output.access(10, 9) = 0.;
800 output.access(11, 0) = 0.;
801 output.access(11, 1) = -(y*(-1.+ z)*z);
802 output.access(11, 2) = -((-1.+ (y*y))*(-1.+ 2.*z))/2.;
803 output.access(11, 3) = -((-1.+ 2.*x)*(-1.+ z)*z)/2.;
804 output.access(11, 4) = -((-1.+ 2.*x)*y*(-1.+ 2.*z))/2.;
805 output.access(11, 5) = -((-1.+ 2.*x)*(-1.+ (y*y)))/2.;
806 output.access(11, 6) = 0.;
807 output.access(11, 7) = -((-1.+ x)*x*(-1.+ 2.*z))/2.;
808 output.access(11, 8) = -((-1.+ x)*x*y);
809 output.access(11, 9) = 0.;
811 output.access(12, 0) = 0.;
812 output.access(12, 1) = -((-1.+ 2.*y)*(-1.+ (z*z)))/2.;
813 output.access(12, 2) = -((-1.+ y)*y*z);
814 output.access(12, 3) = -((-1.+ 2.*x)*(-1.+ (z*z)))/2.;
815 output.access(12, 4) = -((-1.+ 2.*x)*(-1.+ 2.*y)*z)/2.;
816 output.access(12, 5) = -((-1.+ 2.*x)*(-1.+ y)*y)/2.;
817 output.access(12, 6) = 0.;
818 output.access(12, 7) = -((-1.+ x)*x*z);
819 output.access(12, 8) = -((-1.+ x)*x*(-1.+ 2.*y))/2.;
820 output.access(12, 9) = 0.;
822 output.access(13, 0) = 0.;
823 output.access(13, 1) = -((-1.+ 2.*y)*(-1.+ (z*z)))/2.;
824 output.access(13, 2) = -((-1.+ y)*y*z);
825 output.access(13, 3) = -((1.+ 2.*x)*(-1.+ (z*z)))/2.;
826 output.access(13, 4) = -((1.+ 2.*x)*(-1.+ 2.*y)*z)/2.;
827 output.access(13, 5) = -((1.+ 2.*x)*(-1.+ y)*y)/2.;
828 output.access(13, 6) = 0.;
829 output.access(13, 7) = -(x*(1.+ x)*z);
830 output.access(13, 8) = -(x*(1.+ x)*(-1.+ 2.*y))/2.;
831 output.access(13, 9) = 0.;
833 output.access(14, 0) = 0.;
834 output.access(14, 1) = -((1.+ 2.*y)*(-1.+ (z*z)))/2.;
835 output.access(14, 2) = -(y*(1.+ y)*z);
836 output.access(14, 3) = -((1.+ 2.*x)*(-1.+ (z*z)))/2.;
837 output.access(14, 4) = -((1.+ 2.*x)*(1.+ 2.*y)*z)/2.;
838 output.access(14, 5) = -((1.+ 2.*x)*y*(1.+ y))/2.;
839 output.access(14, 6) = 0.;
840 output.access(14, 7) = -(x*(1.+ x)*z);
841 output.access(14, 8) = -(x*(1.+ x)*(1.+ 2.*y))/2.;
842 output.access(14, 9) = 0.;
844 output.access(15, 0) = 0.;
845 output.access(15, 1) = -((1.+ 2.*y)*(-1.+ (z*z)))/2.;
846 output.access(15, 2) = -(y*(1.+ y)*z);
847 output.access(15, 3) = -((-1.+ 2.*x)*(-1.+ (z*z)))/2.;
848 output.access(15, 4) = -((-1.+ 2.*x)*(1.+ 2.*y)*z)/2.;
849 output.access(15, 5) = -((-1.+ 2.*x)*y*(1.+ y))/2.;
850 output.access(15, 6) = 0.;
851 output.access(15, 7) = -((-1.+ x)*x*z);
852 output.access(15, 8) = -((-1.+ x)*x*(1.+ 2.*y))/2.;
853 output.access(15, 9) = 0.;
855 output.access(16, 0) = 0.;
856 output.access(16, 1) = -((-1.+ 2.*y)*z*(1.+ z))/2.;
857 output.access(16, 2) = -((-1.+ y)*y*(1.+ 2.*z))/2.;
858 output.access(16, 3) = -(x*z*(1.+ z));
859 output.access(16, 4) = -(x*(-1.+ 2.*y)*(1.+ 2.*z))/2.;
860 output.access(16, 5) = -(x*(-1.+ y)*y);
861 output.access(16, 6) = 0.;
862 output.access(16, 7) = -((-1.+ (x*x))*(1.+ 2.*z))/2.;
863 output.access(16, 8) = -((-1.+ (x*x))*(-1.+ 2.*y))/2.;
864 output.access(16, 9) = 0.;
866 output.access(17, 0) = 0.;
867 output.access(17, 1) = -(y*z*(1.+ z));
868 output.access(17, 2) = -((-1.+ (y*y))*(1.+ 2.*z))/2.;
869 output.access(17, 3) = -((1.+ 2.*x)*z*(1.+ z))/2.;
870 output.access(17, 4) = -((1.+ 2.*x)*y*(1.+ 2.*z))/2.;
871 output.access(17, 5) = -((1.+ 2.*x)*(-1.+ (y*y)))/2.;
872 output.access(17, 6) = 0.;
873 output.access(17, 7) = -(x*(1.+ x)*(1.+ 2.*z))/2.;
874 output.access(17, 8) = -(x*(1.+ x)*y);
875 output.access(17, 9) = 0.;
877 output.access(18, 0) = 0.;
878 output.access(18, 1) = -((1.+ 2.*y)*z*(1.+ z))/2.;
879 output.access(18, 2) = -(y*(1.+ y)*(1.+ 2.*z))/2.;
880 output.access(18, 3) = -(x*z*(1.+ z));
881 output.access(18, 4) = -(x*(1.+ 2.*y)*(1.+ 2.*z))/2.;
882 output.access(18, 5) = -(x*y*(1.+ y));
883 output.access(18, 6) = 0.;
884 output.access(18, 7) = -((-1.+ (x*x))*(1.+ 2.*z))/2.;
885 output.access(18, 8) = -((-1.+ (x*x))*(1.+ 2.*y))/2.;
886 output.access(18, 9) = 0.;
888 output.access(19, 0) = 0.;
889 output.access(19, 1) = -(y*z*(1.+ z));
890 output.access(19, 2) = -((-1.+ (y*y))*(1.+ 2.*z))/2.;
891 output.access(19, 3) = -((-1.+ 2.*x)*z*(1.+ z))/2.;
892 output.access(19, 4) = -((-1.+ 2.*x)*y*(1.+ 2.*z))/2.;
893 output.access(19, 5) = -((-1.+ 2.*x)*(-1.+ (y*y)))/2.;
894 output.access(19, 6) = 0.;
895 output.access(19, 7) = -((-1.+ x)*x*(1.+ 2.*z))/2.;
896 output.access(19, 8) = -((-1.+ x)*x*y);
897 output.access(19, 9) = 0.;
899 output.access(20, 0) = 0.;
900 output.access(20, 1) = -4*y*(-1.+ (z*z));
901 output.access(20, 2) = -4*(-1.+ (y*y))*z;
902 output.access(20, 3) = -4*x*(-1.+ (z*z));
903 output.access(20, 4) = -8*x*y*z;
904 output.access(20, 5) = -4*x*(-1.+ (y*y));
905 output.access(20, 6) = 0.;
906 output.access(20, 7) = -4*(-1.+ (x*x))*z;
907 output.access(20, 8) = -4*(-1.+ (x*x))*y;
908 output.access(20, 9) = 0.;
910 output.access(21, 0) = 0.;
911 output.access(21, 1) = 2.*y*(-1.+ z)*z;
912 output.access(21, 2) = (-1.+ (y*y))*(-1.+ 2.*z);
913 output.access(21, 3) = 2.*x*(-1.+ z)*z;
914 output.access(21, 4) = 2.*x*y*(-1.+ 2.*z);
915 output.access(21, 5) = 2.*x*(-1.+ (y*y));
916 output.access(21, 6) = 0.;
917 output.access(21, 7) = (-1.+ (x*x))*(-1.+ 2.*z);
918 output.access(21, 8) = 2.*(-1.+ (x*x))*y;
919 output.access(21, 9) = 0.;
921 output.access(22, 0) = 0.;
922 output.access(22, 1) = 2.*y*z*(1.+ z);
923 output.access(22, 2) = (-1.+ (y*y))*(1.+ 2.*z);
924 output.access(22, 3) = 2.*x*z*(1.+ z);
925 output.access(22, 4) = 2.*x*y*(1.+ 2.*z);
926 output.access(22, 5) = 2.*x*(-1.+ (y*y));
927 output.access(22, 6) = 0.;
928 output.access(22, 7) = (-1.+ (x*x))*(1.+ 2.*z);
929 output.access(22, 8) = 2.*(-1.+ (x*x))*y;
930 output.access(22, 9) = 0.;
932 output.access(23, 0) = 0.;
933 output.access(23, 1) = 2.*y*(-1.+ (z*z));
934 output.access(23, 2) = 2.*(-1.+ (y*y))*z;
935 output.access(23, 3) = (-1.+ 2.*x)*(-1.+ (z*z));
936 output.access(23, 4) = 2.*(-1.+ 2.*x)*y*z;
937 output.access(23, 5) = (-1.+ 2.*x)*(-1.+ (y*y));
938 output.access(23, 6) = 0.;
939 output.access(23, 7) = 2.*(-1.+ x)*x*z;
940 output.access(23, 8) = 2.*(-1.+ x)*x*y;
941 output.access(23, 9) = 0.;
943 output.access(24, 0) = 0.;
944 output.access(24, 1) = 2.*y*(-1.+ (z*z));
945 output.access(24, 2) = 2.*(-1.+ (y*y))*z;
946 output.access(24, 3) = (1.+ 2.*x)*(-1.+ (z*z));
947 output.access(24, 4) = 2.*(1.+ 2.*x)*y*z;
948 output.access(24, 5) = (1.+ 2.*x)*(-1.+ (y*y));
949 output.access(24, 6) = 0.;
950 output.access(24, 7) = 2.*x*(1.+ x)*z;
951 output.access(24, 8) = 2.*x*(1.+ x)*y;
952 output.access(24, 9) = 0.;
954 output.access(25, 0) = 0.;
955 output.access(25, 1) = (-1.+ 2.*y)*(-1.+ (z*z));
956 output.access(25, 2) = 2.*(-1.+ y)*y*z;
957 output.access(25, 3) = 2.*x*(-1.+ (z*z));
958 output.access(25, 4) = 2.*x*(-1.+ 2.*y)*z;
959 output.access(25, 5) = 2.*x*(-1.+ y)*y;
960 output.access(25, 6) = 0.;
961 output.access(25, 7) = 2.*(-1.+ (x*x))*z;
962 output.access(25, 8) = (-1.+ (x*x))*(-1.+ 2.*y);
963 output.access(25, 9) = 0.;
965 output.access(26, 0) = 0.;
966 output.access(26, 1) = (1.+ 2.*y)*(-1.+ (z*z));
967 output.access(26, 2) = 2.*y*(1.+ y)*z;
968 output.access(26, 3) = 2.*x*(-1.+ (z*z));
969 output.access(26, 4) = 2.*x*(1.+ 2.*y)*z;
970 output.access(26, 5) = 2.*x*y*(1.+ y);
971 output.access(26, 6) = 0.;
972 output.access(26, 7) = 2.*(-1.+ (x*x))*z;
973 output.access(26, 8) = (-1.+ (x*x))*(1.+ 2.*y);
974 output.access(26, 9) = 0.;
978 output.access(0, 0) = 0.0;
979 output.access(0, 1) = -0.25*(1.0 - z);
980 output.access(0, 2) = -0.25*(1.0 - y);
981 output.access(0, 3) = -0.25*(1.0 - z);
982 output.access(0, 4) = -0.125*(-2.0*x - 2.0*y - 2.0*z + 1.0);
983 output.access(0, 5) = -0.25*(1.0 - y);
984 output.access(0, 6) = 0.0;
985 output.access(0, 7) = -0.25*(1.0 - x);
986 output.access(0, 8) = -0.25*(1.0 - x);
987 output.access(0, 9) = 0.0;
989 output.access(1, 0) = 0.0;
990 output.access(1, 1) = -0.25*(1.0 - z);
991 output.access(1, 2) = -0.25*(1.0 - y);
992 output.access(1, 3) = 0.25*(1.0 - z);
993 output.access(1, 4) = 0.125*(2.0*x - 2.0*y - 2.0*z + 1.0);
994 output.access(1, 5) = 0.25*(1.0 - y);
995 output.access(1, 6) = 0.0;
996 output.access(1, 7) = -0.25*(1.0 + x);
997 output.access(1, 8) = -0.25*(1.0 + x);
998 output.access(1, 9) = 0.0;
1000 output.access(2, 0) = 0.0;
1001 output.access(2, 1) = 0.25*(1.0 - z);
1002 output.access(2, 2) = -0.25*(1.0 + y);
1003 output.access(2, 3) = 0.25*(1.0 - z);
1004 output.access(2, 4) = -0.125*(2.0*x + 2.0*y - 2.0*z + 1.0);
1005 output.access(2, 5) = 0.25*(1.0 + y);
1006 output.access(2, 6) = 0.0;
1007 output.access(2, 7) = -0.25*(1.0 + x);
1008 output.access(2, 8) = 0.25*(1.0 + x);
1009 output.access(2, 9) = 0.0;
1011 output.access(3, 0) = 0.0;
1012 output.access(3, 1) = 0.25*(1.0 - z);
1013 output.access(3, 2) = -0.25*(1.0 + y);
1014 output.access(3, 3) = -0.25*(1.0 - z);
1015 output.access(3, 4) = 0.125*(-2.0*x + 2.0*y - 2.0*z + 1.0);
1016 output.access(3, 5) = -0.25*(1.0 + y);
1017 output.access(3, 6) = 0.0;
1018 output.access(3, 7) = -0.25*(1.0 - x);
1019 output.access(3, 8) = 0.25*(1.0 - x);
1020 output.access(3, 9) = 0.0;
1022 output.access(4, 0) = 0.0;
1023 output.access(4, 1) = -0.25*(1.0 + z);
1024 output.access(4, 2) = 0.25*(1.0 - y);
1025 output.access(4, 3) = -0.25*(1.0 + z);
1026 output.access(4, 4) = 0.125*(-2.0*x - 2.0*y + 2.0*z + 1.0);
1027 output.access(4, 5) = -0.25*(1.0 - y);
1028 output.access(4, 6) = 0.0;
1029 output.access(4, 7) = 0.25*(1.0 - x);
1030 output.access(4, 8) = -0.25*(1.0 - x);
1031 output.access(4, 9) = 0.0;
1033 output.access(5, 0) = 0.0;
1034 output.access(5, 1) = -0.25*(1.0 + z);
1035 output.access(5, 2) = 0.25*(1.0 - y);
1036 output.access(5, 3) = 0.25*(1.0 + z);
1037 output.access(5, 4) = -0.125*(2.0*x - 2.0*y + 2.0*z + 1.0);
1038 output.access(5, 5) = 0.25*(1.0 - y);
1039 output.access(5, 6) = 0.0;
1040 output.access(5, 7) = 0.25*(1.0 + x);
1041 output.access(5, 8) = -0.25*(1.0 + x);
1042 output.access(5, 9) = 0.0;
1044 output.access(6, 0) = 0.0;
1045 output.access(6, 1) = 0.25*(1.0 + z);
1046 output.access(6, 2) = 0.25*(1.0 + y);
1047 output.access(6, 3) = 0.25*(1.0 + z);
1048 output.access(6, 4) = 0.125*(2.0*x + 2.0*y + 2.0*z + 1.0);
1049 output.access(6, 5) = 0.25*(1.0 + y);
1050 output.access(6, 6) = 0.0;
1051 output.access(6, 7) = 0.25*(1.0 + x);
1052 output.access(6, 8) = 0.25*(1.0 + x);
1053 output.access(6, 9) = 0.0;
1055 output.access(7, 0) = 0.0;
1056 output.access(7, 1) = 0.25*(1.0 + z);
1057 output.access(7, 2) = 0.25*(1.0 + y);
1058 output.access(7, 3) = -0.25*(1.0 + z);
1059 output.access(7, 4) = -0.125*(-2.0*x + 2.0*y + 2.0*z + 1.0);
1060 output.access(7, 5) = -0.25*(1.0 + y);
1061 output.access(7, 6) = 0.0;
1062 output.access(7, 7) = 0.25*(1.0 - x);
1063 output.access(7, 8) = 0.25*(1.0 - x);
1064 output.access(7, 9) = 0.0;
1066 output.access(8, 0) = 0.0;
1067 output.access(8, 1) = 0.5*(1.0 - z);
1068 output.access(8, 2) = 0.5*(1.0 - y);
1069 output.access(8, 3) = 0.0;
1070 output.access(8, 4) = -0.5*x;
1071 output.access(8, 5) = 0.0;
1072 output.access(8, 6) = 0.0;
1073 output.access(8, 7) = 0.0;
1074 output.access(8, 8) = 0.0;
1075 output.access(8, 9) = 0.0;
1077 output.access(9, 0) = 0.0;
1078 output.access(9, 1) = 0.0;
1079 output.access(9, 2) = 0.0;
1080 output.access(9, 3) = -0.5*(1.0 - z);
1081 output.access(9, 4) = 0.5*y;
1082 output.access(9, 5) = 0.0;
1083 output.access(9, 6) = 0.0;
1084 output.access(9, 7) = 0.5*(1.0 + x);
1085 output.access(9, 8) = 0.0;
1086 output.access(9, 9) = 0.0;
1088 output.access(10, 0) = 0.0;
1089 output.access(10, 1) = -0.5*(1.0 - z);
1090 output.access(10, 2) = 0.5*(1.0 + y);
1091 output.access(10, 3) = 0.0;
1092 output.access(10, 4) = 0.5*x;
1093 output.access(10, 5) = 0.0;
1094 output.access(10, 6) = 0.0;
1095 output.access(10, 7) = 0.0;
1096 output.access(10, 8) = 0.0;
1097 output.access(10, 9) = 0.0;
1099 output.access(11, 0) = 0.0;
1100 output.access(11, 1) = 0.0;
1101 output.access(11, 2) = 0.0;
1102 output.access(11, 3) = 0.5*(1.0 - z);
1103 output.access(11, 4) = -0.5*y;
1104 output.access(11, 5) = 0.0;
1105 output.access(11, 6) = 0.0;
1106 output.access(11, 7) = 0.5*(1.0 - x);
1107 output.access(11, 8) = 0.0;
1108 output.access(11, 9) = 0.0;
1110 output.access(12, 0) = 0.0;
1111 output.access(12, 1) = 0.0;
1112 output.access(12, 2) = 0.0;
1113 output.access(12, 3) = 0.0;
1114 output.access(12, 4) = -0.5*z;
1115 output.access(12, 5) = 0.5*(1.0 - y);
1116 output.access(12, 6) = 0.0;
1117 output.access(12, 7) = 0.0;
1118 output.access(12, 8) = 0.5*(1.0 - x);
1119 output.access(12, 9) = 0.0;
1121 output.access(13, 0) = 0.0;
1122 output.access(13, 1) = 0.0;
1123 output.access(13, 2) = 0.0;
1124 output.access(13, 3) = 0.0;
1125 output.access(13, 4) = 0.5*z;
1126 output.access(13, 5) = -0.5*(1.0 - y);
1127 output.access(13, 6) = 0.0;
1128 output.access(13, 7) = 0.0;
1129 output.access(13, 8) = 0.5*(1.0 + x);
1130 output.access(13, 9) = 0.0;
1132 output.access(14, 0) = 0.0;
1133 output.access(14, 1) = 0.0;
1134 output.access(14, 2) = 0.0;
1135 output.access(14, 3) = 0.0;
1136 output.access(14, 4) = -0.5*z;
1137 output.access(14, 5) = -0.5*(1.0 + y);
1138 output.access(14, 6) = 0.0;
1139 output.access(14, 7) = 0.0;
1140 output.access(14, 8) = -0.5*(1.0 + x);
1141 output.access(14, 9) = 0.0;
1143 output.access(15, 0) = 0.0;
1144 output.access(15, 1) = 0.0;
1145 output.access(15, 2) = 0.0;
1146 output.access(15, 3) = 0.0;
1147 output.access(15, 4) = 0.5*z;
1148 output.access(15, 5) = 0.5*(1.0 + y);
1149 output.access(15, 6) = 0.0;
1150 output.access(15, 7) = 0.0;
1151 output.access(15, 8) = -0.5*(1.0 - x);
1152 output.access(15, 9) = 0.0;
1154 output.access(16, 0) = 0.0;
1155 output.access(16, 1) = 0.5*(1.0 + z);
1156 output.access(16, 2) = -0.5*(1.0 - y);
1157 output.access(16, 3) = 0.0;
1158 output.access(16, 4) = 0.5*x;
1159 output.access(16, 5) = 0.0;
1160 output.access(16, 6) = 0.0;
1161 output.access(16, 7) = 0.0;
1162 output.access(16, 8) = 0.0;
1163 output.access(16, 9) = 0.0;
1165 output.access(17, 0) = 0.0;
1166 output.access(17, 1) = 0.0;
1167 output.access(17, 2) = 0.0;
1168 output.access(17, 3) = -0.5*(1.0 + z);
1169 output.access(17, 4) = -0.5*y;
1170 output.access(17, 5) = 0.0;
1171 output.access(17, 6) = 0.0;
1172 output.access(17, 7) = -0.5*(1.0 + x);
1173 output.access(17, 8) = 0.0;
1174 output.access(17, 9) = 0.0;
1176 output.access(18, 0) = 0.0;
1177 output.access(18, 1) = -0.5*(1.0 + z);
1178 output.access(18, 2) = -0.5*(1.0 + y);
1179 output.access(18, 3) = 0.0;
1180 output.access(18, 4) = -0.5*x;
1181 output.access(18, 5) = 0.0;
1182 output.access(18, 6) = 0.0;
1183 output.access(18, 7) = 0.0;
1184 output.access(18, 8) = 0.0;
1185 output.access(18, 9) = 0.0;
1187 output.access(19, 0) = 0.0;
1188 output.access(19, 1) = 0.0;
1189 output.access(19, 2) = 0.0;
1190 output.access(19, 3) = 0.5*(1.0 + z);
1191 output.access(19, 4) = 0.5*y;
1192 output.access(19, 5) = 0.0;
1193 output.access(19, 6) = 0.0;
1194 output.access(19, 7) = -0.5*(1.0 - x);
1195 output.access(19, 8) = 0.0;
1196 output.access(19, 9) = 0.0;
1200 case OPERATOR_D4 : {
1203 const ordinal_type jend = output.extent(1);
1204 const ordinal_type iend = output.extent(0);
1206 for (ordinal_type j=0;j<jend;++j)
1207 for (ordinal_type i=0;i<iend;++i)
1208 output.access(i, j) = 0.0;
1210 if constexpr (!serendipity) {
1211 const auto x = input(0);
1212 const auto y = input(1);
1213 const auto z = input(2);
1215 output.access(0, 3) = ((-1.+ z)*z)/2.;
1216 output.access(0, 4) = ((-1.+ 2.*y)*(-1.+ 2.*z))/4.;
1217 output.access(0, 5) = ((-1.+ y)*y)/2.;
1218 output.access(0, 7) = ((-1.+ 2.*x)*(-1.+ 2.*z))/4.;
1219 output.access(0, 8) = ((-1.+ 2.*x)*(-1.+ 2.*y))/4.;
1220 output.access(0, 12)= ((-1.+ x)*x)/2.;
1222 output.access(1, 3) = ((-1.+ z)*z)/2.;
1223 output.access(1, 4) = ((-1.+ 2.*y)*(-1.+ 2.*z))/4.;
1224 output.access(1, 5) = ((-1.+ y)*y)/2.;
1225 output.access(1, 7) = ((1. + 2.*x)*(-1.+ 2.*z))/4.;
1226 output.access(1, 8) = ((1. + 2.*x)*(-1.+ 2.*y))/4.;
1227 output.access(1, 12)= (x*(1. + x))/2.;
1229 output.access(2, 3) = ((-1.+ z)*z)/2.;
1230 output.access(2, 4) = ((1. + 2.*y)*(-1.+ 2.*z))/4.;
1231 output.access(2, 5) = (y*(1. + y))/2.;
1232 output.access(2, 7) = ((1. + 2.*x)*(-1.+ 2.*z))/4.;
1233 output.access(2, 8) = ((1. + 2.*x)*(1. + 2.*y))/4.;
1234 output.access(2, 12)= (x*(1. + x))/2.;
1236 output.access(3, 3) = ((-1.+ z)*z)/2.;
1237 output.access(3, 4) = ((1. + 2.*y)*(-1.+ 2.*z))/4.;
1238 output.access(3, 5) = (y*(1. + y))/2.;
1239 output.access(3, 7) = ((-1.+ 2.*x)*(-1.+ 2.*z))/4.;
1240 output.access(3, 8) = ((-1.+ 2.*x)*(1. + 2.*y))/4.;
1241 output.access(3, 12)= ((-1.+ x)*x)/2.;
1243 output.access(4, 3) = (z*(1. + z))/2.;
1244 output.access(4, 4) = ((-1.+ 2.*y)*(1. + 2.*z))/4.;
1245 output.access(4, 5) = ((-1.+ y)*y)/2.;
1246 output.access(4, 7) = ((-1.+ 2.*x)*(1. + 2.*z))/4.;
1247 output.access(4, 8) = ((-1.+ 2.*x)*(-1.+ 2.*y))/4.;
1248 output.access(4, 12)= ((-1.+ x)*x)/2.;
1250 output.access(5, 3) = (z*(1. + z))/2.;
1251 output.access(5, 4) = ((-1.+ 2.*y)*(1. + 2.*z))/4.;
1252 output.access(5, 5) = ((-1.+ y)*y)/2.;
1253 output.access(5, 7) = ((1. + 2.*x)*(1. + 2.*z))/4.;
1254 output.access(5, 8) = ((1. + 2.*x)*(-1.+ 2.*y))/4.;
1255 output.access(5, 12)= (x*(1. + x))/2.;
1257 output.access(6, 3) = (z*(1. + z))/2.;
1258 output.access(6, 4) = ((1. + 2.*y)*(1. + 2.*z))/4.;
1259 output.access(6, 5) = (y*(1. + y))/2.;
1260 output.access(6, 7) = ((1. + 2.*x)*(1. + 2.*z))/4.;
1261 output.access(6, 8) = ((1. + 2.*x)*(1. + 2.*y))/4.;
1262 output.access(6, 12)= (x*(1. + x))/2.;
1264 output.access(7, 3) = (z*(1. + z))/2.;
1265 output.access(7, 4) = ((1. + 2.*y)*(1. + 2.*z))/4.;
1266 output.access(7, 5) = (y*(1. + y))/2.;
1267 output.access(7, 7) = ((-1.+ 2.*x)*(1. + 2.*z))/4.;
1268 output.access(7, 8) = ((-1.+ 2.*x)*(1. + 2.*y))/4.;
1269 output.access(7, 12)= ((-1.+ x)*x)/2.;
1271 output.access(8, 3) = -((-1.+ z)*z);
1272 output.access(8, 4) = -0.5 + y + z - 2.*y*z;
1273 output.access(8, 5) = -((-1.+ y)*y);
1274 output.access(8, 7) = x - 2.*x*z;
1275 output.access(8, 8) = x - 2.*x*y;
1276 output.access(8, 12)= 1. - x*x;
1278 output.access(9, 3) = -((-1.+ z)*z);
1279 output.access(9, 4) = y - 2.*y*z;
1280 output.access(9, 5) = 1 - y*y;
1281 output.access(9, 7) = 0.5 + x - z - 2.*x*z;
1282 output.access(9, 8) = -((1. + 2.*x)*y);
1283 output.access(9, 12)= -(x*(1. + x));
1285 output.access(10, 3) = -((-1.+ z)*z);
1286 output.access(10, 4) = 0.5 + y - z - 2.*y*z;
1287 output.access(10, 5) = -(y*(1. + y));
1288 output.access(10, 7) = x - 2.*x*z;
1289 output.access(10, 8) = -(x*(1. + 2.*y));
1290 output.access(10, 12)= 1. - x*x;
1292 output.access(11, 3) = -((-1.+ z)*z);
1293 output.access(11, 4) = y - 2.*y*z;
1294 output.access(11, 5) = 1. - y*y;
1295 output.access(11, 7) = -0.5 + x + z - 2.*x*z;
1296 output.access(11, 8) = y - 2.*x*y;
1297 output.access(11, 12)= -((-1.+ x)*x);
1299 output.access(12, 3) = 1. - z*z;
1300 output.access(12, 4) = z - 2.*y*z;
1301 output.access(12, 5) = -((-1.+ y)*y);
1302 output.access(12, 7) = z - 2.*x*z;
1303 output.access(12, 8) = -0.5 + x + y - 2.*x*y;
1304 output.access(12, 12)= -((-1.+ x)*x);
1306 output.access(13, 3) = 1. - z*z;
1307 output.access(13, 4) = z - 2.*y*z;
1308 output.access(13, 5) = -((-1.+ y)*y);
1309 output.access(13, 7) = -((1. + 2.*x)*z);
1310 output.access(13, 8) = 0.5 + x - y - 2.*x*y;
1311 output.access(13, 12)= -(x*(1. + x));
1313 output.access(14, 3) = 1. - z*z;
1314 output.access(14, 4) = -((1. + 2.*y)*z);
1315 output.access(14, 5) = -(y*(1. + y));
1316 output.access(14, 7) = -((1. + 2.*x)*z);
1317 output.access(14, 8) = -((1. + 2.*x)*(1. + 2.*y))/2.;
1318 output.access(14, 12)= -(x*(1. + x));
1320 output.access(15, 3) = 1. - z*z;
1321 output.access(15, 4) = -((1. + 2.*y)*z);
1322 output.access(15, 5) = -(y*(1. + y));
1323 output.access(15, 7) = z - 2.*x*z;
1324 output.access(15, 8) = 0.5 + y - x*(1. + 2.*y);
1325 output.access(15, 12)= -((-1.+ x)*x);
1327 output.access(16, 3) = -(z*(1. + z));
1328 output.access(16, 4) = 0.5 + z - y*(1. + 2.*z);
1329 output.access(16, 5) = -((-1.+ y)*y);
1330 output.access(16, 7) = -(x*(1. + 2.*z));
1331 output.access(16, 8) = x - 2.*x*y;
1332 output.access(16, 12)= 1. - x*x;
1334 output.access(17, 3) = -(z*(1. + z));
1335 output.access(17, 4) = -(y*(1. + 2.*z));
1336 output.access(17, 5) = 1. - y*y;
1337 output.access(17, 7) = -((1. + 2.*x)*(1. + 2.*z))/2.;
1338 output.access(17, 8) = -((1. + 2.*x)*y);
1339 output.access(17, 12)= -(x*(1. + x));
1341 output.access(18, 3) = -(z*(1. + z));
1342 output.access(18, 4) = -((1. + 2.*y)*(1. + 2.*z))/2.;
1343 output.access(18, 5) = -(y*(1. + y));
1344 output.access(18, 7) = -(x*(1. + 2.*z));
1345 output.access(18, 8) = -(x*(1. + 2.*y));
1346 output.access(18, 12)= 1. - x*x;
1348 output.access(19, 3) = -(z*(1. + z));
1349 output.access(19, 4) = -(y*(1. + 2.*z));
1350 output.access(19, 5) = 1. - y*y;
1351 output.access(19, 7) = 0.5 + z - x*(1. + 2.*z);
1352 output.access(19, 8) = y - 2.*x*y;
1353 output.access(19, 12)= -((-1.+ x)*x);
1355 output.access(20, 3) = 4. - 4.*z*z;
1356 output.access(20, 4) = -8.*y*z;
1357 output.access(20, 5) = 4. - 4.*y*y;
1358 output.access(20, 7) = -8.*x*z;
1359 output.access(20, 8) = -8.*x*y;
1360 output.access(20, 12)= 4. - 4.*x*x;
1362 output.access(21, 3) = 2.*(-1.+ z)*z;
1363 output.access(21, 4) = 2.*y*(-1.+ 2.*z);
1364 output.access(21, 5) = 2.*(-1.+ y*y);
1365 output.access(21, 7) = 2.*x*(-1.+ 2.*z);
1366 output.access(21, 8) = 4.*x*y;
1367 output.access(21, 12)= 2.*(-1.+ x*x);
1369 output.access(22, 3) = 2.*z*(1. + z);
1370 output.access(22, 4) = 2.*(y + 2.*y*z);
1371 output.access(22, 5) = 2.*(-1.+ y*y);
1372 output.access(22, 7) = 2.*(x + 2.*x*z);
1373 output.access(22, 8) = 4.*x*y;
1374 output.access(22, 12)= 2.*(-1.+ x*x);
1376 output.access(23, 3) = 2.*(-1.+ z*z);
1377 output.access(23, 4) = 4.*y*z;
1378 output.access(23, 5) = 2.*(-1.+ y*y);
1379 output.access(23, 7) = 2.*(-1.+ 2.*x)*z;
1380 output.access(23, 8) = 2.*(-1.+ 2.*x)*y;
1381 output.access(23, 12)= 2.*(-1.+ x)*x;
1383 output.access(24, 3) = 2.*(-1.+ z*z);
1384 output.access(24, 4) = 4.*y*z;
1385 output.access(24, 5) = 2.*(-1.+ y*y);
1386 output.access(24, 7) = 2.*(z + 2.*x*z);
1387 output.access(24, 8) = 2.*(y + 2.*x*y);
1388 output.access(24, 12)= 2.*x*(1. + x);
1390 output.access(25, 3) = 2.*(-1.+ z*z);
1391 output.access(25, 4) = 2.*(-1.+ 2.*y)*z;
1392 output.access(25, 5) = 2.*(-1.+ y)*y;
1393 output.access(25, 7) = 4.*x*z;
1394 output.access(25, 8) = 2.*x*(-1.+ 2.*y);
1395 output.access(25, 12)= 2.*(-1.+ x*x);
1397 output.access(26, 3) = 2.*(-1.+ z*z);
1398 output.access(26, 4) = 2.*(z + 2.*y*z);
1399 output.access(26, 5) = 2.*y*(1. + y);
1400 output.access(26, 7) = 4.*x*z;
1401 output.access(26, 8) = 2.*(x + 2.*x*y);
1402 output.access(26, 12)= 2.*(-1.+ x*x);
1406 output.access( 0, 4) = 0.25;
1407 output.access( 0, 7) = 0.25;
1408 output.access( 0, 8) = 0.25;
1410 output.access( 1, 4) = 0.25;
1411 output.access( 1, 7) = -0.25;
1412 output.access( 1, 8) = -0.25;
1414 output.access( 2, 4) = -0.25;
1415 output.access( 2, 7) = -0.25;
1416 output.access( 2, 8) = 0.25;
1418 output.access( 3, 4) = -0.25;
1419 output.access( 3, 7) = 0.25;
1420 output.access( 3, 8) = -0.25;
1422 output.access( 4, 4) = -0.25;
1423 output.access( 4, 7) = -0.25;
1424 output.access( 4, 8) = 0.25;
1426 output.access( 5, 4) = -0.25;
1427 output.access( 5, 7) = 0.25;
1428 output.access( 5, 8) = -0.25;
1430 output.access( 6, 4) = 0.25;
1431 output.access( 6, 7) = 0.25;
1432 output.access( 6, 8) = 0.25;
1434 output.access( 7, 4) = 0.25;
1435 output.access( 7, 7) = -0.25;
1436 output.access( 7, 8) = -0.25;
1438 output.access( 8, 4) = -0.5;
1439 output.access( 9, 7) = 0.5;
1440 output.access(10, 4) = 0.5;
1441 output.access(11, 7) = -0.5;
1442 output.access(12, 8) = -0.5;
1443 output.access(13, 8) = 0.5;
1444 output.access(14, 8) = -0.5;
1445 output.access(15, 8) = 0.5;
1446 output.access(16, 4) = 0.5;
1447 output.access(17, 7) = -0.5;
1448 output.access(18, 4) = -0.5;
1449 output.access(19, 7) = 0.5;
1454 case OPERATOR_MAX : {
1455 const ordinal_type jend = output.extent(1);
1456 const ordinal_type iend = output.extent(0);
1458 for (ordinal_type j=0;j<jend;++j)
1459 for (ordinal_type i=0;i<iend;++i)
1460 output.access(i, j) = 0.0;
1464 INTREPID2_TEST_FOR_ABORT( opType != OPERATOR_VALUE &&
1465 opType != OPERATOR_GRAD &&
1466 opType != OPERATOR_CURL &&
1467 opType != OPERATOR_D1 &&
1468 opType != OPERATOR_D2 &&
1469 opType != OPERATOR_D3 &&
1470 opType != OPERATOR_D4 &&
1471 opType != OPERATOR_MAX,
1472 ">>> ERROR: (Intrepid2::Basis_HGRAD_HEX_DEG2_FEM::Serial::getValues) operator is not supported");
1478 template<
bool serendipity>
1479 template<
typename DT,
1480 typename outputValueValueType,
class ...outputValueProperties,
1481 typename inputPointValueType,
class ...inputPointProperties>
1483 Basis_HGRAD_HEX_DEG2_FEM<serendipity>::
1484 getValues(
const typename DT::execution_space& space,
1485 Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValues,
1486 const Kokkos::DynRankView<inputPointValueType, inputPointProperties...> inputPoints,
1487 const EOperator operatorType ) {
1488 typedef Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValueViewType;
1489 typedef Kokkos::DynRankView<inputPointValueType, inputPointProperties...> inputPointViewType;
1490 typedef typename ExecSpace<typename inputPointViewType::execution_space,typename DT::execution_space>::ExecSpaceType ExecSpaceType;
1493 const auto loopSize = inputPoints.extent(0);
1494 Kokkos::RangePolicy<ExecSpaceType,Kokkos::Schedule<Kokkos::Static> > policy(space, 0, loopSize);
1496 switch (operatorType) {
1498 case OPERATOR_VALUE: {
1499 typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_VALUE> FunctorType;
1500 Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) );
1505 typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_GRAD> FunctorType;
1506 Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) );
1510 INTREPID2_TEST_FOR_EXCEPTION( (operatorType == OPERATOR_CURL), std::invalid_argument,
1511 ">>> ERROR (Basis_HGRAD_HEX_DEG2_FEM): CURL is invalid operator for rank-0 (scalar) functions in 3D");
1515 INTREPID2_TEST_FOR_EXCEPTION( (operatorType == OPERATOR_DIV), std::invalid_argument,
1516 ">>> ERROR (Basis_HGRAD_HEX_DEG2_FEM): DIV is invalid operator for rank-0 (scalar) functions in 3D");
1520 typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_D2> FunctorType;
1521 Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) );
1525 typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_D3> FunctorType;
1526 Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) );
1530 typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_D4> FunctorType;
1531 Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) );
1536 INTREPID2_TEST_FOR_EXCEPTION(
true, std::invalid_argument,
1537 ">>> ERROR (Basis_HGRAD_HEX_DEG2_FEM): operator not supported");
1543 case OPERATOR_D10: {
1544 typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_MAX> FunctorType;
1545 Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) );
1549 INTREPID2_TEST_FOR_EXCEPTION( !( Intrepid2::isValidOperator(operatorType) ), std::invalid_argument,
1550 ">>> ERROR (Basis_HGRAD_HEX_DEG2_FEM): Invalid operator type");
1559 template<
bool serendipity,
typename DT,
typename OT,
typename PT>
1562 this -> basisCardinality_ = serendipity ? 20 : 27;
1563 this -> basisDegree_ = 2;
1564 this -> basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData<shards::Hexahedron<8> >() );
1565 this -> basisType_ = BASIS_FEM_DEFAULT;
1566 this -> basisCoordinates_ = COORDINATES_CARTESIAN;
1567 this->functionSpace_ = FUNCTION_SPACE_HGRAD;
1572 const ordinal_type tagSize = 4;
1573 const ordinal_type posScDim = 0;
1574 const ordinal_type posScOrd = 1;
1575 const ordinal_type posDfOrd = 2;
1578 ordinal_type tags[108] = { 0, 0, 0, 1,
1613 this->setOrdinalTagData(
this -> tagToOrdinal_,
1614 this -> ordinalToTag_,
1616 this -> basisCardinality_,
1623 Kokkos::DynRankView<typename ScalarViewType::value_type,typename DT::execution_space::array_layout,Kokkos::HostSpace>
1624 dofCoords(
"dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension());
1626 dofCoords(0,0) = -1.0; dofCoords(0,1) = -1.0; dofCoords(0,2) = -1.0;
1627 dofCoords(1,0) = 1.0; dofCoords(1,1) = -1.0; dofCoords(1,2) = -1.0;
1628 dofCoords(2,0) = 1.0; dofCoords(2,1) = 1.0; dofCoords(2,2) = -1.0;
1629 dofCoords(3,0) = -1.0; dofCoords(3,1) = 1.0; dofCoords(3,2) = -1.0;
1630 dofCoords(4,0) = -1.0; dofCoords(4,1) = -1.0; dofCoords(4,2) = 1.0;
1631 dofCoords(5,0) = 1.0; dofCoords(5,1) = -1.0; dofCoords(5,2) = 1.0;
1632 dofCoords(6,0) = 1.0; dofCoords(6,1) = 1.0; dofCoords(6,2) = 1.0;
1633 dofCoords(7,0) = -1.0; dofCoords(7,1) = 1.0; dofCoords(7,2) = 1.0;
1635 dofCoords(8,0) = 0.0; dofCoords(8,1) = -1.0; dofCoords(8,2) = -1.0;
1636 dofCoords(9,0) = 1.0; dofCoords(9,1) = 0.0; dofCoords(9,2) = -1.0;
1637 dofCoords(10,0) = 0.0; dofCoords(10,1) = 1.0; dofCoords(10,2) = -1.0;
1638 dofCoords(11,0) = -1.0; dofCoords(11,1) = 0.0; dofCoords(11,2) = -1.0;
1639 dofCoords(12,0) = -1.0; dofCoords(12,1) = -1.0; dofCoords(12,2) = 0.0;
1640 dofCoords(13,0) = 1.0; dofCoords(13,1) = -1.0; dofCoords(13,2) = 0.0;
1641 dofCoords(14,0) = 1.0; dofCoords(14,1) = 1.0; dofCoords(14,2) = 0.0;
1642 dofCoords(15,0) = -1.0; dofCoords(15,1) = 1.0; dofCoords(15,2) = 0.0;
1643 dofCoords(16,0) = 0.0; dofCoords(16,1) = -1.0; dofCoords(16,2) = 1.0;
1644 dofCoords(17,0) = 1.0; dofCoords(17,1) = 0.0; dofCoords(17,2) = 1.0;
1645 dofCoords(18,0) = 0.0; dofCoords(18,1) = 1.0; dofCoords(18,2) = 1.0;
1646 dofCoords(19,0) = -1.0; dofCoords(19,1) = 0.0; dofCoords(19,2) = 1.0;
1648 if constexpr (!serendipity) {
1649 dofCoords(20,0) = 0.0; dofCoords(20,1) = 0.0; dofCoords(20,2) = 0.0;
1651 dofCoords(21,0) = 0.0; dofCoords(21,1) = 0.0; dofCoords(21,2) = -1.0;
1652 dofCoords(22,0) = 0.0; dofCoords(22,1) = 0.0; dofCoords(22,2) = 1.0;
1653 dofCoords(23,0) = -1.0; dofCoords(23,1) = 0.0; dofCoords(23,2) = 0.0;
1654 dofCoords(24,0) = 1.0; dofCoords(24,1) = 0.0; dofCoords(24,2) = 0.0;
1655 dofCoords(25,0) = 0.0; dofCoords(25,1) = -1.0; dofCoords(25,2) = 0.0;
1656 dofCoords(26,0) = 0.0; dofCoords(26,1) = 1.0; dofCoords(26,2) = 0.0;
1659 this->dofCoords_ = Kokkos::create_mirror_view(
typename DT::memory_space(), dofCoords);
1660 Kokkos::deep_copy(this->dofCoords_, dofCoords);
Kokkos::View< ordinal_type *, typename ExecutionSpace::array_layout, Kokkos::HostSpace > OrdinalTypeArray1DHost
View type for 1d host array.
Basis_HGRAD_HEX_DEG2_FEM()
Constructor.