28 #include <deal.II/grid/tria_accessor.templates.h>
30 #include <deal.II/grid/tria_iterator.templates.h>
48 const unsigned int subface_no)
53 if (face->child(subface_no)->has_children())
69 const bool first_child_has_children = face->child(0)->has_children();
78 return subface_no +
static_cast<unsigned int>(first_child_has_children);
90 const unsigned int subface_no,
91 const unsigned int subsubface_no)
98 Assert(subsubface_no < face->child(subface_no)->n_children(),
104 const bool first_child_has_children = face->child(0)->has_children();
114 static const unsigned int translated_subface_no[2][2][2] = {
124 Assert(translated_subface_no[subface_no][subsubface_no]
125 [first_child_has_children] !=
e,
128 return translated_subface_no[subface_no][subsubface_no]
129 [first_child_has_children];
133 template <
int dim,
int spacedim>
189 const double x[4] = {accessor.
vertex(0)(0),
193 const double y[4] = {accessor.
vertex(0)(1),
197 const double t1 = x[0] * x[1];
198 const double t3 = x[0] * x[0];
199 const double t5 = x[1] * x[1];
200 const double t9 = y[0] * x[0];
201 const double t11 = y[1] * x[1];
202 const double t14 = x[2] * x[2];
203 const double t16 = x[3] * x[3];
204 const double t20 = x[2] * x[3];
205 const double t27 = t1 * y[1] + t3 * y[1] - t5 * y[0] - t3 * y[2] +
206 t5 * y[3] + t9 * x[2] - t11 * x[3] - t1 * y[0] -
207 t14 * y[3] + t16 * y[2] - t16 * y[1] + t14 * y[0] -
208 t20 * y[3] - x[0] * x[2] * y[2] +
209 x[1] * x[3] * y[3] + t20 * y[2];
211 1 / (-x[1] * y[0] + x[1] * y[3] + y[0] * x[2] + x[0] * y[1] -
212 x[0] * y[2] - y[1] * x[3] - x[2] * y[3] + x[3] * y[2]);
213 const double t39 = y[2] * y[2];
214 const double t51 = y[0] * y[0];
215 const double t53 = y[1] * y[1];
216 const double t59 = y[3] * y[3];
218 t39 * x[3] + y[2] * y[0] * x[2] + y[3] * x[3] * y[2] -
219 y[2] * x[2] * y[3] - y[3] * y[1] * x[3] - t9 * y[2] + t11 * y[3] +
220 t51 * x[2] - t53 * x[3] - x[1] * t51 + t9 * y[1] - t11 * y[0] +
221 x[0] * t53 - t59 * x[2] + t59 * x[1] - t39 * x[0];
223 return {t27 * t37 / 3, t63 * t37 / 3};
317 const double x[8] = {accessor.
vertex(0)(0),
325 const double y[8] = {accessor.
vertex(0)(1),
333 const double z[8] = {accessor.
vertex(0)(2),
342 double s1, s2, s3, s4, s5, s6, s7, s8;
345 s8 = -x[2] * x[2] * y[0] * z[3] - 2.0 * z[6] * x[7] * x[7] * y[4] -
346 z[5] * x[7] * x[7] * y[4] - z[6] * x[7] * x[7] * y[5] +
347 2.0 * y[6] * x[7] * x[7] * z[4] - z[5] * x[6] * x[6] * y[4] +
348 x[6] * x[6] * y[4] * z[7] - z[1] * x[0] * x[0] * y[2] -
349 x[6] * x[6] * y[7] * z[4] + 2.0 * x[6] * x[6] * y[5] * z[7] -
350 2.0 * x[6] * x[6] * y[7] * z[5] + y[5] * x[6] * x[6] * z[4] +
351 2.0 * x[5] * x[5] * y[4] * z[6] + x[0] * x[0] * y[7] * z[4] -
352 2.0 * x[5] * x[5] * y[6] * z[4];
353 s7 = s8 - y[6] * x[5] * x[5] * z[7] + z[6] * x[5] * x[5] * y[7] -
354 y[1] * x[0] * x[0] * z[5] + x[7] * z[5] * x[4] * y[7] -
355 x[7] * y[6] * x[5] * z[7] - 2.0 * x[7] * x[6] * y[7] * z[4] +
356 2.0 * x[7] * x[6] * y[4] * z[7] - x[7] * x[5] * y[7] * z[4] -
357 2.0 * x[7] * y[6] * x[4] * z[7] - x[7] * y[5] * x[4] * z[7] +
358 x[2] * x[2] * y[3] * z[0] - x[7] * x[6] * y[7] * z[5] +
359 x[7] * x[6] * y[5] * z[7] + 2.0 * x[1] * x[1] * y[0] * z[5] +
360 x[7] * z[6] * x[5] * y[7];
361 s8 = -2.0 * x[1] * x[1] * y[5] * z[0] + z[1] * x[0] * x[0] * y[5] +
362 2.0 * x[2] * x[2] * y[3] * z[1] - z[5] * x[4] * x[4] * y[1] +
363 y[5] * x[4] * x[4] * z[1] - 2.0 * x[5] * x[5] * y[4] * z[1] +
364 2.0 * x[5] * x[5] * y[1] * z[4] - 2.0 * x[2] * x[2] * y[1] * z[3] -
365 y[1] * x[2] * x[2] * z[0] + x[7] * y[2] * x[3] * z[7] +
366 x[7] * z[2] * x[6] * y[3] + 2.0 * x[7] * z[6] * x[4] * y[7] +
367 z[5] * x[1] * x[1] * y[4] + z[1] * x[2] * x[2] * y[0] -
368 2.0 * y[0] * x[3] * x[3] * z[7];
369 s6 = s8 + 2.0 * z[0] * x[3] * x[3] * y[7] - x[7] * x[2] * y[3] * z[7] -
370 x[7] * z[2] * x[3] * y[7] + x[7] * x[2] * y[7] * z[3] -
371 x[7] * y[2] * x[6] * z[3] + x[4] * x[5] * y[1] * z[4] -
372 x[4] * x[5] * y[4] * z[1] + x[4] * z[5] * x[1] * y[4] -
373 x[4] * y[5] * x[1] * z[4] - 2.0 * x[5] * z[5] * x[4] * y[1] -
374 2.0 * x[5] * y[5] * x[1] * z[4] + 2.0 * x[5] * z[5] * x[1] * y[4] +
375 2.0 * x[5] * y[5] * x[4] * z[1] - x[6] * z[5] * x[7] * y[4] -
376 z[2] * x[3] * x[3] * y[6] + s7;
377 s8 = -2.0 * x[6] * z[6] * x[7] * y[5] - x[6] * y[6] * x[4] * z[7] +
378 y[2] * x[3] * x[3] * z[6] + x[6] * y[6] * x[7] * z[4] +
379 2.0 * y[2] * x[3] * x[3] * z[7] + x[0] * x[1] * y[0] * z[5] +
380 x[0] * y[1] * x[5] * z[0] - x[0] * z[1] * x[5] * y[0] -
381 2.0 * z[2] * x[3] * x[3] * y[7] + 2.0 * x[6] * z[6] * x[5] * y[7] -
382 x[0] * x[1] * y[5] * z[0] - x[6] * y[5] * x[4] * z[6] -
383 2.0 * x[3] * z[0] * x[7] * y[3] - x[6] * z[6] * x[7] * y[4] -
384 2.0 * x[1] * z[1] * x[5] * y[0];
385 s7 = s8 + 2.0 * x[1] * y[1] * x[5] * z[0] +
386 2.0 * x[1] * z[1] * x[0] * y[5] + 2.0 * x[3] * y[0] * x[7] * z[3] +
387 2.0 * x[3] * x[0] * y[3] * z[7] - 2.0 * x[3] * x[0] * y[7] * z[3] -
388 2.0 * x[1] * y[1] * x[0] * z[5] - 2.0 * x[6] * y[6] * x[5] * z[7] +
389 s6 - y[5] * x[1] * x[1] * z[4] + x[6] * z[6] * x[4] * y[7] -
390 2.0 * x[2] * y[2] * x[3] * z[1] + x[6] * z[5] * x[4] * y[6] +
391 x[6] * x[5] * y[4] * z[6] - y[6] * x[7] * x[7] * z[2] -
392 x[6] * x[5] * y[6] * z[4];
393 s8 = x[3] * x[3] * y[7] * z[4] - 2.0 * y[6] * x[7] * x[7] * z[3] +
394 z[6] * x[7] * x[7] * y[2] + 2.0 * z[6] * x[7] * x[7] * y[3] +
395 2.0 * y[1] * x[0] * x[0] * z[3] + 2.0 * x[0] * x[1] * y[3] * z[0] -
396 2.0 * x[0] * y[0] * x[3] * z[4] - 2.0 * x[0] * z[1] * x[4] * y[0] -
397 2.0 * x[0] * y[1] * x[3] * z[0] + 2.0 * x[0] * y[0] * x[4] * z[3] -
398 2.0 * x[0] * z[0] * x[4] * y[3] + 2.0 * x[0] * x[1] * y[0] * z[4] +
399 2.0 * x[0] * z[1] * x[3] * y[0] - 2.0 * x[0] * x[1] * y[0] * z[3] -
400 2.0 * x[0] * x[1] * y[4] * z[0] + 2.0 * x[0] * y[1] * x[4] * z[0];
401 s5 = s8 + 2.0 * x[0] * z[0] * x[3] * y[4] + x[1] * y[1] * x[0] * z[3] -
402 x[1] * z[1] * x[4] * y[0] - x[1] * y[1] * x[0] * z[4] +
403 x[1] * z[1] * x[0] * y[4] - x[1] * y[1] * x[3] * z[0] -
404 x[1] * z[1] * x[0] * y[3] - x[0] * z[5] * x[4] * y[1] +
405 x[0] * y[5] * x[4] * z[1] - 2.0 * x[4] * x[0] * y[4] * z[7] -
406 2.0 * x[4] * y[5] * x[0] * z[4] + 2.0 * x[4] * z[5] * x[0] * y[4] -
407 2.0 * x[4] * x[5] * y[4] * z[0] - 2.0 * x[4] * y[0] * x[7] * z[4] -
408 x[5] * y[5] * x[0] * z[4] + s7;
409 s8 = x[5] * z[5] * x[0] * y[4] - x[5] * z[5] * x[4] * y[0] +
410 x[1] * z[5] * x[0] * y[4] + x[5] * y[5] * x[4] * z[0] -
411 x[0] * y[0] * x[7] * z[4] - x[0] * z[5] * x[4] * y[0] -
412 x[1] * y[5] * x[0] * z[4] + x[0] * z[0] * x[7] * y[4] +
413 x[0] * y[5] * x[4] * z[0] - x[0] * z[0] * x[4] * y[7] +
414 x[0] * x[5] * y[0] * z[4] + x[0] * y[0] * x[4] * z[7] -
415 x[0] * x[5] * y[4] * z[0] - x[3] * x[3] * y[4] * z[7] +
416 2.0 * x[2] * z[2] * x[3] * y[1];
417 s7 = s8 - x[5] * x[5] * y[4] * z[0] + 2.0 * y[5] * x[4] * x[4] * z[0] -
418 2.0 * z[0] * x[4] * x[4] * y[7] + 2.0 * y[0] * x[4] * x[4] * z[7] -
419 2.0 * z[5] * x[4] * x[4] * y[0] + x[5] * x[5] * y[4] * z[7] -
420 x[5] * x[5] * y[7] * z[4] - 2.0 * y[5] * x[4] * x[4] * z[7] +
421 2.0 * z[5] * x[4] * x[4] * y[7] - x[0] * x[0] * y[7] * z[3] +
422 y[2] * x[0] * x[0] * z[3] + x[0] * x[0] * y[3] * z[7] -
423 x[5] * x[1] * y[4] * z[0] + x[5] * y[1] * x[4] * z[0] -
424 x[4] * y[0] * x[3] * z[4];
425 s8 = -x[4] * y[1] * x[0] * z[4] + x[4] * z[1] * x[0] * y[4] +
426 x[4] * x[0] * y[3] * z[4] - x[4] * x[0] * y[4] * z[3] +
427 x[4] * x[1] * y[0] * z[4] - x[4] * x[1] * y[4] * z[0] +
428 x[4] * z[0] * x[3] * y[4] + x[5] * x[1] * y[0] * z[4] +
429 x[1] * z[1] * x[3] * y[0] + x[1] * y[1] * x[4] * z[0] -
430 x[5] * z[1] * x[4] * y[0] - 2.0 * y[1] * x[0] * x[0] * z[4] +
431 2.0 * z[1] * x[0] * x[0] * y[4] + 2.0 * x[0] * x[0] * y[3] * z[4] -
432 2.0 * z[1] * x[0] * x[0] * y[3];
433 s6 = s8 - 2.0 * x[0] * x[0] * y[4] * z[3] + x[1] * x[1] * y[3] * z[0] +
434 x[1] * x[1] * y[0] * z[4] - x[1] * x[1] * y[0] * z[3] -
435 x[1] * x[1] * y[4] * z[0] - z[1] * x[4] * x[4] * y[0] +
436 y[0] * x[4] * x[4] * z[3] - z[0] * x[4] * x[4] * y[3] +
437 y[1] * x[4] * x[4] * z[0] - x[0] * x[0] * y[4] * z[7] -
438 y[5] * x[0] * x[0] * z[4] + z[5] * x[0] * x[0] * y[4] +
439 x[5] * x[5] * y[0] * z[4] - x[0] * y[0] * x[3] * z[7] +
440 x[0] * z[0] * x[3] * y[7] + s7;
441 s8 = s6 + x[0] * x[2] * y[3] * z[0] - x[0] * x[2] * y[0] * z[3] +
442 x[0] * y[0] * x[7] * z[3] - x[0] * y[2] * x[3] * z[0] +
443 x[0] * z[2] * x[3] * y[0] - x[0] * z[0] * x[7] * y[3] +
444 x[1] * x[2] * y[3] * z[0] - z[2] * x[0] * x[0] * y[3] +
445 x[3] * z[2] * x[6] * y[3] - x[3] * x[2] * y[3] * z[6] +
446 x[3] * x[2] * y[6] * z[3] - x[3] * y[2] * x[6] * z[3] -
447 2.0 * x[3] * y[2] * x[7] * z[3] + 2.0 * x[3] * z[2] * x[7] * y[3];
448 s7 = s8 + 2.0 * x[4] * y[5] * x[7] * z[4] +
449 2.0 * x[4] * x[5] * y[4] * z[7] - 2.0 * x[4] * z[5] * x[7] * y[4] -
450 2.0 * x[4] * x[5] * y[7] * z[4] + x[5] * y[5] * x[7] * z[4] -
451 x[5] * z[5] * x[7] * y[4] - x[5] * y[5] * x[4] * z[7] +
452 x[5] * z[5] * x[4] * y[7] + 2.0 * x[3] * x[2] * y[7] * z[3] -
453 2.0 * x[2] * z[2] * x[1] * y[3] + 2.0 * x[4] * z[0] * x[7] * y[4] +
454 2.0 * x[4] * x[0] * y[7] * z[4] + 2.0 * x[4] * x[5] * y[0] * z[4] -
455 x[7] * x[6] * y[2] * z[7] - 2.0 * x[3] * x[2] * y[3] * z[7] -
456 x[0] * x[4] * y[7] * z[3];
457 s8 = x[0] * x[3] * y[7] * z[4] - x[0] * x[3] * y[4] * z[7] +
458 x[0] * x[4] * y[3] * z[7] - 2.0 * x[7] * z[6] * x[3] * y[7] +
459 x[3] * x[7] * y[4] * z[3] - x[3] * x[4] * y[7] * z[3] -
460 x[3] * x[7] * y[3] * z[4] + x[3] * x[4] * y[3] * z[7] +
461 2.0 * x[2] * y[2] * x[1] * z[3] + y[6] * x[3] * x[3] * z[7] -
462 z[6] * x[3] * x[3] * y[7] - x[1] * z[5] * x[4] * y[1] -
463 x[1] * x[5] * y[4] * z[1] - x[1] * z[2] * x[0] * y[3] -
464 x[1] * x[2] * y[0] * z[3] + x[1] * y[2] * x[0] * z[3];
465 s4 = s8 + x[1] * x[5] * y[1] * z[4] + x[1] * y[5] * x[4] * z[1] +
466 x[4] * y[0] * x[7] * z[3] - x[4] * z[0] * x[7] * y[3] -
467 x[4] * x[4] * y[7] * z[3] + x[4] * x[4] * y[3] * z[7] +
468 x[3] * z[6] * x[7] * y[3] - x[3] * x[6] * y[3] * z[7] +
469 x[3] * x[6] * y[7] * z[3] - x[3] * z[6] * x[2] * y[7] -
470 x[3] * y[6] * x[7] * z[3] + x[3] * z[6] * x[7] * y[2] +
471 x[3] * y[6] * x[2] * z[7] + 2.0 * x[5] * z[5] * x[4] * y[6] + s5 +
473 s8 = s4 - 2.0 * x[5] * z[5] * x[6] * y[4] - x[5] * z[6] * x[7] * y[5] +
474 x[5] * x[6] * y[5] * z[7] - x[5] * x[6] * y[7] * z[5] -
475 2.0 * x[5] * y[5] * x[4] * z[6] + 2.0 * x[5] * y[5] * x[6] * z[4] -
476 x[3] * y[6] * x[7] * z[2] + x[4] * x[7] * y[4] * z[3] +
477 x[4] * x[3] * y[7] * z[4] - x[4] * x[7] * y[3] * z[4] -
478 x[4] * x[3] * y[4] * z[7] - z[1] * x[5] * x[5] * y[0] +
479 y[1] * x[5] * x[5] * z[0] + x[4] * y[6] * x[7] * z[4];
480 s7 = s8 - x[4] * x[6] * y[7] * z[4] + x[4] * x[6] * y[4] * z[7] -
481 x[4] * z[6] * x[7] * y[4] - x[5] * y[6] * x[4] * z[7] -
482 x[5] * x[6] * y[7] * z[4] + x[5] * x[6] * y[4] * z[7] +
483 x[5] * z[6] * x[4] * y[7] - y[6] * x[4] * x[4] * z[7] +
484 z[6] * x[4] * x[4] * y[7] + x[7] * x[5] * y[4] * z[7] -
485 y[2] * x[7] * x[7] * z[3] + z[2] * x[7] * x[7] * y[3] -
486 y[0] * x[3] * x[3] * z[4] - y[1] * x[3] * x[3] * z[0] +
487 z[1] * x[3] * x[3] * y[0];
488 s8 = z[0] * x[3] * x[3] * y[4] - x[2] * y[1] * x[3] * z[0] +
489 x[2] * z[1] * x[3] * y[0] + x[3] * y[1] * x[0] * z[3] +
490 x[3] * x[1] * y[3] * z[0] + x[3] * x[0] * y[3] * z[4] -
491 x[3] * z[1] * x[0] * y[3] - x[3] * x[0] * y[4] * z[3] +
492 x[3] * y[0] * x[4] * z[3] - x[3] * z[0] * x[4] * y[3] -
493 x[3] * x[1] * y[0] * z[3] + x[3] * z[0] * x[7] * y[4] -
494 x[3] * y[0] * x[7] * z[4] + z[0] * x[7] * x[7] * y[4] -
495 y[0] * x[7] * x[7] * z[4];
496 s6 = s8 + y[1] * x[0] * x[0] * z[2] - 2.0 * y[2] * x[3] * x[3] * z[0] +
497 2.0 * z[2] * x[3] * x[3] * y[0] - 2.0 * x[1] * x[1] * y[0] * z[2] +
498 2.0 * x[1] * x[1] * y[2] * z[0] - y[2] * x[3] * x[3] * z[1] +
499 z[2] * x[3] * x[3] * y[1] - y[5] * x[4] * x[4] * z[6] +
500 z[5] * x[4] * x[4] * y[6] + x[7] * x[0] * y[7] * z[4] -
501 x[7] * z[0] * x[4] * y[7] - x[7] * x[0] * y[4] * z[7] +
502 x[7] * y[0] * x[4] * z[7] - x[0] * x[1] * y[0] * z[2] +
503 x[0] * z[1] * x[2] * y[0] + s7;
504 s8 = s6 + x[0] * x[1] * y[2] * z[0] - x[0] * y[1] * x[2] * z[0] -
505 x[3] * z[1] * x[0] * y[2] + 2.0 * x[3] * x[2] * y[3] * z[0] +
506 y[0] * x[7] * x[7] * z[3] - z[0] * x[7] * x[7] * y[3] -
507 2.0 * x[3] * z[2] * x[0] * y[3] - 2.0 * x[3] * x[2] * y[0] * z[3] +
508 2.0 * x[3] * y[2] * x[0] * z[3] + x[3] * x[2] * y[3] * z[1] -
509 x[3] * x[2] * y[1] * z[3] - x[5] * y[1] * x[0] * z[5] +
510 x[3] * y[1] * x[0] * z[2] + x[4] * y[6] * x[7] * z[5];
511 s7 = s8 - x[5] * x[1] * y[5] * z[0] + 2.0 * x[1] * z[1] * x[2] * y[0] -
512 2.0 * x[1] * z[1] * x[0] * y[2] + x[1] * x[2] * y[3] * z[1] -
513 x[1] * x[2] * y[1] * z[3] + 2.0 * x[1] * y[1] * x[0] * z[2] -
514 2.0 * x[1] * y[1] * x[2] * z[0] - z[2] * x[1] * x[1] * y[3] +
515 y[2] * x[1] * x[1] * z[3] + y[5] * x[7] * x[7] * z[4] +
516 y[6] * x[7] * x[7] * z[5] + x[7] * x[6] * y[7] * z[2] +
517 x[7] * y[6] * x[2] * z[7] - x[7] * z[6] * x[2] * y[7] -
518 2.0 * x[7] * x[6] * y[3] * z[7];
519 s8 = s7 + 2.0 * x[7] * x[6] * y[7] * z[3] +
520 2.0 * x[7] * y[6] * x[3] * z[7] - x[3] * z[2] * x[1] * y[3] +
521 x[3] * y[2] * x[1] * z[3] + x[5] * x[1] * y[0] * z[5] +
522 x[4] * y[5] * x[6] * z[4] + x[5] * z[1] * x[0] * y[5] -
523 x[4] * z[6] * x[7] * y[5] - x[4] * x[5] * y[6] * z[4] +
524 x[4] * x[5] * y[4] * z[6] - x[4] * z[5] * x[6] * y[4] -
525 x[1] * y[2] * x[3] * z[1] + x[1] * z[2] * x[3] * y[1] -
526 x[2] * x[1] * y[0] * z[2] - x[2] * z[1] * x[0] * y[2];
527 s5 = s8 + x[2] * x[1] * y[2] * z[0] - x[2] * z[2] * x[0] * y[3] +
528 x[2] * y[2] * x[0] * z[3] - x[2] * y[2] * x[3] * z[0] +
529 x[2] * z[2] * x[3] * y[0] + x[2] * y[1] * x[0] * z[2] +
530 x[5] * y[6] * x[7] * z[5] + x[6] * y[5] * x[7] * z[4] +
531 2.0 * x[6] * y[6] * x[7] * z[5] - x[7] * y[0] * x[3] * z[7] +
532 x[7] * z[0] * x[3] * y[7] - x[7] * x[0] * y[7] * z[3] +
533 x[7] * x[0] * y[3] * z[7] + 2.0 * x[7] * x[7] * y[4] * z[3] -
534 2.0 * x[7] * x[7] * y[3] * z[4] - 2.0 * x[1] * x[1] * y[2] * z[5];
535 s8 = s5 - 2.0 * x[7] * x[4] * y[7] * z[3] +
536 2.0 * x[7] * x[3] * y[7] * z[4] - 2.0 * x[7] * x[3] * y[4] * z[7] +
537 2.0 * x[7] * x[4] * y[3] * z[7] + 2.0 * x[1] * x[1] * y[5] * z[2] -
538 x[1] * x[1] * y[2] * z[6] + x[1] * x[1] * y[6] * z[2] +
539 z[1] * x[5] * x[5] * y[2] - y[1] * x[5] * x[5] * z[2] -
540 x[1] * x[1] * y[6] * z[5] + x[1] * x[1] * y[5] * z[6] +
541 x[5] * x[5] * y[6] * z[2] - x[5] * x[5] * y[2] * z[6] -
542 2.0 * y[1] * x[5] * x[5] * z[6];
543 s7 = s8 + 2.0 * z[1] * x[5] * x[5] * y[6] +
544 2.0 * x[1] * z[1] * x[5] * y[2] + 2.0 * x[1] * y[1] * x[2] * z[5] -
545 2.0 * x[1] * z[1] * x[2] * y[5] - 2.0 * x[1] * y[1] * x[5] * z[2] -
546 x[1] * y[1] * x[6] * z[2] - x[1] * z[1] * x[2] * y[6] +
547 x[1] * z[1] * x[6] * y[2] + x[1] * y[1] * x[2] * z[6] -
548 x[5] * x[1] * y[2] * z[5] + x[5] * y[1] * x[2] * z[5] -
549 x[5] * z[1] * x[2] * y[5] + x[5] * x[1] * y[5] * z[2] -
550 x[5] * y[1] * x[6] * z[2] - x[5] * x[1] * y[2] * z[6];
551 s8 = s7 + x[5] * x[1] * y[6] * z[2] + x[5] * z[1] * x[6] * y[2] +
552 x[1] * x[2] * y[5] * z[6] - x[1] * x[2] * y[6] * z[5] -
553 x[1] * z[1] * x[6] * y[5] - x[1] * y[1] * x[5] * z[6] +
554 x[1] * z[1] * x[5] * y[6] + x[1] * y[1] * x[6] * z[5] -
555 x[5] * x[6] * y[5] * z[2] + x[5] * x[2] * y[5] * z[6] -
556 x[5] * x[2] * y[6] * z[5] + x[5] * x[6] * y[2] * z[5] -
557 2.0 * x[5] * z[1] * x[6] * y[5] - 2.0 * x[5] * x[1] * y[6] * z[5] +
558 2.0 * x[5] * x[1] * y[5] * z[6];
559 s6 = s8 + 2.0 * x[5] * y[1] * x[6] * z[5] +
560 2.0 * x[2] * x[1] * y[6] * z[2] + 2.0 * x[2] * z[1] * x[6] * y[2] -
561 2.0 * x[2] * x[1] * y[2] * z[6] + x[2] * x[5] * y[6] * z[2] +
562 x[2] * x[6] * y[2] * z[5] - x[2] * x[5] * y[2] * z[6] +
563 y[1] * x[2] * x[2] * z[5] - z[1] * x[2] * x[2] * y[5] -
564 2.0 * x[2] * y[1] * x[6] * z[2] - x[2] * x[6] * y[5] * z[2] -
565 2.0 * z[1] * x[2] * x[2] * y[6] + x[2] * x[2] * y[5] * z[6] -
566 x[2] * x[2] * y[6] * z[5] + 2.0 * y[1] * x[2] * x[2] * z[6] +
567 x[2] * z[1] * x[5] * y[2];
568 s8 = s6 - x[2] * x[1] * y[2] * z[5] + x[2] * x[1] * y[5] * z[2] -
569 x[2] * y[1] * x[5] * z[2] + x[6] * y[1] * x[2] * z[5] -
570 x[6] * z[1] * x[2] * y[5] - z[1] * x[6] * x[6] * y[5] +
571 y[1] * x[6] * x[6] * z[5] - y[1] * x[6] * x[6] * z[2] -
572 2.0 * x[6] * x[6] * y[5] * z[2] + 2.0 * x[6] * x[6] * y[2] * z[5] +
573 z[1] * x[6] * x[6] * y[2] - x[6] * x[1] * y[6] * z[5] -
574 x[6] * y[1] * x[5] * z[6] + x[6] * x[1] * y[5] * z[6];
575 s7 = s8 + x[6] * z[1] * x[5] * y[6] - x[6] * z[1] * x[2] * y[6] -
576 x[6] * x[1] * y[2] * z[6] + 2.0 * x[6] * x[5] * y[6] * z[2] +
577 2.0 * x[6] * x[2] * y[5] * z[6] - 2.0 * x[6] * x[2] * y[6] * z[5] -
578 2.0 * x[6] * x[5] * y[2] * z[6] + x[6] * x[1] * y[6] * z[2] +
579 x[6] * y[1] * x[2] * z[6] - x[2] * x[2] * y[3] * z[7] +
580 x[2] * x[2] * y[7] * z[3] - x[2] * z[2] * x[3] * y[7] -
581 x[2] * y[2] * x[7] * z[3] + x[2] * z[2] * x[7] * y[3] +
582 x[2] * y[2] * x[3] * z[7] - x[6] * x[6] * y[3] * z[7];
583 s8 = s7 + x[6] * x[6] * y[7] * z[3] - x[6] * x[2] * y[3] * z[7] +
584 x[6] * x[2] * y[7] * z[3] - x[6] * y[6] * x[7] * z[3] +
585 x[6] * y[6] * x[3] * z[7] - x[6] * z[6] * x[3] * y[7] +
586 x[6] * z[6] * x[7] * y[3] + y[6] * x[2] * x[2] * z[7] -
587 z[6] * x[2] * x[2] * y[7] + 2.0 * x[2] * x[2] * y[6] * z[3] -
588 x[2] * y[6] * x[7] * z[2] - 2.0 * x[2] * y[2] * x[6] * z[3] -
589 2.0 * x[2] * x[2] * y[3] * z[6] + 2.0 * x[2] * y[2] * x[3] * z[6] -
590 x[2] * x[6] * y[2] * z[7];
591 s3 = s8 + x[2] * x[6] * y[7] * z[2] + x[2] * z[6] * x[7] * y[2] +
592 2.0 * x[2] * z[2] * x[6] * y[3] - 2.0 * x[2] * z[2] * x[3] * y[6] -
593 y[2] * x[6] * x[6] * z[3] - 2.0 * x[6] * x[6] * y[2] * z[7] +
594 2.0 * x[6] * x[6] * y[7] * z[2] + z[2] * x[6] * x[6] * y[3] -
595 2.0 * x[6] * y[6] * x[7] * z[2] + x[6] * y[2] * x[3] * z[6] -
596 x[6] * x[2] * y[3] * z[6] + 2.0 * x[6] * z[6] * x[7] * y[2] +
597 2.0 * x[6] * y[6] * x[2] * z[7] - 2.0 * x[6] * z[6] * x[2] * y[7] +
598 x[6] * x[2] * y[6] * z[3] - x[6] * z[2] * x[3] * y[6];
599 s8 = y[1] * x[0] * z[3] + x[1] * y[3] * z[0] - y[0] * x[3] * z[7] -
600 x[1] * y[5] * z[0] - y[0] * x[3] * z[4] - x[1] * y[0] * z[2] +
601 z[1] * x[2] * y[0] - y[1] * x[0] * z[5] - z[1] * x[0] * y[2] -
602 y[1] * x[0] * z[4] + z[1] * x[5] * y[2] + z[0] * x[7] * y[4] +
603 z[0] * x[3] * y[7] + z[1] * x[0] * y[4] - x[1] * y[2] * z[5] +
604 x[2] * y[3] * z[0] + y[1] * x[2] * z[5] - x[2] * y[3] * z[7];
605 s7 = s8 - z[1] * x[2] * y[5] - y[1] * x[3] * z[0] - x[0] * y[7] * z[3] -
606 z[1] * x[0] * y[3] + y[5] * x[4] * z[0] - x[0] * y[4] * z[3] +
607 y[5] * x[7] * z[4] - z[0] * x[4] * y[3] + x[1] * y[0] * z[4] -
608 z[2] * x[3] * y[7] - y[6] * x[7] * z[2] + x[1] * y[5] * z[2] +
609 y[6] * x[7] * z[5] + x[0] * y[7] * z[4] + x[1] * y[2] * z[0] -
610 z[1] * x[4] * y[0] - z[0] * x[4] * y[7] - z[2] * x[0] * y[3];
611 s8 = x[5] * y[0] * z[4] + z[1] * x[0] * y[5] - x[2] * y[0] * z[3] -
612 z[1] * x[5] * y[0] + y[1] * x[5] * z[0] - x[1] * y[0] * z[3] -
613 x[1] * y[4] * z[0] - y[1] * x[5] * z[2] + x[2] * y[7] * z[3] +
614 y[0] * x[4] * z[3] - x[0] * y[4] * z[7] + x[1] * y[0] * z[5] -
615 y[1] * x[6] * z[2] - y[2] * x[6] * z[3] + y[0] * x[7] * z[3] -
616 y[2] * x[7] * z[3] + z[2] * x[7] * y[3] + y[2] * x[0] * z[3];
617 s6 = s8 + y[2] * x[3] * z[7] - y[2] * x[3] * z[0] - x[6] * y[5] * z[2] -
618 y[5] * x[0] * z[4] + z[2] * x[3] * y[0] + x[2] * y[3] * z[1] +
619 x[0] * y[3] * z[7] - x[2] * y[1] * z[3] + y[1] * x[4] * z[0] +
620 y[1] * x[0] * z[2] - z[1] * x[2] * y[6] + y[2] * x[3] * z[6] -
621 y[1] * x[2] * z[0] + z[1] * x[3] * y[0] - x[1] * y[2] * z[6] -
622 x[2] * y[3] * z[6] + x[0] * y[3] * z[4] + z[0] * x[3] * y[4] + s7;
623 s8 = x[5] * y[4] * z[7] + s6 + y[5] * x[6] * z[4] - y[5] * x[4] * z[6] +
624 z[6] * x[5] * y[7] - x[6] * y[2] * z[7] - x[6] * y[7] * z[5] +
625 x[5] * y[6] * z[2] + x[6] * y[5] * z[7] + x[6] * y[7] * z[2] +
626 y[6] * x[7] * z[4] - y[6] * x[4] * z[7] - y[6] * x[7] * z[3] +
627 z[6] * x[7] * y[2] + x[2] * y[5] * z[6] - x[2] * y[6] * z[5] +
628 y[6] * x[2] * z[7] + x[6] * y[2] * z[5];
629 s7 = s8 - x[5] * y[2] * z[6] - z[6] * x[7] * y[5] - z[5] * x[7] * y[4] +
630 z[5] * x[0] * y[4] - y[5] * x[4] * z[7] + y[0] * x[4] * z[7] -
631 z[6] * x[2] * y[7] - x[5] * y[4] * z[0] - x[5] * y[7] * z[4] -
632 y[0] * x[7] * z[4] + y[5] * x[4] * z[1] - x[6] * y[7] * z[4] +
633 x[7] * y[4] * z[3] - x[4] * y[7] * z[3] + x[3] * y[7] * z[4] -
634 x[7] * y[3] * z[4] - x[6] * y[3] * z[7] + x[6] * y[4] * z[7];
635 s8 = -x[3] * y[4] * z[7] + x[4] * y[3] * z[7] - z[6] * x[7] * y[4] -
636 z[1] * x[6] * y[5] + x[6] * y[7] * z[3] - x[1] * y[6] * z[5] -
637 y[1] * x[5] * z[6] + z[5] * x[4] * y[7] - z[5] * x[4] * y[0] +
638 x[1] * y[5] * z[6] - y[6] * x[5] * z[7] - y[2] * x[3] * z[1] +
639 z[1] * x[5] * y[6] - y[5] * x[1] * z[4] + z[6] * x[4] * y[7] +
640 x[5] * y[1] * z[4] - x[5] * y[6] * z[4] + y[6] * x[3] * z[7] -
642 s5 = s8 + x[5] * y[4] * z[6] + z[5] * x[1] * y[4] + y[1] * x[6] * z[5] -
643 z[6] * x[3] * y[7] + z[6] * x[7] * y[3] - z[5] * x[6] * y[4] -
644 z[5] * x[4] * y[1] + z[5] * x[4] * y[6] + x[1] * y[6] * z[2] +
645 x[2] * y[6] * z[3] + z[2] * x[6] * y[3] + z[1] * x[6] * y[2] +
646 z[2] * x[3] * y[1] - z[2] * x[1] * y[3] - z[2] * x[3] * y[6] +
647 y[2] * x[1] * z[3] + y[1] * x[2] * z[6] - z[0] * x[7] * y[3] + s7;
650 const double unknown0 = s1 * s2;
652 s8 = 2.0 * x[1] * y[0] * y[0] * z[4] + x[5] * y[0] * y[0] * z[4] -
653 x[1] * y[4] * y[4] * z[0] + z[1] * x[0] * y[4] * y[4] +
654 x[1] * y[0] * y[0] * z[5] - z[1] * x[5] * y[0] * y[0] -
655 2.0 * z[1] * x[4] * y[0] * y[0] + 2.0 * z[1] * x[3] * y[0] * y[0] +
656 z[2] * x[3] * y[0] * y[0] + y[0] * y[0] * x[7] * z[3] +
657 2.0 * y[0] * y[0] * x[4] * z[3] - 2.0 * x[1] * y[0] * y[0] * z[3] -
658 2.0 * x[5] * y[4] * y[4] * z[0] + 2.0 * z[5] * x[0] * y[4] * y[4] +
659 2.0 * y[4] * y[5] * x[7] * z[4];
660 s7 = s8 - x[3] * y[4] * y[4] * z[7] + x[7] * y[4] * y[4] * z[3] +
661 z[0] * x[3] * y[4] * y[4] - 2.0 * x[0] * y[4] * y[4] * z[7] -
662 y[1] * x[1] * y[4] * z[0] - x[0] * y[4] * y[4] * z[3] +
663 2.0 * z[0] * x[7] * y[4] * y[4] + y[4] * z[6] * x[4] * y[7] -
664 y[0] * y[0] * x[7] * z[4] + y[0] * y[0] * x[4] * z[7] +
665 2.0 * y[4] * z[5] * x[4] * y[7] - 2.0 * y[4] * x[5] * y[7] * z[4] -
666 y[4] * x[6] * y[7] * z[4] - y[4] * y[6] * x[4] * z[7] -
667 2.0 * y[4] * y[5] * x[4] * z[7];
668 s8 = y[4] * y[6] * x[7] * z[4] - y[7] * y[2] * x[7] * z[3] +
669 y[7] * z[2] * x[7] * y[3] + y[7] * y[2] * x[3] * z[7] +
670 2.0 * x[5] * y[4] * y[4] * z[7] - y[7] * x[2] * y[3] * z[7] -
671 y[0] * z[0] * x[4] * y[7] + z[6] * x[7] * y[3] * y[3] -
672 y[0] * x[0] * y[4] * z[7] + y[0] * x[0] * y[7] * z[4] -
673 2.0 * x[2] * y[3] * y[3] * z[7] - z[5] * x[4] * y[0] * y[0] +
674 y[0] * z[0] * x[7] * y[4] - 2.0 * z[6] * x[3] * y[7] * y[7] +
675 z[1] * x[2] * y[0] * y[0];
676 s6 = s8 + y[4] * y[0] * x[4] * z[3] - 2.0 * y[4] * z[0] * x[4] * y[7] +
677 2.0 * y[4] * x[0] * y[7] * z[4] - y[4] * z[0] * x[4] * y[3] -
678 y[4] * x[0] * y[7] * z[3] + y[4] * z[0] * x[3] * y[7] -
679 y[4] * y[0] * x[3] * z[4] + y[0] * x[4] * y[3] * z[7] -
680 y[0] * x[7] * y[3] * z[4] - y[0] * x[3] * y[4] * z[7] +
681 y[0] * x[7] * y[4] * z[3] + x[2] * y[7] * y[7] * z[3] -
682 z[2] * x[3] * y[7] * y[7] - 2.0 * z[2] * x[0] * y[3] * y[3] +
683 2.0 * y[0] * z[1] * x[0] * y[4] + s7;
684 s8 = -2.0 * y[0] * y[1] * x[0] * z[4] - y[0] * y[1] * x[0] * z[5] -
685 y[0] * y[0] * x[3] * z[7] - z[1] * x[0] * y[3] * y[3] -
686 y[0] * x[1] * y[5] * z[0] - 2.0 * z[0] * x[7] * y[3] * y[3] +
687 x[0] * y[3] * y[3] * z[4] + 2.0 * x[0] * y[3] * y[3] * z[7] -
688 z[0] * x[4] * y[3] * y[3] + 2.0 * x[2] * y[3] * y[3] * z[0] +
689 x[1] * y[3] * y[3] * z[0] + 2.0 * y[7] * z[6] * x[7] * y[3] +
690 2.0 * y[7] * y[6] * x[3] * z[7] - 2.0 * y[7] * y[6] * x[7] * z[3] -
691 2.0 * y[7] * x[6] * y[3] * z[7];
692 s7 = s8 + y[4] * x[4] * y[3] * z[7] - y[4] * x[4] * y[7] * z[3] +
693 y[4] * x[3] * y[7] * z[4] - y[4] * x[7] * y[3] * z[4] +
694 2.0 * y[4] * y[0] * x[4] * z[7] - 2.0 * y[4] * y[0] * x[7] * z[4] +
695 2.0 * x[6] * y[7] * y[7] * z[3] + y[4] * x[0] * y[3] * z[4] +
696 y[0] * y[1] * x[5] * z[0] + y[0] * z[1] * x[0] * y[5] -
697 x[2] * y[0] * y[0] * z[3] + x[4] * y[3] * y[3] * z[7] -
698 x[7] * y[3] * y[3] * z[4] - x[5] * y[4] * y[4] * z[1] +
699 y[3] * z[0] * x[3] * y[4];
700 s8 = y[3] * y[0] * x[4] * z[3] + 2.0 * y[3] * y[0] * x[7] * z[3] +
701 2.0 * y[3] * y[2] * x[0] * z[3] - 2.0 * y[3] * y[2] * x[3] * z[0] +
702 2.0 * y[3] * z[2] * x[3] * y[0] + y[3] * z[1] * x[3] * y[0] -
703 2.0 * y[3] * x[2] * y[0] * z[3] - y[3] * x[1] * y[0] * z[3] -
704 y[3] * y[1] * x[3] * z[0] - 2.0 * y[3] * x[0] * y[7] * z[3] -
705 y[3] * x[0] * y[4] * z[3] - 2.0 * y[3] * y[0] * x[3] * z[7] -
706 y[3] * y[0] * x[3] * z[4] + 2.0 * y[3] * z[0] * x[3] * y[7] +
707 y[3] * y[1] * x[0] * z[3] + z[5] * x[1] * y[4] * y[4];
708 s5 = s8 - 2.0 * y[0] * y[0] * x[3] * z[4] -
709 2.0 * y[0] * x[1] * y[4] * z[0] + y[3] * x[7] * y[4] * z[3] -
710 y[3] * x[4] * y[7] * z[3] + y[3] * x[3] * y[7] * z[4] -
711 y[3] * x[3] * y[4] * z[7] + y[3] * x[0] * y[7] * z[4] -
712 y[3] * z[0] * x[4] * y[7] - 2.0 * y[4] * y[5] * x[0] * z[4] + s6 +
713 y[7] * x[0] * y[3] * z[7] - y[7] * z[0] * x[7] * y[3] +
714 y[7] * y[0] * x[7] * z[3] - y[7] * y[0] * x[3] * z[7] +
715 2.0 * y[0] * y[1] * x[4] * z[0] + s7;
716 s8 = -2.0 * y[7] * x[7] * y[3] * z[4] -
717 2.0 * y[7] * x[3] * y[4] * z[7] + 2.0 * y[7] * x[4] * y[3] * z[7] +
718 y[7] * y[0] * x[4] * z[7] - y[7] * y[0] * x[7] * z[4] +
719 2.0 * y[7] * x[7] * y[4] * z[3] - y[7] * x[0] * y[4] * z[7] +
720 y[7] * z[0] * x[7] * y[4] + z[5] * x[4] * y[7] * y[7] +
721 2.0 * z[6] * x[4] * y[7] * y[7] - x[5] * y[7] * y[7] * z[4] -
722 2.0 * x[6] * y[7] * y[7] * z[4] + 2.0 * y[7] * x[6] * y[4] * z[7] -
723 2.0 * y[7] * z[6] * x[7] * y[4] + 2.0 * y[7] * y[6] * x[7] * z[4];
724 s7 = s8 - 2.0 * y[7] * y[6] * x[4] * z[7] - y[7] * z[5] * x[7] * y[4] -
725 y[7] * y[5] * x[4] * z[7] - x[0] * y[7] * y[7] * z[3] +
726 z[0] * x[3] * y[7] * y[7] + y[7] * x[5] * y[4] * z[7] +
727 y[7] * y[5] * x[7] * z[4] - y[4] * x[1] * y[5] * z[0] -
728 x[1] * y[0] * y[0] * z[2] - y[4] * y[5] * x[1] * z[4] -
729 2.0 * y[4] * z[5] * x[4] * y[0] - y[4] * y[1] * x[0] * z[4] +
730 y[4] * y[5] * x[4] * z[1] + y[0] * z[0] * x[3] * y[7] -
731 y[0] * z[1] * x[0] * y[2];
732 s8 = 2.0 * y[0] * x[1] * y[3] * z[0] + y[4] * y[1] * x[4] * z[0] +
733 2.0 * y[0] * y[1] * x[0] * z[3] + y[4] * x[1] * y[0] * z[5] -
734 y[4] * z[1] * x[5] * y[0] + y[4] * z[1] * x[0] * y[5] -
735 y[4] * z[1] * x[4] * y[0] + y[4] * x[1] * y[0] * z[4] -
736 y[4] * z[5] * x[4] * y[1] + x[5] * y[4] * y[4] * z[6] -
737 z[5] * x[6] * y[4] * y[4] + y[4] * x[5] * y[1] * z[4] -
738 y[0] * z[2] * x[0] * y[3] + y[0] * y[5] * x[4] * z[0] +
739 y[0] * x[1] * y[2] * z[0];
740 s6 = s8 - 2.0 * y[0] * z[0] * x[4] * y[3] -
741 2.0 * y[0] * x[0] * y[4] * z[3] - 2.0 * y[0] * z[1] * x[0] * y[3] -
742 y[0] * x[0] * y[7] * z[3] - 2.0 * y[0] * y[1] * x[3] * z[0] +
743 y[0] * x[2] * y[3] * z[0] - y[0] * y[1] * x[2] * z[0] +
744 y[0] * y[1] * x[0] * z[2] - y[0] * x[2] * y[1] * z[3] +
745 y[0] * x[0] * y[3] * z[7] + y[0] * x[2] * y[3] * z[1] -
746 y[0] * y[2] * x[3] * z[0] + y[0] * y[2] * x[0] * z[3] -
747 y[0] * y[5] * x[0] * z[4] - y[4] * y[5] * x[4] * z[6] + s7;
748 s8 = s6 + y[4] * z[6] * x[5] * y[7] - y[4] * x[6] * y[7] * z[5] +
749 y[4] * x[6] * y[5] * z[7] - y[4] * z[6] * x[7] * y[5] -
750 y[4] * x[5] * y[6] * z[4] + y[4] * z[5] * x[4] * y[6] +
751 y[4] * y[5] * x[6] * z[4] - 2.0 * y[1] * y[1] * x[0] * z[5] +
752 2.0 * y[1] * y[1] * x[5] * z[0] - 2.0 * y[2] * y[2] * x[6] * z[3] +
753 x[5] * y[1] * y[1] * z[4] - z[5] * x[4] * y[1] * y[1] -
754 x[6] * y[2] * y[2] * z[7] + z[6] * x[7] * y[2] * y[2];
755 s7 = s8 - x[1] * y[5] * y[5] * z[0] + z[1] * x[0] * y[5] * y[5] +
756 y[1] * y[5] * x[4] * z[1] - y[1] * y[5] * x[1] * z[4] -
757 2.0 * y[2] * z[2] * x[3] * y[6] + 2.0 * y[1] * z[1] * x[0] * y[5] -
758 2.0 * y[1] * z[1] * x[5] * y[0] + 2.0 * y[1] * x[1] * y[0] * z[5] -
759 y[2] * x[2] * y[3] * z[7] - y[2] * z[2] * x[3] * y[7] +
760 y[2] * x[2] * y[7] * z[3] + y[2] * z[2] * x[7] * y[3] -
761 2.0 * y[2] * x[2] * y[3] * z[6] + 2.0 * y[2] * x[2] * y[6] * z[3] +
762 2.0 * y[2] * z[2] * x[6] * y[3] - y[3] * y[2] * x[6] * z[3];
763 s8 = y[3] * y[2] * x[3] * z[6] + y[3] * x[2] * y[6] * z[3] -
764 y[3] * z[2] * x[3] * y[6] - y[2] * y[2] * x[7] * z[3] +
765 2.0 * y[2] * y[2] * x[3] * z[6] + y[2] * y[2] * x[3] * z[7] -
766 2.0 * y[1] * x[1] * y[5] * z[0] - x[2] * y[3] * y[3] * z[6] +
767 z[2] * x[6] * y[3] * y[3] + 2.0 * y[6] * x[2] * y[5] * z[6] +
768 2.0 * y[6] * x[6] * y[2] * z[5] - 2.0 * y[6] * x[5] * y[2] * z[6] +
769 2.0 * y[3] * x[2] * y[7] * z[3] - 2.0 * y[3] * z[2] * x[3] * y[7] -
770 y[0] * z[0] * x[7] * y[3] - y[0] * z[2] * x[1] * y[3];
771 s4 = s8 - y[2] * y[6] * x[7] * z[2] + y[0] * z[2] * x[3] * y[1] +
772 y[1] * z[5] * x[1] * y[4] - y[1] * x[5] * y[4] * z[1] +
773 2.0 * y[0] * z[0] * x[3] * y[4] + 2.0 * y[0] * x[0] * y[3] * z[4] +
774 2.0 * z[2] * x[7] * y[3] * y[3] - 2.0 * z[5] * x[7] * y[4] * y[4] +
775 x[6] * y[4] * y[4] * z[7] - z[6] * x[7] * y[4] * y[4] +
776 y[1] * y[1] * x[0] * z[3] + y[3] * x[6] * y[7] * z[2] -
777 y[3] * z[6] * x[2] * y[7] + 2.0 * y[3] * y[2] * x[3] * z[7] + s5 +
779 s8 = s4 + y[2] * x[6] * y[7] * z[2] - y[2] * y[6] * x[7] * z[3] +
780 y[2] * y[6] * x[2] * z[7] - y[2] * z[6] * x[2] * y[7] -
781 y[2] * x[6] * y[3] * z[7] + y[2] * y[6] * x[3] * z[7] +
782 y[2] * z[6] * x[7] * y[3] - 2.0 * y[3] * y[2] * x[7] * z[3] -
783 x[6] * y[3] * y[3] * z[7] + y[1] * y[1] * x[4] * z[0] -
784 y[1] * y[1] * x[3] * z[0] + x[2] * y[6] * y[6] * z[3] -
785 z[2] * x[3] * y[6] * y[6] - y[1] * y[1] * x[0] * z[4];
786 s7 = s8 + y[5] * x[1] * y[0] * z[5] + y[6] * x[2] * y[7] * z[3] -
787 y[6] * y[2] * x[6] * z[3] + y[6] * y[2] * x[3] * z[6] -
788 y[6] * x[2] * y[3] * z[6] + y[6] * z[2] * x[6] * y[3] -
789 y[5] * y[1] * x[0] * z[5] - y[5] * z[1] * x[5] * y[0] +
790 y[5] * y[1] * x[5] * z[0] - y[6] * z[2] * x[3] * y[7] -
791 y[7] * y[6] * x[7] * z[2] + 2.0 * y[6] * y[6] * x[2] * z[7] +
792 y[6] * y[6] * x[3] * z[7] + x[6] * y[7] * y[7] * z[2] -
793 z[6] * x[2] * y[7] * y[7];
794 s8 = -x[2] * y[1] * y[1] * z[3] + 2.0 * y[1] * y[1] * x[0] * z[2] -
795 2.0 * y[1] * y[1] * x[2] * z[0] + z[2] * x[3] * y[1] * y[1] -
796 z[1] * x[0] * y[2] * y[2] + x[1] * y[2] * y[2] * z[0] +
797 y[2] * y[2] * x[0] * z[3] - y[2] * y[2] * x[3] * z[0] -
798 2.0 * y[2] * y[2] * x[3] * z[1] + y[1] * x[1] * y[3] * z[0] -
799 2.0 * y[6] * y[6] * x[7] * z[2] + 2.0 * y[5] * y[5] * x[4] * z[1] -
800 2.0 * y[5] * y[5] * x[1] * z[4] - y[6] * y[6] * x[7] * z[3] -
801 2.0 * y[1] * x[1] * y[0] * z[2];
802 s6 = s8 + 2.0 * y[1] * z[1] * x[2] * y[0] -
803 2.0 * y[1] * z[1] * x[0] * y[2] + 2.0 * y[1] * x[1] * y[2] * z[0] +
804 y[1] * x[2] * y[3] * z[1] - y[1] * y[2] * x[3] * z[1] -
805 y[1] * z[2] * x[1] * y[3] + y[1] * y[2] * x[1] * z[3] -
806 y[2] * x[1] * y[0] * z[2] + y[2] * z[1] * x[2] * y[0] +
807 y[2] * x[2] * y[3] * z[0] - y[7] * x[6] * y[2] * z[7] +
808 y[7] * z[6] * x[7] * y[2] + y[7] * y[6] * x[2] * z[7] -
809 y[6] * x[6] * y[3] * z[7] + y[6] * x[6] * y[7] * z[3] + s7;
810 s8 = s6 - y[6] * z[6] * x[3] * y[7] + y[6] * z[6] * x[7] * y[3] +
811 2.0 * y[2] * y[2] * x[1] * z[3] + x[2] * y[3] * y[3] * z[1] -
812 z[2] * x[1] * y[3] * y[3] + y[1] * x[1] * y[0] * z[4] +
813 y[1] * z[1] * x[3] * y[0] - y[1] * x[1] * y[0] * z[3] +
814 2.0 * y[5] * x[5] * y[1] * z[4] - 2.0 * y[5] * x[5] * y[4] * z[1] +
815 2.0 * y[5] * z[5] * x[1] * y[4] - 2.0 * y[5] * z[5] * x[4] * y[1] -
816 2.0 * y[6] * x[6] * y[2] * z[7] + 2.0 * y[6] * x[6] * y[7] * z[2];
817 s7 = s8 + 2.0 * y[6] * z[6] * x[7] * y[2] -
818 2.0 * y[6] * z[6] * x[2] * y[7] - y[1] * z[1] * x[4] * y[0] +
819 y[1] * z[1] * x[0] * y[4] - y[1] * z[1] * x[0] * y[3] +
820 2.0 * y[6] * y[6] * x[7] * z[5] + 2.0 * y[5] * y[5] * x[6] * z[4] -
821 2.0 * y[5] * y[5] * x[4] * z[6] + x[6] * y[5] * y[5] * z[7] -
822 y[3] * x[2] * y[1] * z[3] - y[3] * y[2] * x[3] * z[1] +
823 y[3] * z[2] * x[3] * y[1] + y[3] * y[2] * x[1] * z[3] -
824 y[2] * x[2] * y[0] * z[3] + y[2] * z[2] * x[3] * y[0];
825 s8 = s7 + 2.0 * y[2] * x[2] * y[3] * z[1] -
826 2.0 * y[2] * x[2] * y[1] * z[3] + y[2] * y[1] * x[0] * z[2] -
827 y[2] * y[1] * x[2] * z[0] + 2.0 * y[2] * z[2] * x[3] * y[1] -
828 2.0 * y[2] * z[2] * x[1] * y[3] - y[2] * z[2] * x[0] * y[3] +
829 y[5] * z[6] * x[5] * y[7] - y[5] * x[6] * y[7] * z[5] -
830 y[5] * y[6] * x[4] * z[7] - y[5] * y[6] * x[5] * z[7] -
831 2.0 * y[5] * x[5] * y[6] * z[4] + 2.0 * y[5] * x[5] * y[4] * z[6] -
832 2.0 * y[5] * z[5] * x[6] * y[4] + 2.0 * y[5] * z[5] * x[4] * y[6];
833 s5 = s8 - y[1] * y[5] * x[0] * z[4] - z[6] * x[7] * y[5] * y[5] +
834 y[6] * y[6] * x[7] * z[4] - y[6] * y[6] * x[4] * z[7] -
835 2.0 * y[6] * y[6] * x[5] * z[7] - x[5] * y[6] * y[6] * z[4] +
836 z[5] * x[4] * y[6] * y[6] + z[6] * x[5] * y[7] * y[7] -
837 x[6] * y[7] * y[7] * z[5] + y[1] * y[5] * x[4] * z[0] +
838 y[7] * y[6] * x[7] * z[5] + y[6] * y[5] * x[7] * z[4] +
839 y[5] * y[6] * x[7] * z[5] + y[6] * y[5] * x[6] * z[4] -
840 y[6] * y[5] * x[4] * z[6] + 2.0 * y[6] * z[6] * x[5] * y[7];
841 s8 = s5 - 2.0 * y[6] * x[6] * y[7] * z[5] +
842 2.0 * y[6] * x[6] * y[5] * z[7] - 2.0 * y[6] * z[6] * x[7] * y[5] -
843 y[6] * x[5] * y[7] * z[4] - y[6] * x[6] * y[7] * z[4] +
844 y[6] * x[6] * y[4] * z[7] - y[6] * z[6] * x[7] * y[4] +
845 y[6] * z[5] * x[4] * y[7] + y[6] * z[6] * x[4] * y[7] +
846 y[6] * x[5] * y[4] * z[6] - y[6] * z[5] * x[6] * y[4] +
847 y[7] * x[6] * y[5] * z[7] - y[7] * z[6] * x[7] * y[5] -
848 2.0 * y[6] * x[6] * y[5] * z[2];
849 s7 = s8 - y[7] * y[6] * x[5] * z[7] + 2.0 * y[4] * y[5] * x[4] * z[0] +
850 2.0 * x[3] * y[7] * y[7] * z[4] - 2.0 * x[4] * y[7] * y[7] * z[3] -
851 z[0] * x[4] * y[7] * y[7] + x[0] * y[7] * y[7] * z[4] -
852 y[0] * z[5] * x[4] * y[1] + y[0] * x[5] * y[1] * z[4] -
853 y[0] * x[5] * y[4] * z[0] + y[0] * z[5] * x[0] * y[4] -
854 y[5] * y[5] * x[0] * z[4] + y[5] * y[5] * x[4] * z[0] +
855 2.0 * y[1] * y[1] * x[2] * z[5] - 2.0 * y[1] * y[1] * x[5] * z[2] +
856 z[1] * x[5] * y[2] * y[2];
857 s8 = s7 - x[1] * y[2] * y[2] * z[5] - y[5] * z[5] * x[4] * y[0] +
858 y[5] * z[5] * x[0] * y[4] - y[5] * x[5] * y[4] * z[0] -
859 y[2] * x[1] * y[6] * z[5] - y[2] * y[1] * x[5] * z[6] +
860 y[2] * z[1] * x[5] * y[6] + y[2] * y[1] * x[6] * z[5] -
861 y[1] * z[1] * x[6] * y[5] - y[1] * x[1] * y[6] * z[5] +
862 y[1] * x[1] * y[5] * z[6] + y[1] * z[1] * x[5] * y[6] +
863 y[5] * x[5] * y[0] * z[4] + y[2] * y[1] * x[2] * z[5] -
864 y[2] * z[1] * x[2] * y[5];
865 s6 = s8 + y[2] * x[1] * y[5] * z[2] - y[2] * y[1] * x[5] * z[2] -
866 y[1] * y[1] * x[5] * z[6] + y[1] * y[1] * x[6] * z[5] -
867 z[1] * x[2] * y[5] * y[5] + x[1] * y[5] * y[5] * z[2] +
868 2.0 * y[1] * z[1] * x[5] * y[2] - 2.0 * y[1] * x[1] * y[2] * z[5] -
869 2.0 * y[1] * z[1] * x[2] * y[5] + 2.0 * y[1] * x[1] * y[5] * z[2] -
870 y[1] * y[1] * x[6] * z[2] + y[1] * y[1] * x[2] * z[6] -
871 2.0 * y[5] * x[1] * y[6] * z[5] - 2.0 * y[5] * y[1] * x[5] * z[6] +
872 2.0 * y[5] * z[1] * x[5] * y[6] + 2.0 * y[5] * y[1] * x[6] * z[5];
873 s8 = s6 - y[6] * z[1] * x[6] * y[5] - y[6] * y[1] * x[5] * z[6] +
874 y[6] * x[1] * y[5] * z[6] + y[6] * y[1] * x[6] * z[5] -
875 2.0 * z[1] * x[6] * y[5] * y[5] + 2.0 * x[1] * y[5] * y[5] * z[6] -
876 x[1] * y[6] * y[6] * z[5] + z[1] * x[5] * y[6] * y[6] +
877 y[5] * z[1] * x[5] * y[2] - y[5] * x[1] * y[2] * z[5] +
878 y[5] * y[1] * x[2] * z[5] - y[5] * y[1] * x[5] * z[2] -
879 y[6] * z[1] * x[2] * y[5] + y[6] * x[1] * y[5] * z[2];
880 s7 = s8 - y[1] * z[1] * x[2] * y[6] - y[1] * x[1] * y[2] * z[6] +
881 y[1] * x[1] * y[6] * z[2] + y[1] * z[1] * x[6] * y[2] +
882 y[5] * x[5] * y[6] * z[2] - y[5] * x[2] * y[6] * z[5] +
883 y[5] * x[6] * y[2] * z[5] - y[5] * x[5] * y[2] * z[6] -
884 x[6] * y[5] * y[5] * z[2] + x[2] * y[5] * y[5] * z[6] -
885 y[5] * y[5] * x[4] * z[7] + y[5] * y[5] * x[7] * z[4] -
886 y[1] * x[6] * y[5] * z[2] + y[1] * x[2] * y[5] * z[6] -
887 y[2] * x[6] * y[5] * z[2] - 2.0 * y[2] * y[1] * x[6] * z[2];
888 s8 = s7 - 2.0 * y[2] * z[1] * x[2] * y[6] +
889 2.0 * y[2] * x[1] * y[6] * z[2] + 2.0 * y[2] * y[1] * x[2] * z[6] -
890 2.0 * x[1] * y[2] * y[2] * z[6] + 2.0 * z[1] * x[6] * y[2] * y[2] +
891 x[6] * y[2] * y[2] * z[5] - x[5] * y[2] * y[2] * z[6] +
892 2.0 * x[5] * y[6] * y[6] * z[2] - 2.0 * x[2] * y[6] * y[6] * z[5] -
893 z[1] * x[2] * y[6] * y[6] - y[6] * y[1] * x[6] * z[2] -
894 y[6] * x[1] * y[2] * z[6] + y[6] * z[1] * x[6] * y[2] +
895 y[6] * y[1] * x[2] * z[6] + x[1] * y[6] * y[6] * z[2];
896 s3 = s8 + y[2] * x[5] * y[6] * z[2] + y[2] * x[2] * y[5] * z[6] -
897 y[2] * x[2] * y[6] * z[5] + y[5] * z[5] * x[4] * y[7] +
898 y[5] * x[5] * y[4] * z[7] - y[5] * z[5] * x[7] * y[4] -
899 y[5] * x[5] * y[7] * z[4] + 2.0 * y[4] * x[5] * y[0] * z[4] -
900 y[3] * z[6] * x[3] * y[7] + y[3] * y[6] * x[3] * z[7] +
901 y[3] * x[6] * y[7] * z[3] - y[3] * y[6] * x[7] * z[3] -
902 y[2] * y[1] * x[3] * z[0] - y[2] * z[1] * x[0] * y[3] +
903 y[2] * y[1] * x[0] * z[3] + y[2] * x[1] * y[3] * z[0];
904 s8 = y[1] * x[0] * z[3] + x[1] * y[3] * z[0] - y[0] * x[3] * z[7] -
905 x[1] * y[5] * z[0] - y[0] * x[3] * z[4] - x[1] * y[0] * z[2] +
906 z[1] * x[2] * y[0] - y[1] * x[0] * z[5] - z[1] * x[0] * y[2] -
907 y[1] * x[0] * z[4] + z[1] * x[5] * y[2] + z[0] * x[7] * y[4] +
908 z[0] * x[3] * y[7] + z[1] * x[0] * y[4] - x[1] * y[2] * z[5] +
909 x[2] * y[3] * z[0] + y[1] * x[2] * z[5] - x[2] * y[3] * z[7];
910 s7 = s8 - z[1] * x[2] * y[5] - y[1] * x[3] * z[0] - x[0] * y[7] * z[3] -
911 z[1] * x[0] * y[3] + y[5] * x[4] * z[0] - x[0] * y[4] * z[3] +
912 y[5] * x[7] * z[4] - z[0] * x[4] * y[3] + x[1] * y[0] * z[4] -
913 z[2] * x[3] * y[7] - y[6] * x[7] * z[2] + x[1] * y[5] * z[2] +
914 y[6] * x[7] * z[5] + x[0] * y[7] * z[4] + x[1] * y[2] * z[0] -
915 z[1] * x[4] * y[0] - z[0] * x[4] * y[7] - z[2] * x[0] * y[3];
916 s8 = x[5] * y[0] * z[4] + z[1] * x[0] * y[5] - x[2] * y[0] * z[3] -
917 z[1] * x[5] * y[0] + y[1] * x[5] * z[0] - x[1] * y[0] * z[3] -
918 x[1] * y[4] * z[0] - y[1] * x[5] * z[2] + x[2] * y[7] * z[3] +
919 y[0] * x[4] * z[3] - x[0] * y[4] * z[7] + x[1] * y[0] * z[5] -
920 y[1] * x[6] * z[2] - y[2] * x[6] * z[3] + y[0] * x[7] * z[3] -
921 y[2] * x[7] * z[3] + z[2] * x[7] * y[3] + y[2] * x[0] * z[3];
922 s6 = s8 + y[2] * x[3] * z[7] - y[2] * x[3] * z[0] - x[6] * y[5] * z[2] -
923 y[5] * x[0] * z[4] + z[2] * x[3] * y[0] + x[2] * y[3] * z[1] +
924 x[0] * y[3] * z[7] - x[2] * y[1] * z[3] + y[1] * x[4] * z[0] +
925 y[1] * x[0] * z[2] - z[1] * x[2] * y[6] + y[2] * x[3] * z[6] -
926 y[1] * x[2] * z[0] + z[1] * x[3] * y[0] - x[1] * y[2] * z[6] -
927 x[2] * y[3] * z[6] + x[0] * y[3] * z[4] + z[0] * x[3] * y[4] + s7;
928 s8 = x[5] * y[4] * z[7] + s6 + y[5] * x[6] * z[4] - y[5] * x[4] * z[6] +
929 z[6] * x[5] * y[7] - x[6] * y[2] * z[7] - x[6] * y[7] * z[5] +
930 x[5] * y[6] * z[2] + x[6] * y[5] * z[7] + x[6] * y[7] * z[2] +
931 y[6] * x[7] * z[4] - y[6] * x[4] * z[7] - y[6] * x[7] * z[3] +
932 z[6] * x[7] * y[2] + x[2] * y[5] * z[6] - x[2] * y[6] * z[5] +
933 y[6] * x[2] * z[7] + x[6] * y[2] * z[5];
934 s7 = s8 - x[5] * y[2] * z[6] - z[6] * x[7] * y[5] - z[5] * x[7] * y[4] +
935 z[5] * x[0] * y[4] - y[5] * x[4] * z[7] + y[0] * x[4] * z[7] -
936 z[6] * x[2] * y[7] - x[5] * y[4] * z[0] - x[5] * y[7] * z[4] -
937 y[0] * x[7] * z[4] + y[5] * x[4] * z[1] - x[6] * y[7] * z[4] +
938 x[7] * y[4] * z[3] - x[4] * y[7] * z[3] + x[3] * y[7] * z[4] -
939 x[7] * y[3] * z[4] - x[6] * y[3] * z[7] + x[6] * y[4] * z[7];
940 s8 = -x[3] * y[4] * z[7] + x[4] * y[3] * z[7] - z[6] * x[7] * y[4] -
941 z[1] * x[6] * y[5] + x[6] * y[7] * z[3] - x[1] * y[6] * z[5] -
942 y[1] * x[5] * z[6] + z[5] * x[4] * y[7] - z[5] * x[4] * y[0] +
943 x[1] * y[5] * z[6] - y[6] * x[5] * z[7] - y[2] * x[3] * z[1] +
944 z[1] * x[5] * y[6] - y[5] * x[1] * z[4] + z[6] * x[4] * y[7] +
945 x[5] * y[1] * z[4] - x[5] * y[6] * z[4] + y[6] * x[3] * z[7] -
947 s5 = s8 + x[5] * y[4] * z[6] + z[5] * x[1] * y[4] + y[1] * x[6] * z[5] -
948 z[6] * x[3] * y[7] + z[6] * x[7] * y[3] - z[5] * x[6] * y[4] -
949 z[5] * x[4] * y[1] + z[5] * x[4] * y[6] + x[1] * y[6] * z[2] +
950 x[2] * y[6] * z[3] + z[2] * x[6] * y[3] + z[1] * x[6] * y[2] +
951 z[2] * x[3] * y[1] - z[2] * x[1] * y[3] - z[2] * x[3] * y[6] +
952 y[2] * x[1] * z[3] + y[1] * x[2] * z[6] - z[0] * x[7] * y[3] + s7;
955 const double unknown1 = s1 * s2;
957 s8 = -z[2] * x[1] * y[2] * z[5] + z[2] * y[1] * x[2] * z[5] -
958 z[2] * z[1] * x[2] * y[5] + z[2] * z[1] * x[5] * y[2] +
959 2.0 * y[5] * x[7] * z[4] * z[4] - y[1] * x[2] * z[0] * z[0] +
960 x[0] * y[3] * z[7] * z[7] - 2.0 * z[5] * z[5] * x[4] * y[1] +
961 2.0 * z[5] * z[5] * x[1] * y[4] + z[5] * z[5] * x[0] * y[4] -
962 2.0 * z[2] * z[2] * x[1] * y[3] + 2.0 * z[2] * z[2] * x[3] * y[1] -
963 x[0] * y[4] * z[7] * z[7] - y[0] * x[3] * z[7] * z[7] +
964 x[1] * y[0] * z[5] * z[5];
965 s7 = s8 - y[1] * x[0] * z[5] * z[5] + z[1] * y[1] * x[2] * z[6] +
966 y[1] * x[0] * z[2] * z[2] + z[2] * z[2] * x[3] * y[0] -
967 z[2] * z[2] * x[0] * y[3] - x[1] * y[0] * z[2] * z[2] +
968 2.0 * z[5] * z[5] * x[4] * y[6] - 2.0 * z[5] * z[5] * x[6] * y[4] -
969 z[5] * z[5] * x[7] * y[4] - x[6] * y[7] * z[5] * z[5] +
970 2.0 * z[2] * y[1] * x[2] * z[6] - 2.0 * z[2] * x[1] * y[2] * z[6] +
971 2.0 * z[2] * z[1] * x[6] * y[2] - y[6] * x[5] * z[7] * z[7] +
972 2.0 * x[6] * y[4] * z[7] * z[7];
973 s8 = -2.0 * y[6] * x[4] * z[7] * z[7] + x[6] * y[5] * z[7] * z[7] -
974 2.0 * z[2] * z[1] * x[2] * y[6] + z[4] * y[6] * x[7] * z[5] +
975 x[5] * y[4] * z[6] * z[6] + z[6] * z[6] * x[4] * y[7] -
976 z[6] * z[6] * x[7] * y[4] - 2.0 * z[6] * z[6] * x[7] * y[5] +
977 2.0 * z[6] * z[6] * x[5] * y[7] - y[5] * x[4] * z[6] * z[6] +
978 2.0 * z[0] * z[0] * x[3] * y[4] - x[6] * y[5] * z[2] * z[2] +
979 z[1] * z[1] * x[5] * y[6] - z[1] * z[1] * x[6] * y[5] -
980 z[5] * z[5] * x[4] * y[0];
981 s6 = s8 + 2.0 * x[1] * y[3] * z[0] * z[0] +
982 2.0 * x[1] * y[6] * z[2] * z[2] - 2.0 * y[1] * x[6] * z[2] * z[2] -
983 y[1] * x[5] * z[2] * z[2] - z[1] * z[1] * x[2] * y[6] -
984 2.0 * z[1] * z[1] * x[2] * y[5] + 2.0 * z[1] * z[1] * x[5] * y[2] +
985 z[1] * y[1] * x[6] * z[5] + y[1] * x[2] * z[5] * z[5] +
986 z[2] * z[1] * x[2] * y[0] + z[1] * x[1] * y[5] * z[6] -
987 z[1] * x[1] * y[6] * z[5] - z[1] * y[1] * x[5] * z[6] -
988 z[1] * x[2] * y[6] * z[5] + z[1] * x[6] * y[2] * z[5] + s7;
989 s8 = -x[1] * y[2] * z[5] * z[5] + z[1] * x[5] * y[6] * z[2] -
990 2.0 * z[2] * z[2] * x[3] * y[6] + 2.0 * z[2] * z[2] * x[6] * y[3] +
991 z[2] * z[2] * x[7] * y[3] - z[2] * z[2] * x[3] * y[7] -
992 z[1] * x[6] * y[5] * z[2] + 2.0 * z[1] * x[1] * y[5] * z[2] -
993 2.0 * x[3] * y[4] * z[7] * z[7] + 2.0 * x[4] * y[3] * z[7] * z[7] +
994 x[5] * y[6] * z[2] * z[2] + y[1] * x[2] * z[6] * z[6] +
995 y[0] * x[4] * z[7] * z[7] + z[2] * x[2] * y[3] * z[0] -
996 x[1] * y[2] * z[6] * z[6];
997 s7 = s8 - z[7] * z[2] * x[3] * y[7] + x[2] * y[6] * z[3] * z[3] -
998 y[2] * x[6] * z[3] * z[3] - z[6] * x[2] * y[3] * z[7] -
999 z[2] * z[1] * x[0] * y[2] + z[6] * z[2] * x[6] * y[3] -
1000 z[6] * z[2] * x[3] * y[6] + z[6] * x[2] * y[6] * z[3] +
1001 z[2] * x[1] * y[2] * z[0] + z[6] * y[2] * x[3] * z[7] -
1002 z[4] * z[5] * x[6] * y[4] + z[4] * z[5] * x[4] * y[6] -
1003 z[4] * y[6] * x[5] * z[7] + z[4] * z[6] * x[4] * y[7] +
1004 z[4] * x[5] * y[4] * z[6];
1005 s8 = -z[6] * y[2] * x[6] * z[3] - z[4] * y[5] * x[4] * z[6] -
1006 z[2] * y[1] * x[5] * z[6] + z[2] * x[1] * y[5] * z[6] +
1007 z[4] * x[6] * y[4] * z[7] + 2.0 * z[4] * z[5] * x[4] * y[7] -
1008 z[4] * z[6] * x[7] * y[4] + x[6] * y[7] * z[3] * z[3] -
1009 2.0 * z[4] * z[5] * x[7] * y[4] - 2.0 * z[4] * y[5] * x[4] * z[7] -
1010 z[4] * y[6] * x[4] * z[7] + z[4] * x[6] * y[5] * z[7] -
1011 z[4] * x[6] * y[7] * z[5] + 2.0 * z[4] * x[5] * y[4] * z[7] +
1012 z[2] * x[2] * y[5] * z[6] - z[2] * x[2] * y[6] * z[5];
1013 s5 = s8 + z[2] * x[6] * y[2] * z[5] - z[2] * x[5] * y[2] * z[6] -
1014 z[2] * x[2] * y[3] * z[7] - x[2] * y[3] * z[7] * z[7] +
1015 2.0 * z[2] * x[2] * y[3] * z[1] - z[2] * y[2] * x[3] * z[0] +
1016 z[2] * y[2] * x[0] * z[3] - z[2] * x[2] * y[0] * z[3] -
1017 z[7] * y[2] * x[7] * z[3] + z[7] * z[2] * x[7] * y[3] +
1018 z[7] * x[2] * y[7] * z[3] + z[6] * y[1] * x[2] * z[5] -
1019 z[6] * x[1] * y[2] * z[5] + z[5] * x[1] * y[5] * z[2] + s6 + s7;
1020 s8 = z[5] * z[1] * x[5] * y[2] - z[5] * z[1] * x[2] * y[5] -
1021 y[6] * x[7] * z[2] * z[2] + 2.0 * z[2] * x[2] * y[6] * z[3] -
1022 2.0 * z[2] * x[2] * y[3] * z[6] + 2.0 * z[2] * y[2] * x[3] * z[6] +
1023 y[2] * x[3] * z[6] * z[6] + y[6] * x[7] * z[5] * z[5] +
1024 z[2] * y[2] * x[3] * z[7] - z[2] * y[2] * x[7] * z[3] -
1025 2.0 * z[2] * y[2] * x[6] * z[3] + z[2] * x[2] * y[7] * z[3] +
1026 x[6] * y[2] * z[5] * z[5] - 2.0 * z[2] * x[2] * y[1] * z[3] -
1027 x[2] * y[6] * z[5] * z[5];
1028 s7 = s8 - y[1] * x[5] * z[6] * z[6] + z[6] * x[1] * y[6] * z[2] -
1029 z[3] * z[2] * x[3] * y[6] + z[6] * z[1] * x[6] * y[2] -
1030 z[6] * z[1] * x[2] * y[6] - z[6] * y[1] * x[6] * z[2] -
1031 2.0 * x[5] * y[2] * z[6] * z[6] + z[4] * z[1] * x[0] * y[4] -
1032 z[3] * x[2] * y[3] * z[6] - z[5] * y[1] * x[5] * z[2] +
1033 z[3] * y[2] * x[3] * z[6] + 2.0 * x[2] * y[5] * z[6] * z[6] -
1034 z[5] * x[1] * y[5] * z[0] + y[2] * x[3] * z[7] * z[7] -
1035 x[2] * y[3] * z[6] * z[6];
1036 s8 = z[5] * y[5] * x[4] * z[0] + z[3] * z[2] * x[6] * y[3] +
1037 x[1] * y[5] * z[6] * z[6] + z[5] * y[5] * x[7] * z[4] -
1038 z[1] * x[1] * y[2] * z[6] + z[1] * x[1] * y[6] * z[2] +
1039 2.0 * z[6] * y[6] * x[7] * z[5] - z[7] * y[6] * x[7] * z[2] -
1040 z[3] * y[6] * x[7] * z[2] + x[6] * y[7] * z[2] * z[2] -
1041 2.0 * z[6] * y[6] * x[7] * z[2] - 2.0 * x[6] * y[3] * z[7] * z[7] -
1042 x[6] * y[2] * z[7] * z[7] - z[5] * x[6] * y[5] * z[2] +
1043 y[6] * x[2] * z[7] * z[7];
1044 s6 = s8 + 2.0 * y[6] * x[3] * z[7] * z[7] + z[6] * z[6] * x[7] * y[3] -
1045 y[6] * x[7] * z[3] * z[3] + z[5] * x[5] * y[0] * z[4] +
1046 2.0 * z[6] * z[6] * x[7] * y[2] - 2.0 * z[6] * z[6] * x[2] * y[7] -
1047 z[6] * z[6] * x[3] * y[7] + z[7] * y[6] * x[7] * z[5] +
1048 z[7] * y[5] * x[7] * z[4] - 2.0 * z[7] * x[7] * y[3] * z[4] +
1049 2.0 * z[7] * x[3] * y[7] * z[4] - 2.0 * z[7] * x[4] * y[7] * z[3] +
1050 2.0 * z[7] * x[7] * y[4] * z[3] - z[7] * y[0] * x[7] * z[4] -
1051 2.0 * z[7] * z[6] * x[3] * y[7] + s7;
1052 s8 = s6 + 2.0 * z[7] * z[6] * x[7] * y[3] +
1053 2.0 * z[7] * x[6] * y[7] * z[3] + z[7] * x[6] * y[7] * z[2] -
1054 2.0 * z[7] * y[6] * x[7] * z[3] + z[7] * z[6] * x[7] * y[2] -
1055 z[7] * z[6] * x[2] * y[7] + z[5] * y[1] * x[5] * z[0] -
1056 z[5] * z[1] * x[5] * y[0] + 2.0 * y[1] * x[6] * z[5] * z[5] -
1057 2.0 * x[1] * y[6] * z[5] * z[5] + z[5] * z[1] * x[0] * y[5] +
1058 z[6] * y[6] * x[3] * z[7] + 2.0 * z[6] * x[6] * y[7] * z[2] -
1059 z[6] * y[6] * x[7] * z[3];
1060 s7 = s8 + 2.0 * z[6] * y[6] * x[2] * z[7] - z[6] * x[6] * y[3] * z[7] +
1061 z[6] * x[6] * y[7] * z[3] - 2.0 * z[6] * x[6] * y[2] * z[7] -
1062 2.0 * z[1] * y[1] * x[5] * z[2] - z[1] * y[1] * x[6] * z[2] -
1063 z[7] * z[0] * x[7] * y[3] - 2.0 * z[6] * x[6] * y[5] * z[2] -
1064 z[2] * z[6] * x[3] * y[7] + z[2] * x[6] * y[7] * z[3] -
1065 z[2] * z[6] * x[2] * y[7] + y[5] * x[6] * z[4] * z[4] +
1066 z[2] * y[6] * x[2] * z[7] + y[6] * x[7] * z[4] * z[4] +
1067 z[2] * z[6] * x[7] * y[2] - 2.0 * x[5] * y[7] * z[4] * z[4];
1068 s8 = -x[6] * y[7] * z[4] * z[4] - z[5] * y[5] * x[0] * z[4] -
1069 z[2] * x[6] * y[2] * z[7] - x[5] * y[6] * z[4] * z[4] -
1070 2.0 * z[5] * y[1] * x[5] * z[6] + 2.0 * z[5] * z[1] * x[5] * y[6] +
1071 2.0 * z[5] * x[1] * y[5] * z[6] - 2.0 * z[5] * z[1] * x[6] * y[5] -
1072 z[5] * x[5] * y[2] * z[6] + z[5] * x[5] * y[6] * z[2] +
1073 z[5] * x[2] * y[5] * z[6] + z[5] * z[5] * x[4] * y[7] -
1074 y[5] * x[4] * z[7] * z[7] + x[5] * y[4] * z[7] * z[7] +
1075 z[6] * z[1] * x[5] * y[6] + z[6] * y[1] * x[6] * z[5];
1076 s4 = s8 - z[6] * z[1] * x[6] * y[5] - z[6] * x[1] * y[6] * z[5] +
1077 z[2] * z[6] * x[7] * y[3] + 2.0 * z[6] * x[6] * y[2] * z[5] +
1078 2.0 * z[6] * x[5] * y[6] * z[2] - 2.0 * z[6] * x[2] * y[6] * z[5] +
1079 z[7] * z[0] * x[3] * y[7] + z[7] * z[0] * x[7] * y[4] +
1080 z[3] * z[6] * x[7] * y[3] - z[3] * z[6] * x[3] * y[7] -
1081 z[3] * x[6] * y[3] * z[7] + z[3] * y[6] * x[2] * z[7] -
1082 z[3] * x[6] * y[2] * z[7] + z[5] * x[5] * y[4] * z[7] + s5 + s7;
1083 s8 = s4 + z[3] * y[6] * x[3] * z[7] - z[7] * x[0] * y[7] * z[3] +
1084 z[6] * x[5] * y[4] * z[7] + z[7] * y[0] * x[7] * z[3] +
1085 z[5] * z[6] * x[4] * y[7] - 2.0 * z[5] * x[5] * y[6] * z[4] +
1086 2.0 * z[5] * x[5] * y[4] * z[6] - z[5] * x[5] * y[7] * z[4] -
1087 z[5] * y[6] * x[5] * z[7] - z[5] * z[6] * x[7] * y[4] -
1088 z[7] * z[0] * x[4] * y[7] - z[5] * z[6] * x[7] * y[5] -
1089 z[5] * y[5] * x[4] * z[7] + z[7] * x[0] * y[7] * z[4];
1090 s7 = s8 - 2.0 * z[5] * y[5] * x[4] * z[6] + z[5] * z[6] * x[5] * y[7] +
1091 z[5] * x[6] * y[5] * z[7] + 2.0 * z[5] * y[5] * x[6] * z[4] +
1092 z[6] * z[5] * x[4] * y[6] - z[6] * x[5] * y[6] * z[4] -
1093 z[6] * z[5] * x[6] * y[4] - z[6] * x[6] * y[7] * z[4] -
1094 2.0 * z[6] * y[6] * x[5] * z[7] + z[6] * x[6] * y[4] * z[7] -
1095 z[6] * y[5] * x[4] * z[7] - z[6] * y[6] * x[4] * z[7] +
1096 z[6] * y[6] * x[7] * z[4] + z[6] * y[5] * x[6] * z[4] +
1097 2.0 * z[6] * x[6] * y[5] * z[7];
1098 s8 = -2.0 * z[6] * x[6] * y[7] * z[5] - z[2] * y[1] * x[2] * z[0] +
1099 2.0 * z[7] * z[6] * x[4] * y[7] - 2.0 * z[7] * x[6] * y[7] * z[4] -
1100 2.0 * z[7] * z[6] * x[7] * y[4] + z[7] * z[5] * x[4] * y[7] -
1101 z[7] * z[5] * x[7] * y[4] - z[7] * x[5] * y[7] * z[4] +
1102 2.0 * z[7] * y[6] * x[7] * z[4] - z[7] * z[6] * x[7] * y[5] +
1103 z[7] * z[6] * x[5] * y[7] - z[7] * x[6] * y[7] * z[5] +
1104 z[1] * z[1] * x[6] * y[2] + s7 + x[1] * y[5] * z[2] * z[2];
1105 s6 = s8 + 2.0 * z[2] * y[2] * x[1] * z[3] -
1106 2.0 * z[2] * y[2] * x[3] * z[1] - 2.0 * x[1] * y[4] * z[0] * z[0] +
1107 2.0 * y[1] * x[4] * z[0] * z[0] + 2.0 * x[2] * y[7] * z[3] * z[3] -
1108 2.0 * y[2] * x[7] * z[3] * z[3] - x[1] * y[5] * z[0] * z[0] +
1109 z[0] * z[0] * x[7] * y[4] + z[0] * z[0] * x[3] * y[7] +
1110 x[2] * y[3] * z[0] * z[0] - 2.0 * y[1] * x[3] * z[0] * z[0] +
1111 y[5] * x[4] * z[0] * z[0] - 2.0 * z[0] * z[0] * x[4] * y[3] +
1112 x[1] * y[2] * z[0] * z[0] - z[0] * z[0] * x[4] * y[7] +
1113 y[1] * x[5] * z[0] * z[0];
1114 s8 = s6 - y[2] * x[3] * z[0] * z[0] + y[1] * x[0] * z[3] * z[3] -
1115 2.0 * x[0] * y[7] * z[3] * z[3] - x[0] * y[4] * z[3] * z[3] -
1116 2.0 * x[2] * y[0] * z[3] * z[3] - x[1] * y[0] * z[3] * z[3] +
1117 y[0] * x[4] * z[3] * z[3] - 2.0 * z[0] * y[1] * x[0] * z[4] +
1118 2.0 * z[0] * z[1] * x[0] * y[4] + 2.0 * z[0] * x[1] * y[0] * z[4] -
1119 2.0 * z[0] * z[1] * x[4] * y[0] - 2.0 * z[3] * x[2] * y[3] * z[7] -
1120 2.0 * z[3] * z[2] * x[3] * y[7] + 2.0 * z[3] * z[2] * x[7] * y[3];
1121 s7 = s8 + 2.0 * z[3] * y[2] * x[3] * z[7] +
1122 2.0 * z[5] * y[5] * x[4] * z[1] + 2.0 * z[0] * y[1] * x[0] * z[3] -
1123 z[0] * y[0] * x[3] * z[7] - 2.0 * z[0] * y[0] * x[3] * z[4] -
1124 z[0] * x[1] * y[0] * z[2] + z[0] * z[1] * x[2] * y[0] -
1125 z[0] * y[1] * x[0] * z[5] - z[0] * z[1] * x[0] * y[2] -
1126 z[0] * x[0] * y[7] * z[3] - 2.0 * z[0] * z[1] * x[0] * y[3] -
1127 z[5] * x[5] * y[4] * z[0] - 2.0 * z[0] * x[0] * y[4] * z[3] +
1128 z[0] * x[0] * y[7] * z[4] - z[0] * z[2] * x[0] * y[3];
1129 s8 = s7 + z[0] * x[5] * y[0] * z[4] + z[0] * z[1] * x[0] * y[5] -
1130 z[0] * x[2] * y[0] * z[3] - z[0] * z[1] * x[5] * y[0] -
1131 2.0 * z[0] * x[1] * y[0] * z[3] + 2.0 * z[0] * y[0] * x[4] * z[3] -
1132 z[0] * x[0] * y[4] * z[7] + z[0] * x[1] * y[0] * z[5] +
1133 z[0] * y[0] * x[7] * z[3] + z[0] * y[2] * x[0] * z[3] -
1134 z[0] * y[5] * x[0] * z[4] + z[0] * z[2] * x[3] * y[0] +
1135 z[0] * x[2] * y[3] * z[1] + z[0] * x[0] * y[3] * z[7] -
1136 z[0] * x[2] * y[1] * z[3];
1137 s5 = s8 + z[0] * y[1] * x[0] * z[2] + z[3] * x[1] * y[3] * z[0] -
1138 2.0 * z[3] * y[0] * x[3] * z[7] - z[3] * y[0] * x[3] * z[4] -
1139 z[3] * x[1] * y[0] * z[2] + z[3] * z[0] * x[7] * y[4] +
1140 2.0 * z[3] * z[0] * x[3] * y[7] + 2.0 * z[3] * x[2] * y[3] * z[0] -
1141 z[3] * y[1] * x[3] * z[0] - z[3] * z[1] * x[0] * y[3] -
1142 z[3] * z[0] * x[4] * y[3] + z[3] * x[1] * y[2] * z[0] -
1143 z[3] * z[0] * x[4] * y[7] - 2.0 * z[3] * z[2] * x[0] * y[3] -
1144 z[3] * x[0] * y[4] * z[7] - 2.0 * z[3] * y[2] * x[3] * z[0];
1145 s8 = s5 + 2.0 * z[3] * z[2] * x[3] * y[0] + z[3] * x[2] * y[3] * z[1] +
1146 2.0 * z[3] * x[0] * y[3] * z[7] + z[3] * y[1] * x[0] * z[2] -
1147 z[4] * y[0] * x[3] * z[7] - z[4] * x[1] * y[5] * z[0] -
1148 z[4] * y[1] * x[0] * z[5] + 2.0 * z[4] * z[0] * x[7] * y[4] +
1149 z[4] * z[0] * x[3] * y[7] + 2.0 * z[4] * y[5] * x[4] * z[0] +
1150 2.0 * y[0] * x[7] * z[3] * z[3] + 2.0 * y[2] * x[0] * z[3] * z[3] -
1151 x[2] * y[1] * z[3] * z[3] - y[0] * x[3] * z[4] * z[4];
1152 s7 = s8 - y[1] * x[0] * z[4] * z[4] + x[1] * y[0] * z[4] * z[4] +
1153 2.0 * x[0] * y[7] * z[4] * z[4] + 2.0 * x[5] * y[0] * z[4] * z[4] -
1154 2.0 * y[5] * x[0] * z[4] * z[4] + 2.0 * z[1] * z[1] * x[2] * y[0] -
1155 2.0 * z[1] * z[1] * x[0] * y[2] + z[1] * z[1] * x[0] * y[4] -
1156 z[1] * z[1] * x[0] * y[3] - z[1] * z[1] * x[4] * y[0] +
1157 2.0 * z[1] * z[1] * x[0] * y[5] - 2.0 * z[1] * z[1] * x[5] * y[0] +
1158 x[2] * y[3] * z[1] * z[1] - x[5] * y[4] * z[0] * z[0] -
1159 z[0] * z[0] * x[7] * y[3];
1160 s8 = s7 + x[7] * y[4] * z[3] * z[3] - x[4] * y[7] * z[3] * z[3] +
1161 y[2] * x[1] * z[3] * z[3] + x[0] * y[3] * z[4] * z[4] -
1162 2.0 * y[0] * x[7] * z[4] * z[4] + x[3] * y[7] * z[4] * z[4] -
1163 x[7] * y[3] * z[4] * z[4] - y[5] * x[1] * z[4] * z[4] +
1164 x[5] * y[1] * z[4] * z[4] + z[1] * z[1] * x[3] * y[0] +
1165 y[5] * x[4] * z[1] * z[1] - y[2] * x[3] * z[1] * z[1] -
1166 x[5] * y[4] * z[1] * z[1] - z[4] * x[0] * y[4] * z[3] -
1167 z[4] * z[0] * x[4] * y[3];
1168 s6 = s8 - z[4] * z[1] * x[4] * y[0] - 2.0 * z[4] * z[0] * x[4] * y[7] +
1169 z[4] * y[1] * x[5] * z[0] - 2.0 * z[5] * x[5] * y[4] * z[1] -
1170 z[4] * x[1] * y[4] * z[0] + z[4] * y[0] * x[4] * z[3] -
1171 2.0 * z[4] * x[0] * y[4] * z[7] + z[4] * x[1] * y[0] * z[5] -
1172 2.0 * z[1] * x[1] * y[2] * z[5] + z[4] * x[0] * y[3] * z[7] +
1173 2.0 * z[5] * x[5] * y[1] * z[4] + z[4] * y[1] * x[4] * z[0] +
1174 z[1] * y[1] * x[0] * z[3] + z[1] * x[1] * y[3] * z[0] -
1175 2.0 * z[1] * x[1] * y[5] * z[0] - 2.0 * z[1] * x[1] * y[0] * z[2];
1176 s8 = s6 - 2.0 * z[1] * y[1] * x[0] * z[5] - z[1] * y[1] * x[0] * z[4] +
1177 2.0 * z[1] * y[1] * x[2] * z[5] - z[1] * y[1] * x[3] * z[0] -
1178 2.0 * z[5] * y[5] * x[1] * z[4] + z[1] * y[5] * x[4] * z[0] +
1179 z[1] * x[1] * y[0] * z[4] + 2.0 * z[1] * x[1] * y[2] * z[0] -
1180 z[1] * z[2] * x[0] * y[3] + 2.0 * z[1] * y[1] * x[5] * z[0] -
1181 z[1] * x[1] * y[0] * z[3] - z[1] * x[1] * y[4] * z[0] +
1182 2.0 * z[1] * x[1] * y[0] * z[5] - z[1] * y[2] * x[3] * z[0];
1183 s7 = s8 + z[1] * z[2] * x[3] * y[0] - z[1] * x[2] * y[1] * z[3] +
1184 z[1] * y[1] * x[4] * z[0] + 2.0 * z[1] * y[1] * x[0] * z[2] +
1185 2.0 * z[0] * z[1] * x[3] * y[0] + 2.0 * z[0] * x[0] * y[3] * z[4] +
1186 z[0] * z[5] * x[0] * y[4] + z[0] * y[0] * x[4] * z[7] -
1187 z[0] * y[0] * x[7] * z[4] - z[0] * x[7] * y[3] * z[4] -
1188 z[0] * z[5] * x[4] * y[0] - z[0] * x[5] * y[4] * z[1] +
1189 z[3] * z[1] * x[3] * y[0] + z[3] * x[0] * y[3] * z[4] +
1190 z[3] * z[0] * x[3] * y[4] + z[3] * y[0] * x[4] * z[7];
1191 s8 = s7 + z[3] * x[3] * y[7] * z[4] - z[3] * x[7] * y[3] * z[4] -
1192 z[3] * x[3] * y[4] * z[7] + z[3] * x[4] * y[3] * z[7] -
1193 z[3] * y[2] * x[3] * z[1] + z[3] * z[2] * x[3] * y[1] -
1194 z[3] * z[2] * x[1] * y[3] - 2.0 * z[3] * z[0] * x[7] * y[3] +
1195 z[4] * z[0] * x[3] * y[4] + 2.0 * z[4] * z[5] * x[0] * y[4] +
1196 2.0 * z[4] * y[0] * x[4] * z[7] - 2.0 * z[4] * x[5] * y[4] * z[0] +
1197 z[4] * y[5] * x[4] * z[1] + z[4] * x[7] * y[4] * z[3] -
1198 z[4] * x[4] * y[7] * z[3];
1199 s3 = s8 - z[4] * x[3] * y[4] * z[7] + z[4] * x[4] * y[3] * z[7] -
1200 2.0 * z[4] * z[5] * x[4] * y[0] - z[4] * x[5] * y[4] * z[1] +
1201 z[4] * z[5] * x[1] * y[4] - z[4] * z[5] * x[4] * y[1] -
1202 2.0 * z[1] * y[1] * x[2] * z[0] + z[1] * z[5] * x[0] * y[4] -
1203 z[1] * z[5] * x[4] * y[0] - z[1] * y[5] * x[1] * z[4] +
1204 z[1] * x[5] * y[1] * z[4] + z[1] * z[5] * x[1] * y[4] -
1205 z[1] * z[5] * x[4] * y[1] + z[1] * z[2] * x[3] * y[1] -
1206 z[1] * z[2] * x[1] * y[3] + z[1] * y[2] * x[1] * z[3];
1207 s8 = y[1] * x[0] * z[3] + x[1] * y[3] * z[0] - y[0] * x[3] * z[7] -
1208 x[1] * y[5] * z[0] - y[0] * x[3] * z[4] - x[1] * y[0] * z[2] +
1209 z[1] * x[2] * y[0] - y[1] * x[0] * z[5] - z[1] * x[0] * y[2] -
1210 y[1] * x[0] * z[4] + z[1] * x[5] * y[2] + z[0] * x[7] * y[4] +
1211 z[0] * x[3] * y[7] + z[1] * x[0] * y[4] - x[1] * y[2] * z[5] +
1212 x[2] * y[3] * z[0] + y[1] * x[2] * z[5] - x[2] * y[3] * z[7];
1213 s7 = s8 - z[1] * x[2] * y[5] - y[1] * x[3] * z[0] - x[0] * y[7] * z[3] -
1214 z[1] * x[0] * y[3] + y[5] * x[4] * z[0] - x[0] * y[4] * z[3] +
1215 y[5] * x[7] * z[4] - z[0] * x[4] * y[3] + x[1] * y[0] * z[4] -
1216 z[2] * x[3] * y[7] - y[6] * x[7] * z[2] + x[1] * y[5] * z[2] +
1217 y[6] * x[7] * z[5] + x[0] * y[7] * z[4] + x[1] * y[2] * z[0] -
1218 z[1] * x[4] * y[0] - z[0] * x[4] * y[7] - z[2] * x[0] * y[3];
1219 s8 = x[5] * y[0] * z[4] + z[1] * x[0] * y[5] - x[2] * y[0] * z[3] -
1220 z[1] * x[5] * y[0] + y[1] * x[5] * z[0] - x[1] * y[0] * z[3] -
1221 x[1] * y[4] * z[0] - y[1] * x[5] * z[2] + x[2] * y[7] * z[3] +
1222 y[0] * x[4] * z[3] - x[0] * y[4] * z[7] + x[1] * y[0] * z[5] -
1223 y[1] * x[6] * z[2] - y[2] * x[6] * z[3] + y[0] * x[7] * z[3] -
1224 y[2] * x[7] * z[3] + z[2] * x[7] * y[3] + y[2] * x[0] * z[3];
1225 s6 = s8 + y[2] * x[3] * z[7] - y[2] * x[3] * z[0] - x[6] * y[5] * z[2] -
1226 y[5] * x[0] * z[4] + z[2] * x[3] * y[0] + x[2] * y[3] * z[1] +
1227 x[0] * y[3] * z[7] - x[2] * y[1] * z[3] + y[1] * x[4] * z[0] +
1228 y[1] * x[0] * z[2] - z[1] * x[2] * y[6] + y[2] * x[3] * z[6] -
1229 y[1] * x[2] * z[0] + z[1] * x[3] * y[0] - x[1] * y[2] * z[6] -
1230 x[2] * y[3] * z[6] + x[0] * y[3] * z[4] + z[0] * x[3] * y[4] + s7;
1231 s8 = x[5] * y[4] * z[7] + s6 + y[5] * x[6] * z[4] - y[5] * x[4] * z[6] +
1232 z[6] * x[5] * y[7] - x[6] * y[2] * z[7] - x[6] * y[7] * z[5] +
1233 x[5] * y[6] * z[2] + x[6] * y[5] * z[7] + x[6] * y[7] * z[2] +
1234 y[6] * x[7] * z[4] - y[6] * x[4] * z[7] - y[6] * x[7] * z[3] +
1235 z[6] * x[7] * y[2] + x[2] * y[5] * z[6] - x[2] * y[6] * z[5] +
1236 y[6] * x[2] * z[7] + x[6] * y[2] * z[5];
1237 s7 = s8 - x[5] * y[2] * z[6] - z[6] * x[7] * y[5] - z[5] * x[7] * y[4] +
1238 z[5] * x[0] * y[4] - y[5] * x[4] * z[7] + y[0] * x[4] * z[7] -
1239 z[6] * x[2] * y[7] - x[5] * y[4] * z[0] - x[5] * y[7] * z[4] -
1240 y[0] * x[7] * z[4] + y[5] * x[4] * z[1] - x[6] * y[7] * z[4] +
1241 x[7] * y[4] * z[3] - x[4] * y[7] * z[3] + x[3] * y[7] * z[4] -
1242 x[7] * y[3] * z[4] - x[6] * y[3] * z[7] + x[6] * y[4] * z[7];
1243 s8 = -x[3] * y[4] * z[7] + x[4] * y[3] * z[7] - z[6] * x[7] * y[4] -
1244 z[1] * x[6] * y[5] + x[6] * y[7] * z[3] - x[1] * y[6] * z[5] -
1245 y[1] * x[5] * z[6] + z[5] * x[4] * y[7] - z[5] * x[4] * y[0] +
1246 x[1] * y[5] * z[6] - y[6] * x[5] * z[7] - y[2] * x[3] * z[1] +
1247 z[1] * x[5] * y[6] - y[5] * x[1] * z[4] + z[6] * x[4] * y[7] +
1248 x[5] * y[1] * z[4] - x[5] * y[6] * z[4] + y[6] * x[3] * z[7] -
1250 s5 = s8 + x[5] * y[4] * z[6] + z[5] * x[1] * y[4] + y[1] * x[6] * z[5] -
1251 z[6] * x[3] * y[7] + z[6] * x[7] * y[3] - z[5] * x[6] * y[4] -
1252 z[5] * x[4] * y[1] + z[5] * x[4] * y[6] + x[1] * y[6] * z[2] +
1253 x[2] * y[6] * z[3] + z[2] * x[6] * y[3] + z[1] * x[6] * y[2] +
1254 z[2] * x[3] * y[1] - z[2] * x[1] * y[3] - z[2] * x[3] * y[6] +
1255 y[2] * x[1] * z[3] + y[1] * x[2] * z[6] - z[0] * x[7] * y[3] + s7;
1258 const double unknown2 = s1 * s2;
1260 return {unknown0, unknown1, unknown2};
1276 template <
int structdim,
int dim,
int spacedim>
1288 template <
int dim,
int spacedim>
1294 return (accessor.
vertex(1) - accessor.
vertex(0)).norm();
1362 for (
unsigned int d = 0;
d < 3; ++
d)
1363 a_max =
std::max(std::abs(a[
d]), a_max);
1364 if (a_max < 1
e-14 * accessor.
diameter())
1365 return cross_product_3d(b0, b1).norm();
1370 constexpr
unsigned int n_qp = 4;
1371 const double c1 = 2.0 / 7.0 *
std::sqrt(6.0 / 5.0);
1372 const double w0 = (18.0 -
std::sqrt(30)) / 72.0;
1373 const double w1 = (18.0 +
std::sqrt(30)) / 72.0;
1375 const std::array<double, n_qp> q{{
1381 const std::array<double, n_qp>
w{{w0, w1, w1, w0}};
1384 for (
unsigned int i = 0; i < n_qp; ++i)
1385 for (
unsigned int j = 0; j < n_qp; ++j)
1386 area += cross_product_3d(q[i] * a + b0, q[j] * a + b1).norm() *
1396 return 0.5 * cross_product_3d(v01, v02).
norm();
1405 template <
int structdim,
int dim,
int spacedim>
1412 return std::numeric_limits<double>::quiet_NaN();
1416 template <
int dim,
int spacedim>
1424 template <
int dim,
int spacedim>
1432 template <
int dim,
int spacedim>
1440 template <
int structdim,
int dim,
int spacedim>
1443 const bool use_interpolation)
1445 if (use_interpolation)
1448 const auto points_and_weights =
1452 points_and_weights.first.end()),
1454 points_and_weights.second.end()));
1458 return get_new_point_on_object(obj);
1467 template <
int structdim,
int dim,
int spacedim>
1470 template <
int structdim,
int dim,
int spacedim>
1473 template <
int structdim,
int dim,
int spacedim>
1480 template <
int structdim,
int dim,
int spacedim>
1483 const std::initializer_list<int> &new_indices)
const
1486 this->objects().get_bounding_object_indices(this->present_index);
1491 for (
const auto &new_index : new_indices)
1493 bounding_object_index_ref[i] = new_index;
1500 template <
int structdim,
int dim,
int spacedim>
1503 const std::initializer_list<unsigned int> &new_indices)
const
1506 this->objects().get_bounding_object_indices(this->present_index);
1511 for (
const auto &new_index : new_indices)
1513 bounding_object_index_ref[i] = new_index;
1520 template <
int structdim,
int dim,
int spacedim>
1526 return ::barycenter(*
this);
1531 template <
int structdim,
int dim,
int spacedim>
1537 return ::measure(*
this);
1542 template <
int structdim,
int dim,
int spacedim>
1547 std::make_pair(this->vertex(0), this->vertex(0));
1549 for (
unsigned int v = 1; v < this->n_vertices(); ++v)
1552 for (
unsigned int k = 0; k < spacedim; ++k)
1554 boundary_points.first[k] =
std::min(boundary_points.first[k], x[k]);
1555 boundary_points.second[k] =
std::max(boundary_points.second[k], x[k]);
1564 template <
int structdim,
int dim,
int spacedim>
1567 const unsigned int )
const
1570 return std::numeric_limits<double>::signaling_NaN();
1601 const unsigned int lines[2][2] = {
1608 this->line(lines[axis][1])->
diameter());
1615 const unsigned int lines[2][2] = {
1622 this->line(lines[axis][1])->
diameter());
1630 const unsigned int lines[3][4] = {
1637 double lengths[4] = {this->line(lines[axis][0])->diameter(),
1638 this->line(lines[axis][1])->diameter(),
1639 this->line(lines[axis][2])->diameter(),
1640 this->line(lines[axis][3])->diameter()};
1653 set_manifold_id(manifold_ind);
1655 if (this->has_children())
1656 for (
unsigned int c = 0; c < this->n_children(); ++c)
1657 this->child(c)->set_all_manifold_ids(manifold_ind);
1662 for (
const unsigned int i : this->face_indices())
1663 this->quad(i)->set_manifold_id(manifold_ind);
1664 for (
const unsigned int i : this->line_indices())
1665 this->line(i)->set_manifold_id(manifold_ind);
1669 template <
int structdim,
int dim,
int spacedim>
1676 std::array<double, GeometryInfo<structdim>::vertices_per_cell>
w;
1680 p[i] = this->vertex(i);
1684 return this->get_manifold().get_new_point(
make_array_view(p.begin(), p.end()),
1691 template <
int structdim,
int dim,
int spacedim>
1699 vertices[v] = this->vertex(v);
1702 GridTools::affine_cell_approximation<structdim, spacedim>(
vertices);
1710 template <
int structdim,
int dim,
int spacedim>
1713 const bool respect_manifold,
1714 const bool use_interpolation)
const
1716 if (respect_manifold ==
false)
1722 return p / this->n_vertices();
1725 return get_new_point_on_object(*
this, use_interpolation);
1732 template <
int spacedim>
1743 template <
int spacedim>
1753 template <
int spacedim>
1763 template <
int spacedim>
1770 for (
unsigned int c = 0; c < this->
n_children(); ++c)
1771 this->
child(c)->recursively_set_user_flag();
1776 template <
int spacedim>
1783 for (
unsigned int c = 0; c < this->
n_children(); ++c)
1784 this->
child(c)->recursively_clear_user_flag();
1789 template <
int spacedim>
1799 template <
int spacedim>
1809 template <
int spacedim>
1819 template <
int spacedim>
1830 template <
int spacedim>
1837 for (
unsigned int c = 0; c < this->
n_children(); ++c)
1838 this->
child(c)->recursively_set_user_pointer(p);
1843 template <
int spacedim>
1850 for (
unsigned int c = 0; c < this->
n_children(); ++c)
1851 this->
child(c)->recursively_clear_user_pointer();
1856 template <
int spacedim>
1866 template <
int spacedim>
1876 template <
int spacedim>
1887 template <
int spacedim>
1894 for (
unsigned int c = 0; c < this->
n_children(); ++c)
1895 this->
child(c)->recursively_set_user_index(p);
1900 template <
int spacedim>
1907 for (
unsigned int c = 0; c < this->
n_children(); ++c)
1908 this->
child(c)->recursively_clear_user_index();
1921 return (this->vertex(0)[0] <= p[0]) && (p[0] <= this->vertex(1)[0]);
1954 static const int direction[4] = {-1, 1, 1, -1};
1955 for (
unsigned int f = 0; f < 4; ++f)
1979 if ((-face[1] * to_p[0] + face[0] * to_p[1]) < 0)
2010 const unsigned int dim = 3;
2011 const unsigned int spacedim = 3;
2015 for (
unsigned int v = 1; v < this->n_vertices(); ++v)
2016 for (
unsigned int d = 0;
d < dim; ++
d)
2024 for (
unsigned int d = 0;
d < dim; ++
d)
2025 if ((p[
d] < minp[
d]) || (p[
d] > maxp[
d]))
2040 .
template get_default_linear_mapping<dim, spacedim>()
2054 template <
int dim,
int spacedim>
2060 ExcMessage(
"The current iterator points to an inactive cell. "
2061 "You cannot convert it to an iterator to an active cell."));
2063 ExcMessage(
"The triangulation associated with the iterator does not "
2064 "match that of the DoFHandler."));
2075 template <
int dim,
int spacedim>
2081 ExcMessage(
"The triangulation associated with the iterator does not "
2082 "match that of the DoFHandler."));
2097 template <
int dim,
int spacedim>
2098 template <
int dim_,
int spacedim_>
2108 .template get_default_linear_mapping<dim_, spacedim_>()
2109 .transform_real_to_unit_cell(cell_iterator, p);
2120 return point_inside_codim<1, 2>(p);
2128 return point_inside_codim<1, 3>(p);
2138 return point_inside_codim<2, 3>(p);
2143 template <
int dim,
int spacedim>
2147 for (
const auto face : this->face_indices())
2148 if (at_boundary(face))
2156 template <
int dim,
int spacedim>
2161 return this->
tria->
levels[this->present_level]
2162 ->cells.boundary_or_material_id[this->present_index]
2168 template <
int dim,
int spacedim>
2176 ->cells.boundary_or_material_id[this->present_index]
2177 .material_id = mat_id;
2182 template <
int dim,
int spacedim>
2187 set_material_id(mat_id);
2189 if (this->has_children())
2190 for (
unsigned int c = 0; c < this->n_children(); ++c)
2191 this->child(c)->recursively_set_material_id(mat_id);
2196 template <
int dim,
int spacedim>
2202 Assert(this->is_active(),
2203 ExcMessage(
"set_subdomain_id() can only be called on active cells!"));
2204 this->
tria->
levels[this->present_level]->subdomain_ids[this->present_index] =
2210 template <
int dim,
int spacedim>
2217 ->level_subdomain_ids[this->present_index] = new_level_subdomain_id;
2221 template <
int dim,
int spacedim>
2226 if (dim == spacedim)
2229 return this->
tria->
levels[this->present_level]
2230 ->direction_flags[this->present_index];
2235 template <
int dim,
int spacedim>
2238 const bool new_direction_flag)
const
2243 ->direction_flags[this->present_index] = new_direction_flag;
2245 Assert(new_direction_flag ==
true,
2246 ExcMessage(
"If dim==spacedim, direction flags are always true and "
2247 "can not be set to anything else."));
2252 template <
int dim,
int spacedim>
2258 this->
tria->
levels[this->present_level]->parents[this->present_index / 2] =
2264 template <
int dim,
int spacedim>
2273 return this->
tria->
levels[this->present_level]
2274 ->parents[this->present_index / 2];
2279 template <
int dim,
int spacedim>
2282 const unsigned int active_cell_index)
const
2285 ->active_cell_indices[this->present_index] = active_cell_index;
2290 template <
int dim,
int spacedim>
2296 ->global_active_cell_indices[this->present_index] = index;
2301 template <
int dim,
int spacedim>
2307 ->global_level_cell_indices[this->present_index] = index;
2312 template <
int dim,
int spacedim>
2319 this->present_level - 1,
2326 template <
int dim,
int spacedim>
2331 if (this->has_children())
2332 for (
unsigned int c = 0; c < this->n_children(); ++c)
2333 this->child(c)->recursively_set_subdomain_id(new_subdomain_id);
2335 set_subdomain_id(new_subdomain_id);
2340 template <
int dim,
int spacedim>
2343 const unsigned int i,
2352 .first = pointer->present_level;
2355 .second = pointer->present_index;
2370 template <
int dim,
int spacedim>
2374 std::array<unsigned char, 30> id;
2377 const unsigned int n_child_indices = ptr.
level();
2379 while (ptr.
level() > 0)
2382 const unsigned int n_children = parent->n_children();
2385 unsigned char v =
static_cast<unsigned char>(-1);
2386 for (
unsigned int c = 0; c < n_children; ++c)
2388 if (parent->child_index(c) == ptr.
index())
2396 id[ptr.
level() - 1] = v;
2402 const unsigned int coarse_index = ptr.
index();
2411 template <
int dim,
int spacedim>
2414 const unsigned int neighbor)
const
2427 if ((dim == 1) && (spacedim == dim))
2431 this->neighbor(neighbor);
2446 const unsigned int this_face_index = face_index(neighbor);
2448 const unsigned int neighbor_guess =
2451 if (neighbor_guess < neighbor_cell->n_faces() &&
2452 neighbor_cell->face_index(neighbor_guess) == this_face_index)
2453 return neighbor_guess;
2460 for (
const unsigned int face_no : neighbor_cell->face_indices())
2461 if (neighbor_cell->face_index(face_no) == this_face_index)
2477 template <
int dim,
int spacedim>
2480 const unsigned int face_no)
const
2482 const unsigned int n2 = neighbor_of_neighbor_internal(face_no);
2491 template <
int dim,
int spacedim>
2494 const unsigned int face_no)
const
2496 return neighbor_of_neighbor_internal(face_no) ==
2502 template <
int dim,
int spacedim>
2503 std::pair<unsigned int, unsigned int>
2505 const unsigned int neighbor)
const
2510 Assert(neighbor_is_coarser(neighbor),
2517 const int this_face_index = face_index(neighbor);
2519 this->neighbor(neighbor);
2534 const unsigned int face_no_guess =
2538 neighbor_cell->face(face_no_guess);
2540 if (face_guess->has_children())
2541 for (
unsigned int subface_no = 0;
2542 subface_no < face_guess->n_children();
2544 if (face_guess->child_index(subface_no) == this_face_index)
2545 return std::make_pair(face_no_guess, subface_no);
2551 for (
const unsigned int face_no : neighbor_cell->face_indices())
2553 if (face_no != face_no_guess)
2556 face = neighbor_cell->face(face_no);
2557 if (face->has_children())
2558 for (
unsigned int subface_no = 0;
2559 subface_no < face->n_children();
2561 if (face->child_index(subface_no) == this_face_index)
2562 return std::make_pair(face_no, subface_no);
2576 const int this_face_index = face_index(neighbor);
2578 this->neighbor(neighbor);
2586 const unsigned int face_no_guess =
2590 neighbor_cell->face(face_no_guess);
2592 if (face_guess->has_children())
2593 for (
unsigned int subface_no = 0;
2594 subface_no < face_guess->n_children();
2597 if (face_guess->child_index(subface_no) == this_face_index)
2601 return std::make_pair(face_no_guess,
2602 translate_subface_no(face_guess,
2605 if (face_guess->child(subface_no)->has_children())
2606 for (
unsigned int subsub_no = 0;
2607 subsub_no < face_guess->child(subface_no)->n_children();
2609 if (face_guess->child(subface_no)->child_index(subsub_no) ==
2614 return std::make_pair(face_no_guess,
2615 translate_subface_no(face_guess,
2622 for (
const unsigned int face_no : neighbor_cell->face_indices())
2624 if (face_no == face_no_guess)
2628 neighbor_cell->face(face_no);
2630 if (!face->has_children())
2633 for (
unsigned int subface_no = 0; subface_no < face->n_children();
2636 if (face->child_index(subface_no) == this_face_index)
2640 return std::make_pair(face_no,
2641 translate_subface_no(face,
2644 if (face->child(subface_no)->has_children())
2645 for (
unsigned int subsub_no = 0;
2646 subsub_no < face->child(subface_no)->n_children();
2648 if (face->child(subface_no)->child_index(subsub_no) ==
2653 return std::make_pair(face_no,
2654 translate_subface_no(face,
2678 template <
int dim,
int spacedim>
2681 const unsigned int i_face)
const
2696 cell_iterator current_cell(*
this);
2698 std::make_pair(current_cell, i_face)) !=
2699 this->tria->periodic_face_map.end())
2706 template <
int dim,
int spacedim>
2720 cell_iterator current_cell(*
this);
2728 return my_face_pair->second.first.first;
2733 template <
int dim,
int spacedim>
2736 const unsigned int i_face)
const
2738 if (!(this->face(i_face)->at_boundary()))
2739 return this->neighbor(i_face);
2740 else if (this->has_periodic_neighbor(i_face))
2741 return this->periodic_neighbor(i_face);
2745 return this->neighbor(i_face);
2750 template <
int dim,
int spacedim>
2753 const unsigned int i_face,
2754 const unsigned int i_subface)
const
2770 cell_iterator my_it(*
this);
2780 cell_iterator parent_nb_it = my_face_pair->second.first.first;
2781 unsigned int nb_face_num = my_face_pair->second.first.second;
2783 parent_nb_it->face(nb_face_num);
2789 unsigned int sub_neighbor_num =
2793 my_face_pair->second.second[0],
2794 my_face_pair->second.second[1],
2795 my_face_pair->second.second[2],
2796 nb_parent_face_it->refinement_case());
2797 return parent_nb_it->child(sub_neighbor_num);
2802 template <
int dim,
int spacedim>
2803 std::pair<unsigned int, unsigned int>
2805 const unsigned int i_face)
const
2821 const int my_face_index = this->face_index(i_face);
2822 cell_iterator my_it(*
this);
2832 cell_iterator nb_it = my_face_pair->second.first.first;
2833 unsigned int face_num_of_nb = my_face_pair->second.first.second;
2844 cell_iterator p_nb_of_p_nb = nb_face_pair->second.first.first;
2846 p_nb_of_p_nb->face(nb_face_pair->second.first.second);
2847 for (
unsigned int i_subface = 0; i_subface < parent_face_it->n_children();
2849 if (parent_face_it->child_index(i_subface) == my_face_index)
2850 return std::make_pair(face_num_of_nb, i_subface);
2863 template <
int dim,
int spacedim>
2866 const unsigned int i_face)
const
2868 return periodic_neighbor(i_face)->index();
2873 template <
int dim,
int spacedim>
2876 const unsigned int i_face)
const
2878 return periodic_neighbor(i_face)->level();
2883 template <
int dim,
int spacedim>
2886 const unsigned int i_face)
const
2888 return periodic_neighbor_face_no(i_face);
2893 template <
int dim,
int spacedim>
2896 const unsigned int i_face)
const
2908 cell_iterator my_it(*
this);
2919 return my_face_pair->second.first.second;
2924 template <
int dim,
int spacedim>
2927 const unsigned int i_face)
const
2948 cell_iterator my_it(*
this);
2959 cell_iterator nb_it = my_face_pair->second.first.first;
2960 unsigned int face_num_of_nb = my_face_pair->second.first.second;
2971 const unsigned int my_level = this->
level();
2972 const unsigned int neighbor_level = nb_face_pair->second.first.first->level();
2974 return my_level > neighbor_level;
2979 template <
int dim,
int spacedim>
2986 return (neighbor_index(i) == -1);
2991 template <
int dim,
int spacedim>
2996 return at_boundary();
2999 for (
unsigned int l = 0;
l < this->n_lines(); ++
l)
3000 if (this->line(
l)->at_boundary())
3009 template <
int dim,
int spacedim>
3012 const unsigned int face,
3013 const unsigned int subface)
const
3015 Assert(!this->has_children(),
3016 ExcMessage(
"The present cell must not have children!"));
3017 Assert(!this->at_boundary(face),
3018 ExcMessage(
"The present cell must have a valid neighbor!"));
3019 Assert(this->neighbor(face)->has_children() ==
true,
3020 ExcMessage(
"The neighbor must have children!"));
3028 const auto neighbor_cell = this->neighbor(face);
3031 Assert(neighbor_cell->refinement_case() ==
3037 const unsigned int neighbor_face =
3038 this->neighbor_of_neighbor(face);
3043 const unsigned int neighbor_subface =
3044 (!(this->line_orientation(face)) !=
3045 !(neighbor_cell->line_orientation(neighbor_face))) ?
3049 const unsigned int neighbor_child_index =
3050 neighbor_cell->reference_cell().child_cell_on_face(
3051 neighbor_face, neighbor_subface);
3053 neighbor_cell->child(neighbor_child_index);
3057 Assert(sub_neighbor->refinement_case() ==
3061 return sub_neighbor;
3065 const unsigned int neighbor_neighbor =
3066 this->neighbor_of_neighbor(face);
3067 const unsigned int neighbor_child_index =
3069 this->neighbor(face)->refinement_case(),
3074 this->neighbor(face)->child(neighbor_child_index);
3080 while (sub_neighbor->has_children())
3083 sub_neighbor->refinement_case(),
3084 neighbor_neighbor) ==
3089 sub_neighbor->refinement_case(), neighbor_neighbor, 0));
3092 return sub_neighbor;
3160 mother_face = this->face(face);
3161 const unsigned int total_children =
3162 mother_face->n_active_descendants();
3167 unsigned int neighbor_neighbor;
3170 this->neighbor(face);
3174 mother_face->refinement_case();
3175 if (mother_face_ref_case ==
3184 neighbor_neighbor = this->neighbor_of_neighbor(face);
3188 const unsigned int neighbor_child_index =
3190 neighbor->refinement_case(),
3193 neighbor->face_orientation(neighbor_neighbor),
3194 neighbor->face_flip(neighbor_neighbor),
3195 neighbor->face_rotation(neighbor_neighbor));
3196 neighbor_child = neighbor->child(neighbor_child_index);
3200 Assert((this->face(face)->child(subface) ==
3201 neighbor_child->face(neighbor_neighbor)),
3211 unsigned int first_child_to_find;
3212 unsigned int neighbor_child_index;
3213 if (total_children == 2)
3214 first_child_to_find = subface;
3217 first_child_to_find = subface / 2;
3218 if (total_children == 3 && subface == 1 &&
3219 !mother_face->child(0)->has_children())
3220 first_child_to_find = 1;
3222 if (neighbor_is_coarser(face))
3224 std::pair<unsigned int, unsigned int> indices =
3225 neighbor_of_coarser_neighbor(face);
3226 neighbor_neighbor = indices.first;
3271 unsigned int iso_subface;
3272 if (neighbor->face(neighbor_neighbor)
3274 iso_subface = 2 * first_child_to_find + indices.second;
3277 Assert(neighbor->face(neighbor_neighbor)
3278 ->refinement_case() ==
3282 first_child_to_find + 2 * indices.second;
3284 neighbor_child_index =
3286 neighbor->refinement_case(),
3289 neighbor->face_orientation(neighbor_neighbor),
3290 neighbor->face_flip(neighbor_neighbor),
3291 neighbor->face_rotation(neighbor_neighbor));
3295 neighbor_neighbor = neighbor_of_neighbor(face);
3296 neighbor_child_index =
3298 neighbor->refinement_case(),
3300 first_child_to_find,
3301 neighbor->face_orientation(neighbor_neighbor),
3302 neighbor->face_flip(neighbor_neighbor),
3303 neighbor->face_rotation(neighbor_neighbor),
3304 mother_face_ref_case);
3307 neighbor_child = neighbor->child(neighbor_child_index);
3313 neighbor_child->has_children() &&
3315 neighbor_child->refinement_case(), neighbor_neighbor) ==
3317 neighbor_child = neighbor_child->child(
3319 neighbor_child->refinement_case(),
3329 if (total_children == 3)
3331 if (mother_face->child(0)->has_children())
3334 neighbor_child = neighbor_child->child(
3336 neighbor_child->refinement_case(),
3339 neighbor_child->face_orientation(
3341 neighbor_child->face_flip(neighbor_neighbor),
3342 neighbor_child->face_rotation(
3344 mother_face->child(0)->refinement_case()));
3348 Assert(mother_face->child(1)->has_children(),
3351 neighbor_child = neighbor_child->child(
3353 neighbor_child->refinement_case(),
3356 neighbor_child->face_orientation(
3358 neighbor_child->face_flip(neighbor_neighbor),
3359 neighbor_child->face_rotation(
3361 mother_face->child(1)->refinement_case()));
3364 else if (total_children == 4)
3366 neighbor_child = neighbor_child->child(
3368 neighbor_child->refinement_case(),
3371 neighbor_child->face_orientation(neighbor_neighbor),
3372 neighbor_child->face_flip(neighbor_neighbor),
3373 neighbor_child->face_rotation(neighbor_neighbor),
3374 mother_face->child(subface / 2)->refinement_case()));
3382 while (neighbor_child->has_children())
3385 neighbor_child->refinement_case(), neighbor_neighbor, 0));
3391 switch (this->subface_case(face))
3396 requested = mother_face->child(subface);
3401 mother_face->child(subface / 2)->child(subface % 2);
3410 requested = mother_face->child(0)->child(subface);
3413 requested = mother_face->child(1);
3424 requested = mother_face->child(0);
3428 requested = mother_face->child(1)->child(subface - 1);
3438 Assert(requested == neighbor_child->face(neighbor_neighbor),
3442 return neighbor_child;
3459 template <
int structdim,
int dim,
int spacedim>
3468 template <
int structdim,
int dim,
int spacedim>
3477 template <
int structdim,
int dim,
int spacedim>
3486 #include "tria_accessor.inst"
ArrayView< typename std::remove_reference< typename std::iterator_traits< Iterator >::reference >::type, MemorySpaceType > make_array_view(const Iterator begin, const Iterator end)
void recursively_set_subdomain_id(const types::subdomain_id new_subdomain_id) const
TriaIterator< CellAccessor< dim, spacedim > > parent() const
void set_active_cell_index(const unsigned int active_cell_index) const
unsigned int neighbor_of_neighbor_internal(const unsigned int neighbor) const
TriaIterator< CellAccessor< dim, spacedim > > periodic_neighbor(const unsigned int i) const
void set_direction_flag(const bool new_direction_flag) const
void recursively_set_material_id(const types::material_id new_material_id) const
void set_level_subdomain_id(const types::subdomain_id new_level_subdomain_id) const
TriaActiveIterator< DoFCellAccessor< dim, spacedim, false > > as_dof_handler_iterator(const DoFHandler< dim, spacedim > &dof_handler) const
TriaIterator< CellAccessor< dim, spacedim > > neighbor_child_on_subface(const unsigned int face_no, const unsigned int subface_no) const
void set_subdomain_id(const types::subdomain_id new_subdomain_id) const
bool neighbor_is_coarser(const unsigned int face_no) const
void set_global_level_cell_index(const types::global_cell_index index) const
bool has_periodic_neighbor(const unsigned int i) const
int periodic_neighbor_level(const unsigned int i) const
std::pair< unsigned int, unsigned int > neighbor_of_coarser_neighbor(const unsigned int neighbor) const
unsigned int neighbor_of_neighbor(const unsigned int face_no) const
void set_material_id(const types::material_id new_material_id) const
bool point_inside_codim(const Point< spacedim_ > &p) const
bool has_boundary_lines() const
TriaIterator< CellAccessor< dim, spacedim > > periodic_neighbor_child_on_subface(const unsigned int face_no, const unsigned int subface_no) const
int periodic_neighbor_index(const unsigned int i) const
bool periodic_neighbor_is_coarser(const unsigned int i) const
void set_global_active_cell_index(const types::global_cell_index index) const
void set_neighbor(const unsigned int i, const TriaIterator< CellAccessor< dim, spacedim >> &pointer) const
void set_parent(const unsigned int parent_index)
std::pair< unsigned int, unsigned int > periodic_neighbor_of_coarser_periodic_neighbor(const unsigned face_no) const
bool point_inside(const Point< spacedim > &p) const
bool direction_flag() const
types::material_id material_id() const
TriaIterator< DoFCellAccessor< dim, spacedim, true > > as_dof_handler_level_iterator(const DoFHandler< dim, spacedim > &dof_handler) const
TriaIterator< CellAccessor< dim, spacedim > > neighbor_or_periodic_neighbor(const unsigned int i) const
unsigned int periodic_neighbor_of_periodic_neighbor(const unsigned int i) const
unsigned int periodic_neighbor_face_no(const unsigned int i) const
const Triangulation< dim, spacedim > & get_triangulation() const
typename LevelSelector::cell_iterator level_cell_iterator
static IteratorState::IteratorStates state()
Abstract base class for mapping classes.
numbers::NumberTraits< Number >::real_type norm() const
void copy_from(const TriaAccessorBase &)
const Triangulation< dim, spacedim > & get_triangulation() const
void set_user_index(const unsigned int p) const
void clear_user_pointer() const
void recursively_set_user_index(const unsigned int p) const
void clear_user_data() const
Point< spacedim > & vertex(const unsigned int i) const
Point< structdim > real_to_unit_cell_affine_approximation(const Point< spacedim > &point) const
void recursively_clear_user_index() const
void recursively_set_user_pointer(void *p) const
double extent_in_direction(const unsigned int axis) const
Point< spacedim > intermediate_point(const Point< structdim > &coordinates) const
unsigned int n_vertices() const
bool has_children() const
void recursively_clear_user_flag() const
Point< spacedim > barycenter() const
BoundingBox< spacedim > bounding_box() const
void clear_user_flag() const
unsigned int n_children() const
void recursively_set_user_flag() const
bool user_flag_set() const
void set_user_flag() const
unsigned int vertex_index(const unsigned int i) const
Point< spacedim > center(const bool respect_manifold=false, const bool interpolate_from_surrounding=false) const
void clear_user_index() const
void set_bounding_object_indices(const std::initializer_list< int > &new_indices) const
unsigned int user_index() const
void set_user_pointer(void *p) const
void recursively_clear_user_pointer() const
ReferenceCell reference_cell() const
void * user_pointer() const
TriaIterator< TriaAccessor< structdim, dim, spacedim > > child(const unsigned int i) const
std_cxx20::ranges::iota_view< unsigned int, unsigned int > vertex_indices() const
const Manifold< dim, spacedim > & get_manifold() const
std::map< std::pair< cell_iterator, unsigned int >, std::pair< std::pair< cell_iterator, unsigned int >, std::bitset< 3 > > > periodic_face_map
virtual types::coarse_cell_id coarse_cell_index_to_coarse_cell_id(const unsigned int coarse_cell_index) const
std::vector< std::unique_ptr<::internal::TriangulationImplementation::TriaLevel > > levels
const std::vector< Point< spacedim > > & get_vertices() const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcCellHasNoParent()
static ::ExceptionBase & ExcNeighborIsNotCoarser()
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcCellNotUsed()
#define Assert(cond, exc)
static ::ExceptionBase & ExcNotImplemented()
static ::ExceptionBase & ExcImpossibleInDim(int arg1)
#define AssertIndexRange(index, range)
static ::ExceptionBase & ExcMessage(std::string arg1)
static ::ExceptionBase & ExcNoPeriodicNeighbor()
static ::ExceptionBase & ExcNeighborIsCoarser()
#define AssertThrow(cond, exc)
typename ActiveSelector::active_cell_iterator active_cell_iterator
void set_all_manifold_ids(const types::manifold_id) const
void reference_cell(Triangulation< dim, spacedim > &tria, const ReferenceCell &reference_cell)
@ valid
Iterator points to a valid object.
@ invalid
Iterator is invalid, probably due to an error.
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)
Point< spacedim > point(const gp_Pnt &p, const double tolerance=1e-10)
SymmetricTensor< 2, dim, Number > d(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
Tensor< 2, dim, Number > w(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
Tensor< 2, dim, Number > l(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
constexpr const ReferenceCell Tetrahedron
constexpr const ReferenceCell Quadrilateral
constexpr const ReferenceCell Wedge
constexpr const ReferenceCell Pyramid
constexpr const ReferenceCell Triangle
constexpr const ReferenceCell Hexahedron
Point< 1 > transform_real_to_unit_cell(const std::array< Point< spacedim >, GeometryInfo< 1 >::vertices_per_cell > &vertices, const Point< spacedim > &p)
const types::material_id invalid_material_id
static const unsigned int invalid_unsigned_int
unsigned int subdomain_id
unsigned int global_cell_index
::VectorizedArray< Number, width > sqrt(const ::VectorizedArray< Number, width > &)
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)
static double d_linear_shape_function(const Point< dim > &xi, const unsigned int i)
static bool is_inside_unit_cell(const Point< dim > &p)
const ::Triangulation< dim, spacedim > & tria