683 y[0] * y[0] * x[3] * z[7] - z[1] * x[0] * y[3] * y[3] -
684 y[0] * x[1] * y[5] * z[0] - 2.0 * z[0] * x[7] * y[3] * y[3] +
685 x[0] * y[3] * y[3] * z[4] + 2.0 * x[0] * y[3] * y[3] * z[7] -
686 z[0] * x[4] * y[3] * y[3] + 2.0 * x[2] * y[3] * y[3] * z[0] +
687 x[1] * y[3] * y[3] * z[0] + 2.0 * y[7] * z[6] * x[7] * y[3] +
688 2.0 * y[7] * y[6] * x[3] * z[7] - 2.0 * y[7] * y[6] * x[7] * z[3] -
689 2.0 * y[7] * x[6] * y[3] * z[7];
690 s7 = s8 + y[4] * x[4] * y[3] * z[7] - y[4] * x[4] * y[7] * z[3] +
691 y[4] * x[3] * y[7] * z[4] - y[4] * x[7] * y[3] * z[4] +
692 2.0 * y[4] * y[0] * x[4] * z[7] - 2.0 * y[4] * y[0] * x[7] * z[4] +
693 2.0 * x[6] * y[7] * y[7] * z[3] + y[4] * x[0] * y[3] * z[4] +
694 y[0] * y[1] * x[5] * z[0] + y[0] * z[1] * x[0] * y[5] -
695 x[2] * y[0] * y[0] * z[3] + x[4] * y[3] * y[3] * z[7] -
696 x[7] * y[3] * y[3] * z[4] - x[5] * y[4] * y[4] * z[1] +
697 y[3] * z[0] * x[3] * y[4];
698 s8 = y[3] * y[0] * x[4] * z[3] + 2.0 * y[3] * y[0] * x[7] * z[3] +
699 2.0 * y[3] * y[2] * x[0] * z[3] - 2.0 * y[3] * y[2] * x[3] * z[0] +
700 2.0 * y[3] * z[2] * x[3] * y[0] + y[3] * z[1] * x[3] * y[0] -
701 2.0 * y[3] * x[2] * y[0] * z[3] - y[3] * x[1] * y[0] * z[3] -
702 y[3] * y[1] * x[3] * z[0] - 2.0 * y[3] * x[0] * y[7] * z[3] -
703 y[3] * x[0] * y[4] * z[3] - 2.0 * y[3] * y[0] * x[3] * z[7] -
704 y[3] * y[0] * x[3] * z[4] + 2.0 * y[3] * z[0] * x[3] * y[7] +
705 y[3] * y[1] * x[0] * z[3] + z[5] * x[1] * y[4] * y[4];
706 s5 = s8 - 2.0 * y[0] * y[0] * x[3] * z[4] -
707 2.0 * y[0] * x[1] * y[4] * z[0] + y[3] * x[7] * y[4] * z[3] -
708 y[3] * x[4] * y[7] * z[3] + y[3] * x[3] * y[7] * z[4] -
709 y[3] * x[3] * y[4] * z[7] + y[3] * x[0] * y[7] * z[4] -
710 y[3] * z[0] * x[4] * y[7] - 2.0 * y[4] * y[5] * x[0] * z[4] + s6 +
711 y[7] * x[0] * y[3] * z[7] - y[7] * z[0] * x[7] * y[3] +
712 y[7] * y[0] * x[7] * z[3] - y[7] * y[0] * x[3] * z[7] +
713 2.0 * y[0] * y[1] * x[4] * z[0] + s7;
714 s8 = -2.0 * y[7] * x[7] * y[3] * z[4] -
715 2.0 * y[7] * x[3] * y[4] * z[7] + 2.0 * y[7] * x[4] * y[3] * z[7] +
716 y[7] * y[0] * x[4] * z[7] - y[7] * y[0] * x[7] * z[4] +
717 2.0 * y[7] * x[7] * y[4] * z[3] - y[7] * x[0] * y[4] * z[7] +
718 y[7] * z[0] * x[7] * y[4] + z[5] * x[4] * y[7] * y[7] +
719 2.0 * z[6] * x[4] * y[7] * y[7] - x[5] * y[7] * y[7] * z[4] -
720 2.0 * x[6] * y[7] * y[7] * z[4] + 2.0 * y[7] * x[6] * y[4] * z[7] -
721 2.0 * y[7] * z[6] * x[7] * y[4] + 2.0 * y[7] * y[6] * x[7] * z[4];
722 s7 = s8 - 2.0 * y[7] * y[6] * x[4] * z[7] - y[7] * z[5] * x[7] * y[4] -
723 y[7] * y[5] * x[4] * z[7] - x[0] * y[7] * y[7] * z[3] +
724 z[0] * x[3] * y[7] * y[7] + y[7] * x[5] * y[4] * z[7] +
725 y[7] * y[5] * x[7] * z[4] - y[4] * x[1] * y[5] * z[0] -
726 x[1] * y[0] * y[0] * z[2] - y[4] * y[5] * x[1] * z[4] -
727 2.0 * y[4] * z[5] * x[4] * y[0] - y[4] * y[1] * x[0] * z[4] +
728 y[4] * y[5] * x[4] * z[1] + y[0] * z[0] * x[3] * y[7] -
729 y[0] * z[1] * x[0] * y[2];
730 s8 = 2.0 * y[0] * x[1] * y[3] * z[0] + y[4] * y[1] * x[4] * z[0] +
731 2.0 * y[0] * y[1] * x[0] * z[3] + y[4] * x[1] * y[0] * z[5] -
732 y[4] * z[1] * x[5] * y[0] + y[4] * z[1] * x[0] * y[5] -
733 y[4] * z[1] * x[4] * y[0] + y[4] * x[1] * y[0] * z[4] -
734 y[4] * z[5] * x[4] * y[1] + x[5] * y[4] * y[4] * z[6] -
735 z[5] * x[6] * y[4] * y[4] + y[4] * x[5] * y[1] * z[4] -
736 y[0] * z[2] * x[0] * y[3] + y[0] * y[5] * x[4] * z[0] +
737 y[0] * x[1] * y[2] * z[0];
738 s6 = s8 - 2.0 * y[0] * z[0] * x[4] * y[3] -
739 2.0 * y[0] * x[0] * y[4] * z[3] - 2.0 * y[0] * z[1] * x[0] * y[3] -
740 y[0] * x[0] * y[7] * z[3] - 2.0 * y[0] * y[1] * x[3] * z[0] +
741 y[0] * x[2] * y[3] * z[0] - y[0] * y[1] * x[2] * z[0] +
742 y[0] * y[1] * x[0] * z[2] - y[0] * x[2] * y[1] * z[3] +
743 y[0] * x[0] * y[3] * z[7] + y[0] * x[2] * y[3] * z[1] -
744 y[0] * y[2] * x[3] * z[0] + y[0] * y[2] * x[0] * z[3] -
745 y[0] * y[5] * x[0] * z[4] - y[4] * y[5] * x[4] * z[6] + s7;
746 s8 = s6 + y[4] * z[6] * x[5] * y[7] - y[4] * x[6] * y[7] * z[5] +
747 y[4] * x[6] * y[5] * z[7] - y[4] * z[6] * x[7] * y[5] -
748 y[4] * x[5] * y[6] * z[4] + y[4] * z[5] * x[4] * y[6] +
749 y[4] * y[5] * x[6] * z[4] - 2.0 * y[1] * y[1] * x[0] * z[5] +
750 2.0 * y[1] * y[1] * x[5] * z[0] - 2.0 * y[2] * y[2] * x[6] * z[3] +
751 x[5] * y[1] * y[1] * z[4] - z[5] * x[4] * y[1] * y[1] -
752 x[6] * y[2] * y[2] * z[7] + z[6] * x[7] * y[2] * y[2];
753 s7 = s8 - x[1] * y[5] * y[5] * z[0] + z[1] * x[0] * y[5] * y[5] +
754 y[1] * y[5] * x[4] * z[1] - y[1] * y[5] * x[1] * z[4] -
755 2.0 * y[2] * z[2] * x[3] * y[6] + 2.0 * y[1] * z[1] * x[0] * y[5] -
756 2.0 * y[1] * z[1] * x[5] * y[0] + 2.0 * y[1] * x[1] * y[0] * z[5] -
757 y[2] * x[2] * y[3] * z[7] - y[2] * z[2] * x[3] * y[7] +
758 y[2] * x[2] * y[7] * z[3] + y[2] * z[2] * x[7] * y[3] -
759 2.0 * y[2] * x[2] * y[3] * z[6] + 2.0 * y[2] * x[2] * y[6] * z[3] +
760 2.0 * y[2] * z[2] * x[6] * y[3] - y[3] * y[2] * x[6] * z[3];
761 s8 = y[3] * y[2] * x[3] * z[6] + y[3] * x[2] * y[6] * z[3] -
762 y[3] * z[2] * x[3] * y[6] - y[2] * y[2] * x[7] * z[3] +
763 2.0 * y[2] * y[2] * x[3] * z[6] + y[2] * y[2] * x[3] * z[7] -
764 2.0 * y[1] * x[1] * y[5] * z[0] - x[2] * y[3] * y[3] * z[6] +
765 z[2] * x[6] * y[3] * y[3] + 2.0 * y[6] * x[2] * y[5] * z[6] +
766 2.0 * y[6] * x[6] * y[2] * z[5] - 2.0 * y[6] * x[5] * y[2] * z[6] +
767 2.0 * y[3] * x[2] * y[7] * z[3] - 2.0 * y[3] * z[2] * x[3] * y[7] -
768 y[0] * z[0] * x[7] * y[3] - y[0] * z[2] * x[1] * y[3];
769 s4 = s8 - y[2] * y[6] * x[7] * z[2] + y[0] * z[2] * x[3] * y[1] +
770 y[1] * z[5] * x[1] * y[4] - y[1] * x[5] * y[4] * z[1] +
771 2.0 * y[0] * z[0] * x[3] * y[4] + 2.0 * y[0] * x[0] * y[3] * z[4] +
772 2.0 * z[2] * x[7] * y[3] * y[3] - 2.0 * z[5] * x[7] * y[4] * y[4] +
773 x[6] * y[4] * y[4] * z[7] - z[6] * x[7] * y[4] * y[4] +
774 y[1] * y[1] * x[0] * z[3] + y[3] * x[6] * y[7] * z[2] -
775 y[3] * z[6] * x[2] * y[7] + 2.0 * y[3] * y[2] * x[3] * z[7] + s5 +
777 s8 = s4 + y[2] * x[6] * y[7] * z[2] - y[2] * y[6] * x[7] * z[3] +
778 y[2] * y[6] * x[2] * z[7] - y[2] * z[6] * x[2] * y[7] -
779 y[2] * x[6] * y[3] * z[7] + y[2] * y[6] * x[3] * z[7] +
780 y[2] * z[6] * x[7] * y[3] - 2.0 * y[3] * y[2] * x[7] * z[3] -
781 x[6] * y[3] * y[3] * z[7] + y[1] * y[1] * x[4] * z[0] -
782 y[1] * y[1] * x[3] * z[0] + x[2] * y[6] * y[6] * z[3] -
783 z[2] * x[3] * y[6] * y[6] - y[1] * y[1] * x[0] * z[4];
784 s7 = s8 + y[5] * x[1] * y[0] * z[5] + y[6] * x[2] * y[7] * z[3] -
785 y[6] * y[2] * x[6] * z[3] + y[6] * y[2] * x[3] * z[6] -
786 y[6] * x[2] * y[3] * z[6] + y[6] * z[2] * x[6] * y[3] -
787 y[5] * y[1] * x[0] * z[5] - y[5] * z[1] * x[5] * y[0] +
788 y[5] * y[1] * x[5] * z[0] - y[6] * z[2] * x[3] * y[7] -
789 y[7] * y[6] * x[7] * z[2] + 2.0 * y[6] * y[6] * x[2] * z[7] +
790 y[6] * y[6] * x[3] * z[7] + x[6] * y[7] * y[7] * z[2] -
791 z[6] * x[2] * y[7] * y[7];
792 s8 = -x[2] * y[1] * y[1] * z[3] + 2.0 * y[1] * y[1] * x[0] * z[2] -
793 2.0 * y[1] * y[1] * x[2] * z[0] + z[2] * x[3] * y[1] * y[1] -
794 z[1] * x[0] * y[2] * y[2] + x[1] * y[2] * y[2] * z[0] +
795 y[2] * y[2] * x[0] * z[3] - y[2] * y[2] * x[3] * z[0] -
796 2.0 * y[2] * y[2] * x[3] * z[1] + y[1] * x[1] * y[3] * z[0] -
797 2.0 * y[6] * y[6] * x[7] * z[2] + 2.0 * y[5] * y[5] * x[4] * z[1] -
798 2.0 * y[5] * y[5] * x[1] * z[4] - y[6] * y[6] * x[7] * z[3] -
799 2.0 * y[1] * x[1] * y[0] * z[2];
800 s6 = s8 + 2.0 * y[1] * z[1] * x[2] * y[0] -
801 2.0 * y[1] * z[1] * x[0] * y[2] + 2.0 * y[1] * x[1] * y[2] * z[0] +
802 y[1] * x[2] * y[3] * z[1] - y[1] * y[2] * x[3] * z[1] -
803 y[1] * z[2] * x[1] * y[3] + y[1] * y[2] * x[1] * z[3] -
804 y[2] * x[1] * y[0] * z[2] + y[2] * z[1] * x[2] * y[0] +
805 y[2] * x[2] * y[3] * z[0] - y[7] * x[6] * y[2] * z[7] +
806 y[7] * z[6] * x[7] * y[2] + y[7] * y[6] * x[2] * z[7] -
807 y[6] * x[6] * y[3] * z[7] + y[6] * x[6] * y[7] * z[3] + s7;
808 s8 = s6 - y[6] * z[6] * x[3] * y[7] + y[6] * z[6] * x[7] * y[3] +
809 2.0 * y[2] * y[2] * x[1] * z[3] + x[2] * y[3] * y[3] * z[1] -
810 z[2] * x[1] * y[3] * y[3] + y[1] * x[1] * y[0] * z[4] +
811 y[1] * z[1] * x[3] * y[0] - y[1] * x[1] * y[0] * z[3] +
812 2.0 * y[5] * x[5] * y[1] * z[4] - 2.0 * y[5] * x[5] * y[4] * z[1] +
813 2.0 * y[5] * z[5] * x[1] * y[4] - 2.0 * y[5] * z[5] * x[4] * y[1] -
814 2.0 * y[6] * x[6] * y[2] * z[7] + 2.0 * y[6] * x[6] * y[7] * z[2];
815 s7 = s8 + 2.0 * y[6] * z[6] * x[7] * y[2] -
816 2.0 * y[6] * z[6] * x[2] * y[7] - y[1] * z[1] * x[4] * y[0] +
817 y[1] * z[1] * x[0] * y[4] - y[1] * z[1] * x[0] * y[3] +
818 2.0 * y[6] * y[6] * x[7] * z[5] + 2.0 * y[5] * y[5] * x[6] * z[4] -
819 2.0 * y[5] * y[5] * x[4] * z[6] + x[6] * y[5] * y[5] * z[7] -
820 y[3] * x[2] * y[1] * z[3] - y[3] * y[2] * x[3] * z[1] +
821 y[3] * z[2] * x[3] * y[1] + y[3] * y[2] * x[1] * z[3] -
822 y[2] * x[2] * y[0] * z[3] + y[2] * z[2] * x[3] * y[0];
823 s8 = s7 + 2.0 * y[2] * x[2] * y[3] * z[1] -
824 2.0 * y[2] * x[2] * y[1] * z[3] + y[2] * y[1] * x[0] * z[2] -
825 y[2] * y[1] * x[2] * z[0] + 2.0 * y[2] * z[2] * x[3] * y[1] -
826 2.0 * y[2] * z[2] * x[1] * y[3] - y[2] * z[2] * x[0] * y[3] +
827 y[5] * z[6] * x[5] * y[7] - y[5] * x[6] * y[7] * z[5] -
828 y[5] * y[6] * x[4] * z[7] - y[5] * y[6] * x[5] * z[7] -
829 2.0 * y[5] * x[5] * y[6] * z[4] + 2.0 * y[5] * x[5] * y[4] * z[6] -
830 2.0 * y[5] * z[5] * x[6] * y[4] + 2.0 * y[5] * z[5] * x[4] * y[6];
831 s5 = s8 - y[1] * y[5] * x[0] * z[4] - z[6] * x[7] * y[5] * y[5] +
832 y[6] * y[6] * x[7] * z[4] - y[6] * y[6] * x[4] * z[7] -
833 2.0 * y[6] * y[6] * x[5] * z[7] - x[5] * y[6] * y[6] * z[4] +
834 z[5] * x[4] * y[6] * y[6] + z[6] * x[5] * y[7] * y[7] -
835 x[6] * y[7] * y[7] * z[5] + y[1] * y[5] * x[4] * z[0] +
836 y[7] * y[6] * x[7] * z[5] + y[6] * y[5] * x[7] * z[4] +
837 y[5] * y[6] * x[7] * z[5] + y[6] * y[5] * x[6] * z[4] -
838 y[6] * y[5] * x[4] * z[6] + 2.0 * y[6] * z[6] * x[5] * y[7];
839 s8 = s5 - 2.0 * y[6] * x[6] * y[7] * z[5] +
840 2.0 * y[6] * x[6] * y[5] * z[7] - 2.0 * y[6] * z[6] * x[7] * y[5] -
841 y[6] * x[5] * y[7] * z[4] - y[6] * x[6] * y[7] * z[4] +
842 y[6] * x[6] * y[4] * z[7] - y[6] * z[6] * x[7] * y[4] +
843 y[6] * z[5] * x[4] * y[7] + y[6] * z[6] * x[4] * y[7] +
844 y[6] * x[5] * y[4] * z[6] - y[6] * z[5] * x[6] * y[4] +
845 y[7] * x[6] * y[5] * z[7] - y[7] * z[6] * x[7] * y[5] -
846 2.0 * y[6] * x[6] * y[5] * z[2];
847 s7 = s8 - y[7] * y[6] * x[5] * z[7] + 2.0 * y[4] * y[5] * x[4] * z[0] +
848 2.0 * x[3] * y[7] * y[7] * z[4] - 2.0 * x[4] * y[7] * y[7] * z[3] -
849 z[0] * x[4] * y[7] * y[7] + x[0] * y[7] * y[7] * z[4] -
850 y[0] * z[5] * x[4] * y[1] + y[0] * x[5] * y[1] * z[4] -
851 y[0] * x[5] * y[4] * z[0] + y[0] * z[5] * x[0] * y[4] -
852 y[5] * y[5] * x[0] * z[4] + y[5] * y[5] * x[4] * z[0] +
853 2.0 * y[1] * y[1] * x[2] * z[5] - 2.0 * y[1] * y[1] * x[5] * z[2] +
854 z[1] * x[5] * y[2] * y[2];
855 s8 = s7 - x[1] * y[2] * y[2] * z[5] - y[5] * z[5] * x[4] * y[0] +
856 y[5] * z[5] * x[0] * y[4] - y[5] * x[5] * y[4] * z[0] -
857 y[2] * x[1] * y[6] * z[5] - y[2] * y[1] * x[5] * z[6] +
858 y[2] * z[1] * x[5] * y[6] + y[2] * y[1] * x[6] * z[5] -
859 y[1] * z[1] * x[6] * y[5] - y[1] * x[1] * y[6] * z[5] +
860 y[1] * x[1] * y[5] * z[6] + y[1] * z[1] * x[5] * y[6] +
861 y[5] * x[5] * y[0] * z[4] + y[2] * y[1] * x[2] * z[5] -
862 y[2] * z[1] * x[2] * y[5];
863 s6 = s8 + y[2] * x[1] * y[5] * z[2] - y[2] * y[1] * x[5] * z[2] -
864 y[1] * y[1] * x[5] * z[6] + y[1] * y[1] * x[6] * z[5] -
865 z[1] * x[2] * y[5] * y[5] + x[1] * y[5] * y[5] * z[2] +
866 2.0 * y[1] * z[1] * x[5] * y[2] - 2.0 * y[1] * x[1] * y[2] * z[5] -
867 2.0 * y[1] * z[1] * x[2] * y[5] + 2.0 * y[1] * x[1] * y[5] * z[2] -
868 y[1] * y[1] * x[6] * z[2] + y[1] * y[1] * x[2] * z[6] -
869 2.0 * y[5] * x[1] * y[6] * z[5] - 2.0 * y[5] * y[1] * x[5] * z[6] +
870 2.0 * y[5] * z[1] * x[5] * y[6] + 2.0 * y[5] * y[1] * x[6] * z[5];
871 s8 = s6 - y[6] * z[1] * x[6] * y[5] - y[6] * y[1] * x[5] * z[6] +
872 y[6] * x[1] * y[5] * z[6] + y[6] * y[1] * x[6] * z[5] -
873 2.0 * z[1] * x[6] * y[5] * y[5] + 2.0 * x[1] * y[5] * y[5] * z[6] -
874 x[1] * y[6] * y[6] * z[5] + z[1] * x[5] * y[6] * y[6] +
875 y[5] * z[1] * x[5] * y[2] - y[5] * x[1] * y[2] * z[5] +
876 y[5] * y[1] * x[2] * z[5] - y[5] * y[1] * x[5] * z[2] -
877 y[6] * z[1] * x[2] * y[5] + y[6] * x[1] * y[5] * z[2];
878 s7 = s8 - y[1] * z[1] * x[2] * y[6] - y[1] * x[1] * y[2] * z[6] +
879 y[1] * x[1] * y[6] * z[2] + y[1] * z[1] * x[6] * y[2] +
880 y[5] * x[5] * y[6] * z[2] - y[5] * x[2] * y[6] * z[5] +
881 y[5] * x[6] * y[2] * z[5] - y[5] * x[5] * y[2] * z[6] -
882 x[6] * y[5] * y[5] * z[2] + x[2] * y[5] * y[5] * z[6] -
883 y[5] * y[5] * x[4] * z[7] + y[5] * y[5] * x[7] * z[4] -
884 y[1] * x[6] * y[5] * z[2] + y[1] * x[2] * y[5] * z[6] -
885 y[2] * x[6] * y[5] * z[2] - 2.0 * y[2] * y[1] * x[6] * z[2];
886 s8 = s7 - 2.0 * y[2] * z[1] * x[2] * y[6] +
887 2.0 * y[2] * x[1] * y[6] * z[2] + 2.0 * y[2] * y[1] * x[2] * z[6] -
888 2.0 * x[1] * y[2] * y[2] * z[6] + 2.0 * z[1] * x[6] * y[2] * y[2] +
889 x[6] * y[2] * y[2] * z[5] - x[5] * y[2] * y[2] * z[6] +
890 2.0 * x[5] * y[6] * y[6] * z[2] - 2.0 * x[2] * y[6] * y[6] * z[5] -
891 z[1] * x[2] * y[6] * y[6] - y[6] * y[1] * x[6] * z[2] -
892 y[6] * x[1] * y[2] * z[6] + y[6] * z[1] * x[6] * y[2] +
893 y[6] * y[1] * x[2] * z[6] + x[1] * y[6] * y[6] * z[2];
894 s3 = s8 + y[2] * x[5] * y[6] * z[2] + y[2] * x[2] * y[5] * z[6] -
895 y[2] * x[2] * y[6] * z[5] + y[5] * z[5] * x[4] * y[7] +
896 y[5] * x[5] * y[4] * z[7] - y[5] * z[5] * x[7] * y[4] -
897 y[5] * x[5] * y[7] * z[4] + 2.0 * y[4] * x[5] * y[0] * z[4] -
898 y[3] * z[6] * x[3] * y[7] + y[3] * y[6] * x[3] * z[7] +
899 y[3] * x[6] * y[7] * z[3] - y[3] * y[6] * x[7] * z[3] -
900 y[2] * y[1] * x[3] * z[0] - y[2] * z[1] * x[0] * y[3] +
901 y[2] * y[1] * x[0] * z[3] + y[2] * x[1] * y[3] * z[0];
902 s8 = y[1] * x[0] * z[3] + x[1] * y[3] * z[0] - y[0] * x[3] * z[7] -
903 x[1] * y[5] * z[0] - y[0] * x[3] * z[4] - x[1] * y[0] * z[2] +
904 z[1] * x[2] * y[0] - y[1] * x[0] * z[5] - z[1] * x[0] * y[2] -
905 y[1] * x[0] * z[4] + z[1] * x[5] * y[2] + z[0] * x[7] * y[4] +
906 z[0] * x[3] * y[7] + z[1] * x[0] * y[4] - x[1] * y[2] * z[5] +
907 x[2] * y[3] * z[0] + y[1] * x[2] * z[5] - x[2] * y[3] * z[7];
908 s7 = s8 - z[1] * x[2] * y[5] - y[1] * x[3] * z[0] - x[0] * y[7] * z[3] -
909 z[1] * x[0] * y[3] + y[5] * x[4] * z[0] - x[0] * y[4] * z[3] +
910 y[5] * x[7] * z[4] - z[0] * x[4] * y[3] + x[1] * y[0] * z[4] -
911 z[2] * x[3] * y[7] - y[6] * x[7] * z[2] + x[1] * y[5] * z[2] +
912 y[6] * x[7] * z[5] + x[0] * y[7] * z[4] + x[1] * y[2] * z[0] -
913 z[1] * x[4] * y[0] - z[0] * x[4] * y[7] - z[2] * x[0] * y[3];
914 s8 = x[5] * y[0] * z[4] + z[1] * x[0] * y[5] - x[2] * y[0] * z[3] -
915 z[1] * x[5] * y[0] + y[1] * x[5] * z[0] - x[1] * y[0] * z[3] -
916 x[1] * y[4] * z[0] - y[1] * x[5] * z[2] + x[2] * y[7] * z[3] +
917 y[0] * x[4] * z[3] - x[0] * y[4] * z[7] + x[1] * y[0] * z[5] -
918 y[1] * x[6] * z[2] - y[2] * x[6] * z[3] + y[0] * x[7] * z[3] -
919 y[2] * x[7] * z[3] + z[2] * x[7] * y[3] + y[2] * x[0] * z[3];
920 s6 = s8 + y[2] * x[3] * z[7] - y[2] * x[3] * z[0] - x[6] * y[5] * z[2] -
921 y[5] * x[0] * z[4] + z[2] * x[3] * y[0] + x[2] * y[3] * z[1] +
922 x[0] * y[3] * z[7] - x[2] * y[1] * z[3] + y[1] * x[4] * z[0] +
923 y[1] * x[0] * z[2] - z[1] * x[2] * y[6] + y[2] * x[3] * z[6] -
924 y[1] * x[2] * z[0] + z[1] * x[3] * y[0] - x[1] * y[2] * z[6] -
925 x[2] * y[3] * z[6] + x[0] * y[3] * z[4] + z[0] * x[3] * y[4] + s7;
926 s8 = x[5] * y[4] * z[7] + s6 + y[5] * x[6] * z[4] - y[5] * x[4] * z[6] +
927 z[6] * x[5] * y[7] - x[6] * y[2] * z[7] - x[6] * y[7] * z[5] +
928 x[5] * y[6] * z[2] + x[6] * y[5] * z[7] + x[6] * y[7] * z[2] +
929 y[6] * x[7] * z[4] - y[6] * x[4] * z[7] - y[6] * x[7] * z[3] +
930 z[6] * x[7] * y[2] + x[2] * y[5] * z[6] - x[2] * y[6] * z[5] +
931 y[6] * x[2] * z[7] + x[6] * y[2] * z[5];
932 s7 = s8 - x[5] * y[2] * z[6] - z[6] * x[7] * y[5] - z[5] * x[7] * y[4] +
933 z[5] * x[0] * y[4] - y[5] * x[4] * z[7] + y[0] * x[4] * z[7] -
934 z[6] * x[2] * y[7] - x[5] * y[4] * z[0] - x[5] * y[7] * z[4] -
935 y[0] * x[7] * z[4] + y[5] * x[4] * z[1] - x[6] * y[7] * z[4] +
936 x[7] * y[4] * z[3] - x[4] * y[7] * z[3] + x[3] * y[7] * z[4] -
937 x[7] * y[3] * z[4] - x[6] * y[3] * z[7] + x[6] * y[4] * z[7];
938 s8 = -x[3] * y[4] * z[7] + x[4] * y[3] * z[7] - z[6] * x[7] * y[4] -
939 z[1] * x[6] * y[5] + x[6] * y[7] * z[3] - x[1] * y[6] * z[5] -
940 y[1] * x[5] * z[6] + z[5] * x[4] * y[7] - z[5] * x[4] * y[0] +
941 x[1] * y[5] * z[6] - y[6] * x[5] * z[7] - y[2] * x[3] * z[1] +
942 z[1] * x[5] * y[6] - y[5] * x[1] * z[4] + z[6] * x[4] * y[7] +
943 x[5] * y[1] * z[4] - x[5] * y[6] * z[4] + y[6] * x[3] * z[7] -
945 s5 = s8 + x[5] * y[4] * z[6] + z[5] * x[1] * y[4] + y[1] * x[6] * z[5] -
946 z[6] * x[3] * y[7] + z[6] * x[7] * y[3] - z[5] * x[6] * y[4] -
947 z[5] * x[4] * y[1] + z[5] * x[4] * y[6] + x[1] * y[6] * z[2] +
948 x[2] * y[6] * z[3] + z[2] * x[6] * y[3] + z[1] * x[6] * y[2] +
949 z[2] * x[3] * y[1] - z[2] * x[1] * y[3] - z[2] * x[3] * y[6] +
950 y[2] * x[1] * z[3] + y[1] * x[2] * z[6] - z[0] * x[7] * y[3] + s7;
953 const double unknown1 = s1 * s2;
955 s8 = -z[2] * x[1] * y[2] * z[5] + z[2] * y[1] * x[2] * z[5] -
956 z[2] * z[1] * x[2] * y[5] + z[2] * z[1] * x[5] * y[2] +
957 2.0 * y[5] * x[7] * z[4] * z[4] - y[1] * x[2] * z[0] * z[0] +
958 x[0] * y[3] * z[7] * z[7] - 2.0 * z[5] * z[5] * x[4] * y[1] +
959 2.0 * z[5] * z[5] * x[1] * y[4] + z[5] * z[5] * x[0] * y[4] -
960 2.0 * z[2] * z[2] * x[1] * y[3] + 2.0 * z[2] * z[2] * x[3] * y[1] -
961 x[0] * y[4] * z[7] * z[7] - y[0] * x[3] * z[7] * z[7] +
962 x[1] * y[0] * z[5] * z[5];
963 s7 = s8 - y[1] * x[0] * z[5] * z[5] + z[1] * y[1] * x[2] * z[6] +
964 y[1] * x[0] * z[2] * z[2] + z[2] * z[2] * x[3] * y[0] -
965 z[2] * z[2] * x[0] * y[3] - x[1] * y[0] * z[2] * z[2] +
966 2.0 * z[5] * z[5] * x[4] * y[6] - 2.0 * z[5] * z[5] * x[6] * y[4] -
967 z[5] * z[5] * x[7] * y[4] - x[6] * y[7] * z[5] * z[5] +
968 2.0 * z[2] * y[1] * x[2] * z[6] - 2.0 * z[2] * x[1] * y[2] * z[6] +
969 2.0 * z[2] * z[1] * x[6] * y[2] - y[6] * x[5] * z[7] * z[7] +
970 2.0 * x[6] * y[4] * z[7] * z[7];
971 s8 = -2.0 * y[6] * x[4] * z[7] * z[7] + x[6] * y[5] * z[7] * z[7] -
972 2.0 * z[2] * z[1] * x[2] * y[6] + z[4] * y[6] * x[7] * z[5] +
973 x[5] * y[4] * z[6] * z[6] + z[6] * z[6] * x[4] * y[7] -
974 z[6] * z[6] * x[7] * y[4] - 2.0 * z[6] * z[6] * x[7] * y[5] +
975 2.0 * z[6] * z[6] * x[5] * y[7] - y[5] * x[4] * z[6] * z[6] +
976 2.0 * z[0] * z[0] * x[3] * y[4] - x[6] * y[5] * z[2] * z[2] +
977 z[1] * z[1] * x[5] * y[6] - z[1] * z[1] * x[6] * y[5] -
978 z[5] * z[5] * x[4] * y[0];
979 s6 = s8 + 2.0 * x[1] * y[3] * z[0] * z[0] +
980 2.0 * x[1] * y[6] * z[2] * z[2] - 2.0 * y[1] * x[6] * z[2] * z[2] -
981 y[1] * x[5] * z[2] * z[2] - z[1] * z[1] * x[2] * y[6] -
982 2.0 * z[1] * z[1] * x[2] * y[5] + 2.0 * z[1] * z[1] * x[5] * y[2] +
983 z[1] * y[1] * x[6] * z[5] + y[1] * x[2] * z[5] * z[5] +
984 z[2] * z[1] * x[2] * y[0] + z[1] * x[1] * y[5] * z[6] -
985 z[1] * x[1] * y[6] * z[5] - z[1] * y[1] * x[5] * z[6] -
986 z[1] * x[2] * y[6] * z[5] + z[1] * x[6] * y[2] * z[5] + s7;
987 s8 = -x[1] * y[2] * z[5] * z[5] + z[1] * x[5] * y[6] * z[2] -
988 2.0 * z[2] * z[2] * x[3] * y[6] + 2.0 * z[2] * z[2] * x[6] * y[3] +
989 z[2] * z[2] * x[7] * y[3] - z[2] * z[2] * x[3] * y[7] -
990 z[1] * x[6] * y[5] * z[2] + 2.0 * z[1] * x[1] * y[5] * z[2] -
991 2.0 * x[3] * y[4] * z[7] * z[7] + 2.0 * x[4] * y[3] * z[7] * z[7] +
992 x[5] * y[6] * z[2] * z[2] + y[1] * x[2] * z[6] * z[6] +
993 y[0] * x[4] * z[7] * z[7] + z[2] * x[2] * y[3] * z[0] -
994 x[1] * y[2] * z[6] * z[6];
995 s7 = s8 - z[7] * z[2] * x[3] * y[7] + x[2] * y[6] * z[3] * z[3] -
996 y[2] * x[6] * z[3] * z[3] - z[6] * x[2] * y[3] * z[7] -
997 z[2] * z[1] * x[0] * y[2] + z[6] * z[2] * x[6] * y[3] -
998 z[6] * z[2] * x[3] * y[6] + z[6] * x[2] * y[6] * z[3] +
999 z[2] * x[1] * y[2] * z[0] + z[6] * y[2] * x[3] * z[7] -
1000 z[4] * z[5] * x[6] * y[4] + z[4] * z[5] * x[4] * y[6] -
1001 z[4] * y[6] * x[5] * z[7] + z[4] * z[6] * x[4] * y[7] +
1002 z[4] * x[5] * y[4] * z[6];
1003 s8 = -z[6] * y[2] * x[6] * z[3] - z[4] * y[5] * x[4] * z[6] -
1004 z[2] * y[1] * x[5] * z[6] + z[2] * x[1] * y[5] * z[6] +
1005 z[4] * x[6] * y[4] * z[7] + 2.0 * z[4] * z[5] * x[4] * y[7] -
1006 z[4] * z[6] * x[7] * y[4] + x[6] * y[7] * z[3] * z[3] -
1007 2.0 * z[4] * z[5] * x[7] * y[4] - 2.0 * z[4] * y[5] * x[4] * z[7] -
1008 z[4] * y[6] * x[4] * z[7] + z[4] * x[6] * y[5] * z[7] -
1009 z[4] * x[6] * y[7] * z[5] + 2.0 * z[4] * x[5] * y[4] * z[7] +
1010 z[2] * x[2] * y[5] * z[6] - z[2] * x[2] * y[6] * z[5];
1011 s5 = s8 + z[2] * x[6] * y[2] * z[5] - z[2] * x[5] * y[2] * z[6] -
1012 z[2] * x[2] * y[3] * z[7] - x[2] * y[3] * z[7] * z[7] +
1013 2.0 * z[2] * x[2] * y[3] * z[1] - z[2] * y[2] * x[3] * z[0] +
1014 z[2] * y[2] * x[0] * z[3] - z[2] * x[2] * y[0] * z[3] -
1015 z[7] * y[2] * x[7] * z[3] + z[7] * z[2] * x[7] * y[3] +
1016 z[7] * x[2] * y[7] * z[3] + z[6] * y[1] * x[2] * z[5] -
1017 z[6] * x[1] * y[2] * z[5] + z[5] * x[1] * y[5] * z[2] + s6 + s7;
1018 s8 = z[5] * z[1] * x[5] * y[2] - z[5] * z[1] * x[2] * y[5] -
1019 y[6] * x[7] * z[2] * z[2] + 2.0 * z[2] * x[2] * y[6] * z[3] -
1020 2.0 * z[2] * x[2] * y[3] * z[6] + 2.0 * z[2] * y[2] * x[3] * z[6] +
1021 y[2] * x[3] * z[6] * z[6] + y[6] * x[7] * z[5] * z[5] +
1022 z[2] * y[2] * x[3] * z[7] - z[2] * y[2] * x[7] * z[3] -
1023 2.0 * z[2] * y[2] * x[6] * z[3] + z[2] * x[2] * y[7] * z[3] +
1024 x[6] * y[2] * z[5] * z[5] - 2.0 * z[2] * x[2] * y[1] * z[3] -
1025 x[2] * y[6] * z[5] * z[5];
1026 s7 = s8 - y[1] * x[5] * z[6] * z[6] + z[6] * x[1] * y[6] * z[2] -
1027 z[3] * z[2] * x[3] * y[6] + z[6] * z[1] * x[6] * y[2] -
1028 z[6] * z[1] * x[2] * y[6] - z[6] * y[1] * x[6] * z[2] -
1029 2.0 * x[5] * y[2] * z[6] * z[6] + z[4] * z[1] * x[0] * y[4] -
1030 z[3] * x[2] * y[3] * z[6] - z[5] * y[1] * x[5] * z[2] +
1031 z[3] * y[2] * x[3] * z[6] + 2.0 * x[2] * y[5] * z[6] * z[6] -
1032 z[5] * x[1] * y[5] * z[0] + y[2] * x[3] * z[7] * z[7] -
1033 x[2] * y[3] * z[6] * z[6];
1034 s8 = z[5] * y[5] * x[4] * z[0] + z[3] * z[2] * x[6] * y[3] +
1035 x[1] * y[5] * z[6] * z[6] + z[5] * y[5] * x[7] * z[4] -
1036 z[1] * x[1] * y[2] * z[6] + z[1] * x[1] * y[6] * z[2] +
1037 2.0 * z[6] * y[6] * x[7] * z[5] - z[7] * y[6] * x[7] * z[2] -
1038 z[3] * y[6] * x[7] * z[2] + x[6] * y[7] * z[2] * z[2] -
1039 2.0 * z[6] * y[6] * x[7] * z[2] - 2.0 * x[6] * y[3] * z[7] * z[7] -
1040 x[6] * y[2] * z[7] * z[7] - z[5] * x[6] * y[5] * z[2] +
1041 y[6] * x[2] * z[7] * z[7];
1042 s6 = s8 + 2.0 * y[6] * x[3] * z[7] * z[7] + z[6] * z[6] * x[7] * y[3] -
1043 y[6] * x[7] * z[3] * z[3] + z[5] * x[5] * y[0] * z[4] +
1044 2.0 * z[6] * z[6] * x[7] * y[2] - 2.0 * z[6] * z[6] * x[2] * y[7] -
1045 z[6] * z[6] * x[3] * y[7] + z[7] * y[6] * x[7] * z[5] +
1046 z[7] * y[5] * x[7] * z[4] - 2.0 * z[7] * x[7] * y[3] * z[4] +
1047 2.0 * z[7] * x[3] * y[7] * z[4] - 2.0 * z[7] * x[4] * y[7] * z[3] +
1048 2.0 * z[7] * x[7] * y[4] * z[3] - z[7] * y[0] * x[7] * z[4] -
1049 2.0 * z[7] * z[6] * x[3] * y[7] + s7;
1050 s8 = s6 + 2.0 * z[7] * z[6] * x[7] * y[3] +
1051 2.0 * z[7] * x[6] * y[7] * z[3] + z[7] * x[6] * y[7] * z[2] -
1052 2.0 * z[7] * y[6] * x[7] * z[3] + z[7] * z[6] * x[7] * y[2] -
1053 z[7] * z[6] * x[2] * y[7] + z[5] * y[1] * x[5] * z[0] -
1054 z[5] * z[1] * x[5] * y[0] + 2.0 * y[1] * x[6] * z[5] * z[5] -
1055 2.0 * x[1] * y[6] * z[5] * z[5] + z[5] * z[1] * x[0] * y[5] +
1056 z[6] * y[6] * x[3] * z[7] + 2.0 * z[6] * x[6] * y[7] * z[2] -
1057 z[6] * y[6] * x[7] * z[3];
1058 s7 = s8 + 2.0 * z[6] * y[6] * x[2] * z[7] - z[6] * x[6] * y[3] * z[7] +
1059 z[6] * x[6] * y[7] * z[3] - 2.0 * z[6] * x[6] * y[2] * z[7] -
1060 2.0 * z[1] * y[1] * x[5] * z[2] - z[1] * y[1] * x[6] * z[2] -
1061 z[7] * z[0] * x[7] * y[3] - 2.0 * z[6] * x[6] * y[5] * z[2] -
1062 z[2] * z[6] * x[3] * y[7] + z[2] * x[6] * y[7] * z[3] -
1063 z[2] * z[6] * x[2] * y[7] + y[5] * x[6] * z[4] * z[4] +
1064 z[2] * y[6] * x[2] * z[7] + y[6] * x[7] * z[4] * z[4] +
1065 z[2] * z[6] * x[7] * y[2] - 2.0 * x[5] * y[7] * z[4] * z[4];
1066 s8 = -x[6] * y[7] * z[4] * z[4] - z[5] * y[5] * x[0] * z[4] -
1067 z[2] * x[6] * y[2] * z[7] - x[5] * y[6] * z[4] * z[4] -
1068 2.0 * z[5] * y[1] * x[5] * z[6] + 2.0 * z[5] * z[1] * x[5] * y[6] +
1069 2.0 * z[5] * x[1] * y[5] * z[6] - 2.0 * z[5] * z[1] * x[6] * y[5] -
1070 z[5] * x[5] * y[2] * z[6] + z[5] * x[5] * y[6] * z[2] +
1071 z[5] * x[2] * y[5] * z[6] + z[5] * z[5] * x[4] * y[7] -
1072 y[5] * x[4] * z[7] * z[7] + x[5] * y[4] * z[7] * z[7] +
1073 z[6] * z[1] * x[5] * y[6] + z[6] * y[1] * x[6] * z[5];
1074 s4 = s8 - z[6] * z[1] * x[6] * y[5] - z[6] * x[1] * y[6] * z[5] +
1075 z[2] * z[6] * x[7] * y[3] + 2.0 * z[6] * x[6] * y[2] * z[5] +
1076 2.0 * z[6] * x[5] * y[6] * z[2] - 2.0 * z[6] * x[2] * y[6] * z[5] +
1077 z[7] * z[0] * x[3] * y[7] + z[7] * z[0] * x[7] * y[4] +
1078 z[3] * z[6] * x[7] * y[3] - z[3] * z[6] * x[3] * y[7] -
1079 z[3] * x[6] * y[3] * z[7] + z[3] * y[6] * x[2] * z[7] -
1080 z[3] * x[6] * y[2] * z[7] + z[5] * x[5] * y[4] * z[7] + s5 + s7;
1081 s8 = s4 + z[3] * y[6] * x[3] * z[7] - z[7] * x[0] * y[7] * z[3] +
1082 z[6] * x[5] * y[4] * z[7] + z[7] * y[0] * x[7] * z[3] +
1083 z[5] * z[6] * x[4] * y[7] - 2.0 * z[5] * x[5] * y[6] * z[4] +
1084 2.0 * z[5] * x[5] * y[4] * z[6] - z[5] * x[5] * y[7] * z[4] -
1085 z[5] * y[6] * x[5] * z[7] - z[5] * z[6] * x[7] * y[4] -
1086 z[7] * z[0] * x[4] * y[7] - z[5] * z[6] * x[7] * y[5] -
1087 z[5] * y[5] * x[4] * z[7] + z[7] * x[0] * y[7] * z[4];
1088 s7 = s8 - 2.0 * z[5] * y[5] * x[4] * z[6] + z[5] * z[6] * x[5] * y[7] +
1089 z[5] * x[6] * y[5] * z[7] + 2.0 * z[5] * y[5] * x[6] * z[4] +
1090 z[6] * z[5] * x[4] * y[6] - z[6] * x[5] * y[6] * z[4] -
1091 z[6] * z[5] * x[6] * y[4] - z[6] * x[6] * y[7] * z[4] -
1092 2.0 * z[6] * y[6] * x[5] * z[7] + z[6] * x[6] * y[4] * z[7] -
1093 z[6] * y[5] * x[4] * z[7] - z[6] * y[6] * x[4] * z[7] +
1094 z[6] * y[6] * x[7] * z[4] + z[6] * y[5] * x[6] * z[4] +
1095 2.0 * z[6] * x[6] * y[5] * z[7];
1096 s8 = -2.0 * z[6] * x[6] * y[7] * z[5] - z[2] * y[1] * x[2] * z[0] +
1097 2.0 * z[7] * z[6] * x[4] * y[7] - 2.0 * z[7] * x[6] * y[7] * z[4] -
1098 2.0 * z[7] * z[6] * x[7] * y[4] + z[7] * z[5] * x[4] * y[7] -
1099 z[7] * z[5] * x[7] * y[4] - z[7] * x[5] * y[7] * z[4] +
1100 2.0 * z[7] * y[6] * x[7] * z[4] - z[7] * z[6] * x[7] * y[5] +
1101 z[7] * z[6] * x[5] * y[7] - z[7] * x[6] * y[7] * z[5] +
1102 z[1] * z[1] * x[6] * y[2] + s7 + x[1] * y[5] * z[2] * z[2];
1103 s6 = s8 + 2.0 * z[2] * y[2] * x[1] * z[3] -
1104 2.0 * z[2] * y[2] * x[3] * z[1] - 2.0 * x[1] * y[4] * z[0] * z[0] +
1105 2.0 * y[1] * x[4] * z[0] * z[0] + 2.0 * x[2] * y[7] * z[3] * z[3] -
1106 2.0 * y[2] * x[7] * z[3] * z[3] - x[1] * y[5] * z[0] * z[0] +
1107 z[0] * z[0] * x[7] * y[4] + z[0] * z[0] * x[3] * y[7] +
1108 x[2] * y[3] * z[0] * z[0] - 2.0 * y[1] * x[3] * z[0] * z[0] +
1109 y[5] * x[4] * z[0] * z[0] - 2.0 * z[0] * z[0] * x[4] * y[3] +
1110 x[1] * y[2] * z[0] * z[0] - z[0] * z[0] * x[4] * y[7] +
1111 y[1] * x[5] * z[0] * z[0];
1112 s8 = s6 - y[2] * x[3] * z[0] * z[0] + y[1] * x[0] * z[3] * z[3] -
1113 2.0 * x[0] * y[7] * z[3] * z[3] - x[0] * y[4] * z[3] * z[3] -
1114 2.0 * x[2] * y[0] * z[3] * z[3] - x[1] * y[0] * z[3] * z[3] +
1115 y[0] * x[4] * z[3] * z[3] - 2.0 * z[0] * y[1] * x[0] * z[4] +
1116 2.0 * z[0] * z[1] * x[0] * y[4] + 2.0 * z[0] * x[1] * y[0] * z[4] -
1117 2.0 * z[0] * z[1] * x[4] * y[0] - 2.0 * z[3] * x[2] * y[3] * z[7] -
1118 2.0 * z[3] * z[2] * x[3] * y[7] + 2.0 * z[3] * z[2] * x[7] * y[3];
1119 s7 = s8 + 2.0 * z[3] * y[2] * x[3] * z[7] +
1120 2.0 * z[5] * y[5] * x[4] * z[1] + 2.0 * z[0] * y[1] * x[0] * z[3] -
1121 z[0] * y[0] * x[3] * z[7] - 2.0 * z[0] * y[0] * x[3] * z[4] -
1122 z[0] * x[1] * y[0] * z[2] + z[0] * z[1] * x[2] * y[0] -
1123 z[0] * y[1] * x[0] * z[5] - z[0] * z[1] * x[0] * y[2] -
1124 z[0] * x[0] * y[7] * z[3] - 2.0 * z[0] * z[1] * x[0] * y[3] -
1125 z[5] * x[5] * y[4] * z[0] - 2.0 * z[0] * x[0] * y[4] * z[3] +
1126 z[0] * x[0] * y[7] * z[4] - z[0] * z[2] * x[0] * y[3];
1127 s8 = s7 + z[0] * x[5] * y[0] * z[4] + z[0] * z[1] * x[0] * y[5] -
1128 z[0] * x[2] * y[0] * z[3] - z[0] * z[1] * x[5] * y[0] -
1129 2.0 * z[0] * x[1] * y[0] * z[3] + 2.0 * z[0] * y[0] * x[4] * z[3] -
1130 z[0] * x[0] * y[4] * z[7] + z[0] * x[1] * y[0] * z[5] +
1131 z[0] * y[0] * x[7] * z[3] + z[0] * y[2] * x[0] * z[3] -
1132 z[0] * y[5] * x[0] * z[4] + z[0] * z[2] * x[3] * y[0] +
1133 z[0] * x[2] * y[3] * z[1] + z[0] * x[0] * y[3] * z[7] -
1134 z[0] * x[2] * y[1] * z[3];
1135 s5 = s8 + z[0] * y[1] * x[0] * z[2] + z[3] * x[1] * y[3] * z[0] -
1136 2.0 * z[3] * y[0] * x[3] * z[7] - z[3] * y[0] * x[3] * z[4] -
1137 z[3] * x[1] * y[0] * z[2] + z[3] * z[0] * x[7] * y[4] +
1138 2.0 * z[3] * z[0] * x[3] * y[7] + 2.0 * z[3] * x[2] * y[3] * z[0] -
1139 z[3] * y[1] * x[3] * z[0] - z[3] * z[1] * x[0] * y[3] -
1140 z[3] * z[0] * x[4] * y[3] + z[3] * x[1] * y[2] * z[0] -
1141 z[3] * z[0] * x[4] * y[7] - 2.0 * z[3] * z[2] * x[0] * y[3] -
1142 z[3] * x[0] * y[4] * z[7] - 2.0 * z[3] * y[2] * x[3] * z[0];
1143 s8 = s5 + 2.0 * z[3] * z[2] * x[3] * y[0] + z[3] * x[2] * y[3] * z[1] +
1144 2.0 * z[3] * x[0] * y[3] * z[7] + z[3] * y[1] * x[0] * z[2] -
1145 z[4] * y[0] * x[3] * z[7] - z[4] * x[1] * y[5] * z[0] -
1146 z[4] * y[1] * x[0] * z[5] + 2.0 * z[4] * z[0] * x[7] * y[4] +
1147 z[4] * z[0] * x[3] * y[7] + 2.0 * z[4] * y[5] * x[4] * z[0] +
1148 2.0 * y[0] * x[7] * z[3] * z[3] + 2.0 * y[2] * x[0] * z[3] * z[3] -
1149 x[2] * y[1] * z[3] * z[3] - y[0] * x[3] * z[4] * z[4];
1150 s7 = s8 - y[1] * x[0] * z[4] * z[4] + x[1] * y[0] * z[4] * z[4] +
1151 2.0 * x[0] * y[7] * z[4] * z[4] + 2.0 * x[5] * y[0] * z[4] * z[4] -
1152 2.0 * y[5] * x[0] * z[4] * z[4] + 2.0 * z[1] * z[1] * x[2] * y[0] -
1153 2.0 * z[1] * z[1] * x[0] * y[2] + z[1] * z[1] * x[0] * y[4] -
1154 z[1] * z[1] * x[0] * y[3] - z[1] * z[1] * x[4] * y[0] +
1155 2.0 * z[1] * z[1] * x[0] * y[5] - 2.0 * z[1] * z[1] * x[5] * y[0] +
1156 x[2] * y[3] * z[1] * z[1] - x[5] * y[4] * z[0] * z[0] -
1157 z[0] * z[0] * x[7] * y[3];
1158 s8 = s7 + x[7] * y[4] * z[3] * z[3] - x[4] * y[7] * z[3] * z[3] +
1159 y[2] * x[1] * z[3] * z[3] + x[0] * y[3] * z[4] * z[4] -
1160 2.0 * y[0] * x[7] * z[4] * z[4] + x[3] * y[7] * z[4] * z[4] -
1161 x[7] * y[3] * z[4] * z[4] - y[5] * x[1] * z[4] * z[4] +
1162 x[5] * y[1] * z[4] * z[4] + z[1] * z[1] * x[3] * y[0] +
1163 y[5] * x[4] * z[1] * z[1] - y[2] * x[3] * z[1] * z[1] -
1164 x[5] * y[4] * z[1] * z[1] - z[4] * x[0] * y[4] * z[3] -
1165 z[4] * z[0] * x[4] * y[3];
1166 s6 = s8 - z[4] * z[1] * x[4] * y[0] - 2.0 * z[4] * z[0] * x[4] * y[7] +
1167 z[4] * y[1] * x[5] * z[0] - 2.0 * z[5] * x[5] * y[4] * z[1] -
1168 z[4] * x[1] * y[4] * z[0] + z[4] * y[0] * x[4] * z[3] -
1169 2.0 * z[4] * x[0] * y[4] * z[7] + z[4] * x[1] * y[0] * z[5] -
1170 2.0 * z[1] * x[1] * y[2] * z[5] + z[4] * x[0] * y[3] * z[7] +
1171 2.0 * z[5] * x[5] * y[1] * z[4] + z[4] * y[1] * x[4] * z[0] +
1172 z[1] * y[1] * x[0] * z[3] + z[1] * x[1] * y[3] * z[0] -
1173 2.0 * z[1] * x[1] * y[5] * z[0] - 2.0 * z[1] * x[1] * y[0] * z[2];
1174 s8 = s6 - 2.0 * z[1] * y[1] * x[0] * z[5] - z[1] * y[1] * x[0] * z[4] +
1175 2.0 * z[1] * y[1] * x[2] * z[5] - z[1] * y[1] * x[3] * z[0] -
1176 2.0 * z[5] * y[5] * x[1] * z[4] + z[1] * y[5] * x[4] * z[0] +
1177 z[1] * x[1] * y[0] * z[4] + 2.0 * z[1] * x[1] * y[2] * z[0] -
1178 z[1] * z[2] * x[0] * y[3] + 2.0 * z[1] * y[1] * x[5] * z[0] -
1179 z[1] * x[1] * y[0] * z[3] - z[1] * x[1] * y[4] * z[0] +
1180 2.0 * z[1] * x[1] * y[0] * z[5] - z[1] * y[2] * x[3] * z[0];
1181 s7 = s8 + z[1] * z[2] * x[3] * y[0] - z[1] * x[2] * y[1] * z[3] +
1182 z[1] * y[1] * x[4] * z[0] + 2.0 * z[1] * y[1] * x[0] * z[2] +
1183 2.0 * z[0] * z[1] * x[3] * y[0] + 2.0 * z[0] * x[0] * y[3] * z[4] +
1184 z[0] * z[5] * x[0] * y[4] + z[0] * y[0] * x[4] * z[7] -
1185 z[0] * y[0] * x[7] * z[4] - z[0] * x[7] * y[3] * z[4] -
1186 z[0] * z[5] * x[4] * y[0] - z[0] * x[5] * y[4] * z[1] +
1187 z[3] * z[1] * x[3] * y[0] + z[3] * x[0] * y[3] * z[4] +
1188 z[3] * z[0] * x[3] * y[4] + z[3] * y[0] * x[4] * z[7];
1189 s8 = s7 + z[3] * x[3] * y[7] * z[4] - z[3] * x[7] * y[3] * z[4] -
1190 z[3] * x[3] * y[4] * z[7] + z[3] * x[4] * y[3] * z[7] -
1191 z[3] * y[2] * x[3] * z[1] + z[3] * z[2] * x[3] * y[1] -
1192 z[3] * z[2] * x[1] * y[3] - 2.0 * z[3] * z[0] * x[7] * y[3] +
1193 z[4] * z[0] * x[3] * y[4] + 2.0 * z[4] * z[5] * x[0] * y[4] +
1194 2.0 * z[4] * y[0] * x[4] * z[7] - 2.0 * z[4] * x[5] * y[4] * z[0] +
1195 z[4] * y[5] * x[4] * z[1] + z[4] * x[7] * y[4] * z[3] -
1196 z[4] * x[4] * y[7] * z[3];
1197 s3 = s8 - z[4] * x[3] * y[4] * z[7] + z[4] * x[4] * y[3] * z[7] -
1198 2.0 * z[4] * z[5] * x[4] * y[0] - z[4] * x[5] * y[4] * z[1] +
1199 z[4] * z[5] * x[1] * y[4] - z[4] * z[5] * x[4] * y[1] -
1200 2.0 * z[1] * y[1] * x[2] * z[0] + z[1] * z[5] * x[0] * y[4] -
1201 z[1] * z[5] * x[4] * y[0] - z[1] * y[5] * x[1] * z[4] +
1202 z[1] * x[5] * y[1] * z[4] + z[1] * z[5] * x[1] * y[4] -
1203 z[1] * z[5] * x[4] * y[1] + z[1] * z[2] * x[3] * y[1] -
1204 z[1] * z[2] * x[1] * y[3] + z[1] * y[2] * x[1] * z[3];
1205 s8 = y[1] * x[0] * z[3] + x[1] * y[3] * z[0] - y[0] * x[3] * z[7] -
1206 x[1] * y[5] * z[0] - y[0] * x[3] * z[4] - x[1] * y[0] * z[2] +
1207 z[1] * x[2] * y[0] - y[1] * x[0] * z[5] - z[1] * x[0] * y[2] -
1208 y[1] * x[0] * z[4] + z[1] * x[5] * y[2] + z[0] * x[7] * y[4] +
1209 z[0] * x[3] * y[7] + z[1] * x[0] * y[4] - x[1] * y[2] * z[5] +
1210 x[2] * y[3] * z[0] + y[1] * x[2] * z[5] - x[2] * y[3] * z[7];
1211 s7 = s8 - z[1] * x[2] * y[5] - y[1] * x[3] * z[0] - x[0] * y[7] * z[3] -
1212 z[1] * x[0] * y[3] + y[5] * x[4] * z[0] - x[0] * y[4] * z[3] +
1213 y[5] * x[7] * z[4] - z[0] * x[4] * y[3] + x[1] * y[0] * z[4] -
1214 z[2] * x[3] * y[7] - y[6] * x[7] * z[2] + x[1] * y[5] * z[2] +
1215 y[6] * x[7] * z[5] + x[0] * y[7] * z[4] + x[1] * y[2] * z[0] -
1216 z[1] * x[4] * y[0] - z[0] * x[4] * y[7] - z[2] * x[0] * y[3];
1217 s8 = x[5] * y[0] * z[4] + z[1] * x[0] * y[5] - x[2] * y[0] * z[3] -
1218 z[1] * x[5] * y[0] + y[1] * x[5] * z[0] - x[1] * y[0] * z[3] -
1219 x[1] * y[4] * z[0] - y[1] * x[5] * z[2] + x[2] * y[7] * z[3] +
1220 y[0] * x[4] * z[3] - x[0] * y[4] * z[7] + x[1] * y[0] * z[5] -
1221 y[1] * x[6] * z[2] - y[2] * x[6] * z[3] + y[0] * x[7] * z[3] -
1222 y[2] * x[7] * z[3] + z[2] * x[7] * y[3] + y[2] * x[0] * z[3];
1223 s6 = s8 + y[2] * x[3] * z[7] - y[2] * x[3] * z[0] - x[6] * y[5] * z[2] -
1224 y[5] * x[0] * z[4] + z[2] * x[3] * y[0] + x[2] * y[3] * z[1] +
1225 x[0] * y[3] * z[7] - x[2] * y[1] * z[3] + y[1] * x[4] * z[0] +
1226 y[1] * x[0] * z[2] - z[1] * x[2] * y[6] + y[2] * x[3] * z[6] -
1227 y[1] * x[2] * z[0] + z[1] * x[3] * y[0] - x[1] * y[2] * z[6] -
1228 x[2] * y[3] * z[6] + x[0] * y[3] * z[4] + z[0] * x[3] * y[4] + s7;
1229 s8 = x[5] * y[4] * z[7] + s6 + y[5] * x[6] * z[4] - y[5] * x[4] * z[6] +
1230 z[6] * x[5] * y[7] - x[6] * y[2] * z[7] - x[6] * y[7] * z[5] +
1231 x[5] * y[6] * z[2] + x[6] * y[5] * z[7] + x[6] * y[7] * z[2] +
1232 y[6] * x[7] * z[4] - y[6] * x[4] * z[7] - y[6] * x[7] * z[3] +
1233 z[6] * x[7] * y[2] + x[2] * y[5] * z[6] - x[2] * y[6] * z[5] +
1234 y[6] * x[2] * z[7] + x[6] * y[2] * z[5];
1235 s7 = s8 - x[5] * y[2] * z[6] - z[6] * x[7] * y[5] - z[5] * x[7] * y[4] +
1236 z[5] * x[0] * y[4] - y[5] * x[4] * z[7] + y[0] * x[4] * z[7] -
1237 z[6] * x[2] * y[7] - x[5] * y[4] * z[0] - x[5] * y[7] * z[4] -
1238 y[0] * x[7] * z[4] + y[5] * x[4] * z[1] - x[6] * y[7] * z[4] +
1239 x[7] * y[4] * z[3] - x[4] * y[7] * z[3] + x[3] * y[7] * z[4] -
1240 x[7] * y[3] * z[4] - x[6] * y[3] * z[7] + x[6] * y[4] * z[7];
1241 s8 = -x[3] * y[4] * z[7] + x[4] * y[3] * z[7] - z[6] * x[7] * y[4] -
1242 z[1] * x[6] * y[5] + x[6] * y[7] * z[3] - x[1] * y[6] * z[5] -
1243 y[1] * x[5] * z[6] + z[5] * x[4] * y[7] - z[5] * x[4] * y[0] +
1244 x[1] * y[5] * z[6] - y[6] * x[5] * z[7] - y[2] * x[3] * z[1] +
1245 z[1] * x[5] * y[6] - y[5] * x[1] * z[4] + z[6] * x[4] * y[7] +
1246 x[5] * y[1] * z[4] - x[5] * y[6] * z[4] + y[6] * x[3] * z[7] -
1248 s5 = s8 + x[5] * y[4] * z[6] + z[5] * x[1] * y[4] + y[1] * x[6] * z[5] -
1249 z[6] * x[3] * y[7] + z[6] * x[7] * y[3] - z[5] * x[6] * y[4] -
1250 z[5] * x[4] * y[1] + z[5] * x[4] * y[6] + x[1] * y[6] * z[2] +
1251 x[2] * y[6] * z[3] + z[2] * x[6] * y[3] + z[1] * x[6] * y[2] +
1252 z[2] * x[3] * y[1] - z[2] * x[1] * y[3] - z[2] * x[3] * y[6] +
1253 y[2] * x[1] * z[3] + y[1] * x[2] * z[6] - z[0] * x[7] * y[3] + s7;
1256 const double unknown2 = s1 * s2;
1258 return {unknown0, unknown1, unknown2};
1274 template <
int structdim,
int dim,
int spacedim>
1286 template <
int dim,
int spacedim>
1292 return (accessor.
vertex(1) - accessor.
vertex(0)).norm();
1360 for (
unsigned int d = 0;
d < 3; ++
d)
1362 if (a_max < 1e-14 * accessor.
diameter())
1363 return cross_product_3d(b0, b1).
norm();
1368 constexpr unsigned int n_qp = 4;
1369 const double c1 = 2.0 / 7.0 *
std::sqrt(6.0 / 5.0);
1370 const double w0 = (18.0 -
std::sqrt(30)) / 72.0;
1371 const double w1 = (18.0 +
std::sqrt(30)) / 72.0;
1373 const std::array<double, n_qp> q{{
1379 const std::array<double, n_qp>
w{{w0, w1, w1, w0}};
1382 for (
unsigned int i = 0; i < n_qp; ++i)
1383 for (
unsigned int j = 0; j < n_qp; ++j)
1384 area += cross_product_3d(q[i] * a + b0, q[j] * a + b1).
norm() *
1394 return 0.5 * cross_product_3d(v01, v02).
norm();
1403 template <
int structdim,
int dim,
int spacedim>
1410 return std::numeric_limits<double>::quiet_NaN();
1414 template <
int dim,
int spacedim>
1422 template <
int dim,
int spacedim>
1430 template <
int dim,
int spacedim>
1438 template <
int structdim,
int dim,
int spacedim>
1441 const bool use_interpolation)
1443 if (use_interpolation)
1446 const auto points_and_weights =
1450 points_and_weights.first.end()),
1452 points_and_weights.second.end()));
1456 return get_new_point_on_object(obj);
1466template <
int structdim,
int dim,
int spacedim>
1469template <
int structdim,
int dim,
int spacedim>
1472template <
int structdim,
int dim,
int spacedim>
1480template <
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;
1500template <
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;
1520template <
int structdim,
int dim,
int spacedim>
1526 return ::barycenter(*
this);
1531template <
int structdim,
int dim,
int spacedim>
1537 return ::measure(*
this);
1542template <
int structdim,
int dim,
int spacedim>
1547 std::make_pair(this->vertex(0), this->vertex(0));
1549 const unsigned int n_vertices = this->n_vertices();
1550 for (
unsigned int v = 1; v < n_vertices; ++v)
1553 for (
unsigned int k = 0; k < spacedim; ++k)
1555 boundary_points.first[k] =
std::min(boundary_points.first[k], x[k]);
1556 boundary_points.second[k] =
std::max(boundary_points.second[k], x[k]);
1565template <
int structdim,
int dim,
int spacedim>
1568 const unsigned int )
const
1571 return std::numeric_limits<double>::signaling_NaN();
1582 return this->diameter();
1592 return this->diameter();
1600 const unsigned int lines[2][2] = {
1606 return std::max(this->line(lines[axis][0])->diameter(),
1607 this->line(lines[axis][1])->diameter());
1614 const unsigned int lines[2][2] = {
1620 return std::max(this->line(lines[axis][0])->diameter(),
1621 this->line(lines[axis][1])->diameter());
1629 const unsigned int lines[3][4] = {
1636 double lengths[4] = {this->line(lines[axis][0])->diameter(),
1637 this->line(lines[axis][1])->diameter(),
1638 this->line(lines[axis][2])->diameter(),
1639 this->line(lines[axis][3])->diameter()};
1652 set_manifold_id(manifold_ind);
1654 if (this->has_children())
1655 for (
unsigned int c = 0; c < this->n_children(); ++c)
1656 this->child(c)->set_all_manifold_ids(manifold_ind);
1661 for (
const unsigned int i : this->face_indices())
1662 this->quad(i)->set_manifold_id(manifold_ind);
1663 for (
const unsigned int i : this->line_indices())
1664 this->line(i)->set_manifold_id(manifold_ind);
1668template <
int structdim,
int dim,
int spacedim>
1675 std::array<double, GeometryInfo<structdim>::vertices_per_cell> w;
1679 p[i] = this->vertex(i);
1683 return this->get_manifold().get_new_point(
make_array_view(p.begin(), p.end()),
1690template <
int structdim,
int dim,
int spacedim>
1698 vertices[v] = this->vertex(v);
1701 GridTools::affine_cell_approximation<structdim, spacedim>(vertices);
1709template <
int structdim,
int dim,
int spacedim>
1712 const bool respect_manifold,
1713 const bool use_interpolation)
const
1715 if (respect_manifold ==
false)
1721 return p / this->n_vertices();
1724 return get_new_point_on_object(*
this, use_interpolation);
1731template <
int spacedim>
1742template <
int spacedim>
1752template <
int spacedim>
1762template <
int spacedim>
1768 if (this->has_children())
1769 for (
unsigned int c = 0; c < this->n_children(); ++c)
1770 this->child(c)->recursively_set_user_flag();
1775template <
int spacedim>
1781 if (this->has_children())
1782 for (
unsigned int c = 0; c < this->n_children(); ++c)
1783 this->child(c)->recursively_clear_user_flag();
1788template <
int spacedim>
1798template <
int spacedim>
1808template <
int spacedim>
1818template <
int spacedim>
1829template <
int spacedim>
1833 set_user_pointer(p);
1835 if (this->has_children())
1836 for (
unsigned int c = 0; c < this->n_children(); ++c)
1837 this->child(c)->recursively_set_user_pointer(p);
1842template <
int spacedim>
1846 clear_user_pointer();
1848 if (this->has_children())
1849 for (
unsigned int c = 0; c < this->n_children(); ++c)
1850 this->child(c)->recursively_clear_user_pointer();
1855template <
int spacedim>
1865template <
int spacedim>
1875template <
int spacedim>
1886template <
int spacedim>
1892 if (this->has_children())
1893 for (
unsigned int c = 0; c < this->n_children(); ++c)
1894 this->child(c)->recursively_set_user_index(p);
1899template <
int spacedim>
1905 if (this->has_children())
1906 for (
unsigned int c = 0; c < this->n_children(); ++c)
1907 this->child(c)->recursively_clear_user_index();
1920 return (this->vertex(0)[0] <= p[0]) && (p[0] <= this->vertex(1)[0]);
1953 static const int direction[4] = {-1, 1, 1, -1};
1954 for (
unsigned int f = 0; f < 4; ++f)
1978 if ((-face[1] * to_p[0] + face[0] * to_p[1]) < 0)
2009 const unsigned int dim = 3;
2010 const unsigned int spacedim = 3;
2014 for (
unsigned int v = 1; v < this->n_vertices(); ++v)
2015 for (
unsigned int d = 0; d < dim; ++d)
2017 maxp[d] =
std::max(maxp[d], this->vertex(v)[d]);
2018 minp[d] =
std::min(minp[d], this->vertex(v)[d]);
2023 for (
unsigned int d = 0; d < dim; ++d)
2024 if ((p[d] < minp[d]) || (p[d] > maxp[d]))
2039 .
template get_default_linear_mapping<dim, spacedim>()
2040 .transform_real_to_unit_cell(cell_iterator, p)));
2053template <
int dim,
int spacedim>
2059 ExcMessage(
"The current iterator points to an inactive cell. "
2060 "You cannot convert it to an iterator to an active cell."));
2062 ExcMessage(
"The triangulation associated with the iterator does not "
2063 "match that of the DoFHandler."));
2074template <
int dim,
int spacedim>
2080 ExcMessage(
"The triangulation associated with the iterator does not "
2081 "match that of the DoFHandler."));
2096template <
int dim,
int spacedim>
2097template <
int dim_,
int spacedim_>
2106 this->reference_cell()
2107 .template get_default_linear_mapping<dim_, spacedim_>()
2108 .transform_real_to_unit_cell(cell_iterator, p);
2119 return point_inside_codim<1, 2>(p);
2127 return point_inside_codim<1, 3>(p);
2137 return point_inside_codim<2, 3>(p);
2142template <
int dim,
int spacedim>
2146 for (
const auto face : this->face_indices())
2147 if (at_boundary(face))
2155template <
int dim,
int spacedim>
2160 return this->tria->levels[this->present_level]
2161 ->cells.boundary_or_material_id[this->present_index]
2167template <
int dim,
int spacedim>
2174 this->tria->levels[this->present_level]
2175 ->cells.boundary_or_material_id[this->present_index]
2176 .material_id = mat_id;
2181template <
int dim,
int spacedim>
2186 set_material_id(mat_id);
2188 if (this->has_children())
2189 for (
unsigned int c = 0; c < this->n_children(); ++c)
2190 this->child(c)->recursively_set_material_id(mat_id);
2195template <
int dim,
int spacedim>
2201 Assert(this->is_active(),
2202 ExcMessage(
"set_subdomain_id() can only be called on active cells!"));
2203 this->tria->levels[this->present_level]->subdomain_ids[this->present_index] =
2209template <
int dim,
int spacedim>
2215 this->tria->levels[this->present_level]
2216 ->level_subdomain_ids[this->present_index] = new_level_subdomain_id;
2220template <
int dim,
int spacedim>
2225 if constexpr (dim == spacedim)
2227 else if constexpr (dim == spacedim - 1)
2228 return this->tria->levels[this->present_level]
2229 ->direction_flags[this->present_index];
2233 ExcMessage(
"This function cannot be called if dim<spacedim-1."));
2240template <
int dim,
int spacedim>
2243 const bool new_direction_flag)
const
2249 if constexpr (dim == spacedim)
2250 Assert(new_direction_flag ==
true,
2251 ExcMessage(
"If dim==spacedim, direction flags are always true and "
2252 "can not be set to anything else."));
2253 else if constexpr (dim == spacedim - 1)
2254 this->tria->levels[this->present_level]
2255 ->direction_flags[this->present_index] = new_direction_flag;
2257 Assert(new_direction_flag ==
true,
2258 ExcMessage(
"If dim<spacedim-1, then this function can be called "
2259 "only if the argument is 'true'."));
2264template <
int dim,
int spacedim>
2270 this->tria->levels[this->present_level]->parents[this->present_index / 2] =
2276template <
int dim,
int spacedim>
2285 return this->tria->levels[this->present_level]
2286 ->parents[this->present_index / 2];
2291template <
int dim,
int spacedim>
2294 const unsigned int active_cell_index)
const
2296 this->tria->levels[this->present_level]
2297 ->active_cell_indices[this->present_index] = active_cell_index;
2302template <
int dim,
int spacedim>
2307 this->tria->levels[this->present_level]
2308 ->global_active_cell_indices[this->present_index] = index;
2313template <
int dim,
int spacedim>
2318 this->tria->levels[this->present_level]
2319 ->global_level_cell_indices[this->present_index] = index;
2324template <
int dim,
int spacedim>
2331 this->present_level - 1,
2338template <
int dim,
int spacedim>
2343 if (this->has_children())
2344 for (
unsigned int c = 0; c < this->n_children(); ++c)
2345 this->child(c)->recursively_set_subdomain_id(new_subdomain_id);
2347 set_subdomain_id(new_subdomain_id);
2352template <
int dim,
int spacedim>
2355 const unsigned int i,
2362 this->tria->levels[this->present_level]
2364 .first = pointer->present_level;
2365 this->tria->levels[this->present_level]
2367 .second = pointer->present_index;
2371 this->tria->levels[this->present_level]
2374 this->tria->levels[this->present_level]
2382template <
int dim,
int spacedim>
2386 std::array<unsigned char, 30> id;
2389 const unsigned int n_child_indices = ptr.
level();
2391 while (ptr.
level() > 0)
2394 const unsigned int n_children = parent->n_children();
2397 unsigned char v =
static_cast<unsigned char>(-1);
2398 for (
unsigned int c = 0; c < n_children; ++c)
2400 if (parent->child_index(c) == ptr.
index())
2408 id[ptr.
level() - 1] = v;
2414 const unsigned int coarse_index = ptr.
index();
2416 return {this->tria->coarse_cell_index_to_coarse_cell_id(coarse_index),
2423template <
int dim,
int spacedim>
2426 const unsigned int neighbor)
const
2439 if ((dim == 1) && (spacedim == dim))
2443 this->neighbor(neighbor);
2458 const unsigned int this_face_index = face_index(neighbor);
2460 const unsigned int neighbor_guess =
2463 if (neighbor_guess < neighbor_cell->n_faces() &&
2464 neighbor_cell->face_index(neighbor_guess) == this_face_index)
2465 return neighbor_guess;
2472 for (
const unsigned int face_no : neighbor_cell->face_indices())
2473 if (neighbor_cell->face_index(face_no) == this_face_index)
2489template <
int dim,
int spacedim>
2492 const unsigned int face_no)
const
2494 const unsigned int n2 = neighbor_of_neighbor_internal(face_no);
2503template <
int dim,
int spacedim>
2506 const unsigned int face_no)
const
2508 return neighbor_of_neighbor_internal(face_no) ==
2514template <
int dim,
int spacedim>
2515std::pair<unsigned int, unsigned int>
2517 const unsigned int neighbor)
const
2522 Assert(neighbor_is_coarser(neighbor),
2529 const int this_face_index = face_index(neighbor);
2531 this->neighbor(neighbor);
2546 const unsigned int face_no_guess =
2550 neighbor_cell->face(face_no_guess);
2552 if (face_guess->has_children())
2553 for (
unsigned int subface_no = 0;
2554 subface_no < face_guess->n_children();
2556 if (face_guess->child_index(subface_no) == this_face_index)
2557 return std::make_pair(face_no_guess, subface_no);
2563 for (
const unsigned int face_no : neighbor_cell->face_indices())
2565 if (face_no != face_no_guess)
2568 face = neighbor_cell->face(face_no);
2569 if (face->has_children())
2570 for (
unsigned int subface_no = 0;
2571 subface_no < face->n_children();
2573 if (face->child_index(subface_no) == this_face_index)
2574 return std::make_pair(face_no, subface_no);
2588 const int this_face_index = face_index(neighbor);
2590 this->neighbor(neighbor);
2598 const unsigned int face_no_guess =
2602 neighbor_cell->face(face_no_guess);
2604 if (face_guess->has_children())
2605 for (
unsigned int subface_no = 0;
2606 subface_no < face_guess->n_children();
2609 if (face_guess->child_index(subface_no) == this_face_index)
2613 return std::make_pair(face_no_guess,
2614 translate_subface_no(face_guess,
2617 if (face_guess->child(subface_no)->has_children())
2618 for (
unsigned int subsub_no = 0;
2619 subsub_no < face_guess->child(subface_no)->n_children();
2621 if (face_guess->child(subface_no)->child_index(subsub_no) ==
2626 return std::make_pair(face_no_guess,
2627 translate_subface_no(face_guess,
2634 for (
const unsigned int face_no : neighbor_cell->face_indices())
2636 if (face_no == face_no_guess)
2640 neighbor_cell->face(face_no);
2642 if (!face->has_children())
2645 for (
unsigned int subface_no = 0; subface_no < face->n_children();
2648 if (face->child_index(subface_no) == this_face_index)
2652 return std::make_pair(face_no,
2653 translate_subface_no(face,
2656 if (face->child(subface_no)->has_children())
2657 for (
unsigned int subsub_no = 0;
2658 subsub_no < face->child(subface_no)->n_children();
2660 if (face->child(subface_no)->child_index(subsub_no) ==
2665 return std::make_pair(face_no,
2666 translate_subface_no(face,
2690template <
int dim,
int spacedim>
2693 const unsigned int i_face)
const
2708 cell_iterator current_cell(*
this);
2709 if (this->tria->periodic_face_map.find(
2710 std::make_pair(current_cell, i_face)) !=
2711 this->tria->periodic_face_map.end())
2718template <
int dim,
int spacedim>
2732 cell_iterator current_cell(*
this);
2735 this->tria->periodic_face_map.find(std::make_pair(current_cell, i_face));
2738 Assert(my_face_pair != this->tria->periodic_face_map.end(),
2740 return my_face_pair->second.first.first;
2745template <
int dim,
int spacedim>
2748 const unsigned int i_face)
const
2750 if (!(this->face(i_face)->at_boundary()))
2751 return this->neighbor(i_face);
2752 else if (this->has_periodic_neighbor(i_face))
2753 return this->periodic_neighbor(i_face);
2757 return this->neighbor(i_face);
2762template <
int dim,
int spacedim>
2765 const unsigned int i_face,
2766 const unsigned int i_subface)
const
2782 cell_iterator my_it(*
this);
2785 this->tria->periodic_face_map.find(std::make_pair(my_it, i_face));
2790 Assert(my_face_pair != this->tria->periodic_face_map.end(),
2792 cell_iterator parent_nb_it = my_face_pair->second.first.first;
2793 unsigned int nb_face_num = my_face_pair->second.first.second;
2795 parent_nb_it->face(nb_face_num);
2802 const auto [orientation, rotation, flip] =
2805 unsigned int sub_neighbor_num =
2812 nb_parent_face_it->refinement_case());
2813 return parent_nb_it->child(sub_neighbor_num);
2818template <
int dim,
int spacedim>
2819std::pair<unsigned int, unsigned int>
2821 const unsigned int i_face)
const
2837 const int my_face_index = this->face_index(i_face);
2838 cell_iterator my_it(*
this);
2841 this->tria->periodic_face_map.find(std::make_pair(my_it, i_face));
2846 Assert(my_face_pair != this->tria->periodic_face_map.end(),
2848 cell_iterator nb_it = my_face_pair->second.first.first;
2849 unsigned int face_num_of_nb = my_face_pair->second.first.second;
2852 this->tria->periodic_face_map.find(std::make_pair(nb_it, face_num_of_nb));
2858 Assert(nb_face_pair != this->tria->periodic_face_map.end(),
2860 cell_iterator p_nb_of_p_nb = nb_face_pair->second.first.first;
2862 p_nb_of_p_nb->face(nb_face_pair->second.first.second);
2863 for (
unsigned int i_subface = 0; i_subface < parent_face_it->n_children();
2865 if (parent_face_it->child_index(i_subface) == my_face_index)
2866 return std::make_pair(face_num_of_nb, i_subface);
2879template <
int dim,
int spacedim>
2882 const unsigned int i_face)
const
2884 return periodic_neighbor(i_face)->index();
2889template <
int dim,
int spacedim>
2892 const unsigned int i_face)
const
2894 return periodic_neighbor(i_face)->level();
2899template <
int dim,
int spacedim>
2902 const unsigned int i_face)
const
2904 return periodic_neighbor_face_no(i_face);
2909template <
int dim,
int spacedim>
2912 const unsigned int i_face)
const
2924 cell_iterator my_it(*
this);
2927 this->tria->periodic_face_map.find(std::make_pair(my_it, i_face));
2933 Assert(my_face_pair != this->tria->periodic_face_map.end(),
2935 return my_face_pair->second.first.second;
2940template <
int dim,
int spacedim>
2943 const unsigned int i_face)
const
2964 cell_iterator my_it(*
this);
2967 this->tria->periodic_face_map.find(std::make_pair(my_it, i_face));
2972 Assert(my_face_pair != this->tria->periodic_face_map.end(),
2975 cell_iterator nb_it = my_face_pair->second.first.first;
2976 unsigned int face_num_of_nb = my_face_pair->second.first.second;
2979 this->tria->periodic_face_map.find(std::make_pair(nb_it, face_num_of_nb));
2985 Assert(nb_face_pair != this->tria->periodic_face_map.end(),
2987 const unsigned int my_level = this->
level();
2988 const unsigned int neighbor_level = nb_face_pair->second.first.first->level();
2990 return my_level > neighbor_level;
2995template <
int dim,
int spacedim>
3002 return (neighbor_index(i) == -1);
3007template <
int dim,
int spacedim>
3012 return at_boundary();
3015 for (
unsigned int l = 0; l < this->n_lines(); ++l)
3016 if (this->line(l)->at_boundary())
3025template <
int dim,
int spacedim>
3028 const unsigned int face,
3029 const unsigned int subface)
const
3031 Assert(!this->has_children(),
3032 ExcMessage(
"The present cell must not have children!"));
3033 Assert(!this->at_boundary(face),
3034 ExcMessage(
"The present cell must have a valid neighbor!"));
3035 Assert(this->neighbor(face)->has_children() ==
true,
3036 ExcMessage(
"The neighbor must have children!"));
3044 const auto neighbor_cell = this->neighbor(face);
3047 Assert(neighbor_cell->refinement_case() ==
3053 const unsigned int neighbor_face =
3054 this->neighbor_of_neighbor(face);
3059 const unsigned int neighbor_subface =
3060 (!(this->line_orientation(face)) !=
3061 !(neighbor_cell->line_orientation(neighbor_face))) ?
3065 const unsigned int neighbor_child_index =
3066 neighbor_cell->reference_cell().child_cell_on_face(
3067 neighbor_face, neighbor_subface);
3069 neighbor_cell->child(neighbor_child_index);
3073 Assert(sub_neighbor->refinement_case() ==
3077 return sub_neighbor;
3081 const unsigned int neighbor_neighbor =
3082 this->neighbor_of_neighbor(face);
3083 const unsigned int neighbor_child_index =
3085 this->neighbor(face)->refinement_case(),
3090 this->neighbor(face)->child(neighbor_child_index);
3096 while (sub_neighbor->has_children())
3099 sub_neighbor->refinement_case(),
3100 neighbor_neighbor) ==
3105 sub_neighbor->refinement_case(), neighbor_neighbor, 0));
3108 return sub_neighbor;
3176 mother_face = this->face(face);
3177 const unsigned int total_children =
3178 mother_face->n_active_descendants();
3183 unsigned int neighbor_neighbor;
3186 this->neighbor(face);
3190 mother_face->refinement_case();
3191 if (mother_face_ref_case ==
3200 neighbor_neighbor = this->neighbor_of_neighbor(face);
3204 const unsigned int neighbor_child_index =
3206 neighbor->refinement_case(),
3209 neighbor->face_orientation(neighbor_neighbor),
3210 neighbor->face_flip(neighbor_neighbor),
3211 neighbor->face_rotation(neighbor_neighbor));
3212 neighbor_child = neighbor->child(neighbor_child_index);
3216 Assert((this->face(face)->child(subface) ==
3217 neighbor_child->face(neighbor_neighbor)),
3227 unsigned int first_child_to_find;
3228 unsigned int neighbor_child_index;
3229 if (total_children == 2)
3230 first_child_to_find = subface;
3233 first_child_to_find = subface / 2;
3234 if (total_children == 3 && subface == 1 &&
3235 !mother_face->child(0)->has_children())
3236 first_child_to_find = 1;
3238 if (neighbor_is_coarser(face))
3240 std::pair<unsigned int, unsigned int> indices =
3241 neighbor_of_coarser_neighbor(face);
3242 neighbor_neighbor = indices.first;
3287 unsigned int iso_subface;
3288 if (neighbor->face(neighbor_neighbor)
3290 iso_subface = 2 * first_child_to_find + indices.second;
3293 Assert(neighbor->face(neighbor_neighbor)
3294 ->refinement_case() ==
3298 first_child_to_find + 2 * indices.second;
3300 neighbor_child_index =
3302 neighbor->refinement_case(),
3305 neighbor->face_orientation(neighbor_neighbor),
3306 neighbor->face_flip(neighbor_neighbor),
3307 neighbor->face_rotation(neighbor_neighbor));
3311 neighbor_neighbor = neighbor_of_neighbor(face);
3312 neighbor_child_index =
3314 neighbor->refinement_case(),
3316 first_child_to_find,
3317 neighbor->face_orientation(neighbor_neighbor),
3318 neighbor->face_flip(neighbor_neighbor),
3319 neighbor->face_rotation(neighbor_neighbor),
3320 mother_face_ref_case);
3323 neighbor_child = neighbor->child(neighbor_child_index);
3329 neighbor_child->has_children() &&
3331 neighbor_child->refinement_case(), neighbor_neighbor) ==
3333 neighbor_child = neighbor_child->child(
3335 neighbor_child->refinement_case(),
3345 if (total_children == 3)
3347 if (mother_face->child(0)->has_children())
3350 neighbor_child = neighbor_child->child(
3352 neighbor_child->refinement_case(),
3355 neighbor_child->face_orientation(
3357 neighbor_child->face_flip(neighbor_neighbor),
3358 neighbor_child->face_rotation(
3360 mother_face->child(0)->refinement_case()));
3364 Assert(mother_face->child(1)->has_children(),
3367 neighbor_child = neighbor_child->child(
3369 neighbor_child->refinement_case(),
3372 neighbor_child->face_orientation(
3374 neighbor_child->face_flip(neighbor_neighbor),
3375 neighbor_child->face_rotation(
3377 mother_face->child(1)->refinement_case()));
3380 else if (total_children == 4)
3382 neighbor_child = neighbor_child->child(
3384 neighbor_child->refinement_case(),
3387 neighbor_child->face_orientation(neighbor_neighbor),
3388 neighbor_child->face_flip(neighbor_neighbor),
3389 neighbor_child->face_rotation(neighbor_neighbor),
3390 mother_face->child(subface / 2)->refinement_case()));
3398 while (neighbor_child->has_children())
3401 neighbor_child->refinement_case(), neighbor_neighbor, 0));
3407 switch (this->subface_case(face))
3412 requested = mother_face->child(subface);
3417 mother_face->child(subface / 2)->child(subface % 2);
3426 requested = mother_face->child(0)->child(subface);
3429 requested = mother_face->child(1);
3440 requested = mother_face->child(0);
3444 requested = mother_face->child(1)->child(subface - 1);
3454 Assert(requested == neighbor_child->face(neighbor_neighbor),
3458 return neighbor_child;
3475template <
int structdim,
int dim,
int spacedim>
3484template <
int structdim,
int dim,
int spacedim>
3493template <
int structdim,
int dim,
int spacedim>
3502#include "tria_accessor.inst"