531
532
533
534#include "implicit_f.inc"
535
536
537
538#include "com04_c.inc"
539#include "com08_c.inc"
540
541
542
543 INTEGER LFT ,LLT,NMEF,NMEL,
544 . IXS(NIXS,*),IXS20(12,*),NELEM(*),INDEX(*)
545
547 . x(3,*),v(3,*),a(3,*),eminx(6,*),SIZE,xmsr(*),xsav(3,*)
548
549
550
551 INTEGER I,J,K,L,NE,IDIR,N20
553 . an12,ax12,an34,ax34,an56,ax56,an78,ax78,cn,cx,dx,dn,d4,d8,
554 . x1,x2,x3,x4,x5,x6,x7,x8,
555 . x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,xc,xx,xn
556
557
558
559
560
561
562 DO idir=1,3
563
564
565
566 DO l=lft,llt
567 i = index(l)
568 ne = nelem(i)
569 n20= ne - numels8 - numels10
570
571 j = ixs(2,ne)
572 x1 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
573 xmsr(idir) =
max(xmsr(idir) ,x1-xsav(idir,j))
574 xmsr(idir+3)=
min(xmsr(idir+3),x1-xsav(idir,j))
575 j = ixs(3,ne)
576 x2 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir
577 xmsr(idir) =
max(xmsr(idir) ,x2-xsav(idir,j))
578 xmsr(idir+3)=
min(xmsr(idir+3),x2-xsav(idir,j))
579 j = ixs(4,ne)
580 x3 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
581 xmsr(idir) =
max(xmsr(idir) ,x3-xsav(idir,j))
582 xmsr(idir+3)=
min(xmsr(idir+3),x3-xsav(idir,j))
583 j = ixs(5,ne)
584 x4 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
585 xmsr(idir) =
max(xmsr(idir) ,x4-xsav(idir,j))
586 xmsr(idir+3)=
min(xmsr(idir+3),x4-xsav(idir,j))
587 j = ixs(6,ne)
588 x5 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
589 xmsr(idir) =
max(xmsr(idir) ,x5-xsav(idir,j))
590 xmsr(idir+3)=
min(xmsr(idir+3),x5-xsav(idir,j))
591 j = ixs(7,ne)
592 x6 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
593 xmsr(idir) =
max(xmsr(idir) ,x6-xsav(idir,j))
594 xmsr(idir+3)=
min(xmsr(idir+3),x6-xsav(idir,j))
595 j = ixs(8,ne)
596 x7 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
597 xmsr(idir) =
max(xmsr(idir) ,x7-xsav(idir,j))
598 xmsr(idir+3)=
min(xmsr(idir+3),x7-xsav(idir,j))
599 j = ixs(9,ne)
600 x8 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
601 xmsr(idir) =
max(xmsr(idir) ,x8-xsav(idir,j))
602 xmsr(idir+3)=
min(xmsr(idir+3),x8-xsav(idir,j))
603
604 j = ixs20(1,n20)
605 IF(j/=0)THEN
606 x9 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
607 xmsr(idir) =
max(xmsr(idir) ,x9-xsav(idir,j))
608 xmsr(idir+3)=
min(xmsr(idir+3),x9-xsav(idir,j))
609 ELSE
610 x9=0.5*(x(idir,ixs(2,ne))+x(idir,ixs(3,ne)))
611 ENDIF
612 j = ixs20(2,n20)
613 IF(j/=0)THEN
614 x10 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
615 xmsr(idir) =
max(xmsr(idir) ,x10-xsav(idir,j))
616 xmsr(idir+3)=
min(xmsr(idir+3),x10-xsav(idir,j))
617 ELSE
618 x10=0.5*(x(idir,ixs(3,ne))+x(idir,ixs(4,ne)))
619 ENDIF
620 j = ixs20(3,n20)
621 IF(j/=0)THEN
622 x11 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
623 xmsr(idir) =
max(xmsr(idir) ,x11-xsav(idir,j))
624 xmsr(idir+3)=
min(xmsr(idir+3),x11-xsav(idir,j))
625 ELSE
626 x11=0.5*(x(idir,ixs(4,ne))+x(idir,ixs(5,ne)))
627 ENDIF
628 j = ixs20(4,n20)
629 IF(j/=0)THEN
630 x12 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
631 xmsr(idir) =
max(xmsr(idir) ,x12-xsav(idir,j))
632 xmsr(idir+3)=
min(xmsr(idir+3),x12-xsav(idir,j))
633 ELSE
634 x12=0.5*(x(idir,ixs(5,ne))+x(idir,ixs(2,ne)))
635 ENDIF
636 j = ixs20(5,n20)
637 IF(j/=0)THEN
638 x13 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
639 xmsr(idir) =
max(xmsr(idir) ,x13-xsav(idir,j))
640 xmsr(idir+3)=
min(xmsr(idir+3),x13-xsav(idir,j))
641 ELSE
642 x13=0.5*(x(idir,ixs(2,ne))+x(idir,ixs(6,ne)))
643 ENDIF
644 j = ixs20(6,n20)
645 IF(j/=0)THEN
646 x14 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
647 xmsr(idir) =
max(xmsr(idir) ,x14-xsav(idir,j))
648 xmsr(idir+3)=
min(xmsr(idir+3),x14-xsav(idir,j))
649 ELSE
650 x14=0.5*(x(idir,ixs(3,ne))+x(idir,ixs(6,ne)))
651 ENDIF
652 j = ixs20(7,n20)
653 IF(j/=0)THEN
654 x15 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
655 xmsr(idir) =
max(xmsr(idir) ,x15-xsav(idir,j))
656 xmsr(idir+3)=
min(xmsr(idir+3),x15-xsav(idir,j))
657 ELSE
658 x15=0.5*(x(idir,ixs(4,ne))+x(idir,ixs(8,ne)))
659 ENDIF
660 j = ixs20(8,n20)
661 IF(j/=0)THEN
662 x16 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
663 xmsr(idir) =
max(xmsr(idir) ,x16-xsav(idir,j))
664 xmsr(idir+3)=
min(xmsr(idir+3),x16-xsav(idir,j))
665 ELSE
666 x16=0.5*(x(idir,ixs(5,ne))+x(idir,ixs(9,ne)))
667 ENDIF
668 j = ixs20(9,n20)
669 IF(j/=0)THEN
670 x17 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
671 xmsr(idir) =
max(xmsr(idir) ,x17-xsav(idir,j))
672 xmsr(idir+3)=
min(xmsr(idir+3),x17-xsav(idir,j))
673 ELSE
674 x17=0.5*(x(idir,ixs(6,ne))+x(idir,ixs(7,ne)))
675 ENDIF
676 j = ixs20(10,n20)
677 IF(j/=0)THEN
678 x18 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
679 xmsr(idir) =
max(xmsr(idir) ,x18-xsav(idir,j))
680 xmsr(idir+3)=
min(xmsr(idir+3),x18-xsav(idir,j))
681 ELSE
682 x18=0.5*(x(idir,ixs(7,ne))+x(idir,ixs(8,ne)))
683 ENDIF
684 j = ixs20(11,n20)
685 IF(j/=0)THEN
686 x19 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
687 xmsr(idir) =
max(xmsr(idir) ,x19-xsav(idir,j))
688 xmsr(idir+3)=
min(xmsr(idir+3),x19-xsav(idir,j))
689 ELSE
690 x19=0.5*(x(idir,ixs(8,ne))+x(idir,ixs(9,ne)))
691 ENDIF
692 j = ixs20(12,n20)
693 IF(j/=0)THEN
694 x20 = x(idir,j)+dt2*(v(idir,j)+dt12*a(idir,j))
695 xmsr(idir) =
max(xmsr(idir) ,x20-xsav(idir,j))
696 xmsr(idir+3)=
min(xmsr(idir+3),x20-xsav(idir,j))
697 ELSE
698 x20=0.5*(x(idir,ixs(6,ne))+x(idir,ixs(9,ne)))
699 ENDIF
700
701
702
703
704 xc = half*(x9+x10+x11+x12) - fourth*(x1+x2+x3+x4)
705
706 d4 = fourth * abs(x1-x2)
707 an12 =
min( x1 , x2 , x9-d4 )
708 ax12 =
max( x1 , x2 , x9+d4 )
709
710 d4 = fourth * abs(x3-x4)
711 an34 =
min( x3 , x4 , x11-d4 )
713
714 d4 = fourth * abs(x12-x10)
715 cn =
min( x12 , x10 , xc-d4 )
716 cx =
max( x12 , x10 , xc+d4 )
717
718 d8 = one_over_8 *
max( ax12-an34 , ax34-an12 )
719 d4 = d8 + d8
720 dn =
max(
min(an12 , an34 , cn-d4 ),
721 .
min(an12 , an34 , cn) - d8 )
722 dx =
min(
max(ax12 , ax34 , cx+d4 ),
723 .
max(ax12 , ax34 , cx) + d8 )
724
725 eminx(idir,i) =
min( eminx(idir,i) , dn )
726 eminx(idir+3,i) =
max( eminx(idir+3,i), dx )
727
728
729
730 xc = half*(x17+x18+x19+x20) - fourth*(x5+x6+x7+x8)
731
732 d4 = fourth * abs(x5-x6)
733 an56 =
min( x5 , x6 , x17-d4 )
734 ax56 =
max( x5 , x6 , x17+d4 )
735
736 d4 = fourth * abs(x7-x8)
737 an78 =
min( x7 , x8 , x19-d4 )
738 ax78 =
max( x7 , x8 , x19+d4 )
739
740 d4 = fourth * abs(x20-x18)
741 cn =
min( x20 , x18 , xc-d4 )
742 cx =
max( x20 , x18 , xc+d4 )
743
744 d8 = one_over_8 *
max( ax56-an78 , ax78-an56 )
745 d4 = d8 + d8
746 dn =
max(
min(an56 , an78 , cn
747 .
min(an56 , an78 , cn) - d8 )
748 dx =
min(
max(ax56 , ax78 , cx+d4 ),
749 .
max(ax56 , ax78 , cx) + d8 )
750
751 eminx(idir,i) =
min( eminx(idir,i) , dn )
752 eminx(idir+3,i) =
max( eminx(idir+3,i), dx )
753
754
755
756 xc = half*(x9+x14+x17+x13) - fourth*(x1+x2+x6+x5)
757
758 d4 = fourth * abs(x13-x14)
759 cn =
min( x13 , x14 , xc-d4 )
760 cx =
max( x13 , x14 , xc+d4 )
761
762 d8 = one_over_8 *
max( ax12-an56 , ax56-an12 )
763 d4 = d8 + d8
764 dn =
max(
min(an12 , an56 , cn-d4 ),
765 .
min(an12 , an56 , cn) - d8 )
766 dx =
min(
max(ax12 , ax56 , cx+d4 ),
767 .
max(ax12 , ax56 , cx) + d8 )
768
769 eminx(idir,i) =
min( eminx(idir,i) , dn )
770 eminx(idir+3,i) =
max( eminx(idir+3,i), dx )
771
772
773
774 xc = half*(x11+x15+x19+x16) - fourth*(x3+x4+x8+x7)
775
776 d4 = fourth * abs(x16-x15)
777 cn =
min( x15 , x16 , xc-d4 )
778 cx =
max( x15 , x16 , xc+d4 )
779
780 d8 = one_over_8 *
max( ax34-an78 , ax78-an34 )
781 d4 = d8 + d8
782 dn =
max(
min(an34 , an78 , cn-d4 ),
783 .
min(an34 , an78 , cn) - d8 )
784 dx =
min(
max(ax34 , ax78 , cx+d4 ),
785 .
max(ax34 , ax78 , cx) + d8 )
786
787 eminx(idir,i) =
min( eminx(idir,i) , dn )
788 eminx(idir+3,i) =
max( eminx(idir+3,i), dx )
789
790
791
792 xc = half*(x12+x13+x20+x16) - fourth*(x4+x1+x5+x8)
793
794 d4 = fourth * abs(x4-x1)
795 an12 =
min( x4 , x1 , x12-d4 )
796 ax12 =
max( x4 , x1 , x12+d4 )
797
798 d4 = fourth * abs(x8-x5)
799 an34 =
min( x8 , x5 , x20-d4 )
800 ax34 =
max( x8 , x5 , x20+d4 )
801
802 d4 = fourth * abs(x16-x13)
803 cn =
min( x16 , x13 , xc-d4 )
804 cx =
max( x16 , x13 , xc+d4 )
805
806 d8 = one_over_8 *
max( ax12-an34 , ax34-an12 )
807 d4 = d8 + d8
808 dn =
max(
min(an12 , an34 , cn-d4 ),
809 .
min(an12 , an34 , cn) - d8 )
810 dx =
min(
max(ax12 , ax34 , cx+d4 ),
811 .
max(ax12 , ax34 , cx) + d8 )
812
813 eminx(idir
814 eminx(idir+3,i) =
max( eminx(idir+3,i), dx )
815
816
817
818 xc = half*(x10+x14+x18+x15) - fourth*(x3+x2+x6+x7)
819
820 d4 = fourth * abs(x3-x2)
821 an12 =
min( x3 , x2 , x10-d4 )
822 ax12 =
max( x3 , x2 , x10+d4 )
823
824 d4 = fourth * abs(x7-x6)
825 an34 =
min( x7 , x6 , x18-d4 )
826 ax34 =
max( x7 , x6 , x18+d4 )
827
828 d4 = fourth * abs(x15-x14)
829 cn =
min( x15 , x14 , xc-d4 )
830 cx =
max( x15 , x14 , xc+d4 )
831
832 d8 = one_over_8*
max( ax12-an34 , ax34-an12 )
833 d4 = d8 + d8
834 dn =
max(
min(an12 , an34 , cn-d4 ),
835 .
min(an12 , an34 , cn) - d8 )
836 dx =
min(
max(ax12 , ax34 , cx+d4 ),
837 .
max(ax12 , ax34 , cx) + d8 )
838
839 eminx(idir,i) =
min( eminx(idir,i) , dn )
840 eminx(idir+3,i) =
max( eminx(idir+3,i), dx )
841
842 SIZE = SIZE + dx - dn
843
844 ENDDO
845 ENDDO
846
847
848 RETURN