16 #include <deal.II/base/geometry_info.h> 17 #include <deal.II/base/quadrature.h> 19 #include <deal.II/fe/fe_q.h> 20 #include <deal.II/fe/mapping_q1.h> 22 #include <deal.II/grid/grid_tools.h> 23 #include <deal.II/grid/manifold.h> 24 #include <deal.II/grid/tria.h> 25 #include <deal.II/grid/tria_accessor.h> 26 #include <deal.II/grid/tria_accessor.templates.h> 27 #include <deal.II/grid/tria_iterator.h> 28 #include <deal.II/grid/tria_iterator.templates.h> 29 #include <deal.II/grid/tria_levels.h> 34 DEAL_II_NAMESPACE_OPEN
45 const unsigned int subface_no)
50 if (face->child(subface_no)->has_children())
66 const bool first_child_has_children = face->child(0)->has_children();
75 return subface_no + first_child_has_children;
87 const unsigned int subface_no,
88 const unsigned int subsubface_no)
95 Assert(subsubface_no < face->child(subface_no)->n_children(),
101 const bool first_child_has_children = face->child(0)->has_children();
111 static const unsigned int translated_subface_no[2][2][2] = {
121 Assert(translated_subface_no[subface_no][subsubface_no]
122 [first_child_has_children] != e,
125 return translated_subface_no[subface_no][subsubface_no]
126 [first_child_has_children];
130 template <
int dim,
int spacedim>
179 const double x[4] = {accessor.
vertex(0)(0),
183 const double y[4] = {accessor.
vertex(0)(1),
187 const double t1 = x[0] * x[1];
188 const double t3 = x[0] * x[0];
189 const double t5 = x[1] * x[1];
190 const double t9 = y[0] * x[0];
191 const double t11 = y[1] * x[1];
192 const double t14 = x[2] * x[2];
193 const double t16 = x[3] * x[3];
194 const double t20 = x[2] * x[3];
195 const double t27 = t1 * y[1] + t3 * y[1] - t5 * y[0] - t3 * y[2] +
196 t5 * y[3] + t9 * x[2] - t11 * x[3] - t1 * y[0] -
197 t14 * y[3] + t16 * y[2] - t16 * y[1] + t14 * y[0] -
198 t20 * y[3] - x[0] * x[2] * y[2] + x[1] * x[3] * y[3] +
201 1 / (-x[1] * y[0] + x[1] * y[3] + y[0] * x[2] + x[0] * y[1] -
202 x[0] * y[2] - y[1] * x[3] - x[2] * y[3] + x[3] * y[2]);
203 const double t39 = y[2] * y[2];
204 const double t51 = y[0] * y[0];
205 const double t53 = y[1] * y[1];
206 const double t59 = y[3] * y[3];
207 const double t63 = t39 * x[3] + y[2] * y[0] * x[2] + y[3] * x[3] * y[2] -
208 y[2] * x[2] * y[3] - y[3] * y[1] * x[3] - t9 * y[2] +
209 t11 * y[3] + t51 * x[2] - t53 * x[3] - x[1] * t51 +
210 t9 * y[1] - t11 * y[0] + x[0] * t53 - t59 * x[2] +
211 t59 * x[1] - t39 * x[0];
213 return {t27 * t37 / 3, t63 * t37 / 3};
295 const double x[8] = {accessor.
vertex(0)(0),
303 const double y[8] = {accessor.
vertex(0)(1),
311 const double z[8] = {accessor.
vertex(0)(2),
320 double s1, s2, s3, s4, s5, s6, s7, s8;
323 s8 = -x[2] * x[2] * y[0] * z[3] - 2.0 * z[6] * x[7] * x[7] * y[4] -
324 z[5] * x[7] * x[7] * y[4] - z[6] * x[7] * x[7] * y[5] +
325 2.0 * y[6] * x[7] * x[7] * z[4] - z[5] * x[6] * x[6] * y[4] +
326 x[6] * x[6] * y[4] * z[7] - z[1] * x[0] * x[0] * y[2] -
327 x[6] * x[6] * y[7] * z[4] + 2.0 * x[6] * x[6] * y[5] * z[7] -
328 2.0 * x[6] * x[6] * y[7] * z[5] + y[5] * x[6] * x[6] * z[4] +
329 2.0 * x[5] * x[5] * y[4] * z[6] + x[0] * x[0] * y[7] * z[4] -
330 2.0 * x[5] * x[5] * y[6] * z[4];
331 s7 = s8 - y[6] * x[5] * x[5] * z[7] + z[6] * x[5] * x[5] * y[7] -
332 y[1] * x[0] * x[0] * z[5] + x[7] * z[5] * x[4] * y[7] -
333 x[7] * y[6] * x[5] * z[7] - 2.0 * x[7] * x[6] * y[7] * z[4] +
334 2.0 * x[7] * x[6] * y[4] * z[7] - x[7] * x[5] * y[7] * z[4] -
335 2.0 * x[7] * y[6] * x[4] * z[7] - x[7] * y[5] * x[4] * z[7] +
336 x[2] * x[2] * y[3] * z[0] - x[7] * x[6] * y[7] * z[5] +
337 x[7] * x[6] * y[5] * z[7] + 2.0 * x[1] * x[1] * y[0] * z[5] +
338 x[7] * z[6] * x[5] * y[7];
339 s8 = -2.0 * x[1] * x[1] * y[5] * z[0] + z[1] * x[0] * x[0] * y[5] +
340 2.0 * x[2] * x[2] * y[3] * z[1] - z[5] * x[4] * x[4] * y[1] +
341 y[5] * x[4] * x[4] * z[1] - 2.0 * x[5] * x[5] * y[4] * z[1] +
342 2.0 * x[5] * x[5] * y[1] * z[4] - 2.0 * x[2] * x[2] * y[1] * z[3] -
343 y[1] * x[2] * x[2] * z[0] + x[7] * y[2] * x[3] * z[7] +
344 x[7] * z[2] * x[6] * y[3] + 2.0 * x[7] * z[6] * x[4] * y[7] +
345 z[5] * x[1] * x[1] * y[4] + z[1] * x[2] * x[2] * y[0] -
346 2.0 * y[0] * x[3] * x[3] * z[7];
347 s6 = s8 + 2.0 * z[0] * x[3] * x[3] * y[7] - x[7] * x[2] * y[3] * z[7] -
348 x[7] * z[2] * x[3] * y[7] + x[7] * x[2] * y[7] * z[3] -
349 x[7] * y[2] * x[6] * z[3] + x[4] * x[5] * y[1] * z[4] -
350 x[4] * x[5] * y[4] * z[1] + x[4] * z[5] * x[1] * y[4] -
351 x[4] * y[5] * x[1] * z[4] - 2.0 * x[5] * z[5] * x[4] * y[1] -
352 2.0 * x[5] * y[5] * x[1] * z[4] + 2.0 * x[5] * z[5] * x[1] * y[4] +
353 2.0 * x[5] * y[5] * x[4] * z[1] - x[6] * z[5] * x[7] * y[4] -
354 z[2] * x[3] * x[3] * y[6] + s7;
355 s8 = -2.0 * x[6] * z[6] * x[7] * y[5] - x[6] * y[6] * x[4] * z[7] +
356 y[2] * x[3] * x[3] * z[6] + x[6] * y[6] * x[7] * z[4] +
357 2.0 * y[2] * x[3] * x[3] * z[7] + x[0] * x[1] * y[0] * z[5] +
358 x[0] * y[1] * x[5] * z[0] - x[0] * z[1] * x[5] * y[0] -
359 2.0 * z[2] * x[3] * x[3] * y[7] + 2.0 * x[6] * z[6] * x[5] * y[7] -
360 x[0] * x[1] * y[5] * z[0] - x[6] * y[5] * x[4] * z[6] -
361 2.0 * x[3] * z[0] * x[7] * y[3] - x[6] * z[6] * x[7] * y[4] -
362 2.0 * x[1] * z[1] * x[5] * y[0];
363 s7 = s8 + 2.0 * x[1] * y[1] * x[5] * z[0] +
364 2.0 * x[1] * z[1] * x[0] * y[5] + 2.0 * x[3] * y[0] * x[7] * z[3] +
365 2.0 * x[3] * x[0] * y[3] * z[7] - 2.0 * x[3] * x[0] * y[7] * z[3] -
366 2.0 * x[1] * y[1] * x[0] * z[5] - 2.0 * x[6] * y[6] * x[5] * z[7] +
367 s6 - y[5] * x[1] * x[1] * z[4] + x[6] * z[6] * x[4] * y[7] -
368 2.0 * x[2] * y[2] * x[3] * z[1] + x[6] * z[5] * x[4] * y[6] +
369 x[6] * x[5] * y[4] * z[6] - y[6] * x[7] * x[7] * z[2] -
370 x[6] * x[5] * y[6] * z[4];
371 s8 = x[3] * x[3] * y[7] * z[4] - 2.0 * y[6] * x[7] * x[7] * z[3] +
372 z[6] * x[7] * x[7] * y[2] + 2.0 * z[6] * x[7] * x[7] * y[3] +
373 2.0 * y[1] * x[0] * x[0] * z[3] + 2.0 * x[0] * x[1] * y[3] * z[0] -
374 2.0 * x[0] * y[0] * x[3] * z[4] - 2.0 * x[0] * z[1] * x[4] * y[0] -
375 2.0 * x[0] * y[1] * x[3] * z[0] + 2.0 * x[0] * y[0] * x[4] * z[3] -
376 2.0 * x[0] * z[0] * x[4] * y[3] + 2.0 * x[0] * x[1] * y[0] * z[4] +
377 2.0 * x[0] * z[1] * x[3] * y[0] - 2.0 * x[0] * x[1] * y[0] * z[3] -
378 2.0 * x[0] * x[1] * y[4] * z[0] + 2.0 * x[0] * y[1] * x[4] * z[0];
379 s5 = s8 + 2.0 * x[0] * z[0] * x[3] * y[4] + x[1] * y[1] * x[0] * z[3] -
380 x[1] * z[1] * x[4] * y[0] - x[1] * y[1] * x[0] * z[4] +
381 x[1] * z[1] * x[0] * y[4] - x[1] * y[1] * x[3] * z[0] -
382 x[1] * z[1] * x[0] * y[3] - x[0] * z[5] * x[4] * y[1] +
383 x[0] * y[5] * x[4] * z[1] - 2.0 * x[4] * x[0] * y[4] * z[7] -
384 2.0 * x[4] * y[5] * x[0] * z[4] + 2.0 * x[4] * z[5] * x[0] * y[4] -
385 2.0 * x[4] * x[5] * y[4] * z[0] - 2.0 * x[4] * y[0] * x[7] * z[4] -
386 x[5] * y[5] * x[0] * z[4] + s7;
387 s8 = x[5] * z[5] * x[0] * y[4] - x[5] * z[5] * x[4] * y[0] +
388 x[1] * z[5] * x[0] * y[4] + x[5] * y[5] * x[4] * z[0] -
389 x[0] * y[0] * x[7] * z[4] - x[0] * z[5] * x[4] * y[0] -
390 x[1] * y[5] * x[0] * z[4] + x[0] * z[0] * x[7] * y[4] +
391 x[0] * y[5] * x[4] * z[0] - x[0] * z[0] * x[4] * y[7] +
392 x[0] * x[5] * y[0] * z[4] + x[0] * y[0] * x[4] * z[7] -
393 x[0] * x[5] * y[4] * z[0] - x[3] * x[3] * y[4] * z[7] +
394 2.0 * x[2] * z[2] * x[3] * y[1];
395 s7 = s8 - x[5] * x[5] * y[4] * z[0] + 2.0 * y[5] * x[4] * x[4] * z[0] -
396 2.0 * z[0] * x[4] * x[4] * y[7] + 2.0 * y[0] * x[4] * x[4] * z[7] -
397 2.0 * z[5] * x[4] * x[4] * y[0] + x[5] * x[5] * y[4] * z[7] -
398 x[5] * x[5] * y[7] * z[4] - 2.0 * y[5] * x[4] * x[4] * z[7] +
399 2.0 * z[5] * x[4] * x[4] * y[7] - x[0] * x[0] * y[7] * z[3] +
400 y[2] * x[0] * x[0] * z[3] + x[0] * x[0] * y[3] * z[7] -
401 x[5] * x[1] * y[4] * z[0] + x[5] * y[1] * x[4] * z[0] -
402 x[4] * y[0] * x[3] * z[4];
403 s8 = -x[4] * y[1] * x[0] * z[4] + x[4] * z[1] * x[0] * y[4] +
404 x[4] * x[0] * y[3] * z[4] - x[4] * x[0] * y[4] * z[3] +
405 x[4] * x[1] * y[0] * z[4] - x[4] * x[1] * y[4] * z[0] +
406 x[4] * z[0] * x[3] * y[4] + x[5] * x[1] * y[0] * z[4] +
407 x[1] * z[1] * x[3] * y[0] + x[1] * y[1] * x[4] * z[0] -
408 x[5] * z[1] * x[4] * y[0] - 2.0 * y[1] * x[0] * x[0] * z[4] +
409 2.0 * z[1] * x[0] * x[0] * y[4] + 2.0 * x[0] * x[0] * y[3] * z[4] -
410 2.0 * z[1] * x[0] * x[0] * y[3];
411 s6 = s8 - 2.0 * x[0] * x[0] * y[4] * z[3] + x[1] * x[1] * y[3] * z[0] +
412 x[1] * x[1] * y[0] * z[4] - x[1] * x[1] * y[0] * z[3] -
413 x[1] * x[1] * y[4] * z[0] - z[1] * x[4] * x[4] * y[0] +
414 y[0] * x[4] * x[4] * z[3] - z[0] * x[4] * x[4] * y[3] +
415 y[1] * x[4] * x[4] * z[0] - x[0] * x[0] * y[4] * z[7] -
416 y[5] * x[0] * x[0] * z[4] + z[5] * x[0] * x[0] * y[4] +
417 x[5] * x[5] * y[0] * z[4] - x[0] * y[0] * x[3] * z[7] +
418 x[0] * z[0] * x[3] * y[7] + s7;
419 s8 = s6 + x[0] * x[2] * y[3] * z[0] - x[0] * x[2] * y[0] * z[3] +
420 x[0] * y[0] * x[7] * z[3] - x[0] * y[2] * x[3] * z[0] +
421 x[0] * z[2] * x[3] * y[0] - x[0] * z[0] * x[7] * y[3] +
422 x[1] * x[2] * y[3] * z[0] - z[2] * x[0] * x[0] * y[3] +
423 x[3] * z[2] * x[6] * y[3] - x[3] * x[2] * y[3] * z[6] +
424 x[3] * x[2] * y[6] * z[3] - x[3] * y[2] * x[6] * z[3] -
425 2.0 * x[3] * y[2] * x[7] * z[3] + 2.0 * x[3] * z[2] * x[7] * y[3];
426 s7 = s8 + 2.0 * x[4] * y[5] * x[7] * z[4] +
427 2.0 * x[4] * x[5] * y[4] * z[7] - 2.0 * x[4] * z[5] * x[7] * y[4] -
428 2.0 * x[4] * x[5] * y[7] * z[4] + x[5] * y[5] * x[7] * z[4] -
429 x[5] * z[5] * x[7] * y[4] - x[5] * y[5] * x[4] * z[7] +
430 x[5] * z[5] * x[4] * y[7] + 2.0 * x[3] * x[2] * y[7] * z[3] -
431 2.0 * x[2] * z[2] * x[1] * y[3] + 2.0 * x[4] * z[0] * x[7] * y[4] +
432 2.0 * x[4] * x[0] * y[7] * z[4] + 2.0 * x[4] * x[5] * y[0] * z[4] -
433 x[7] * x[6] * y[2] * z[7] - 2.0 * x[3] * x[2] * y[3] * z[7] -
434 x[0] * x[4] * y[7] * z[3];
435 s8 = x[0] * x[3] * y[7] * z[4] - x[0] * x[3] * y[4] * z[7] +
436 x[0] * x[4] * y[3] * z[7] - 2.0 * x[7] * z[6] * x[3] * y[7] +
437 x[3] * x[7] * y[4] * z[3] - x[3] * x[4] * y[7] * z[3] -
438 x[3] * x[7] * y[3] * z[4] + x[3] * x[4] * y[3] * z[7] +
439 2.0 * x[2] * y[2] * x[1] * z[3] + y[6] * x[3] * x[3] * z[7] -
440 z[6] * x[3] * x[3] * y[7] - x[1] * z[5] * x[4] * y[1] -
441 x[1] * x[5] * y[4] * z[1] - x[1] * z[2] * x[0] * y[3] -
442 x[1] * x[2] * y[0] * z[3] + x[1] * y[2] * x[0] * z[3];
443 s4 = s8 + x[1] * x[5] * y[1] * z[4] + x[1] * y[5] * x[4] * z[1] +
444 x[4] * y[0] * x[7] * z[3] - x[4] * z[0] * x[7] * y[3] -
445 x[4] * x[4] * y[7] * z[3] + x[4] * x[4] * y[3] * z[7] +
446 x[3] * z[6] * x[7] * y[3] - x[3] * x[6] * y[3] * z[7] +
447 x[3] * x[6] * y[7] * z[3] - x[3] * z[6] * x[2] * y[7] -
448 x[3] * y[6] * x[7] * z[3] + x[3] * z[6] * x[7] * y[2] +
449 x[3] * y[6] * x[2] * z[7] + 2.0 * x[5] * z[5] * x[4] * y[6] + s5 + s7;
450 s8 = s4 - 2.0 * x[5] * z[5] * x[6] * y[4] - x[5] * z[6] * x[7] * y[5] +
451 x[5] * x[6] * y[5] * z[7] - x[5] * x[6] * y[7] * z[5] -
452 2.0 * x[5] * y[5] * x[4] * z[6] + 2.0 * x[5] * y[5] * x[6] * z[4] -
453 x[3] * y[6] * x[7] * z[2] + x[4] * x[7] * y[4] * z[3] +
454 x[4] * x[3] * y[7] * z[4] - x[4] * x[7] * y[3] * z[4] -
455 x[4] * x[3] * y[4] * z[7] - z[1] * x[5] * x[5] * y[0] +
456 y[1] * x[5] * x[5] * z[0] + x[4] * y[6] * x[7] * z[4];
457 s7 = s8 - x[4] * x[6] * y[7] * z[4] + x[4] * x[6] * y[4] * z[7] -
458 x[4] * z[6] * x[7] * y[4] - x[5] * y[6] * x[4] * z[7] -
459 x[5] * x[6] * y[7] * z[4] + x[5] * x[6] * y[4] * z[7] +
460 x[5] * z[6] * x[4] * y[7] - y[6] * x[4] * x[4] * z[7] +
461 z[6] * x[4] * x[4] * y[7] + x[7] * x[5] * y[4] * z[7] -
462 y[2] * x[7] * x[7] * z[3] + z[2] * x[7] * x[7] * y[3] -
463 y[0] * x[3] * x[3] * z[4] - y[1] * x[3] * x[3] * z[0] +
464 z[1] * x[3] * x[3] * y[0];
465 s8 = z[0] * x[3] * x[3] * y[4] - x[2] * y[1] * x[3] * z[0] +
466 x[2] * z[1] * x[3] * y[0] + x[3] * y[1] * x[0] * z[3] +
467 x[3] * x[1] * y[3] * z[0] + x[3] * x[0] * y[3] * z[4] -
468 x[3] * z[1] * x[0] * y[3] - x[3] * x[0] * y[4] * z[3] +
469 x[3] * y[0] * x[4] * z[3] - x[3] * z[0] * x[4] * y[3] -
470 x[3] * x[1] * y[0] * z[3] + x[3] * z[0] * x[7] * y[4] -
471 x[3] * y[0] * x[7] * z[4] + z[0] * x[7] * x[7] * y[4] -
472 y[0] * x[7] * x[7] * z[4];
473 s6 = s8 + y[1] * x[0] * x[0] * z[2] - 2.0 * y[2] * x[3] * x[3] * z[0] +
474 2.0 * z[2] * x[3] * x[3] * y[0] - 2.0 * x[1] * x[1] * y[0] * z[2] +
475 2.0 * x[1] * x[1] * y[2] * z[0] - y[2] * x[3] * x[3] * z[1] +
476 z[2] * x[3] * x[3] * y[1] - y[5] * x[4] * x[4] * z[6] +
477 z[5] * x[4] * x[4] * y[6] + x[7] * x[0] * y[7] * z[4] -
478 x[7] * z[0] * x[4] * y[7] - x[7] * x[0] * y[4] * z[7] +
479 x[7] * y[0] * x[4] * z[7] - x[0] * x[1] * y[0] * z[2] +
480 x[0] * z[1] * x[2] * y[0] + s7;
481 s8 = s6 + x[0] * x[1] * y[2] * z[0] - x[0] * y[1] * x[2] * z[0] -
482 x[3] * z[1] * x[0] * y[2] + 2.0 * x[3] * x[2] * y[3] * z[0] +
483 y[0] * x[7] * x[7] * z[3] - z[0] * x[7] * x[7] * y[3] -
484 2.0 * x[3] * z[2] * x[0] * y[3] - 2.0 * x[3] * x[2] * y[0] * z[3] +
485 2.0 * x[3] * y[2] * x[0] * z[3] + x[3] * x[2] * y[3] * z[1] -
486 x[3] * x[2] * y[1] * z[3] - x[5] * y[1] * x[0] * z[5] +
487 x[3] * y[1] * x[0] * z[2] + x[4] * y[6] * x[7] * z[5];
488 s7 = s8 - x[5] * x[1] * y[5] * z[0] + 2.0 * x[1] * z[1] * x[2] * y[0] -
489 2.0 * x[1] * z[1] * x[0] * y[2] + x[1] * x[2] * y[3] * z[1] -
490 x[1] * x[2] * y[1] * z[3] + 2.0 * x[1] * y[1] * x[0] * z[2] -
491 2.0 * x[1] * y[1] * x[2] * z[0] - z[2] * x[1] * x[1] * y[3] +
492 y[2] * x[1] * x[1] * z[3] + y[5] * x[7] * x[7] * z[4] +
493 y[6] * x[7] * x[7] * z[5] + x[7] * x[6] * y[7] * z[2] +
494 x[7] * y[6] * x[2] * z[7] - x[7] * z[6] * x[2] * y[7] -
495 2.0 * x[7] * x[6] * y[3] * z[7];
496 s8 = s7 + 2.0 * x[7] * x[6] * y[7] * z[3] +
497 2.0 * x[7] * y[6] * x[3] * z[7] - x[3] * z[2] * x[1] * y[3] +
498 x[3] * y[2] * x[1] * z[3] + x[5] * x[1] * y[0] * z[5] +
499 x[4] * y[5] * x[6] * z[4] + x[5] * z[1] * x[0] * y[5] -
500 x[4] * z[6] * x[7] * y[5] - x[4] * x[5] * y[6] * z[4] +
501 x[4] * x[5] * y[4] * z[6] - x[4] * z[5] * x[6] * y[4] -
502 x[1] * y[2] * x[3] * z[1] + x[1] * z[2] * x[3] * y[1] -
503 x[2] * x[1] * y[0] * z[2] - x[2] * z[1] * x[0] * y[2];
504 s5 = s8 + x[2] * x[1] * y[2] * z[0] - x[2] * z[2] * x[0] * y[3] +
505 x[2] * y[2] * x[0] * z[3] - x[2] * y[2] * x[3] * z[0] +
506 x[2] * z[2] * x[3] * y[0] + x[2] * y[1] * x[0] * z[2] +
507 x[5] * y[6] * x[7] * z[5] + x[6] * y[5] * x[7] * z[4] +
508 2.0 * x[6] * y[6] * x[7] * z[5] - x[7] * y[0] * x[3] * z[7] +
509 x[7] * z[0] * x[3] * y[7] - x[7] * x[0] * y[7] * z[3] +
510 x[7] * x[0] * y[3] * z[7] + 2.0 * x[7] * x[7] * y[4] * z[3] -
511 2.0 * x[7] * x[7] * y[3] * z[4] - 2.0 * x[1] * x[1] * y[2] * z[5];
512 s8 = s5 - 2.0 * x[7] * x[4] * y[7] * z[3] +
513 2.0 * x[7] * x[3] * y[7] * z[4] - 2.0 * x[7] * x[3] * y[4] * z[7] +
514 2.0 * x[7] * x[4] * y[3] * z[7] + 2.0 * x[1] * x[1] * y[5] * z[2] -
515 x[1] * x[1] * y[2] * z[6] + x[1] * x[1] * y[6] * z[2] +
516 z[1] * x[5] * x[5] * y[2] - y[1] * x[5] * x[5] * z[2] -
517 x[1] * x[1] * y[6] * z[5] + x[1] * x[1] * y[5] * z[6] +
518 x[5] * x[5] * y[6] * z[2] - x[5] * x[5] * y[2] * z[6] -
519 2.0 * y[1] * x[5] * x[5] * z[6];
520 s7 = s8 + 2.0 * z[1] * x[5] * x[5] * y[6] +
521 2.0 * x[1] * z[1] * x[5] * y[2] + 2.0 * x[1] * y[1] * x[2] * z[5] -
522 2.0 * x[1] * z[1] * x[2] * y[5] - 2.0 * x[1] * y[1] * x[5] * z[2] -
523 x[1] * y[1] * x[6] * z[2] - x[1] * z[1] * x[2] * y[6] +
524 x[1] * z[1] * x[6] * y[2] + x[1] * y[1] * x[2] * z[6] -
525 x[5] * x[1] * y[2] * z[5] + x[5] * y[1] * x[2] * z[5] -
526 x[5] * z[1] * x[2] * y[5] + x[5] * x[1] * y[5] * z[2] -
527 x[5] * y[1] * x[6] * z[2] - x[5] * x[1] * y[2] * z[6];
528 s8 = s7 + x[5] * x[1] * y[6] * z[2] + x[5] * z[1] * x[6] * y[2] +
529 x[1] * x[2] * y[5] * z[6] - x[1] * x[2] * y[6] * z[5] -
530 x[1] * z[1] * x[6] * y[5] - x[1] * y[1] * x[5] * z[6] +
531 x[1] * z[1] * x[5] * y[6] + x[1] * y[1] * x[6] * z[5] -
532 x[5] * x[6] * y[5] * z[2] + x[5] * x[2] * y[5] * z[6] -
533 x[5] * x[2] * y[6] * z[5] + x[5] * x[6] * y[2] * z[5] -
534 2.0 * x[5] * z[1] * x[6] * y[5] - 2.0 * x[5] * x[1] * y[6] * z[5] +
535 2.0 * x[5] * x[1] * y[5] * z[6];
536 s6 = s8 + 2.0 * x[5] * y[1] * x[6] * z[5] +
537 2.0 * x[2] * x[1] * y[6] * z[2] + 2.0 * x[2] * z[1] * x[6] * y[2] -
538 2.0 * x[2] * x[1] * y[2] * z[6] + x[2] * x[5] * y[6] * z[2] +
539 x[2] * x[6] * y[2] * z[5] - x[2] * x[5] * y[2] * z[6] +
540 y[1] * x[2] * x[2] * z[5] - z[1] * x[2] * x[2] * y[5] -
541 2.0 * x[2] * y[1] * x[6] * z[2] - x[2] * x[6] * y[5] * z[2] -
542 2.0 * z[1] * x[2] * x[2] * y[6] + x[2] * x[2] * y[5] * z[6] -
543 x[2] * x[2] * y[6] * z[5] + 2.0 * y[1] * x[2] * x[2] * z[6] +
544 x[2] * z[1] * x[5] * y[2];
545 s8 = s6 - x[2] * x[1] * y[2] * z[5] + x[2] * x[1] * y[5] * z[2] -
546 x[2] * y[1] * x[5] * z[2] + x[6] * y[1] * x[2] * z[5] -
547 x[6] * z[1] * x[2] * y[5] - z[1] * x[6] * x[6] * y[5] +
548 y[1] * x[6] * x[6] * z[5] - y[1] * x[6] * x[6] * z[2] -
549 2.0 * x[6] * x[6] * y[5] * z[2] + 2.0 * x[6] * x[6] * y[2] * z[5] +
550 z[1] * x[6] * x[6] * y[2] - x[6] * x[1] * y[6] * z[5] -
551 x[6] * y[1] * x[5] * z[6] + x[6] * x[1] * y[5] * z[6];
552 s7 = s8 + x[6] * z[1] * x[5] * y[6] - x[6] * z[1] * x[2] * y[6] -
553 x[6] * x[1] * y[2] * z[6] + 2.0 * x[6] * x[5] * y[6] * z[2] +
554 2.0 * x[6] * x[2] * y[5] * z[6] - 2.0 * x[6] * x[2] * y[6] * z[5] -
555 2.0 * x[6] * x[5] * y[2] * z[6] + x[6] * x[1] * y[6] * z[2] +
556 x[6] * y[1] * x[2] * z[6] - x[2] * x[2] * y[3] * z[7] +
557 x[2] * x[2] * y[7] * z[3] - x[2] * z[2] * x[3] * y[7] -
558 x[2] * y[2] * x[7] * z[3] + x[2] * z[2] * x[7] * y[3] +
559 x[2] * y[2] * x[3] * z[7] - x[6] * x[6] * y[3] * z[7];
560 s8 = s7 + x[6] * x[6] * y[7] * z[3] - x[6] * x[2] * y[3] * z[7] +
561 x[6] * x[2] * y[7] * z[3] - x[6] * y[6] * x[7] * z[3] +
562 x[6] * y[6] * x[3] * z[7] - x[6] * z[6] * x[3] * y[7] +
563 x[6] * z[6] * x[7] * y[3] + y[6] * x[2] * x[2] * z[7] -
564 z[6] * x[2] * x[2] * y[7] + 2.0 * x[2] * x[2] * y[6] * z[3] -
565 x[2] * y[6] * x[7] * z[2] - 2.0 * x[2] * y[2] * x[6] * z[3] -
566 2.0 * x[2] * x[2] * y[3] * z[6] + 2.0 * x[2] * y[2] * x[3] * z[6] -
567 x[2] * x[6] * y[2] * z[7];
568 s3 = s8 + x[2] * x[6] * y[7] * z[2] + x[2] * z[6] * x[7] * y[2] +
569 2.0 * x[2] * z[2] * x[6] * y[3] - 2.0 * x[2] * z[2] * x[3] * y[6] -
570 y[2] * x[6] * x[6] * z[3] - 2.0 * x[6] * x[6] * y[2] * z[7] +
571 2.0 * x[6] * x[6] * y[7] * z[2] + z[2] * x[6] * x[6] * y[3] -
572 2.0 * x[6] * y[6] * x[7] * z[2] + x[6] * y[2] * x[3] * z[6] -
573 x[6] * x[2] * y[3] * z[6] + 2.0 * x[6] * z[6] * x[7] * y[2] +
574 2.0 * x[6] * y[6] * x[2] * z[7] - 2.0 * x[6] * z[6] * x[2] * y[7] +
575 x[6] * x[2] * y[6] * z[3] - x[6] * z[2] * x[3] * y[6];
576 s8 = y[1] * x[0] * z[3] + x[1] * y[3] * z[0] - y[0] * x[3] * z[7] -
577 x[1] * y[5] * z[0] - y[0] * x[3] * z[4] - x[1] * y[0] * z[2] +
578 z[1] * x[2] * y[0] - y[1] * x[0] * z[5] - z[1] * x[0] * y[2] -
579 y[1] * x[0] * z[4] + z[1] * x[5] * y[2] + z[0] * x[7] * y[4] +
580 z[0] * x[3] * y[7] + z[1] * x[0] * y[4] - x[1] * y[2] * z[5] +
581 x[2] * y[3] * z[0] + y[1] * x[2] * z[5] - x[2] * y[3] * z[7];
582 s7 = s8 - z[1] * x[2] * y[5] - y[1] * x[3] * z[0] - x[0] * y[7] * z[3] -
583 z[1] * x[0] * y[3] + y[5] * x[4] * z[0] - x[0] * y[4] * z[3] +
584 y[5] * x[7] * z[4] - z[0] * x[4] * y[3] + x[1] * y[0] * z[4] -
585 z[2] * x[3] * y[7] - y[6] * x[7] * z[2] + x[1] * y[5] * z[2] +
586 y[6] * x[7] * z[5] + x[0] * y[7] * z[4] + x[1] * y[2] * z[0] -
587 z[1] * x[4] * y[0] - z[0] * x[4] * y[7] - z[2] * x[0] * y[3];
588 s8 = x[5] * y[0] * z[4] + z[1] * x[0] * y[5] - x[2] * y[0] * z[3] -
589 z[1] * x[5] * y[0] + y[1] * x[5] * z[0] - x[1] * y[0] * z[3] -
590 x[1] * y[4] * z[0] - y[1] * x[5] * z[2] + x[2] * y[7] * z[3] +
591 y[0] * x[4] * z[3] - x[0] * y[4] * z[7] + x[1] * y[0] * z[5] -
592 y[1] * x[6] * z[2] - y[2] * x[6] * z[3] + y[0] * x[7] * z[3] -
593 y[2] * x[7] * z[3] + z[2] * x[7] * y[3] + y[2] * x[0] * z[3];
594 s6 = s8 + y[2] * x[3] * z[7] - y[2] * x[3] * z[0] - x[6] * y[5] * z[2] -
595 y[5] * x[0] * z[4] + z[2] * x[3] * y[0] + x[2] * y[3] * z[1] +
596 x[0] * y[3] * z[7] - x[2] * y[1] * z[3] + y[1] * x[4] * z[0] +
597 y[1] * x[0] * z[2] - z[1] * x[2] * y[6] + y[2] * x[3] * z[6] -
598 y[1] * x[2] * z[0] + z[1] * x[3] * y[0] - x[1] * y[2] * z[6] -
599 x[2] * y[3] * z[6] + x[0] * y[3] * z[4] + z[0] * x[3] * y[4] + s7;
600 s8 = x[5] * y[4] * z[7] + s6 + y[5] * x[6] * z[4] - y[5] * x[4] * z[6] +
601 z[6] * x[5] * y[7] - x[6] * y[2] * z[7] - x[6] * y[7] * z[5] +
602 x[5] * y[6] * z[2] + x[6] * y[5] * z[7] + x[6] * y[7] * z[2] +
603 y[6] * x[7] * z[4] - y[6] * x[4] * z[7] - y[6] * x[7] * z[3] +
604 z[6] * x[7] * y[2] + x[2] * y[5] * z[6] - x[2] * y[6] * z[5] +
605 y[6] * x[2] * z[7] + x[6] * y[2] * z[5];
606 s7 = s8 - x[5] * y[2] * z[6] - z[6] * x[7] * y[5] - z[5] * x[7] * y[4] +
607 z[5] * x[0] * y[4] - y[5] * x[4] * z[7] + y[0] * x[4] * z[7] -
608 z[6] * x[2] * y[7] - x[5] * y[4] * z[0] - x[5] * y[7] * z[4] -
609 y[0] * x[7] * z[4] + y[5] * x[4] * z[1] - x[6] * y[7] * z[4] +
610 x[7] * y[4] * z[3] - x[4] * y[7] * z[3] + x[3] * y[7] * z[4] -
611 x[7] * y[3] * z[4] - x[6] * y[3] * z[7] + x[6] * y[4] * z[7];
612 s8 = -x[3] * y[4] * z[7] + x[4] * y[3] * z[7] - z[6] * x[7] * y[4] -
613 z[1] * x[6] * y[5] + x[6] * y[7] * z[3] - x[1] * y[6] * z[5] -
614 y[1] * x[5] * z[6] + z[5] * x[4] * y[7] - z[5] * x[4] * y[0] +
615 x[1] * y[5] * z[6] - y[6] * x[5] * z[7] - y[2] * x[3] * z[1] +
616 z[1] * x[5] * y[6] - y[5] * x[1] * z[4] + z[6] * x[4] * y[7] +
617 x[5] * y[1] * z[4] - x[5] * y[6] * z[4] + y[6] * x[3] * z[7] -
619 s5 = s8 + x[5] * y[4] * z[6] + z[5] * x[1] * y[4] + y[1] * x[6] * z[5] -
620 z[6] * x[3] * y[7] + z[6] * x[7] * y[3] - z[5] * x[6] * y[4] -
621 z[5] * x[4] * y[1] + z[5] * x[4] * y[6] + x[1] * y[6] * z[2] +
622 x[2] * y[6] * z[3] + z[2] * x[6] * y[3] + z[1] * x[6] * y[2] +
623 z[2] * x[3] * y[1] - z[2] * x[1] * y[3] - z[2] * x[3] * y[6] +
624 y[2] * x[1] * z[3] + y[1] * x[2] * z[6] - z[0] * x[7] * y[3] + s7;
627 const double unknown0 = s1 * s2;
629 s8 = 2.0 * x[1] * y[0] * y[0] * z[4] + x[5] * y[0] * y[0] * z[4] -
630 x[1] * y[4] * y[4] * z[0] + z[1] * x[0] * y[4] * y[4] +
631 x[1] * y[0] * y[0] * z[5] - z[1] * x[5] * y[0] * y[0] -
632 2.0 * z[1] * x[4] * y[0] * y[0] + 2.0 * z[1] * x[3] * y[0] * y[0] +
633 z[2] * x[3] * y[0] * y[0] + y[0] * y[0] * x[7] * z[3] +
634 2.0 * y[0] * y[0] * x[4] * z[3] - 2.0 * x[1] * y[0] * y[0] * z[3] -
635 2.0 * x[5] * y[4] * y[4] * z[0] + 2.0 * z[5] * x[0] * y[4] * y[4] +
636 2.0 * y[4] * y[5] * x[7] * z[4];
637 s7 = s8 - x[3] * y[4] * y[4] * z[7] + x[7] * y[4] * y[4] * z[3] +
638 z[0] * x[3] * y[4] * y[4] - 2.0 * x[0] * y[4] * y[4] * z[7] -
639 y[1] * x[1] * y[4] * z[0] - x[0] * y[4] * y[4] * z[3] +
640 2.0 * z[0] * x[7] * y[4] * y[4] + y[4] * z[6] * x[4] * y[7] -
641 y[0] * y[0] * x[7] * z[4] + y[0] * y[0] * x[4] * z[7] +
642 2.0 * y[4] * z[5] * x[4] * y[7] - 2.0 * y[4] * x[5] * y[7] * z[4] -
643 y[4] * x[6] * y[7] * z[4] - y[4] * y[6] * x[4] * z[7] -
644 2.0 * y[4] * y[5] * x[4] * z[7];
645 s8 = y[4] * y[6] * x[7] * z[4] - y[7] * y[2] * x[7] * z[3] +
646 y[7] * z[2] * x[7] * y[3] + y[7] * y[2] * x[3] * z[7] +
647 2.0 * x[5] * y[4] * y[4] * z[7] - y[7] * x[2] * y[3] * z[7] -
648 y[0] * z[0] * x[4] * y[7] + z[6] * x[7] * y[3] * y[3] -
649 y[0] * x[0] * y[4] * z[7] + y[0] * x[0] * y[7] * z[4] -
650 2.0 * x[2] * y[3] * y[3] * z[7] - z[5] * x[4] * y[0] * y[0] +
651 y[0] * z[0] * x[7] * y[4] - 2.0 * z[6] * x[3] * y[7] * y[7] +
652 z[1] * x[2] * y[0] * y[0];
653 s6 = s8 + y[4] * y[0] * x[4] * z[3] - 2.0 * y[4] * z[0] * x[4] * y[7] +
654 2.0 * y[4] * x[0] * y[7] * z[4] - y[4] * z[0] * x[4] * y[3] -
655 y[4] * x[0] * y[7] * z[3] + y[4] * z[0] * x[3] * y[7] -
656 y[4] * y[0] * x[3] * z[4] + y[0] * x[4] * y[3] * z[7] -
657 y[0] * x[7] * y[3] * z[4] - y[0] * x[3] * y[4] * z[7] +
658 y[0] * x[7] * y[4] * z[3] + x[2] * y[7] * y[7] * z[3] -
659 z[2] * x[3] * y[7] * y[7] - 2.0 * z[2] * x[0] * y[3] * y[3] +
660 2.0 * y[0] * z[1] * x[0] * y[4] + s7;
661 s8 = -2.0 * y[0] * y[1] * x[0] * z[4] - y[0] * y[1] * x[0] * z[5] -
662 y[0] * y[0] * x[3] * z[7] - z[1] * x[0] * y[3] * y[3] -
663 y[0] * x[1] * y[5] * z[0] - 2.0 * z[0] * x[7] * y[3] * y[3] +
664 x[0] * y[3] * y[3] * z[4] + 2.0 * x[0] * y[3] * y[3] * z[7] -
665 z[0] * x[4] * y[3] * y[3] + 2.0 * x[2] * y[3] * y[3] * z[0] +
666 x[1] * y[3] * y[3] * z[0] + 2.0 * y[7] * z[6] * x[7] * y[3] +
667 2.0 * y[7] * y[6] * x[3] * z[7] - 2.0 * y[7] * y[6] * x[7] * z[3] -
668 2.0 * y[7] * x[6] * y[3] * z[7];
669 s7 = s8 + y[4] * x[4] * y[3] * z[7] - y[4] * x[4] * y[7] * z[3] +
670 y[4] * x[3] * y[7] * z[4] - y[4] * x[7] * y[3] * z[4] +
671 2.0 * y[4] * y[0] * x[4] * z[7] - 2.0 * y[4] * y[0] * x[7] * z[4] +
672 2.0 * x[6] * y[7] * y[7] * z[3] + y[4] * x[0] * y[3] * z[4] +
673 y[0] * y[1] * x[5] * z[0] + y[0] * z[1] * x[0] * y[5] -
674 x[2] * y[0] * y[0] * z[3] + x[4] * y[3] * y[3] * z[7] -
675 x[7] * y[3] * y[3] * z[4] - x[5] * y[4] * y[4] * z[1] +
676 y[3] * z[0] * x[3] * y[4];
677 s8 = y[3] * y[0] * x[4] * z[3] + 2.0 * y[3] * y[0] * x[7] * z[3] +
678 2.0 * y[3] * y[2] * x[0] * z[3] - 2.0 * y[3] * y[2] * x[3] * z[0] +
679 2.0 * y[3] * z[2] * x[3] * y[0] + y[3] * z[1] * x[3] * y[0] -
680 2.0 * y[3] * x[2] * y[0] * z[3] - y[3] * x[1] * y[0] * z[3] -
681 y[3] * y[1] * x[3] * z[0] - 2.0 * y[3] * x[0] * y[7] * z[3] -
682 y[3] * x[0] * y[4] * z[3] - 2.0 * y[3] * y[0] * x[3] * z[7] -
683 y[3] * y[0] * x[3] * z[4] + 2.0 * y[3] * z[0] * x[3] * y[7] +
684 y[3] * y[1] * x[0] * z[3] + z[5] * x[1] * y[4] * y[4];
685 s5 = s8 - 2.0 * y[0] * y[0] * x[3] * z[4] -
686 2.0 * y[0] * x[1] * y[4] * z[0] + y[3] * x[7] * y[4] * z[3] -
687 y[3] * x[4] * y[7] * z[3] + y[3] * x[3] * y[7] * z[4] -
688 y[3] * x[3] * y[4] * z[7] + y[3] * x[0] * y[7] * z[4] -
689 y[3] * z[0] * x[4] * y[7] - 2.0 * y[4] * y[5] * x[0] * z[4] + s6 +
690 y[7] * x[0] * y[3] * z[7] - y[7] * z[0] * x[7] * y[3] +
691 y[7] * y[0] * x[7] * z[3] - y[7] * y[0] * x[3] * z[7] +
692 2.0 * y[0] * y[1] * x[4] * z[0] + s7;
693 s8 = -2.0 * y[7] * x[7] * y[3] * z[4] - 2.0 * y[7] * x[3] * y[4] * z[7] +
694 2.0 * y[7] * x[4] * y[3] * z[7] + y[7] * y[0] * x[4] * z[7] -
695 y[7] * y[0] * x[7] * z[4] + 2.0 * y[7] * x[7] * y[4] * z[3] -
696 y[7] * x[0] * y[4] * z[7] + y[7] * z[0] * x[7] * y[4] +
697 z[5] * x[4] * y[7] * y[7] + 2.0 * z[6] * x[4] * y[7] * y[7] -
698 x[5] * y[7] * y[7] * z[4] - 2.0 * x[6] * y[7] * y[7] * z[4] +
699 2.0 * y[7] * x[6] * y[4] * z[7] - 2.0 * y[7] * z[6] * x[7] * y[4] +
700 2.0 * y[7] * y[6] * x[7] * z[4];
701 s7 = s8 - 2.0 * y[7] * y[6] * x[4] * z[7] - y[7] * z[5] * x[7] * y[4] -
702 y[7] * y[5] * x[4] * z[7] - x[0] * y[7] * y[7] * z[3] +
703 z[0] * x[3] * y[7] * y[7] + y[7] * x[5] * y[4] * z[7] +
704 y[7] * y[5] * x[7] * z[4] - y[4] * x[1] * y[5] * z[0] -
705 x[1] * y[0] * y[0] * z[2] - y[4] * y[5] * x[1] * z[4] -
706 2.0 * y[4] * z[5] * x[4] * y[0] - y[4] * y[1] * x[0] * z[4] +
707 y[4] * y[5] * x[4] * z[1] + y[0] * z[0] * x[3] * y[7] -
708 y[0] * z[1] * x[0] * y[2];
709 s8 = 2.0 * y[0] * x[1] * y[3] * z[0] + y[4] * y[1] * x[4] * z[0] +
710 2.0 * y[0] * y[1] * x[0] * z[3] + y[4] * x[1] * y[0] * z[5] -
711 y[4] * z[1] * x[5] * y[0] + y[4] * z[1] * x[0] * y[5] -
712 y[4] * z[1] * x[4] * y[0] + y[4] * x[1] * y[0] * z[4] -
713 y[4] * z[5] * x[4] * y[1] + x[5] * y[4] * y[4] * z[6] -
714 z[5] * x[6] * y[4] * y[4] + y[4] * x[5] * y[1] * z[4] -
715 y[0] * z[2] * x[0] * y[3] + y[0] * y[5] * x[4] * z[0] +
716 y[0] * x[1] * y[2] * z[0];
717 s6 = s8 - 2.0 * y[0] * z[0] * x[4] * y[3] -
718 2.0 * y[0] * x[0] * y[4] * z[3] - 2.0 * y[0] * z[1] * x[0] * y[3] -
719 y[0] * x[0] * y[7] * z[3] - 2.0 * y[0] * y[1] * x[3] * z[0] +
720 y[0] * x[2] * y[3] * z[0] - y[0] * y[1] * x[2] * z[0] +
721 y[0] * y[1] * x[0] * z[2] - y[0] * x[2] * y[1] * z[3] +
722 y[0] * x[0] * y[3] * z[7] + y[0] * x[2] * y[3] * z[1] -
723 y[0] * y[2] * x[3] * z[0] + y[0] * y[2] * x[0] * z[3] -
724 y[0] * y[5] * x[0] * z[4] - y[4] * y[5] * x[4] * z[6] + s7;
725 s8 = s6 + y[4] * z[6] * x[5] * y[7] - y[4] * x[6] * y[7] * z[5] +
726 y[4] * x[6] * y[5] * z[7] - y[4] * z[6] * x[7] * y[5] -
727 y[4] * x[5] * y[6] * z[4] + y[4] * z[5] * x[4] * y[6] +
728 y[4] * y[5] * x[6] * z[4] - 2.0 * y[1] * y[1] * x[0] * z[5] +
729 2.0 * y[1] * y[1] * x[5] * z[0] - 2.0 * y[2] * y[2] * x[6] * z[3] +
730 x[5] * y[1] * y[1] * z[4] - z[5] * x[4] * y[1] * y[1] -
731 x[6] * y[2] * y[2] * z[7] + z[6] * x[7] * y[2] * y[2];
732 s7 = s8 - x[1] * y[5] * y[5] * z[0] + z[1] * x[0] * y[5] * y[5] +
733 y[1] * y[5] * x[4] * z[1] - y[1] * y[5] * x[1] * z[4] -
734 2.0 * y[2] * z[2] * x[3] * y[6] + 2.0 * y[1] * z[1] * x[0] * y[5] -
735 2.0 * y[1] * z[1] * x[5] * y[0] + 2.0 * y[1] * x[1] * y[0] * z[5] -
736 y[2] * x[2] * y[3] * z[7] - y[2] * z[2] * x[3] * y[7] +
737 y[2] * x[2] * y[7] * z[3] + y[2] * z[2] * x[7] * y[3] -
738 2.0 * y[2] * x[2] * y[3] * z[6] + 2.0 * y[2] * x[2] * y[6] * z[3] +
739 2.0 * y[2] * z[2] * x[6] * y[3] - y[3] * y[2] * x[6] * z[3];
740 s8 = y[3] * y[2] * x[3] * z[6] + y[3] * x[2] * y[6] * z[3] -
741 y[3] * z[2] * x[3] * y[6] - y[2] * y[2] * x[7] * z[3] +
742 2.0 * y[2] * y[2] * x[3] * z[6] + y[2] * y[2] * x[3] * z[7] -
743 2.0 * y[1] * x[1] * y[5] * z[0] - x[2] * y[3] * y[3] * z[6] +
744 z[2] * x[6] * y[3] * y[3] + 2.0 * y[6] * x[2] * y[5] * z[6] +
745 2.0 * y[6] * x[6] * y[2] * z[5] - 2.0 * y[6] * x[5] * y[2] * z[6] +
746 2.0 * y[3] * x[2] * y[7] * z[3] - 2.0 * y[3] * z[2] * x[3] * y[7] -
747 y[0] * z[0] * x[7] * y[3] - y[0] * z[2] * x[1] * y[3];
748 s4 = s8 - y[2] * y[6] * x[7] * z[2] + y[0] * z[2] * x[3] * y[1] +
749 y[1] * z[5] * x[1] * y[4] - y[1] * x[5] * y[4] * z[1] +
750 2.0 * y[0] * z[0] * x[3] * y[4] + 2.0 * y[0] * x[0] * y[3] * z[4] +
751 2.0 * z[2] * x[7] * y[3] * y[3] - 2.0 * z[5] * x[7] * y[4] * y[4] +
752 x[6] * y[4] * y[4] * z[7] - z[6] * x[7] * y[4] * y[4] +
753 y[1] * y[1] * x[0] * z[3] + y[3] * x[6] * y[7] * z[2] -
754 y[3] * z[6] * x[2] * y[7] + 2.0 * y[3] * y[2] * x[3] * z[7] + s5 + s7;
755 s8 = s4 + y[2] * x[6] * y[7] * z[2] - y[2] * y[6] * x[7] * z[3] +
756 y[2] * y[6] * x[2] * z[7] - y[2] * z[6] * x[2] * y[7] -
757 y[2] * x[6] * y[3] * z[7] + y[2] * y[6] * x[3] * z[7] +
758 y[2] * z[6] * x[7] * y[3] - 2.0 * y[3] * y[2] * x[7] * z[3] -
759 x[6] * y[3] * y[3] * z[7] + y[1] * y[1] * x[4] * z[0] -
760 y[1] * y[1] * x[3] * z[0] + x[2] * y[6] * y[6] * z[3] -
761 z[2] * x[3] * y[6] * y[6] - y[1] * y[1] * x[0] * z[4];
762 s7 = s8 + y[5] * x[1] * y[0] * z[5] + y[6] * x[2] * y[7] * z[3] -
763 y[6] * y[2] * x[6] * z[3] + y[6] * y[2] * x[3] * z[6] -
764 y[6] * x[2] * y[3] * z[6] + y[6] * z[2] * x[6] * y[3] -
765 y[5] * y[1] * x[0] * z[5] - y[5] * z[1] * x[5] * y[0] +
766 y[5] * y[1] * x[5] * z[0] - y[6] * z[2] * x[3] * y[7] -
767 y[7] * y[6] * x[7] * z[2] + 2.0 * y[6] * y[6] * x[2] * z[7] +
768 y[6] * y[6] * x[3] * z[7] + x[6] * y[7] * y[7] * z[2] -
769 z[6] * x[2] * y[7] * y[7];
770 s8 = -x[2] * y[1] * y[1] * z[3] + 2.0 * y[1] * y[1] * x[0] * z[2] -
771 2.0 * y[1] * y[1] * x[2] * z[0] + z[2] * x[3] * y[1] * y[1] -
772 z[1] * x[0] * y[2] * y[2] + x[1] * y[2] * y[2] * z[0] +
773 y[2] * y[2] * x[0] * z[3] - y[2] * y[2] * x[3] * z[0] -
774 2.0 * y[2] * y[2] * x[3] * z[1] + y[1] * x[1] * y[3] * z[0] -
775 2.0 * y[6] * y[6] * x[7] * z[2] + 2.0 * y[5] * y[5] * x[4] * z[1] -
776 2.0 * y[5] * y[5] * x[1] * z[4] - y[6] * y[6] * x[7] * z[3] -
777 2.0 * y[1] * x[1] * y[0] * z[2];
778 s6 = s8 + 2.0 * y[1] * z[1] * x[2] * y[0] -
779 2.0 * y[1] * z[1] * x[0] * y[2] + 2.0 * y[1] * x[1] * y[2] * z[0] +
780 y[1] * x[2] * y[3] * z[1] - y[1] * y[2] * x[3] * z[1] -
781 y[1] * z[2] * x[1] * y[3] + y[1] * y[2] * x[1] * z[3] -
782 y[2] * x[1] * y[0] * z[2] + y[2] * z[1] * x[2] * y[0] +
783 y[2] * x[2] * y[3] * z[0] - y[7] * x[6] * y[2] * z[7] +
784 y[7] * z[6] * x[7] * y[2] + y[7] * y[6] * x[2] * z[7] -
785 y[6] * x[6] * y[3] * z[7] + y[6] * x[6] * y[7] * z[3] + s7;
786 s8 = s6 - y[6] * z[6] * x[3] * y[7] + y[6] * z[6] * x[7] * y[3] +
787 2.0 * y[2] * y[2] * x[1] * z[3] + x[2] * y[3] * y[3] * z[1] -
788 z[2] * x[1] * y[3] * y[3] + y[1] * x[1] * y[0] * z[4] +
789 y[1] * z[1] * x[3] * y[0] - y[1] * x[1] * y[0] * z[3] +
790 2.0 * y[5] * x[5] * y[1] * z[4] - 2.0 * y[5] * x[5] * y[4] * z[1] +
791 2.0 * y[5] * z[5] * x[1] * y[4] - 2.0 * y[5] * z[5] * x[4] * y[1] -
792 2.0 * y[6] * x[6] * y[2] * z[7] + 2.0 * y[6] * x[6] * y[7] * z[2];
793 s7 = s8 + 2.0 * y[6] * z[6] * x[7] * y[2] -
794 2.0 * y[6] * z[6] * x[2] * y[7] - y[1] * z[1] * x[4] * y[0] +
795 y[1] * z[1] * x[0] * y[4] - y[1] * z[1] * x[0] * y[3] +
796 2.0 * y[6] * y[6] * x[7] * z[5] + 2.0 * y[5] * y[5] * x[6] * z[4] -
797 2.0 * y[5] * y[5] * x[4] * z[6] + x[6] * y[5] * y[5] * z[7] -
798 y[3] * x[2] * y[1] * z[3] - y[3] * y[2] * x[3] * z[1] +
799 y[3] * z[2] * x[3] * y[1] + y[3] * y[2] * x[1] * z[3] -
800 y[2] * x[2] * y[0] * z[3] + y[2] * z[2] * x[3] * y[0];
801 s8 = s7 + 2.0 * y[2] * x[2] * y[3] * z[1] -
802 2.0 * y[2] * x[2] * y[1] * z[3] + y[2] * y[1] * x[0] * z[2] -
803 y[2] * y[1] * x[2] * z[0] + 2.0 * y[2] * z[2] * x[3] * y[1] -
804 2.0 * y[2] * z[2] * x[1] * y[3] - y[2] * z[2] * x[0] * y[3] +
805 y[5] * z[6] * x[5] * y[7] - y[5] * x[6] * y[7] * z[5] -
806 y[5] * y[6] * x[4] * z[7] - y[5] * y[6] * x[5] * z[7] -
807 2.0 * y[5] * x[5] * y[6] * z[4] + 2.0 * y[5] * x[5] * y[4] * z[6] -
808 2.0 * y[5] * z[5] * x[6] * y[4] + 2.0 * y[5] * z[5] * x[4] * y[6];
809 s5 = s8 - y[1] * y[5] * x[0] * z[4] - z[6] * x[7] * y[5] * y[5] +
810 y[6] * y[6] * x[7] * z[4] - y[6] * y[6] * x[4] * z[7] -
811 2.0 * y[6] * y[6] * x[5] * z[7] - x[5] * y[6] * y[6] * z[4] +
812 z[5] * x[4] * y[6] * y[6] + z[6] * x[5] * y[7] * y[7] -
813 x[6] * y[7] * y[7] * z[5] + y[1] * y[5] * x[4] * z[0] +
814 y[7] * y[6] * x[7] * z[5] + y[6] * y[5] * x[7] * z[4] +
815 y[5] * y[6] * x[7] * z[5] + y[6] * y[5] * x[6] * z[4] -
816 y[6] * y[5] * x[4] * z[6] + 2.0 * y[6] * z[6] * x[5] * y[7];
817 s8 = s5 - 2.0 * y[6] * x[6] * y[7] * z[5] +
818 2.0 * y[6] * x[6] * y[5] * z[7] - 2.0 * y[6] * z[6] * x[7] * y[5] -
819 y[6] * x[5] * y[7] * z[4] - y[6] * x[6] * y[7] * z[4] +
820 y[6] * x[6] * y[4] * z[7] - y[6] * z[6] * x[7] * y[4] +
821 y[6] * z[5] * x[4] * y[7] + y[6] * z[6] * x[4] * y[7] +
822 y[6] * x[5] * y[4] * z[6] - y[6] * z[5] * x[6] * y[4] +
823 y[7] * x[6] * y[5] * z[7] - y[7] * z[6] * x[7] * y[5] -
824 2.0 * y[6] * x[6] * y[5] * z[2];
825 s7 = s8 - y[7] * y[6] * x[5] * z[7] + 2.0 * y[4] * y[5] * x[4] * z[0] +
826 2.0 * x[3] * y[7] * y[7] * z[4] - 2.0 * x[4] * y[7] * y[7] * z[3] -
827 z[0] * x[4] * y[7] * y[7] + x[0] * y[7] * y[7] * z[4] -
828 y[0] * z[5] * x[4] * y[1] + y[0] * x[5] * y[1] * z[4] -
829 y[0] * x[5] * y[4] * z[0] + y[0] * z[5] * x[0] * y[4] -
830 y[5] * y[5] * x[0] * z[4] + y[5] * y[5] * x[4] * z[0] +
831 2.0 * y[1] * y[1] * x[2] * z[5] - 2.0 * y[1] * y[1] * x[5] * z[2] +
832 z[1] * x[5] * y[2] * y[2];
833 s8 = s7 - x[1] * y[2] * y[2] * z[5] - y[5] * z[5] * x[4] * y[0] +
834 y[5] * z[5] * x[0] * y[4] - y[5] * x[5] * y[4] * z[0] -
835 y[2] * x[1] * y[6] * z[5] - y[2] * y[1] * x[5] * z[6] +
836 y[2] * z[1] * x[5] * y[6] + y[2] * y[1] * x[6] * z[5] -
837 y[1] * z[1] * x[6] * y[5] - y[1] * x[1] * y[6] * z[5] +
838 y[1] * x[1] * y[5] * z[6] + y[1] * z[1] * x[5] * y[6] +
839 y[5] * x[5] * y[0] * z[4] + y[2] * y[1] * x[2] * z[5] -
840 y[2] * z[1] * x[2] * y[5];
841 s6 = s8 + y[2] * x[1] * y[5] * z[2] - y[2] * y[1] * x[5] * z[2] -
842 y[1] * y[1] * x[5] * z[6] + y[1] * y[1] * x[6] * z[5] -
843 z[1] * x[2] * y[5] * y[5] + x[1] * y[5] * y[5] * z[2] +
844 2.0 * y[1] * z[1] * x[5] * y[2] - 2.0 * y[1] * x[1] * y[2] * z[5] -
845 2.0 * y[1] * z[1] * x[2] * y[5] + 2.0 * y[1] * x[1] * y[5] * z[2] -
846 y[1] * y[1] * x[6] * z[2] + y[1] * y[1] * x[2] * z[6] -
847 2.0 * y[5] * x[1] * y[6] * z[5] - 2.0 * y[5] * y[1] * x[5] * z[6] +
848 2.0 * y[5] * z[1] * x[5] * y[6] + 2.0 * y[5] * y[1] * x[6] * z[5];
849 s8 = s6 - y[6] * z[1] * x[6] * y[5] - y[6] * y[1] * x[5] * z[6] +
850 y[6] * x[1] * y[5] * z[6] + y[6] * y[1] * x[6] * z[5] -
851 2.0 * z[1] * x[6] * y[5] * y[5] + 2.0 * x[1] * y[5] * y[5] * z[6] -
852 x[1] * y[6] * y[6] * z[5] + z[1] * x[5] * y[6] * y[6] +
853 y[5] * z[1] * x[5] * y[2] - y[5] * x[1] * y[2] * z[5] +
854 y[5] * y[1] * x[2] * z[5] - y[5] * y[1] * x[5] * z[2] -
855 y[6] * z[1] * x[2] * y[5] + y[6] * x[1] * y[5] * z[2];
856 s7 = s8 - y[1] * z[1] * x[2] * y[6] - y[1] * x[1] * y[2] * z[6] +
857 y[1] * x[1] * y[6] * z[2] + y[1] * z[1] * x[6] * y[2] +
858 y[5] * x[5] * y[6] * z[2] - y[5] * x[2] * y[6] * z[5] +
859 y[5] * x[6] * y[2] * z[5] - y[5] * x[5] * y[2] * z[6] -
860 x[6] * y[5] * y[5] * z[2] + x[2] * y[5] * y[5] * z[6] -
861 y[5] * y[5] * x[4] * z[7] + y[5] * y[5] * x[7] * z[4] -
862 y[1] * x[6] * y[5] * z[2] + y[1] * x[2] * y[5] * z[6] -
863 y[2] * x[6] * y[5] * z[2] - 2.0 * y[2] * y[1] * x[6] * z[2];
864 s8 = s7 - 2.0 * y[2] * z[1] * x[2] * y[6] +
865 2.0 * y[2] * x[1] * y[6] * z[2] + 2.0 * y[2] * y[1] * x[2] * z[6] -
866 2.0 * x[1] * y[2] * y[2] * z[6] + 2.0 * z[1] * x[6] * y[2] * y[2] +
867 x[6] * y[2] * y[2] * z[5] - x[5] * y[2] * y[2] * z[6] +
868 2.0 * x[5] * y[6] * y[6] * z[2] - 2.0 * x[2] * y[6] * y[6] * z[5] -
869 z[1] * x[2] * y[6] * y[6] - y[6] * y[1] * x[6] * z[2] -
870 y[6] * x[1] * y[2] * z[6] + y[6] * z[1] * x[6] * y[2] +
871 y[6] * y[1] * x[2] * z[6] + x[1] * y[6] * y[6] * z[2];
872 s3 = s8 + y[2] * x[5] * y[6] * z[2] + y[2] * x[2] * y[5] * z[6] -
873 y[2] * x[2] * y[6] * z[5] + y[5] * z[5] * x[4] * y[7] +
874 y[5] * x[5] * y[4] * z[7] - y[5] * z[5] * x[7] * y[4] -
875 y[5] * x[5] * y[7] * z[4] + 2.0 * y[4] * x[5] * y[0] * z[4] -
876 y[3] * z[6] * x[3] * y[7] + y[3] * y[6] * x[3] * z[7] +
877 y[3] * x[6] * y[7] * z[3] - y[3] * y[6] * x[7] * z[3] -
878 y[2] * y[1] * x[3] * z[0] - y[2] * z[1] * x[0] * y[3] +
879 y[2] * y[1] * x[0] * z[3] + y[2] * x[1] * y[3] * z[0];
880 s8 = y[1] * x[0] * z[3] + x[1] * y[3] * z[0] - y[0] * x[3] * z[7] -
881 x[1] * y[5] * z[0] - y[0] * x[3] * z[4] - x[1] * y[0] * z[2] +
882 z[1] * x[2] * y[0] - y[1] * x[0] * z[5] - z[1] * x[0] * y[2] -
883 y[1] * x[0] * z[4] + z[1] * x[5] * y[2] + z[0] * x[7] * y[4] +
884 z[0] * x[3] * y[7] + z[1] * x[0] * y[4] - x[1] * y[2] * z[5] +
885 x[2] * y[3] * z[0] + y[1] * x[2] * z[5] - x[2] * y[3] * z[7];
886 s7 = s8 - z[1] * x[2] * y[5] - y[1] * x[3] * z[0] - x[0] * y[7] * z[3] -
887 z[1] * x[0] * y[3] + y[5] * x[4] * z[0] - x[0] * y[4] * z[3] +
888 y[5] * x[7] * z[4] - z[0] * x[4] * y[3] + x[1] * y[0] * z[4] -
889 z[2] * x[3] * y[7] - y[6] * x[7] * z[2] + x[1] * y[5] * z[2] +
890 y[6] * x[7] * z[5] + x[0] * y[7] * z[4] + x[1] * y[2] * z[0] -
891 z[1] * x[4] * y[0] - z[0] * x[4] * y[7] - z[2] * x[0] * y[3];
892 s8 = x[5] * y[0] * z[4] + z[1] * x[0] * y[5] - x[2] * y[0] * z[3] -
893 z[1] * x[5] * y[0] + y[1] * x[5] * z[0] - x[1] * y[0] * z[3] -
894 x[1] * y[4] * z[0] - y[1] * x[5] * z[2] + x[2] * y[7] * z[3] +
895 y[0] * x[4] * z[3] - x[0] * y[4] * z[7] + x[1] * y[0] * z[5] -
896 y[1] * x[6] * z[2] - y[2] * x[6] * z[3] + y[0] * x[7] * z[3] -
897 y[2] * x[7] * z[3] + z[2] * x[7] * y[3] + y[2] * x[0] * z[3];
898 s6 = s8 + y[2] * x[3] * z[7] - y[2] * x[3] * z[0] - x[6] * y[5] * z[2] -
899 y[5] * x[0] * z[4] + z[2] * x[3] * y[0] + x[2] * y[3] * z[1] +
900 x[0] * y[3] * z[7] - x[2] * y[1] * z[3] + y[1] * x[4] * z[0] +
901 y[1] * x[0] * z[2] - z[1] * x[2] * y[6] + y[2] * x[3] * z[6] -
902 y[1] * x[2] * z[0] + z[1] * x[3] * y[0] - x[1] * y[2] * z[6] -
903 x[2] * y[3] * z[6] + x[0] * y[3] * z[4] + z[0] * x[3] * y[4] + s7;
904 s8 = x[5] * y[4] * z[7] + s6 + y[5] * x[6] * z[4] - y[5] * x[4] * z[6] +
905 z[6] * x[5] * y[7] - x[6] * y[2] * z[7] - x[6] * y[7] * z[5] +
906 x[5] * y[6] * z[2] + x[6] * y[5] * z[7] + x[6] * y[7] * z[2] +
907 y[6] * x[7] * z[4] - y[6] * x[4] * z[7] - y[6] * x[7] * z[3] +
908 z[6] * x[7] * y[2] + x[2] * y[5] * z[6] - x[2] * y[6] * z[5] +
909 y[6] * x[2] * z[7] + x[6] * y[2] * z[5];
910 s7 = s8 - x[5] * y[2] * z[6] - z[6] * x[7] * y[5] - z[5] * x[7] * y[4] +
911 z[5] * x[0] * y[4] - y[5] * x[4] * z[7] + y[0] * x[4] * z[7] -
912 z[6] * x[2] * y[7] - x[5] * y[4] * z[0] - x[5] * y[7] * z[4] -
913 y[0] * x[7] * z[4] + y[5] * x[4] * z[1] - x[6] * y[7] * z[4] +
914 x[7] * y[4] * z[3] - x[4] * y[7] * z[3] + x[3] * y[7] * z[4] -
915 x[7] * y[3] * z[4] - x[6] * y[3] * z[7] + x[6] * y[4] * z[7];
916 s8 = -x[3] * y[4] * z[7] + x[4] * y[3] * z[7] - z[6] * x[7] * y[4] -
917 z[1] * x[6] * y[5] + x[6] * y[7] * z[3] - x[1] * y[6] * z[5] -
918 y[1] * x[5] * z[6] + z[5] * x[4] * y[7] - z[5] * x[4] * y[0] +
919 x[1] * y[5] * z[6] - y[6] * x[5] * z[7] - y[2] * x[3] * z[1] +
920 z[1] * x[5] * y[6] - y[5] * x[1] * z[4] + z[6] * x[4] * y[7] +
921 x[5] * y[1] * z[4] - x[5] * y[6] * z[4] + y[6] * x[3] * z[7] -
923 s5 = s8 + x[5] * y[4] * z[6] + z[5] * x[1] * y[4] + y[1] * x[6] * z[5] -
924 z[6] * x[3] * y[7] + z[6] * x[7] * y[3] - z[5] * x[6] * y[4] -
925 z[5] * x[4] * y[1] + z[5] * x[4] * y[6] + x[1] * y[6] * z[2] +
926 x[2] * y[6] * z[3] + z[2] * x[6] * y[3] + z[1] * x[6] * y[2] +
927 z[2] * x[3] * y[1] - z[2] * x[1] * y[3] - z[2] * x[3] * y[6] +
928 y[2] * x[1] * z[3] + y[1] * x[2] * z[6] - z[0] * x[7] * y[3] + s7;
931 const double unknown1 = s1 * s2;
933 s8 = -z[2] * x[1] * y[2] * z[5] + z[2] * y[1] * x[2] * z[5] -
934 z[2] * z[1] * x[2] * y[5] + z[2] * z[1] * x[5] * y[2] +
935 2.0 * y[5] * x[7] * z[4] * z[4] - y[1] * x[2] * z[0] * z[0] +
936 x[0] * y[3] * z[7] * z[7] - 2.0 * z[5] * z[5] * x[4] * y[1] +
937 2.0 * z[5] * z[5] * x[1] * y[4] + z[5] * z[5] * x[0] * y[4] -
938 2.0 * z[2] * z[2] * x[1] * y[3] + 2.0 * z[2] * z[2] * x[3] * y[1] -
939 x[0] * y[4] * z[7] * z[7] - y[0] * x[3] * z[7] * z[7] +
940 x[1] * y[0] * z[5] * z[5];
941 s7 = s8 - y[1] * x[0] * z[5] * z[5] + z[1] * y[1] * x[2] * z[6] +
942 y[1] * x[0] * z[2] * z[2] + z[2] * z[2] * x[3] * y[0] -
943 z[2] * z[2] * x[0] * y[3] - x[1] * y[0] * z[2] * z[2] +
944 2.0 * z[5] * z[5] * x[4] * y[6] - 2.0 * z[5] * z[5] * x[6] * y[4] -
945 z[5] * z[5] * x[7] * y[4] - x[6] * y[7] * z[5] * z[5] +
946 2.0 * z[2] * y[1] * x[2] * z[6] - 2.0 * z[2] * x[1] * y[2] * z[6] +
947 2.0 * z[2] * z[1] * x[6] * y[2] - y[6] * x[5] * z[7] * z[7] +
948 2.0 * x[6] * y[4] * z[7] * z[7];
949 s8 = -2.0 * y[6] * x[4] * z[7] * z[7] + x[6] * y[5] * z[7] * z[7] -
950 2.0 * z[2] * z[1] * x[2] * y[6] + z[4] * y[6] * x[7] * z[5] +
951 x[5] * y[4] * z[6] * z[6] + z[6] * z[6] * x[4] * y[7] -
952 z[6] * z[6] * x[7] * y[4] - 2.0 * z[6] * z[6] * x[7] * y[5] +
953 2.0 * z[6] * z[6] * x[5] * y[7] - y[5] * x[4] * z[6] * z[6] +
954 2.0 * z[0] * z[0] * x[3] * y[4] - x[6] * y[5] * z[2] * z[2] +
955 z[1] * z[1] * x[5] * y[6] - z[1] * z[1] * x[6] * y[5] -
956 z[5] * z[5] * x[4] * y[0];
957 s6 = s8 + 2.0 * x[1] * y[3] * z[0] * z[0] +
958 2.0 * x[1] * y[6] * z[2] * z[2] - 2.0 * y[1] * x[6] * z[2] * z[2] -
959 y[1] * x[5] * z[2] * z[2] - z[1] * z[1] * x[2] * y[6] -
960 2.0 * z[1] * z[1] * x[2] * y[5] + 2.0 * z[1] * z[1] * x[5] * y[2] +
961 z[1] * y[1] * x[6] * z[5] + y[1] * x[2] * z[5] * z[5] +
962 z[2] * z[1] * x[2] * y[0] + z[1] * x[1] * y[5] * z[6] -
963 z[1] * x[1] * y[6] * z[5] - z[1] * y[1] * x[5] * z[6] -
964 z[1] * x[2] * y[6] * z[5] + z[1] * x[6] * y[2] * z[5] + s7;
965 s8 = -x[1] * y[2] * z[5] * z[5] + z[1] * x[5] * y[6] * z[2] -
966 2.0 * z[2] * z[2] * x[3] * y[6] + 2.0 * z[2] * z[2] * x[6] * y[3] +
967 z[2] * z[2] * x[7] * y[3] - z[2] * z[2] * x[3] * y[7] -
968 z[1] * x[6] * y[5] * z[2] + 2.0 * z[1] * x[1] * y[5] * z[2] -
969 2.0 * x[3] * y[4] * z[7] * z[7] + 2.0 * x[4] * y[3] * z[7] * z[7] +
970 x[5] * y[6] * z[2] * z[2] + y[1] * x[2] * z[6] * z[6] +
971 y[0] * x[4] * z[7] * z[7] + z[2] * x[2] * y[3] * z[0] -
972 x[1] * y[2] * z[6] * z[6];
973 s7 = s8 - z[7] * z[2] * x[3] * y[7] + x[2] * y[6] * z[3] * z[3] -
974 y[2] * x[6] * z[3] * z[3] - z[6] * x[2] * y[3] * z[7] -
975 z[2] * z[1] * x[0] * y[2] + z[6] * z[2] * x[6] * y[3] -
976 z[6] * z[2] * x[3] * y[6] + z[6] * x[2] * y[6] * z[3] +
977 z[2] * x[1] * y[2] * z[0] + z[6] * y[2] * x[3] * z[7] -
978 z[4] * z[5] * x[6] * y[4] + z[4] * z[5] * x[4] * y[6] -
979 z[4] * y[6] * x[5] * z[7] + z[4] * z[6] * x[4] * y[7] +
980 z[4] * x[5] * y[4] * z[6];
981 s8 = -z[6] * y[2] * x[6] * z[3] - z[4] * y[5] * x[4] * z[6] -
982 z[2] * y[1] * x[5] * z[6] + z[2] * x[1] * y[5] * z[6] +
983 z[4] * x[6] * y[4] * z[7] + 2.0 * z[4] * z[5] * x[4] * y[7] -
984 z[4] * z[6] * x[7] * y[4] + x[6] * y[7] * z[3] * z[3] -
985 2.0 * z[4] * z[5] * x[7] * y[4] - 2.0 * z[4] * y[5] * x[4] * z[7] -
986 z[4] * y[6] * x[4] * z[7] + z[4] * x[6] * y[5] * z[7] -
987 z[4] * x[6] * y[7] * z[5] + 2.0 * z[4] * x[5] * y[4] * z[7] +
988 z[2] * x[2] * y[5] * z[6] - z[2] * x[2] * y[6] * z[5];
989 s5 = s8 + z[2] * x[6] * y[2] * z[5] - z[2] * x[5] * y[2] * z[6] -
990 z[2] * x[2] * y[3] * z[7] - x[2] * y[3] * z[7] * z[7] +
991 2.0 * z[2] * x[2] * y[3] * z[1] - z[2] * y[2] * x[3] * z[0] +
992 z[2] * y[2] * x[0] * z[3] - z[2] * x[2] * y[0] * z[3] -
993 z[7] * y[2] * x[7] * z[3] + z[7] * z[2] * x[7] * y[3] +
994 z[7] * x[2] * y[7] * z[3] + z[6] * y[1] * x[2] * z[5] -
995 z[6] * x[1] * y[2] * z[5] + z[5] * x[1] * y[5] * z[2] + s6 + s7;
996 s8 = z[5] * z[1] * x[5] * y[2] - z[5] * z[1] * x[2] * y[5] -
997 y[6] * x[7] * z[2] * z[2] + 2.0 * z[2] * x[2] * y[6] * z[3] -
998 2.0 * z[2] * x[2] * y[3] * z[6] + 2.0 * z[2] * y[2] * x[3] * z[6] +
999 y[2] * x[3] * z[6] * z[6] + y[6] * x[7] * z[5] * z[5] +
1000 z[2] * y[2] * x[3] * z[7] - z[2] * y[2] * x[7] * z[3] -
1001 2.0 * z[2] * y[2] * x[6] * z[3] + z[2] * x[2] * y[7] * z[3] +
1002 x[6] * y[2] * z[5] * z[5] - 2.0 * z[2] * x[2] * y[1] * z[3] -
1003 x[2] * y[6] * z[5] * z[5];
1004 s7 = s8 - y[1] * x[5] * z[6] * z[6] + z[6] * x[1] * y[6] * z[2] -
1005 z[3] * z[2] * x[3] * y[6] + z[6] * z[1] * x[6] * y[2] -
1006 z[6] * z[1] * x[2] * y[6] - z[6] * y[1] * x[6] * z[2] -
1007 2.0 * x[5] * y[2] * z[6] * z[6] + z[4] * z[1] * x[0] * y[4] -
1008 z[3] * x[2] * y[3] * z[6] - z[5] * y[1] * x[5] * z[2] +
1009 z[3] * y[2] * x[3] * z[6] + 2.0 * x[2] * y[5] * z[6] * z[6] -
1010 z[5] * x[1] * y[5] * z[0] + y[2] * x[3] * z[7] * z[7] -
1011 x[2] * y[3] * z[6] * z[6];
1012 s8 = z[5] * y[5] * x[4] * z[0] + z[3] * z[2] * x[6] * y[3] +
1013 x[1] * y[5] * z[6] * z[6] + z[5] * y[5] * x[7] * z[4] -
1014 z[1] * x[1] * y[2] * z[6] + z[1] * x[1] * y[6] * z[2] +
1015 2.0 * z[6] * y[6] * x[7] * z[5] - z[7] * y[6] * x[7] * z[2] -
1016 z[3] * y[6] * x[7] * z[2] + x[6] * y[7] * z[2] * z[2] -
1017 2.0 * z[6] * y[6] * x[7] * z[2] - 2.0 * x[6] * y[3] * z[7] * z[7] -
1018 x[6] * y[2] * z[7] * z[7] - z[5] * x[6] * y[5] * z[2] +
1019 y[6] * x[2] * z[7] * z[7];
1020 s6 = s8 + 2.0 * y[6] * x[3] * z[7] * z[7] + z[6] * z[6] * x[7] * y[3] -
1021 y[6] * x[7] * z[3] * z[3] + z[5] * x[5] * y[0] * z[4] +
1022 2.0 * z[6] * z[6] * x[7] * y[2] - 2.0 * z[6] * z[6] * x[2] * y[7] -
1023 z[6] * z[6] * x[3] * y[7] + z[7] * y[6] * x[7] * z[5] +
1024 z[7] * y[5] * x[7] * z[4] - 2.0 * z[7] * x[7] * y[3] * z[4] +
1025 2.0 * z[7] * x[3] * y[7] * z[4] - 2.0 * z[7] * x[4] * y[7] * z[3] +
1026 2.0 * z[7] * x[7] * y[4] * z[3] - z[7] * y[0] * x[7] * z[4] -
1027 2.0 * z[7] * z[6] * x[3] * y[7] + s7;
1028 s8 = s6 + 2.0 * z[7] * z[6] * x[7] * y[3] +
1029 2.0 * z[7] * x[6] * y[7] * z[3] + z[7] * x[6] * y[7] * z[2] -
1030 2.0 * z[7] * y[6] * x[7] * z[3] + z[7] * z[6] * x[7] * y[2] -
1031 z[7] * z[6] * x[2] * y[7] + z[5] * y[1] * x[5] * z[0] -
1032 z[5] * z[1] * x[5] * y[0] + 2.0 * y[1] * x[6] * z[5] * z[5] -
1033 2.0 * x[1] * y[6] * z[5] * z[5] + z[5] * z[1] * x[0] * y[5] +
1034 z[6] * y[6] * x[3] * z[7] + 2.0 * z[6] * x[6] * y[7] * z[2] -
1035 z[6] * y[6] * x[7] * z[3];
1036 s7 = s8 + 2.0 * z[6] * y[6] * x[2] * z[7] - z[6] * x[6] * y[3] * z[7] +
1037 z[6] * x[6] * y[7] * z[3] - 2.0 * z[6] * x[6] * y[2] * z[7] -
1038 2.0 * z[1] * y[1] * x[5] * z[2] - z[1] * y[1] * x[6] * z[2] -
1039 z[7] * z[0] * x[7] * y[3] - 2.0 * z[6] * x[6] * y[5] * z[2] -
1040 z[2] * z[6] * x[3] * y[7] + z[2] * x[6] * y[7] * z[3] -
1041 z[2] * z[6] * x[2] * y[7] + y[5] * x[6] * z[4] * z[4] +
1042 z[2] * y[6] * x[2] * z[7] + y[6] * x[7] * z[4] * z[4] +
1043 z[2] * z[6] * x[7] * y[2] - 2.0 * x[5] * y[7] * z[4] * z[4];
1044 s8 = -x[6] * y[7] * z[4] * z[4] - z[5] * y[5] * x[0] * z[4] -
1045 z[2] * x[6] * y[2] * z[7] - x[5] * y[6] * z[4] * z[4] -
1046 2.0 * z[5] * y[1] * x[5] * z[6] + 2.0 * z[5] * z[1] * x[5] * y[6] +
1047 2.0 * z[5] * x[1] * y[5] * z[6] - 2.0 * z[5] * z[1] * x[6] * y[5] -
1048 z[5] * x[5] * y[2] * z[6] + z[5] * x[5] * y[6] * z[2] +
1049 z[5] * x[2] * y[5] * z[6] + z[5] * z[5] * x[4] * y[7] -
1050 y[5] * x[4] * z[7] * z[7] + x[5] * y[4] * z[7] * z[7] +
1051 z[6] * z[1] * x[5] * y[6] + z[6] * y[1] * x[6] * z[5];
1052 s4 = s8 - z[6] * z[1] * x[6] * y[5] - z[6] * x[1] * y[6] * z[5] +
1053 z[2] * z[6] * x[7] * y[3] + 2.0 * z[6] * x[6] * y[2] * z[5] +
1054 2.0 * z[6] * x[5] * y[6] * z[2] - 2.0 * z[6] * x[2] * y[6] * z[5] +
1055 z[7] * z[0] * x[3] * y[7] + z[7] * z[0] * x[7] * y[4] +
1056 z[3] * z[6] * x[7] * y[3] - z[3] * z[6] * x[3] * y[7] -
1057 z[3] * x[6] * y[3] * z[7] + z[3] * y[6] * x[2] * z[7] -
1058 z[3] * x[6] * y[2] * z[7] + z[5] * x[5] * y[4] * z[7] + s5 + s7;
1059 s8 = s4 + z[3] * y[6] * x[3] * z[7] - z[7] * x[0] * y[7] * z[3] +
1060 z[6] * x[5] * y[4] * z[7] + z[7] * y[0] * x[7] * z[3] +
1061 z[5] * z[6] * x[4] * y[7] - 2.0 * z[5] * x[5] * y[6] * z[4] +
1062 2.0 * z[5] * x[5] * y[4] * z[6] - z[5] * x[5] * y[7] * z[4] -
1063 z[5] * y[6] * x[5] * z[7] - z[5] * z[6] * x[7] * y[4] -
1064 z[7] * z[0] * x[4] * y[7] - z[5] * z[6] * x[7] * y[5] -
1065 z[5] * y[5] * x[4] * z[7] + z[7] * x[0] * y[7] * z[4];
1066 s7 = s8 - 2.0 * z[5] * y[5] * x[4] * z[6] + z[5] * z[6] * x[5] * y[7] +
1067 z[5] * x[6] * y[5] * z[7] + 2.0 * z[5] * y[5] * x[6] * z[4] +
1068 z[6] * z[5] * x[4] * y[6] - z[6] * x[5] * y[6] * z[4] -
1069 z[6] * z[5] * x[6] * y[4] - z[6] * x[6] * y[7] * z[4] -
1070 2.0 * z[6] * y[6] * x[5] * z[7] + z[6] * x[6] * y[4] * z[7] -
1071 z[6] * y[5] * x[4] * z[7] - z[6] * y[6] * x[4] * z[7] +
1072 z[6] * y[6] * x[7] * z[4] + z[6] * y[5] * x[6] * z[4] +
1073 2.0 * z[6] * x[6] * y[5] * z[7];
1074 s8 = -2.0 * z[6] * x[6] * y[7] * z[5] - z[2] * y[1] * x[2] * z[0] +
1075 2.0 * z[7] * z[6] * x[4] * y[7] - 2.0 * z[7] * x[6] * y[7] * z[4] -
1076 2.0 * z[7] * z[6] * x[7] * y[4] + z[7] * z[5] * x[4] * y[7] -
1077 z[7] * z[5] * x[7] * y[4] - z[7] * x[5] * y[7] * z[4] +
1078 2.0 * z[7] * y[6] * x[7] * z[4] - z[7] * z[6] * x[7] * y[5] +
1079 z[7] * z[6] * x[5] * y[7] - z[7] * x[6] * y[7] * z[5] +
1080 z[1] * z[1] * x[6] * y[2] + s7 + x[1] * y[5] * z[2] * z[2];
1081 s6 = s8 + 2.0 * z[2] * y[2] * x[1] * z[3] -
1082 2.0 * z[2] * y[2] * x[3] * z[1] - 2.0 * x[1] * y[4] * z[0] * z[0] +
1083 2.0 * y[1] * x[4] * z[0] * z[0] + 2.0 * x[2] * y[7] * z[3] * z[3] -
1084 2.0 * y[2] * x[7] * z[3] * z[3] - x[1] * y[5] * z[0] * z[0] +
1085 z[0] * z[0] * x[7] * y[4] + z[0] * z[0] * x[3] * y[7] +
1086 x[2] * y[3] * z[0] * z[0] - 2.0 * y[1] * x[3] * z[0] * z[0] +
1087 y[5] * x[4] * z[0] * z[0] - 2.0 * z[0] * z[0] * x[4] * y[3] +
1088 x[1] * y[2] * z[0] * z[0] - z[0] * z[0] * x[4] * y[7] +
1089 y[1] * x[5] * z[0] * z[0];
1090 s8 = s6 - y[2] * x[3] * z[0] * z[0] + y[1] * x[0] * z[3] * z[3] -
1091 2.0 * x[0] * y[7] * z[3] * z[3] - x[0] * y[4] * z[3] * z[3] -
1092 2.0 * x[2] * y[0] * z[3] * z[3] - x[1] * y[0] * z[3] * z[3] +
1093 y[0] * x[4] * z[3] * z[3] - 2.0 * z[0] * y[1] * x[0] * z[4] +
1094 2.0 * z[0] * z[1] * x[0] * y[4] + 2.0 * z[0] * x[1] * y[0] * z[4] -
1095 2.0 * z[0] * z[1] * x[4] * y[0] - 2.0 * z[3] * x[2] * y[3] * z[7] -
1096 2.0 * z[3] * z[2] * x[3] * y[7] + 2.0 * z[3] * z[2] * x[7] * y[3];
1097 s7 = s8 + 2.0 * z[3] * y[2] * x[3] * z[7] +
1098 2.0 * z[5] * y[5] * x[4] * z[1] + 2.0 * z[0] * y[1] * x[0] * z[3] -
1099 z[0] * y[0] * x[3] * z[7] - 2.0 * z[0] * y[0] * x[3] * z[4] -
1100 z[0] * x[1] * y[0] * z[2] + z[0] * z[1] * x[2] * y[0] -
1101 z[0] * y[1] * x[0] * z[5] - z[0] * z[1] * x[0] * y[2] -
1102 z[0] * x[0] * y[7] * z[3] - 2.0 * z[0] * z[1] * x[0] * y[3] -
1103 z[5] * x[5] * y[4] * z[0] - 2.0 * z[0] * x[0] * y[4] * z[3] +
1104 z[0] * x[0] * y[7] * z[4] - z[0] * z[2] * x[0] * y[3];
1105 s8 = s7 + z[0] * x[5] * y[0] * z[4] + z[0] * z[1] * x[0] * y[5] -
1106 z[0] * x[2] * y[0] * z[3] - z[0] * z[1] * x[5] * y[0] -
1107 2.0 * z[0] * x[1] * y[0] * z[3] + 2.0 * z[0] * y[0] * x[4] * z[3] -
1108 z[0] * x[0] * y[4] * z[7] + z[0] * x[1] * y[0] * z[5] +
1109 z[0] * y[0] * x[7] * z[3] + z[0] * y[2] * x[0] * z[3] -
1110 z[0] * y[5] * x[0] * z[4] + z[0] * z[2] * x[3] * y[0] +
1111 z[0] * x[2] * y[3] * z[1] + z[0] * x[0] * y[3] * z[7] -
1112 z[0] * x[2] * y[1] * z[3];
1113 s5 = s8 + z[0] * y[1] * x[0] * z[2] + z[3] * x[1] * y[3] * z[0] -
1114 2.0 * z[3] * y[0] * x[3] * z[7] - z[3] * y[0] * x[3] * z[4] -
1115 z[3] * x[1] * y[0] * z[2] + z[3] * z[0] * x[7] * y[4] +
1116 2.0 * z[3] * z[0] * x[3] * y[7] + 2.0 * z[3] * x[2] * y[3] * z[0] -
1117 z[3] * y[1] * x[3] * z[0] - z[3] * z[1] * x[0] * y[3] -
1118 z[3] * z[0] * x[4] * y[3] + z[3] * x[1] * y[2] * z[0] -
1119 z[3] * z[0] * x[4] * y[7] - 2.0 * z[3] * z[2] * x[0] * y[3] -
1120 z[3] * x[0] * y[4] * z[7] - 2.0 * z[3] * y[2] * x[3] * z[0];
1121 s8 = s5 + 2.0 * z[3] * z[2] * x[3] * y[0] + z[3] * x[2] * y[3] * z[1] +
1122 2.0 * z[3] * x[0] * y[3] * z[7] + z[3] * y[1] * x[0] * z[2] -
1123 z[4] * y[0] * x[3] * z[7] - z[4] * x[1] * y[5] * z[0] -
1124 z[4] * y[1] * x[0] * z[5] + 2.0 * z[4] * z[0] * x[7] * y[4] +
1125 z[4] * z[0] * x[3] * y[7] + 2.0 * z[4] * y[5] * x[4] * z[0] +
1126 2.0 * y[0] * x[7] * z[3] * z[3] + 2.0 * y[2] * x[0] * z[3] * z[3] -
1127 x[2] * y[1] * z[3] * z[3] - y[0] * x[3] * z[4] * z[4];
1128 s7 = s8 - y[1] * x[0] * z[4] * z[4] + x[1] * y[0] * z[4] * z[4] +
1129 2.0 * x[0] * y[7] * z[4] * z[4] + 2.0 * x[5] * y[0] * z[4] * z[4] -
1130 2.0 * y[5] * x[0] * z[4] * z[4] + 2.0 * z[1] * z[1] * x[2] * y[0] -
1131 2.0 * z[1] * z[1] * x[0] * y[2] + z[1] * z[1] * x[0] * y[4] -
1132 z[1] * z[1] * x[0] * y[3] - z[1] * z[1] * x[4] * y[0] +
1133 2.0 * z[1] * z[1] * x[0] * y[5] - 2.0 * z[1] * z[1] * x[5] * y[0] +
1134 x[2] * y[3] * z[1] * z[1] - x[5] * y[4] * z[0] * z[0] -
1135 z[0] * z[0] * x[7] * y[3];
1136 s8 = s7 + x[7] * y[4] * z[3] * z[3] - x[4] * y[7] * z[3] * z[3] +
1137 y[2] * x[1] * z[3] * z[3] + x[0] * y[3] * z[4] * z[4] -
1138 2.0 * y[0] * x[7] * z[4] * z[4] + x[3] * y[7] * z[4] * z[4] -
1139 x[7] * y[3] * z[4] * z[4] - y[5] * x[1] * z[4] * z[4] +
1140 x[5] * y[1] * z[4] * z[4] + z[1] * z[1] * x[3] * y[0] +
1141 y[5] * x[4] * z[1] * z[1] - y[2] * x[3] * z[1] * z[1] -
1142 x[5] * y[4] * z[1] * z[1] - z[4] * x[0] * y[4] * z[3] -
1143 z[4] * z[0] * x[4] * y[3];
1144 s6 = s8 - z[4] * z[1] * x[4] * y[0] - 2.0 * z[4] * z[0] * x[4] * y[7] +
1145 z[4] * y[1] * x[5] * z[0] - 2.0 * z[5] * x[5] * y[4] * z[1] -
1146 z[4] * x[1] * y[4] * z[0] + z[4] * y[0] * x[4] * z[3] -
1147 2.0 * z[4] * x[0] * y[4] * z[7] + z[4] * x[1] * y[0] * z[5] -
1148 2.0 * z[1] * x[1] * y[2] * z[5] + z[4] * x[0] * y[3] * z[7] +
1149 2.0 * z[5] * x[5] * y[1] * z[4] + z[4] * y[1] * x[4] * z[0] +
1150 z[1] * y[1] * x[0] * z[3] + z[1] * x[1] * y[3] * z[0] -
1151 2.0 * z[1] * x[1] * y[5] * z[0] - 2.0 * z[1] * x[1] * y[0] * z[2];
1152 s8 = s6 - 2.0 * z[1] * y[1] * x[0] * z[5] - z[1] * y[1] * x[0] * z[4] +
1153 2.0 * z[1] * y[1] * x[2] * z[5] - z[1] * y[1] * x[3] * z[0] -
1154 2.0 * z[5] * y[5] * x[1] * z[4] + z[1] * y[5] * x[4] * z[0] +
1155 z[1] * x[1] * y[0] * z[4] + 2.0 * z[1] * x[1] * y[2] * z[0] -
1156 z[1] * z[2] * x[0] * y[3] + 2.0 * z[1] * y[1] * x[5] * z[0] -
1157 z[1] * x[1] * y[0] * z[3] - z[1] * x[1] * y[4] * z[0] +
1158 2.0 * z[1] * x[1] * y[0] * z[5] - z[1] * y[2] * x[3] * z[0];
1159 s7 = s8 + z[1] * z[2] * x[3] * y[0] - z[1] * x[2] * y[1] * z[3] +
1160 z[1] * y[1] * x[4] * z[0] + 2.0 * z[1] * y[1] * x[0] * z[2] +
1161 2.0 * z[0] * z[1] * x[3] * y[0] + 2.0 * z[0] * x[0] * y[3] * z[4] +
1162 z[0] * z[5] * x[0] * y[4] + z[0] * y[0] * x[4] * z[7] -
1163 z[0] * y[0] * x[7] * z[4] - z[0] * x[7] * y[3] * z[4] -
1164 z[0] * z[5] * x[4] * y[0] - z[0] * x[5] * y[4] * z[1] +
1165 z[3] * z[1] * x[3] * y[0] + z[3] * x[0] * y[3] * z[4] +
1166 z[3] * z[0] * x[3] * y[4] + z[3] * y[0] * x[4] * z[7];
1167 s8 = s7 + z[3] * x[3] * y[7] * z[4] - z[3] * x[7] * y[3] * z[4] -
1168 z[3] * x[3] * y[4] * z[7] + z[3] * x[4] * y[3] * z[7] -
1169 z[3] * y[2] * x[3] * z[1] + z[3] * z[2] * x[3] * y[1] -
1170 z[3] * z[2] * x[1] * y[3] - 2.0 * z[3] * z[0] * x[7] * y[3] +
1171 z[4] * z[0] * x[3] * y[4] + 2.0 * z[4] * z[5] * x[0] * y[4] +
1172 2.0 * z[4] * y[0] * x[4] * z[7] - 2.0 * z[4] * x[5] * y[4] * z[0] +
1173 z[4] * y[5] * x[4] * z[1] + z[4] * x[7] * y[4] * z[3] -
1174 z[4] * x[4] * y[7] * z[3];
1175 s3 = s8 - z[4] * x[3] * y[4] * z[7] + z[4] * x[4] * y[3] * z[7] -
1176 2.0 * z[4] * z[5] * x[4] * y[0] - z[4] * x[5] * y[4] * z[1] +
1177 z[4] * z[5] * x[1] * y[4] - z[4] * z[5] * x[4] * y[1] -
1178 2.0 * z[1] * y[1] * x[2] * z[0] + z[1] * z[5] * x[0] * y[4] -
1179 z[1] * z[5] * x[4] * y[0] - z[1] * y[5] * x[1] * z[4] +
1180 z[1] * x[5] * y[1] * z[4] + z[1] * z[5] * x[1] * y[4] -
1181 z[1] * z[5] * x[4] * y[1] + z[1] * z[2] * x[3] * y[1] -
1182 z[1] * z[2] * x[1] * y[3] + z[1] * y[2] * x[1] * z[3];
1183 s8 = y[1] * x[0] * z[3] + x[1] * y[3] * z[0] - y[0] * x[3] * z[7] -
1184 x[1] * y[5] * z[0] - y[0] * x[3] * z[4] - x[1] * y[0] * z[2] +
1185 z[1] * x[2] * y[0] - y[1] * x[0] * z[5] - z[1] * x[0] * y[2] -
1186 y[1] * x[0] * z[4] + z[1] * x[5] * y[2] + z[0] * x[7] * y[4] +
1187 z[0] * x[3] * y[7] + z[1] * x[0] * y[4] - x[1] * y[2] * z[5] +
1188 x[2] * y[3] * z[0] + y[1] * x[2] * z[5] - x[2] * y[3] * z[7];
1189 s7 = s8 - z[1] * x[2] * y[5] - y[1] * x[3] * z[0] - x[0] * y[7] * z[3] -
1190 z[1] * x[0] * y[3] + y[5] * x[4] * z[0] - x[0] * y[4] * z[3] +
1191 y[5] * x[7] * z[4] - z[0] * x[4] * y[3] + x[1] * y[0] * z[4] -
1192 z[2] * x[3] * y[7] - y[6] * x[7] * z[2] + x[1] * y[5] * z[2] +
1193 y[6] * x[7] * z[5] + x[0] * y[7] * z[4] + x[1] * y[2] * z[0] -
1194 z[1] * x[4] * y[0] - z[0] * x[4] * y[7] - z[2] * x[0] * y[3];
1195 s8 = x[5] * y[0] * z[4] + z[1] * x[0] * y[5] - x[2] * y[0] * z[3] -
1196 z[1] * x[5] * y[0] + y[1] * x[5] * z[0] - x[1] * y[0] * z[3] -
1197 x[1] * y[4] * z[0] - y[1] * x[5] * z[2] + x[2] * y[7] * z[3] +
1198 y[0] * x[4] * z[3] - x[0] * y[4] * z[7] + x[1] * y[0] * z[5] -
1199 y[1] * x[6] * z[2] - y[2] * x[6] * z[3] + y[0] * x[7] * z[3] -
1200 y[2] * x[7] * z[3] + z[2] * x[7] * y[3] + y[2] * x[0] * z[3];
1201 s6 = s8 + y[2] * x[3] * z[7] - y[2] * x[3] * z[0] - x[6] * y[5] * z[2] -
1202 y[5] * x[0] * z[4] + z[2] * x[3] * y[0] + x[2] * y[3] * z[1] +
1203 x[0] * y[3] * z[7] - x[2] * y[1] * z[3] + y[1] * x[4] * z[0] +
1204 y[1] * x[0] * z[2] - z[1] * x[2] * y[6] + y[2] * x[3] * z[6] -
1205 y[1] * x[2] * z[0] + z[1] * x[3] * y[0] - x[1] * y[2] * z[6] -
1206 x[2] * y[3] * z[6] + x[0] * y[3] * z[4] + z[0] * x[3] * y[4] + s7;
1207 s8 = x[5] * y[4] * z[7] + s6 + y[5] * x[6] * z[4] - y[5] * x[4] * z[6] +
1208 z[6] * x[5] * y[7] - x[6] * y[2] * z[7] - x[6] * y[7] * z[5] +
1209 x[5] * y[6] * z[2] + x[6] * y[5] * z[7] + x[6] * y[7] * z[2] +
1210 y[6] * x[7] * z[4] - y[6] * x[4] * z[7] - y[6] * x[7] * z[3] +
1211 z[6] * x[7] * y[2] + x[2] * y[5] * z[6] - x[2] * y[6] * z[5] +
1212 y[6] * x[2] * z[7] + x[6] * y[2] * z[5];
1213 s7 = s8 - x[5] * y[2] * z[6] - z[6] * x[7] * y[5] - z[5] * x[7] * y[4] +
1214 z[5] * x[0] * y[4] - y[5] * x[4] * z[7] + y[0] * x[4] * z[7] -
1215 z[6] * x[2] * y[7] - x[5] * y[4] * z[0] - x[5] * y[7] * z[4] -
1216 y[0] * x[7] * z[4] + y[5] * x[4] * z[1] - x[6] * y[7] * z[4] +
1217 x[7] * y[4] * z[3] - x[4] * y[7] * z[3] + x[3] * y[7] * z[4] -
1218 x[7] * y[3] * z[4] - x[6] * y[3] * z[7] + x[6] * y[4] * z[7];
1219 s8 = -x[3] * y[4] * z[7] + x[4] * y[3] * z[7] - z[6] * x[7] * y[4] -
1220 z[1] * x[6] * y[5] + x[6] * y[7] * z[3] - x[1] * y[6] * z[5] -
1221 y[1] * x[5] * z[6] + z[5] * x[4] * y[7] - z[5] * x[4] * y[0] +
1222 x[1] * y[5] * z[6] - y[6] * x[5] * z[7] - y[2] * x[3] * z[1] +
1223 z[1] * x[5] * y[6] - y[5] * x[1] * z[4] + z[6] * x[4] * y[7] +
1224 x[5] * y[1] * z[4] - x[5] * y[6] * z[4] + y[6] * x[3] * z[7] -
1226 s5 = s8 + x[5] * y[4] * z[6] + z[5] * x[1] * y[4] + y[1] * x[6] * z[5] -
1227 z[6] * x[3] * y[7] + z[6] * x[7] * y[3] - z[5] * x[6] * y[4] -
1228 z[5] * x[4] * y[1] + z[5] * x[4] * y[6] + x[1] * y[6] * z[2] +
1229 x[2] * y[6] * z[3] + z[2] * x[6] * y[3] + z[1] * x[6] * y[2] +
1230 z[2] * x[3] * y[1] - z[2] * x[1] * y[3] - z[2] * x[3] * y[6] +
1231 y[2] * x[1] * z[3] + y[1] * x[2] * z[6] - z[0] * x[7] * y[3] + s7;
1234 const double unknown2 = s1 * s2;
1236 return {unknown0, unknown1, unknown2};
1241 template <
int structdim,
int dim,
int spacedim>
1253 template <
int dim,
int spacedim>
1301 const double x[4] = {accessor.
vertex(0)(0),
1305 const double y[4] = {accessor.
vertex(0)(1),
1310 return (-x[1] * y[0] + x[1] * y[3] + y[0] * x[2] + x[0] * y[1] -
1311 x[0] * y[2] - y[1] * x[3] - x[2] * y[3] + x[3] * y[2]) /
1320 for (
unsigned int i = 0; i < GeometryInfo<3>::vertices_per_cell; ++i)
1323 return GridTools::cell_measure<3>(
1330 measure(const ::TriaAccessor<2, 3, 3> &accessor)
1336 const Tensor<1, 3> v01 = accessor.vertex(1) - accessor.vertex(0);
1337 const Tensor<1, 3> v02 = accessor.vertex(2) - accessor.vertex(0);
1341 const Tensor<1, 3> v03 = accessor.vertex(3) - accessor.vertex(0);
1348 if (std::abs((v03 * normal) * (v03 * normal) /
1349 ((v03 * v03) * (v01 * v01) * (v02 * v02))) >= 1e-24)
1354 "Computing the measure of a nonplanar face is not implemented!"));
1355 return std::numeric_limits<double>::quiet_NaN();
1360 const Tensor<1, 3> v12 = accessor.vertex(2) - accessor.vertex(1);
1362 return 0.5 * twice_area.
norm();
1367 template <
int structdim,
int dim,
int spacedim>
1374 return std::numeric_limits<double>::quiet_NaN();
1378 template <
int dim,
int spacedim>
1386 template <
int dim,
int spacedim>
1394 template <
int dim,
int spacedim>
1402 template <
int structdim,
int dim,
int spacedim>
1405 const bool use_interpolation)
1407 if (use_interpolation)
1410 const auto points_and_weights =
1414 points_and_weights.first.end()),
1416 points_and_weights.second.end()));
1420 return get_new_point_on_object(obj);
1429 template <
int structdim,
int dim,
int spacedim>
1432 template <
int structdim,
int dim,
int spacedim>
1435 template <
int structdim,
int dim,
int spacedim>
1442 template <
int structdim,
int dim,
int spacedim>
1448 this->objects().cells[this->present_index] = object;
1453 template <
int structdim,
int dim,
int spacedim>
1459 return ::barycenter(*
this);
1464 template <
int structdim,
int dim,
int spacedim>
1470 return ::measure(*
this);
1475 template <
int structdim,
int dim,
int spacedim>
1480 std::make_pair(this->vertex(0), this->vertex(0));
1482 for (
unsigned int v = 1; v < GeometryInfo<structdim>::vertices_per_cell; ++v)
1485 for (
unsigned int k = 0; k < spacedim; ++k)
1487 boundary_points.first[k] = std::min(boundary_points.first[k], x[k]);
1488 boundary_points.second[k] = std::max(boundary_points.second[k], x[k]);
1497 template <
int structdim,
int dim,
int spacedim>
1500 const unsigned int )
const 1503 return std::numeric_limits<double>::signaling_NaN();
1515 return this->diameter();
1534 const unsigned int lines[2][2] = {
1540 return std::max(this->line(lines[axis][0])->diameter(),
1541 this->line(lines[axis][1])->diameter());
1548 const unsigned int lines[2][2] = {
1554 return std::max(this->line(lines[axis][0])->diameter(),
1555 this->line(lines[axis][1])->diameter());
1563 const unsigned int lines[3][4] = {
1570 double lengths[4] = {this->line(lines[axis][0])->diameter(),
1571 this->line(lines[axis][1])->diameter(),
1572 this->line(lines[axis][2])->diameter(),
1573 this->line(lines[axis][3])->diameter()};
1575 return std::max(std::max(lengths[0], lengths[1]),
1576 std::max(lengths[2], lengths[3]));
1586 set_manifold_id(manifold_ind);
1588 if (this->has_children())
1589 for (
unsigned int c = 0; c < this->n_children(); ++c)
1590 this->child(c)->set_all_manifold_ids(manifold_ind);
1596 for (
unsigned int i = 0; i < 6; ++i)
1597 this->quad(i)->set_manifold_id(manifold_ind);
1599 for (
unsigned int i = 0; i < 12; ++i)
1600 this->line(i)->set_manifold_id(manifold_ind);
1604 template <
int structdim,
int dim,
int spacedim>
1611 std::array<double, GeometryInfo<structdim>::vertices_per_cell> w;
1613 for (
unsigned int i = 0; i < GeometryInfo<structdim>::vertices_per_cell; ++i)
1615 p[i] = this->vertex(i);
1619 return this->get_manifold().get_new_point(
make_array_view(p.begin(), p.end()),
1648 struct TransformR2UAffine
1663 [1] = {{-1.000000}, {1.000000}};
1667 {1.000000, 0.000000};
1678 [2] = {{-0.500000, -0.500000},
1679 {0.500000, -0.500000},
1680 {-0.500000, 0.500000},
1681 {0.500000, 0.500000}};
1691 {0.750000, 0.250000, 0.250000, -0.250000};
1697 {-0.250000, -0.250000, -0.250000},
1698 {0.250000, -0.250000, -0.250000},
1699 {-0.250000, 0.250000, -0.250000},
1700 {0.250000, 0.250000, -0.250000},
1701 {-0.250000, -0.250000, 0.250000},
1702 {0.250000, -0.250000, 0.250000},
1703 {-0.250000, 0.250000, 0.250000},
1704 {0.250000, 0.250000, 0.250000}
1722 template <
int structdim,
int dim,
int spacedim>
1733 for (
unsigned int v = 0; v < GeometryInfo<structdim>::vertices_per_cell; ++v)
1734 vertices[v] = this->vertex(v);
1735 for (
unsigned int d = 0; d < spacedim; ++d)
1736 for (
unsigned int v = 0; v < GeometryInfo<structdim>::vertices_per_cell;
1738 for (
unsigned int e = 0; e < structdim; ++e)
1739 A[d][e] += vertices[v][d] * TransformR2UAffine<structdim>::KA[v][e];
1743 for (
unsigned int v = 0; v < GeometryInfo<structdim>::vertices_per_cell; ++v)
1744 b -= vertices[v] * TransformR2UAffine<structdim>::Kb[v];
1751 template <
int structdim,
int dim,
int spacedim>
1754 const bool respect_manifold,
1755 const bool use_interpolation)
const 1757 if (respect_manifold ==
false)
1761 for (
unsigned int v = 0; v < GeometryInfo<structdim>::vertices_per_cell;
1767 return get_new_point_on_object(*
this, use_interpolation);
1779 return (this->vertex(0)[0] <= p[0]) && (p[0] <= this->vertex(1)[0]);
1809 static const int direction[4] = {-1, 1, 1, -1};
1810 for (
unsigned int f = 0; f < 4; ++f)
1834 if ((-face[1] * to_p[0] + face[0] * to_p[1]) < 0)
1862 const unsigned int dim = 3;
1863 const unsigned int spacedim = 3;
1867 for (
unsigned int v = 1; v < GeometryInfo<dim>::vertices_per_cell; ++v)
1868 for (
unsigned int d = 0;
d < dim; ++
d)
1870 maxp[
d] = std::max(maxp[d], this->vertex(v)[d]);
1871 minp[
d] = std::min(minp[d], this->vertex(v)[d]);
1876 for (
unsigned int d = 0;
d < dim;
d++)
1877 if ((p[d] < minp[d]) || (p[d] > maxp[d]))
1892 cell_iterator, p)));
1908 template <
int dim,
int spacedim>
1909 template <
int dim_,
int spacedim_>
1927 return point_inside_codim<1, 2>(p);
1935 return point_inside_codim<1, 3>(p);
1943 return point_inside_codim<2, 3>(p);
1948 template <
int dim,
int spacedim>
1955 return at_boundary(0) || at_boundary(1);
1957 return (at_boundary(0) || at_boundary(1) || at_boundary(2) ||
1960 return (at_boundary(0) || at_boundary(1) || at_boundary(2) ||
1961 at_boundary(3) || at_boundary(4) || at_boundary(5));
1970 template <
int dim,
int spacedim>
1975 return this->tria->levels[this->present_level]
1976 ->cells.boundary_or_material_id[this->present_index]
1982 template <
int dim,
int spacedim>
1990 this->tria->levels[this->present_level]
1991 ->cells.boundary_or_material_id[this->present_index]
1992 .material_id = mat_id;
1997 template <
int dim,
int spacedim>
2002 set_material_id(mat_id);
2004 if (this->has_children())
2005 for (
unsigned int c = 0; c < this->n_children(); ++c)
2006 this->child(c)->recursively_set_material_id(mat_id);
2011 template <
int dim,
int spacedim>
2018 ExcMessage(
"set_subdomain_id() can only be called on active cells!"));
2019 this->tria->levels[this->present_level]->subdomain_ids[this->present_index] =
2024 template <
int dim,
int spacedim>
2029 return this->tria->levels[this->present_level]
2030 ->level_subdomain_ids[this->present_index];
2035 template <
int dim,
int spacedim>
2041 this->tria->levels[this->present_level]
2042 ->level_subdomain_ids[this->present_index] = new_level_subdomain_id;
2046 template <
int dim,
int spacedim>
2051 if (dim == spacedim)
2054 return this->tria->levels[this->present_level]
2055 ->direction_flags[this->present_index];
2060 template <
int dim,
int spacedim>
2063 const bool new_direction_flag)
const 2067 this->tria->levels[this->present_level]
2068 ->direction_flags[this->present_index] = new_direction_flag;
2070 Assert(new_direction_flag ==
true,
2071 ExcMessage(
"If dim==spacedim, direction flags are always true and " 2072 "can not be set to anything else."));
2077 template <
int dim,
int spacedim>
2080 const unsigned int active_cell_index)
2084 this->tria->levels[this->present_level]
2085 ->active_cell_indices[this->present_index] = active_cell_index;
2090 template <
int dim,
int spacedim>
2096 this->tria->levels[this->present_level]->parents[this->present_index / 2] =
2102 template <
int dim,
int spacedim>
2111 return this->tria->levels[this->present_level]
2112 ->parents[this->present_index / 2];
2117 template <
int dim,
int spacedim>
2121 Assert(this->has_children() ==
false,
2123 return this->tria->levels[this->present_level]
2124 ->active_cell_indices[this->present_index];
2129 template <
int dim,
int spacedim>
2136 this->present_level - 1,
2143 template <
int dim,
int spacedim>
2148 if (this->has_children())
2149 for (
unsigned int c = 0; c < this->n_children(); ++c)
2150 this->child(c)->recursively_set_subdomain_id(new_subdomain_id);
2152 set_subdomain_id(new_subdomain_id);
2157 template <
int dim,
int spacedim>
2160 const unsigned int i,
2167 this->tria->levels[this->present_level]
2169 .first = pointer->present_level;
2170 this->tria->levels[this->present_level]
2172 .second = pointer->present_index;
2176 this->tria->levels[this->present_level]
2179 this->tria->levels[this->present_level]
2187 template <
int dim,
int spacedim>
2191 std::array<unsigned char, 30> id;
2194 const unsigned int n_child_indices = ptr.
level();
2196 while (ptr.
level() > 0)
2199 const unsigned int n_children = parent->n_children();
2202 unsigned char v =
static_cast<unsigned char>(-1);
2203 for (
unsigned int c = 0; c < n_children; ++c)
2205 if (parent->child_index(c) == ptr.
index())
2213 id[ptr.
level() - 1] = v;
2219 const unsigned int coarse_index = ptr.
index();
2221 return {coarse_index, n_child_indices,
id.data()};
2226 template <
int dim,
int spacedim>
2229 const unsigned int neighbor)
const 2242 if ((dim == 1) && (spacedim == dim))
2246 this->neighbor(neighbor);
2261 const unsigned int this_face_index = face_index(neighbor);
2263 const unsigned int neighbor_guess =
2266 if (neighbor_cell->face_index(neighbor_guess) == this_face_index)
2267 return neighbor_guess;
2274 for (
unsigned int face_no = 0;
2275 face_no < GeometryInfo<dim>::faces_per_cell;
2277 if (neighbor_cell->face_index(face_no) == this_face_index)
2293 template <
int dim,
int spacedim>
2296 const unsigned int neighbor)
const 2298 const unsigned int n2 = neighbor_of_neighbor_internal(neighbor);
2307 template <
int dim,
int spacedim>
2310 const unsigned int neighbor)
const 2312 return neighbor_of_neighbor_internal(neighbor) ==
2318 template <
int dim,
int spacedim>
2319 std::pair<unsigned int, unsigned int>
2321 const unsigned int neighbor)
const 2326 Assert(neighbor_is_coarser(neighbor),
2333 const int this_face_index = face_index(neighbor);
2335 this->neighbor(neighbor);
2350 const unsigned int face_no_guess =
2354 neighbor_cell->face(face_no_guess);
2356 if (face_guess->has_children())
2357 for (
unsigned int subface_no = 0;
2358 subface_no < face_guess->n_children();
2360 if (face_guess->child_index(subface_no) == this_face_index)
2361 return std::make_pair(face_no_guess, subface_no);
2367 for (
unsigned int face_no = 0;
2368 face_no < GeometryInfo<2>::faces_per_cell;
2371 if (face_no != face_no_guess)
2374 face = neighbor_cell->face(face_no);
2375 if (face->has_children())
2376 for (
unsigned int subface_no = 0;
2377 subface_no < face->n_children();
2379 if (face->child_index(subface_no) == this_face_index)
2380 return std::make_pair(face_no, subface_no);
2394 const int this_face_index = face_index(neighbor);
2396 this->neighbor(neighbor);
2404 const unsigned int face_no_guess =
2408 neighbor_cell->face(face_no_guess);
2410 if (face_guess->has_children())
2411 for (
unsigned int subface_no = 0;
2412 subface_no < face_guess->n_children();
2415 if (face_guess->child_index(subface_no) == this_face_index)
2419 return std::make_pair(face_no_guess,
2420 translate_subface_no(face_guess,
2423 if (face_guess->child(subface_no)->has_children())
2424 for (
unsigned int subsub_no = 0;
2425 subsub_no < face_guess->child(subface_no)->n_children();
2427 if (face_guess->child(subface_no)->child_index(subsub_no) ==
2432 return std::make_pair(face_no_guess,
2433 translate_subface_no(face_guess,
2440 for (
unsigned int face_no = 0;
2441 face_no < GeometryInfo<3>::faces_per_cell;
2444 if (face_no == face_no_guess)
2448 neighbor_cell->face(face_no);
2450 if (!face->has_children())
2453 for (
unsigned int subface_no = 0; subface_no < face->n_children();
2456 if (face->child_index(subface_no) == this_face_index)
2460 return std::make_pair(face_no,
2461 translate_subface_no(face,
2464 if (face->child(subface_no)->has_children())
2465 for (
unsigned int subsub_no = 0;
2466 subsub_no < face->child(subface_no)->n_children();
2468 if (face->child(subface_no)->child_index(subsub_no) ==
2473 return std::make_pair(face_no,
2474 translate_subface_no(face,
2498 template <
int dim,
int spacedim>
2501 const unsigned int i_face)
const 2528 cell_iterator my_it(*
this);
2529 if (this->tria->periodic_face_map.find(
2530 std::pair<cell_iterator, unsigned int>(my_it, i_face)) !=
2531 this->tria->periodic_face_map.end())
2538 template <
int dim,
int spacedim>
2552 cell_iterator my_it(*
this);
2554 const typename std::map<std::pair<cell_iterator, unsigned int>,
2555 std::pair<std::pair<cell_iterator, unsigned int>,
2556 std::bitset<3>>>::const_iterator
2557 my_face_pair = this->tria->periodic_face_map.find(
2558 std::pair<cell_iterator, unsigned int>(my_it, i_face));
2560 Assert(my_face_pair != this->tria->periodic_face_map.end(),
2562 return my_face_pair->second.first.first;
2567 template <
int dim,
int spacedim>
2570 const unsigned int i_face)
const 2572 if (!(this->face(i_face)->at_boundary()))
2573 return this->neighbor(i_face);
2574 else if (this->has_periodic_neighbor(i_face))
2575 return this->periodic_neighbor(i_face);
2579 return this->neighbor(i_face);
2584 template <
int dim,
int spacedim>
2587 const unsigned int i_face,
2588 const unsigned int i_subface)
const 2604 cell_iterator my_it(*
this);
2605 const typename std::map<std::pair<cell_iterator, unsigned int>,
2606 std::pair<std::pair<cell_iterator, unsigned int>,
2607 std::bitset<3>>>::const_iterator
2608 my_face_pair = this->tria->periodic_face_map.find(
2609 std::pair<cell_iterator, unsigned int>(my_it, i_face));
2614 Assert(my_face_pair != this->tria->periodic_face_map.end(),
2616 cell_iterator parent_nb_it = my_face_pair->second.first.first;
2617 unsigned int nb_face_num = my_face_pair->second.first.second;
2619 parent_nb_it->face(nb_face_num);
2625 unsigned int sub_neighbor_num =
2629 my_face_pair->second.second[0],
2630 my_face_pair->second.second[1],
2631 my_face_pair->second.second[2],
2632 nb_parent_face_it->refinement_case());
2633 return parent_nb_it->child(sub_neighbor_num);
2638 template <
int dim,
int spacedim>
2639 std::pair<unsigned int, unsigned int>
2641 const unsigned int i_face)
const 2657 const int my_face_index = this->face_index(i_face);
2658 cell_iterator my_it(*
this);
2659 const typename std::map<std::pair<cell_iterator, unsigned int>,
2660 std::pair<std::pair<cell_iterator, unsigned int>,
2661 std::bitset<3>>>::const_iterator
2662 my_face_pair = this->tria->periodic_face_map.find(
2663 std::pair<cell_iterator, unsigned int>(my_it, i_face));
2668 Assert(my_face_pair != this->tria->periodic_face_map.end(),
2670 cell_iterator nb_it = my_face_pair->second.first.first;
2671 unsigned int face_num_of_nb = my_face_pair->second.first.second;
2672 const typename std::map<std::pair<cell_iterator, unsigned int>,
2673 std::pair<std::pair<cell_iterator, unsigned int>,
2674 std::bitset<3>>>::const_iterator
2675 nb_face_pair = this->tria->periodic_face_map.find(
2676 std::pair<cell_iterator, unsigned int>(nb_it, face_num_of_nb));
2682 Assert(nb_face_pair != this->tria->periodic_face_map.end(),
2684 cell_iterator p_nb_of_p_nb = nb_face_pair->second.first.first;
2686 p_nb_of_p_nb->face(nb_face_pair->second.first.second);
2687 for (
unsigned int i_subface = 0; i_subface < parent_face_it->n_children();
2689 if (parent_face_it->child_index(i_subface) == my_face_index)
2690 return (std::pair<unsigned int, unsigned int>(face_num_of_nb, i_subface));
2703 template <
int dim,
int spacedim>
2706 const unsigned int i_face)
const 2708 return periodic_neighbor(i_face)->index();
2713 template <
int dim,
int spacedim>
2716 const unsigned int i_face)
const 2718 return periodic_neighbor(i_face)->level();
2723 template <
int dim,
int spacedim>
2726 const unsigned int i_face)
const 2728 return periodic_neighbor_face_no(i_face);
2733 template <
int dim,
int spacedim>
2736 const unsigned int i_face)
const 2748 cell_iterator my_it(*
this);
2749 const typename std::map<std::pair<cell_iterator, unsigned int>,
2750 std::pair<std::pair<cell_iterator, unsigned int>,
2751 std::bitset<3>>>::const_iterator
2752 my_face_pair = this->tria->periodic_face_map.find(
2753 std::pair<cell_iterator, unsigned int>(my_it, i_face));
2759 Assert(my_face_pair != this->tria->periodic_face_map.end(),
2761 return my_face_pair->second.first.second;
2766 template <
int dim,
int spacedim>
2769 const unsigned int i_face)
const 2790 cell_iterator my_it(*
this);
2791 const typename std::map<std::pair<cell_iterator, unsigned int>,
2792 std::pair<std::pair<cell_iterator, unsigned int>,
2793 std::bitset<3>>>::const_iterator
2794 my_face_pair = this->tria->periodic_face_map.find(
2795 std::pair<cell_iterator, unsigned int>(my_it, i_face));
2800 Assert(my_face_pair != this->tria->periodic_face_map.end(),
2802 cell_iterator nb_it = my_face_pair->second.first.first;
2803 unsigned int face_num_of_nb = my_face_pair->second.first.second;
2804 const typename std::map<std::pair<cell_iterator, unsigned int>,
2805 std::pair<std::pair<cell_iterator, unsigned int>,
2806 std::bitset<3>>>::const_iterator
2807 nb_face_pair = this->tria->periodic_face_map.find(
2808 std::pair<cell_iterator, unsigned int>(nb_it, face_num_of_nb));
2814 Assert(nb_face_pair != this->tria->periodic_face_map.end(),
2816 const unsigned int my_level = this->level();
2817 const unsigned int neighbor_level = nb_face_pair->second.first.first->level();
2819 return my_level > neighbor_level;
2824 template <
int dim,
int spacedim>
2832 return (neighbor_index(i) == -1);
2837 template <
int dim,
int spacedim>
2842 return at_boundary();
2845 for (
unsigned int l = 0; l < GeometryInfo<dim>::lines_per_cell; ++l)
2846 if (this->line(l)->at_boundary())
2855 template <
int dim,
int spacedim>
2858 const unsigned int face,
2859 const unsigned int subface)
const 2861 Assert(!this->has_children(),
2862 ExcMessage(
"The present cell must not have children!"));
2863 Assert(!this->at_boundary(face),
2864 ExcMessage(
"The present cell must have a valid neighbor!"));
2865 Assert(this->neighbor(face)->has_children() ==
true,
2866 ExcMessage(
"The neighbor must have children!"));
2872 const unsigned int neighbor_neighbor =
2873 this->neighbor_of_neighbor(face);
2874 const unsigned int neighbor_child_index =
2876 this->neighbor(face)->refinement_case(),
2881 this->neighbor(face)->child(neighbor_child_index);
2887 while (sub_neighbor->has_children())
2890 sub_neighbor->refinement_case(), neighbor_neighbor) ==
2895 sub_neighbor->refinement_case(), neighbor_neighbor, 0));
2898 return sub_neighbor;
2959 mother_face = this->face(face);
2960 const unsigned int total_children = mother_face->number_of_children();
2961 Assert(subface < total_children,
2966 unsigned int neighbor_neighbor;
2969 this->neighbor(face);
2973 mother_face->refinement_case();
2974 if (mother_face_ref_case ==
2983 neighbor_neighbor = this->neighbor_of_neighbor(face);
2987 const unsigned int neighbor_child_index =
2989 neighbor->refinement_case(),
2992 neighbor->face_orientation(neighbor_neighbor),
2993 neighbor->face_flip(neighbor_neighbor),
2994 neighbor->face_rotation(neighbor_neighbor));
2995 neighbor_child = neighbor->child(neighbor_child_index);
2999 Assert((this->face(face)->child(subface) ==
3000 neighbor_child->face(neighbor_neighbor)),
3010 unsigned int first_child_to_find;
3011 unsigned int neighbor_child_index;
3012 if (total_children == 2)
3013 first_child_to_find = subface;
3016 first_child_to_find = subface / 2;
3017 if (total_children == 3 && subface == 1 &&
3018 !mother_face->child(0)->has_children())
3019 first_child_to_find = 1;
3021 if (neighbor_is_coarser(face))
3023 std::pair<unsigned int, unsigned int> indices =
3024 neighbor_of_coarser_neighbor(face);
3025 neighbor_neighbor = indices.first;
3070 unsigned int iso_subface;
3071 if (neighbor->face(neighbor_neighbor)->refinement_case() ==
3073 iso_subface = 2 * first_child_to_find + indices.second;
3077 neighbor->face(neighbor_neighbor)->refinement_case() ==
3080 iso_subface = first_child_to_find + 2 * indices.second;
3083 neighbor->refinement_case(),
3086 neighbor->face_orientation(neighbor_neighbor),
3087 neighbor->face_flip(neighbor_neighbor),
3088 neighbor->face_rotation(neighbor_neighbor));
3092 neighbor_neighbor = neighbor_of_neighbor(face);
3094 neighbor->refinement_case(),
3096 first_child_to_find,
3097 neighbor->face_orientation(neighbor_neighbor),
3098 neighbor->face_flip(neighbor_neighbor),
3099 neighbor->face_rotation(neighbor_neighbor),
3100 mother_face_ref_case);
3103 neighbor_child = neighbor->child(neighbor_child_index);
3108 while (neighbor_child->has_children() &&
3110 neighbor_child->refinement_case(), neighbor_neighbor) ==
3114 neighbor_child->refinement_case(), neighbor_neighbor, 0));
3122 if (total_children == 3)
3124 if (mother_face->child(0)->has_children())
3127 neighbor_child = neighbor_child->child(
3129 neighbor_child->refinement_case(),
3132 neighbor_child->face_orientation(neighbor_neighbor),
3133 neighbor_child->face_flip(neighbor_neighbor),
3134 neighbor_child->face_rotation(neighbor_neighbor),
3135 mother_face->child(0)->refinement_case()));
3139 Assert(mother_face->child(1)->has_children(),
3142 neighbor_child = neighbor_child->child(
3144 neighbor_child->refinement_case(),
3147 neighbor_child->face_orientation(neighbor_neighbor),
3148 neighbor_child->face_flip(neighbor_neighbor),
3149 neighbor_child->face_rotation(neighbor_neighbor),
3150 mother_face->child(1)->refinement_case()));
3153 else if (total_children == 4)
3157 neighbor_child->refinement_case(),
3160 neighbor_child->face_orientation(neighbor_neighbor),
3161 neighbor_child->face_flip(neighbor_neighbor),
3162 neighbor_child->face_rotation(neighbor_neighbor),
3163 mother_face->child(subface / 2)->refinement_case()));
3171 while (neighbor_child->has_children())
3174 neighbor_child->refinement_case(), neighbor_neighbor, 0));
3180 switch (this->subface_case(face))
3185 requested = mother_face->child(subface);
3189 requested = mother_face->child(subface / 2)->child(subface % 2);
3198 requested = mother_face->child(0)->child(subface);
3201 requested = mother_face->child(1);
3212 requested = mother_face->child(0);
3216 requested = mother_face->child(1)->child(subface - 1);
3226 Assert(requested == neighbor_child->face(neighbor_neighbor),
3230 return neighbor_child;
3243 #include "tria_accessor.inst" 3245 DEAL_II_NAMESPACE_CLOSE
unsigned int periodic_neighbor_of_periodic_neighbor(const unsigned int i) const
static const unsigned int invalid_unsigned_int
bool point_inside_codim(const Point< spacedim_ > &p) const
std::pair< std::array< Point< MeshIteratorType::AccessorType::space_dimension >, n_default_points_per_cell< MeshIteratorType >)>, std::array< double, n_default_points_per_cell< MeshIteratorType >)> > get_default_points_and_weights(const MeshIteratorType &iterator, const bool with_interpolation=false)
TriaIterator< CellAccessor< dim, spacedim > > neighbor_or_periodic_neighbor(const unsigned int i) const
static ::ExceptionBase & ExcNeighborIsNotCoarser()
void set_active_cell_index(const unsigned int active_cell_index)
unsigned int active_cell_index() const
void set_neighbor(const unsigned int i, const TriaIterator< CellAccessor< dim, spacedim >> &pointer) const
static ::ExceptionBase & ExcNeighborIsCoarser()
unsigned int neighbor_of_neighbor_internal(const unsigned int neighbor) const
static bool is_inside_unit_cell(const Point< dim > &p)
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
const Manifold< dim, spacedim > & get_manifold() const
types::material_id material_id() const
#define AssertIndexRange(index, range)
void copy_from(const TriaAccessorBase &)
double extent_in_direction(const unsigned int axis) const
double norm(const FEValuesBase< dim > &fe, const ArrayView< const std::vector< Tensor< 1, dim >>> &Du)
void set_all_manifold_ids(const types::manifold_id) const
#define AssertThrow(cond, exc)
numbers::NumberTraits< Number >::real_type norm() const
static ::ExceptionBase & ExcIndexRange(int arg1, int arg2, int arg3)
TriaIterator< CellAccessor< dim, spacedim > > neighbor_child_on_subface(const unsigned int face_no, const unsigned int subface_no) const
bool neighbor_is_coarser(const unsigned int neighbor) const
unsigned int vertex_index(const unsigned int i) const
static ::ExceptionBase & ExcCellNotUsed()
TriaIterator< CellAccessor< dim, spacedim > > parent() const
static ::ExceptionBase & ExcMessage(std::string arg1)
bool has_periodic_neighbor(const unsigned int i) const
static ::ExceptionBase & ExcImpossibleInDim(int arg1)
unsigned int subdomain_id
void set(const ::internal::TriangulationImplementation::TriaObject< structdim > &o) const
bool periodic_neighbor_is_coarser(const unsigned int i) const
#define Assert(cond, exc)
std::pair< unsigned int, unsigned int > periodic_neighbor_of_coarser_periodic_neighbor(const unsigned face_no) const
Point< spacedim > & vertex(const unsigned int i) const
BoundingBox< spacedim > bounding_box() const
void set_material_id(const types::material_id new_material_id) const
static RefinementCase< dim - 1 > face_refinement_case(const RefinementCase< dim > &cell_refinement_case, const unsigned int face_no, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false)
Abstract base class for mapping classes.
static ::ExceptionBase & ExcCellNotActive()
static ::ExceptionBase & ExcNoPeriodicNeighbor()
void recursively_set_material_id(const types::material_id new_material_id) const
TriaIterator< CellAccessor< dim, spacedim > > periodic_neighbor_child_on_subface(const unsigned int face_no, const unsigned int subface_no) const
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
Tensor< 1, dim, Number > cross_product_3d(const Tensor< 1, dim, Number > &src1, const Tensor< 1, dim, Number > &src2)
Point< spacedim > center(const bool respect_manifold=false, const bool interpolate_from_surrounding=false) const
static ::ExceptionBase & ExcCellHasNoParent()
Point< structdim > real_to_unit_cell_affine_approximation(const Point< spacedim > &point) const
int periodic_neighbor_level(const unsigned int i) const
const Triangulation< dim, spacedim > & get_triangulation() const
std::pair< unsigned int, unsigned int > neighbor_of_coarser_neighbor(const unsigned int neighbor) const
void recursively_set_subdomain_id(const types::subdomain_id new_subdomain_id) const
static double d_linear_shape_function(const Point< dim > &xi, const unsigned int i)
bool point_inside(const Point< spacedim > &p) const
Point< spacedim > barycenter() const
static unsigned int child_cell_on_face(const RefinementCase< dim > &ref_case, const unsigned int face, const unsigned int subface, const bool face_orientation=true, const bool face_flip=false, const bool face_rotation=false, const RefinementCase< dim - 1 > &face_refinement_case=RefinementCase< dim - 1 >::isotropic_refinement)
void set_direction_flag(const bool new_direction_flag) const
unsigned int periodic_neighbor_face_no(const unsigned int i) const
int periodic_neighbor_index(const unsigned int i) const
TriaIterator< CellAccessor< dim, spacedim > > periodic_neighbor(const unsigned int i) const
void set_parent(const unsigned int parent_index)
Point< spacedim > intermediate_point(const Point< structdim > &coordinates) const
bool direction_flag() const
static ::ExceptionBase & ExcNotImplemented()
Iterator points to a valid object.
void set_level_subdomain_id(const types::subdomain_id new_level_subdomain_id) const
ArrayView< typename std::remove_reference< typename std::iterator_traits< Iterator >::reference >::type, MemorySpaceType > make_array_view(const Iterator begin, const Iterator end)
void set_subdomain_id(const types::subdomain_id new_subdomain_id) const
types::subdomain_id level_subdomain_id() const
const types::material_id invalid_material_id
unsigned int neighbor_of_neighbor(const unsigned int neighbor) const
bool has_boundary_lines() const
static ::ExceptionBase & ExcInternalError()