26 #include <deal.II/grid/tria_accessor.templates.h>
28 #include <deal.II/grid/tria_iterator.templates.h>
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>
1259 return (accessor.
vertex(1) - accessor.
vertex(0)).norm();
1311 if (std::abs((v03 * normal) * (v03 * normal) /
1312 ((v03 * v03) * (v01 * v01) * (v02 * v02))) >= 1
e-24)
1340 return 0.03025074832140047 *
1342 0.0048207809894260144 * c + 0.13886368840594743 *
d +
1343 0.13886368840594743 *
e +
1344 0.0096415619788520288 * f) +
1345 0.056712962962962937 *
1347 0.10890625570683385 * c + 0.13886368840594743 *
d +
1348 0.66001895641514374 *
e + 0.045826333352825557 * f) +
1349 0.056712962962962937 *
1351 0.44888729929169013 * c + 0.13886368840594743 *
d +
1352 1.3399810435848563 *
e + 0.09303735505312187 * f) +
1353 0.03025074832140047 *
1355 0.86595709258347853 * c + 0.13886368840594743 *
d +
1356 1.8611363115940525 *
e + 0.12922212642709538 * f) +
1357 0.056712962962962937 *
1359 0.0048207809894260144 * c + 0.66001895641514374 *
d +
1360 0.13886368840594743 *
e + 0.045826333352825557 * f) +
1361 0.10632332575267359 *
1363 0.10890625570683385 * c + 0.66001895641514374 *
d +
1364 0.66001895641514374 *
e + 0.2178125114136677 * f) +
1365 0.10632332575267359 *
1367 0.44888729929169013 * c + 0.66001895641514374 *
d +
1368 1.3399810435848563 *
e + 0.44220644500147605 * f) +
1369 0.056712962962962937 *
1371 0.86595709258347853 * c + 0.66001895641514374 *
d +
1372 1.8611363115940525 *
e + 0.61419262306231814 * f) +
1373 0.056712962962962937 *
1375 0.0048207809894260144 * c + 1.3399810435848563 *
d +
1376 0.13886368840594743 *
e + 0.09303735505312187 * f) +
1377 0.10632332575267359 *
1379 0.10890625570683385 * c + 1.3399810435848563 *
d +
1380 0.66001895641514374 *
e + 0.44220644500147605 * f) +
1381 0.10632332575267359 *
1383 0.44888729929169013 * c + 1.3399810435848563 *
d +
1384 1.3399810435848563 *
e + 0.89777459858338027 * f) +
1385 0.056712962962962937 *
1387 0.86595709258347853 * c + 1.3399810435848563 *
d +
1388 1.8611363115940525 *
e + 1.2469436885317342 * f) +
1389 0.03025074832140047 *
1391 0.0048207809894260144 * c + 1.8611363115940525 *
d +
1392 0.13886368840594743 *
e + 0.12922212642709538 * f) +
1393 0.056712962962962937 *
1395 0.10890625570683385 * c + 1.8611363115940525 *
d +
1396 0.66001895641514374 *
e + 0.61419262306231814 * f) +
1397 0.056712962962962937 *
1399 0.44888729929169013 * c + 1.8611363115940525 *
d +
1400 1.3399810435848563 *
e + 1.2469436885317342 * f) +
1401 0.03025074832140047 *
1403 0.86595709258347853 * c + 1.8611363115940525 *
d +
1404 1.8611363115940525 *
e + 1.7319141851669571 * f);
1411 return 0.5 * twice_area.
norm();
1416 template <
int structdim,
int dim,
int spacedim>
1423 return std::numeric_limits<double>::quiet_NaN();
1427 template <
int dim,
int spacedim>
1435 template <
int dim,
int spacedim>
1443 template <
int dim,
int spacedim>
1451 template <
int structdim,
int dim,
int spacedim>
1454 const bool use_interpolation)
1456 if (use_interpolation)
1459 const auto points_and_weights =
1463 points_and_weights.first.end()),
1465 points_and_weights.second.end()));
1469 return get_new_point_on_object(obj);
1478 template <
int structdim,
int dim,
int spacedim>
1481 template <
int structdim,
int dim,
int spacedim>
1484 template <
int structdim,
int dim,
int spacedim>
1491 template <
int structdim,
int dim,
int spacedim>
1497 this->objects().cells[this->present_index] = object;
1502 template <
int structdim,
int dim,
int spacedim>
1508 return ::barycenter(*
this);
1513 template <
int structdim,
int dim,
int spacedim>
1519 return ::measure(*
this);
1524 template <
int structdim,
int dim,
int spacedim>
1529 std::make_pair(this->vertex(0), this->vertex(0));
1531 for (
unsigned int v = 1; v < GeometryInfo<structdim>::vertices_per_cell; ++v)
1534 for (
unsigned int k = 0; k < spacedim; ++k)
1536 boundary_points.first[k] =
std::min(boundary_points.first[k], x[k]);
1537 boundary_points.second[k] =
std::max(boundary_points.second[k], x[k]);
1546 template <
int structdim,
int dim,
int spacedim>
1549 const unsigned int )
const
1552 return std::numeric_limits<double>::signaling_NaN();
1583 const unsigned int lines[2][2] = {
1590 this->line(lines[axis][1])->
diameter());
1597 const unsigned int lines[2][2] = {
1604 this->line(lines[axis][1])->
diameter());
1612 const unsigned int lines[3][4] = {
1619 double lengths[4] = {this->line(lines[axis][0])->diameter(),
1620 this->line(lines[axis][1])->diameter(),
1621 this->line(lines[axis][2])->diameter(),
1622 this->line(lines[axis][3])->diameter()};
1635 set_manifold_id(manifold_ind);
1637 if (this->has_children())
1638 for (
unsigned int c = 0; c < this->n_children(); ++c)
1639 this->child(c)->set_all_manifold_ids(manifold_ind);
1645 for (
unsigned int i = 0; i < 6; ++i)
1646 this->quad(i)->set_manifold_id(manifold_ind);
1648 for (
unsigned int i = 0; i < 12; ++i)
1649 this->line(i)->set_manifold_id(manifold_ind);
1653 template <
int structdim,
int dim,
int spacedim>
1660 std::array<double, GeometryInfo<structdim>::vertices_per_cell>
w;
1664 p[i] = this->vertex(i);
1668 return this->get_manifold().get_new_point(
make_array_view(p.begin(), p.end()),
1697 struct TransformR2UAffine
1712 [1] = {{-1.000000}, {1.000000}};
1716 {1.000000, 0.000000};
1727 [2] = {{-0.500000, -0.500000},
1728 {0.500000, -0.500000},
1729 {-0.500000, 0.500000},
1730 {0.500000, 0.500000}};
1740 {0.750000, 0.250000, 0.250000, -0.250000};
1746 {-0.250000, -0.250000, -0.250000},
1747 {0.250000, -0.250000, -0.250000},
1748 {-0.250000, 0.250000, -0.250000},
1749 {0.250000, 0.250000, -0.250000},
1750 {-0.250000, -0.250000, 0.250000},
1751 {0.250000, -0.250000, 0.250000},
1752 {-0.250000, 0.250000, 0.250000},
1753 {0.250000, 0.250000, 0.250000}
1771 template <
int structdim,
int dim,
int spacedim>
1784 for (
unsigned int d = 0;
d < spacedim; ++
d)
1786 for (
unsigned int e = 0;
e < structdim; ++
e)
1787 A[
d][
e] +=
vertices[v][
d] * TransformR2UAffine<structdim>::KA[v][
e];
1792 b -=
vertices[v] * TransformR2UAffine<structdim>::Kb[v];
1799 template <
int structdim,
int dim,
int spacedim>
1802 const bool respect_manifold,
1803 const bool use_interpolation)
const
1805 if (respect_manifold ==
false)
1814 return get_new_point_on_object(*
this, use_interpolation);
1826 return (this->vertex(0)[0] <= p[0]) && (p[0] <= this->vertex(1)[0]);
1856 static const int direction[4] = {-1, 1, 1, -1};
1857 for (
unsigned int f = 0; f < 4; ++f)
1881 if ((-face[1] * to_p[0] + face[0] * to_p[1]) < 0)
1909 const unsigned int dim = 3;
1910 const unsigned int spacedim = 3;
1914 for (
unsigned int v = 1; v < GeometryInfo<dim>::vertices_per_cell; ++v)
1915 for (
unsigned int d = 0;
d < dim; ++
d)
1923 for (
unsigned int d = 0;
d < dim;
d++)
1924 if ((p[
d] < minp[
d]) || (p[
d] > maxp[
d]))
1939 cell_iterator, p)));
1955 template <
int dim,
int spacedim>
1956 template <
int dim_,
int spacedim_>
1974 return point_inside_codim<1, 2>(p);
1982 return point_inside_codim<1, 3>(p);
1990 return point_inside_codim<2, 3>(p);
1995 template <
int dim,
int spacedim>
2002 return at_boundary(0) || at_boundary(1);
2004 return (at_boundary(0) || at_boundary(1) || at_boundary(2) ||
2007 return (at_boundary(0) || at_boundary(1) || at_boundary(2) ||
2008 at_boundary(3) || at_boundary(4) || at_boundary(5));
2017 template <
int dim,
int spacedim>
2022 return this->tria->levels[this->present_level]
2023 ->cells.boundary_or_material_id[this->present_index]
2029 template <
int dim,
int spacedim>
2036 this->tria->levels[this->present_level]
2037 ->cells.boundary_or_material_id[this->present_index]
2038 .material_id = mat_id;
2043 template <
int dim,
int spacedim>
2048 set_material_id(mat_id);
2050 if (this->has_children())
2051 for (
unsigned int c = 0; c < this->n_children(); ++c)
2052 this->child(c)->recursively_set_material_id(mat_id);
2057 template <
int dim,
int spacedim>
2063 Assert(this->is_active(),
2064 ExcMessage(
"set_subdomain_id() can only be called on active cells!"));
2065 this->tria->levels[this->present_level]->subdomain_ids[this->present_index] =
2071 template <
int dim,
int spacedim>
2076 return this->tria->levels[this->present_level]
2077 ->level_subdomain_ids[this->present_index];
2082 template <
int dim,
int spacedim>
2088 this->tria->levels[this->present_level]
2089 ->level_subdomain_ids[this->present_index] = new_level_subdomain_id;
2093 template <
int dim,
int spacedim>
2098 if (dim == spacedim)
2101 return this->tria->levels[this->present_level]
2102 ->direction_flags[this->present_index];
2107 template <
int dim,
int spacedim>
2110 const bool new_direction_flag)
const
2114 this->tria->levels[this->present_level]
2115 ->direction_flags[this->present_index] = new_direction_flag;
2117 Assert(new_direction_flag ==
true,
2118 ExcMessage(
"If dim==spacedim, direction flags are always true and "
2119 "can not be set to anything else."));
2124 template <
int dim,
int spacedim>
2127 const unsigned int active_cell_index)
2131 this->tria->levels[this->present_level]
2132 ->active_cell_indices[this->present_index] = active_cell_index;
2137 template <
int dim,
int spacedim>
2143 this->tria->levels[this->present_level]->parents[this->present_index / 2] =
2149 template <
int dim,
int spacedim>
2158 return this->tria->levels[this->present_level]
2159 ->parents[this->present_index / 2];
2164 template <
int dim,
int spacedim>
2169 return this->tria->levels[this->present_level]
2170 ->active_cell_indices[this->present_index];
2175 template <
int dim,
int spacedim>
2182 this->present_level - 1,
2189 template <
int dim,
int spacedim>
2194 if (this->has_children())
2195 for (
unsigned int c = 0; c < this->n_children(); ++c)
2196 this->child(c)->recursively_set_subdomain_id(new_subdomain_id);
2198 set_subdomain_id(new_subdomain_id);
2203 template <
int dim,
int spacedim>
2206 const unsigned int i,
2213 this->tria->levels[this->present_level]
2215 .first = pointer->present_level;
2216 this->tria->levels[this->present_level]
2218 .second = pointer->present_index;
2222 this->tria->levels[this->present_level]
2225 this->tria->levels[this->present_level]
2233 template <
int dim,
int spacedim>
2237 std::array<unsigned char, 30> id;
2240 const unsigned int n_child_indices = ptr.level();
2242 while (ptr.level() > 0)
2245 const unsigned int n_children = parent->n_children();
2248 unsigned char v =
static_cast<unsigned char>(-1);
2249 for (
unsigned int c = 0; c < n_children; ++c)
2251 if (parent->child_index(c) == ptr.index())
2259 id[ptr.level() - 1] = v;
2261 ptr.copy_from(*parent);
2265 const unsigned int coarse_index = ptr.index();
2267 return {this->tria->coarse_cell_index_to_coarse_cell_id(coarse_index),
2274 template <
int dim,
int spacedim>
2277 const unsigned int neighbor)
const
2290 if ((dim == 1) && (spacedim == dim))
2294 this->neighbor(neighbor);
2309 const unsigned int this_face_index = face_index(neighbor);
2311 const unsigned int neighbor_guess =
2314 if (neighbor_cell->face_index(neighbor_guess) == this_face_index)
2315 return neighbor_guess;
2323 if (neighbor_cell->face_index(face_no) == this_face_index)
2339 template <
int dim,
int spacedim>
2342 const unsigned int neighbor)
const
2344 const unsigned int n2 = neighbor_of_neighbor_internal(neighbor);
2353 template <
int dim,
int spacedim>
2356 const unsigned int neighbor)
const
2358 return neighbor_of_neighbor_internal(neighbor) ==
2364 template <
int dim,
int spacedim>
2365 std::pair<unsigned int, unsigned int>
2367 const unsigned int neighbor)
const
2372 Assert(neighbor_is_coarser(neighbor),
2379 const int this_face_index = face_index(neighbor);
2381 this->neighbor(neighbor);
2396 const unsigned int face_no_guess =
2400 neighbor_cell->face(face_no_guess);
2402 if (face_guess->has_children())
2403 for (
unsigned int subface_no = 0;
2404 subface_no < face_guess->n_children();
2406 if (face_guess->child_index(subface_no) == this_face_index)
2407 return std::make_pair(face_no_guess, subface_no);
2415 if (face_no != face_no_guess)
2418 face = neighbor_cell->face(face_no);
2419 if (face->has_children())
2420 for (
unsigned int subface_no = 0;
2421 subface_no < face->n_children();
2423 if (face->child_index(subface_no) == this_face_index)
2424 return std::make_pair(face_no, subface_no);
2438 const int this_face_index = face_index(neighbor);
2440 this->neighbor(neighbor);
2448 const unsigned int face_no_guess =
2452 neighbor_cell->face(face_no_guess);
2454 if (face_guess->has_children())
2455 for (
unsigned int subface_no = 0;
2456 subface_no < face_guess->n_children();
2459 if (face_guess->child_index(subface_no) == this_face_index)
2463 return std::make_pair(face_no_guess,
2464 translate_subface_no(face_guess,
2467 if (face_guess->child(subface_no)->has_children())
2468 for (
unsigned int subsub_no = 0;
2469 subsub_no < face_guess->child(subface_no)->n_children();
2471 if (face_guess->child(subface_no)->child_index(subsub_no) ==
2476 return std::make_pair(face_no_guess,
2477 translate_subface_no(face_guess,
2486 if (face_no == face_no_guess)
2490 neighbor_cell->face(face_no);
2492 if (!face->has_children())
2495 for (
unsigned int subface_no = 0; subface_no < face->n_children();
2498 if (face->child_index(subface_no) == this_face_index)
2502 return std::make_pair(face_no,
2503 translate_subface_no(face,
2506 if (face->child(subface_no)->has_children())
2507 for (
unsigned int subsub_no = 0;
2508 subsub_no < face->child(subface_no)->n_children();
2510 if (face->child(subface_no)->child_index(subsub_no) ==
2515 return std::make_pair(face_no,
2516 translate_subface_no(face,
2540 template <
int dim,
int spacedim>
2543 const unsigned int i_face)
const
2570 cell_iterator my_it(*
this);
2571 if (this->tria->periodic_face_map.find(
2572 std::pair<cell_iterator, unsigned int>(my_it, i_face)) !=
2573 this->tria->periodic_face_map.end())
2580 template <
int dim,
int spacedim>
2594 cell_iterator my_it(*
this);
2596 const typename std::map<std::pair<cell_iterator, unsigned int>,
2597 std::pair<std::pair<cell_iterator, unsigned int>,
2598 std::bitset<3>>>::const_iterator
2599 my_face_pair = this->tria->periodic_face_map.find(
2600 std::pair<cell_iterator, unsigned int>(my_it, i_face));
2602 Assert(my_face_pair != this->tria->periodic_face_map.end(),
2604 return my_face_pair->second.first.first;
2609 template <
int dim,
int spacedim>
2612 const unsigned int i_face)
const
2614 if (!(this->face(i_face)->at_boundary()))
2615 return this->neighbor(i_face);
2616 else if (this->has_periodic_neighbor(i_face))
2617 return this->periodic_neighbor(i_face);
2621 return this->neighbor(i_face);
2626 template <
int dim,
int spacedim>
2629 const unsigned int i_face,
2630 const unsigned int i_subface)
const
2646 cell_iterator my_it(*
this);
2647 const typename std::map<std::pair<cell_iterator, unsigned int>,
2648 std::pair<std::pair<cell_iterator, unsigned int>,
2649 std::bitset<3>>>::const_iterator
2650 my_face_pair = this->tria->periodic_face_map.find(
2651 std::pair<cell_iterator, unsigned int>(my_it, i_face));
2656 Assert(my_face_pair != this->tria->periodic_face_map.end(),
2658 cell_iterator parent_nb_it = my_face_pair->second.first.first;
2659 unsigned int nb_face_num = my_face_pair->second.first.second;
2661 parent_nb_it->face(nb_face_num);
2667 unsigned int sub_neighbor_num =
2671 my_face_pair->second.second[0],
2672 my_face_pair->second.second[1],
2673 my_face_pair->second.second[2],
2674 nb_parent_face_it->refinement_case());
2675 return parent_nb_it->child(sub_neighbor_num);
2680 template <
int dim,
int spacedim>
2681 std::pair<unsigned int, unsigned int>
2683 const unsigned int i_face)
const
2699 const int my_face_index = this->face_index(i_face);
2700 cell_iterator my_it(*
this);
2701 const typename std::map<std::pair<cell_iterator, unsigned int>,
2702 std::pair<std::pair<cell_iterator, unsigned int>,
2703 std::bitset<3>>>::const_iterator
2704 my_face_pair = this->tria->periodic_face_map.find(
2705 std::pair<cell_iterator, unsigned int>(my_it, i_face));
2710 Assert(my_face_pair != this->tria->periodic_face_map.end(),
2712 cell_iterator nb_it = my_face_pair->second.first.first;
2713 unsigned int face_num_of_nb = my_face_pair->second.first.second;
2714 const typename std::map<std::pair<cell_iterator, unsigned int>,
2715 std::pair<std::pair<cell_iterator, unsigned int>,
2716 std::bitset<3>>>::const_iterator
2717 nb_face_pair = this->tria->periodic_face_map.find(
2718 std::pair<cell_iterator, unsigned int>(nb_it, face_num_of_nb));
2724 Assert(nb_face_pair != this->tria->periodic_face_map.end(),
2726 cell_iterator p_nb_of_p_nb = nb_face_pair->second.first.first;
2728 p_nb_of_p_nb->face(nb_face_pair->second.first.second);
2729 for (
unsigned int i_subface = 0; i_subface < parent_face_it->n_children();
2731 if (parent_face_it->child_index(i_subface) == my_face_index)
2732 return (std::pair<unsigned int, unsigned int>(face_num_of_nb, i_subface));
2745 template <
int dim,
int spacedim>
2748 const unsigned int i_face)
const
2750 return periodic_neighbor(i_face)->index();
2755 template <
int dim,
int spacedim>
2758 const unsigned int i_face)
const
2760 return periodic_neighbor(i_face)->level();
2765 template <
int dim,
int spacedim>
2768 const unsigned int i_face)
const
2770 return periodic_neighbor_face_no(i_face);
2775 template <
int dim,
int spacedim>
2778 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));
2801 Assert(my_face_pair != this->tria->periodic_face_map.end(),
2803 return my_face_pair->second.first.second;
2808 template <
int dim,
int spacedim>
2811 const unsigned int i_face)
const
2832 cell_iterator my_it(*
this);
2833 const typename std::map<std::pair<cell_iterator, unsigned int>,
2834 std::pair<std::pair<cell_iterator, unsigned int>,
2835 std::bitset<3>>>::const_iterator
2836 my_face_pair = this->tria->periodic_face_map.find(
2837 std::pair<cell_iterator, unsigned int>(my_it, i_face));
2842 Assert(my_face_pair != this->tria->periodic_face_map.end(),
2844 cell_iterator nb_it = my_face_pair->second.first.first;
2845 unsigned int face_num_of_nb = my_face_pair->second.first.second;
2846 const typename std::map<std::pair<cell_iterator, unsigned int>,
2847 std::pair<std::pair<cell_iterator, unsigned int>,
2848 std::bitset<3>>>::const_iterator
2849 nb_face_pair = this->tria->periodic_face_map.find(
2850 std::pair<cell_iterator, unsigned int>(nb_it, face_num_of_nb));
2856 Assert(nb_face_pair != this->tria->periodic_face_map.end(),
2858 const unsigned int my_level = this->
level();
2859 const unsigned int neighbor_level = nb_face_pair->second.first.first->level();
2861 return my_level > neighbor_level;
2866 template <
int dim,
int spacedim>
2873 return (neighbor_index(i) == -1);
2878 template <
int dim,
int spacedim>
2883 return at_boundary();
2886 for (
unsigned int l = 0; l < GeometryInfo<dim>::lines_per_cell; ++
l)
2887 if (this->line(
l)->at_boundary())
2896 template <
int dim,
int spacedim>
2899 const unsigned int face,
2900 const unsigned int subface)
const
2902 Assert(!this->has_children(),
2903 ExcMessage(
"The present cell must not have children!"));
2904 Assert(!this->at_boundary(face),
2905 ExcMessage(
"The present cell must have a valid neighbor!"));
2906 Assert(this->neighbor(face)->has_children() ==
true,
2907 ExcMessage(
"The neighbor must have children!"));
2913 const unsigned int neighbor_neighbor =
2914 this->neighbor_of_neighbor(face);
2915 const unsigned int neighbor_child_index =
2917 this->neighbor(face)->refinement_case(),
2922 this->neighbor(face)->child(neighbor_child_index);
2928 while (sub_neighbor->has_children())
2931 sub_neighbor->refinement_case(), neighbor_neighbor) ==
2936 sub_neighbor->refinement_case(), neighbor_neighbor, 0));
2939 return sub_neighbor;
3000 mother_face = this->face(face);
3001 const unsigned int total_children = mother_face->number_of_children();
3006 unsigned int neighbor_neighbor;
3009 this->neighbor(face);
3013 mother_face->refinement_case();
3014 if (mother_face_ref_case ==
3023 neighbor_neighbor = this->neighbor_of_neighbor(face);
3027 const unsigned int neighbor_child_index =
3029 neighbor->refinement_case(),
3032 neighbor->face_orientation(neighbor_neighbor),
3033 neighbor->face_flip(neighbor_neighbor),
3034 neighbor->face_rotation(neighbor_neighbor));
3035 neighbor_child = neighbor->child(neighbor_child_index);
3039 Assert((this->face(face)->child(subface) ==
3040 neighbor_child->face(neighbor_neighbor)),
3050 unsigned int first_child_to_find;
3051 unsigned int neighbor_child_index;
3052 if (total_children == 2)
3053 first_child_to_find = subface;
3056 first_child_to_find = subface / 2;
3057 if (total_children == 3 && subface == 1 &&
3058 !mother_face->child(0)->has_children())
3059 first_child_to_find = 1;
3061 if (neighbor_is_coarser(face))
3063 std::pair<unsigned int, unsigned int> indices =
3064 neighbor_of_coarser_neighbor(face);
3065 neighbor_neighbor = indices.first;
3110 unsigned int iso_subface;
3111 if (neighbor->face(neighbor_neighbor)->refinement_case() ==
3113 iso_subface = 2 * first_child_to_find + indices.second;
3117 neighbor->face(neighbor_neighbor)->refinement_case() ==
3120 iso_subface = first_child_to_find + 2 * indices.second;
3123 neighbor->refinement_case(),
3126 neighbor->face_orientation(neighbor_neighbor),
3127 neighbor->face_flip(neighbor_neighbor),
3128 neighbor->face_rotation(neighbor_neighbor));
3132 neighbor_neighbor = neighbor_of_neighbor(face);
3134 neighbor->refinement_case(),
3136 first_child_to_find,
3137 neighbor->face_orientation(neighbor_neighbor),
3138 neighbor->face_flip(neighbor_neighbor),
3139 neighbor->face_rotation(neighbor_neighbor),
3140 mother_face_ref_case);
3143 neighbor_child = neighbor->child(neighbor_child_index);
3148 while (neighbor_child->has_children() &&
3150 neighbor_child->refinement_case(), neighbor_neighbor) ==
3154 neighbor_child->refinement_case(), neighbor_neighbor, 0));
3162 if (total_children == 3)
3164 if (mother_face->child(0)->has_children())
3167 neighbor_child = neighbor_child->child(
3169 neighbor_child->refinement_case(),
3172 neighbor_child->face_orientation(neighbor_neighbor),
3173 neighbor_child->face_flip(neighbor_neighbor),
3174 neighbor_child->face_rotation(neighbor_neighbor),
3175 mother_face->child(0)->refinement_case()));
3179 Assert(mother_face->child(1)->has_children(),
3182 neighbor_child = neighbor_child->child(
3184 neighbor_child->refinement_case(),
3187 neighbor_child->face_orientation(neighbor_neighbor),
3188 neighbor_child->face_flip(neighbor_neighbor),
3189 neighbor_child->face_rotation(neighbor_neighbor),
3190 mother_face->child(1)->refinement_case()));
3193 else if (total_children == 4)
3197 neighbor_child->refinement_case(),
3200 neighbor_child->face_orientation(neighbor_neighbor),
3201 neighbor_child->face_flip(neighbor_neighbor),
3202 neighbor_child->face_rotation(neighbor_neighbor),
3203 mother_face->child(subface / 2)->refinement_case()));
3211 while (neighbor_child->has_children())
3214 neighbor_child->refinement_case(), neighbor_neighbor, 0));
3220 switch (this->subface_case(face))
3225 requested = mother_face->child(subface);
3229 requested = mother_face->child(subface / 2)->child(subface % 2);
3238 requested = mother_face->child(0)->child(subface);
3241 requested = mother_face->child(1);
3252 requested = mother_face->child(0);
3256 requested = mother_face->child(1)->child(subface - 1);
3266 Assert(requested == neighbor_child->face(neighbor_neighbor),
3270 return neighbor_child;
3283 #include "tria_accessor.inst"