~madteam/mg5amcnlo/series2.0

« back to all changes in this revision

Viewing changes to tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/gg_ttx/CT_interface.f

mwrge with 2.7.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
325
325
 
326
326
 
327
327
 
328
 
      SUBROUTINE ML5_0_LOOP_2_3(P1, P2, W1, W2, W3, M1, M2,  RANK,
 
328
      SUBROUTINE ML5_0_LOOP_3(W1, W2, W3, M1, M2, M3,  RANK,
329
329
     $  SQUAREDSOINDEX, LOOPNUM)
330
330
      INTEGER    NEXTERNAL
331
331
      PARAMETER (NEXTERNAL=4)
332
332
      INTEGER    NLOOPLINE
333
 
      PARAMETER (NLOOPLINE=2)
 
333
      PARAMETER (NLOOPLINE=3)
334
334
      INTEGER    NWAVEFUNCS
335
335
      PARAMETER (NWAVEFUNCS=10)
336
336
      INTEGER    NLOOPGROUPS
344
344
C     ARGUMENTS 
345
345
C     
346
346
      INTEGER W1, W2, W3
347
 
      COMPLEX*16 M1, M2
348
 
      INTEGER P1, P2
 
347
      COMPLEX*16 M1, M2, M3
 
348
 
349
349
      INTEGER RANK, LSYMFACT
350
350
      INTEGER LOOPNUM, SQUAREDSOINDEX
351
351
C     
395
395
C     Determine it uses qp or not
396
396
      DOING_QP = (CTMODE.GE.4)
397
397
 
398
 
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED).OR.GOODAMP(SQUAREDSOIND
399
 
     $EX,LOOPNUM)) THEN
 
398
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED)
 
399
     $ .OR.GOODAMP(SQUAREDSOINDEX,LOOPNUM)) THEN
400
400
        WE(1)=W1
401
401
        WE(2)=W2
402
402
        WE(3)=W3
403
 
        M2L(1)=M2**2
 
403
        M2L(1)=M3**2
404
404
        M2L(2)=M1**2
405
 
        PAIRING(1)=P1
406
 
        PAIRING(2)=P2
 
405
        M2L(3)=M2**2
 
406
        DO I=1,NLOOPLINE
 
407
          PAIRING(I)=1
 
408
        ENDDO
 
409
 
407
410
        R=RANK
408
411
        ID=LOOPNUM
409
412
        SQSOINDEX=SQUAREDSOINDEX
526
529
C     Determine it uses qp or not
527
530
      DOING_QP = (CTMODE.GE.4)
528
531
 
529
 
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED).OR.GOODAMP(SQUAREDSOIND
530
 
     $EX,LOOPNUM)) THEN
 
532
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED)
 
533
     $ .OR.GOODAMP(SQUAREDSOINDEX,LOOPNUM)) THEN
531
534
        WE(1)=W1
532
535
        WE(2)=W2
533
536
        WE(3)=W3
592
595
      ENDIF
593
596
      END
594
597
 
 
598
      SUBROUTINE ML5_0_LOOP_2_3(P1, P2, W1, W2, W3, M1, M2,  RANK,
 
599
     $  SQUAREDSOINDEX, LOOPNUM)
 
600
      INTEGER    NEXTERNAL
 
601
      PARAMETER (NEXTERNAL=4)
 
602
      INTEGER    NLOOPLINE
 
603
      PARAMETER (NLOOPLINE=2)
 
604
      INTEGER    NWAVEFUNCS
 
605
      PARAMETER (NWAVEFUNCS=10)
 
606
      INTEGER    NLOOPGROUPS
 
607
      PARAMETER (NLOOPGROUPS=26)
 
608
      INTEGER    NCOMB
 
609
      PARAMETER (NCOMB=16)
 
610
C     These are constants related to the split orders
 
611
      INTEGER    NSQUAREDSO
 
612
      PARAMETER (NSQUAREDSO=0)
 
613
C     
 
614
C     ARGUMENTS 
 
615
C     
 
616
      INTEGER W1, W2, W3
 
617
      COMPLEX*16 M1, M2
 
618
      INTEGER P1, P2
 
619
      INTEGER RANK, LSYMFACT
 
620
      INTEGER LOOPNUM, SQUAREDSOINDEX
 
621
C     
 
622
C     LOCAL VARIABLES 
 
623
C     
 
624
      REAL*8 PL(0:3,NLOOPLINE)
 
625
      REAL*16 MP_PL(0:3,NLOOPLINE)
 
626
      COMPLEX*16 M2L(NLOOPLINE)
 
627
      INTEGER PAIRING(NLOOPLINE),WE(3)
 
628
      INTEGER I, J, K, TEMP,I_LIB
 
629
      LOGICAL COMPLEX_MASS,DOING_QP
 
630
C     
 
631
C     GLOBAL VARIABLES
 
632
C     
 
633
      INCLUDE 'MadLoopParams.inc'
 
634
      INTEGER ID,SQSOINDEX,R
 
635
      COMMON/ML5_0_LOOP/ID,SQSOINDEX,R
 
636
 
 
637
      LOGICAL CHECKPHASE, HELDOUBLECHECKED
 
638
      COMMON/ML5_0_INIT/CHECKPHASE, HELDOUBLECHECKED
 
639
 
 
640
      INTEGER HELOFFSET
 
641
      INTEGER GOODHEL(NCOMB)
 
642
      LOGICAL GOODAMP(NSQUAREDSO,NLOOPGROUPS)
 
643
      COMMON/ML5_0_FILTERS/GOODAMP,GOODHEL,HELOFFSET
 
644
 
 
645
      COMPLEX*16 LOOPRES(3,NSQUAREDSO,NLOOPGROUPS)
 
646
      LOGICAL S(NSQUAREDSO,NLOOPGROUPS)
 
647
      COMMON/ML5_0_LOOPRES/LOOPRES,S
 
648
 
 
649
 
 
650
      COMPLEX*16 W(20,NWAVEFUNCS)
 
651
      COMMON/ML5_0_W/W
 
652
      COMPLEX*32 MP_W(20,NWAVEFUNCS)
 
653
      COMMON/ML5_0_MP_W/MP_W
 
654
 
 
655
      REAL*8 LSCALE
 
656
      INTEGER CTMODE
 
657
      COMMON/ML5_0_CT/LSCALE,CTMODE
 
658
      INTEGER LIBINDEX
 
659
      COMMON/ML5_0_I_LIB/LIBINDEX
 
660
 
 
661
C     ----------
 
662
C     BEGIN CODE
 
663
C     ----------
 
664
 
 
665
C     Determine it uses qp or not
 
666
      DOING_QP = (CTMODE.GE.4)
 
667
 
 
668
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED)
 
669
     $ .OR.GOODAMP(SQUAREDSOINDEX,LOOPNUM)) THEN
 
670
        WE(1)=W1
 
671
        WE(2)=W2
 
672
        WE(3)=W3
 
673
        M2L(1)=M2**2
 
674
        M2L(2)=M1**2
 
675
        PAIRING(1)=P1
 
676
        PAIRING(2)=P2
 
677
        R=RANK
 
678
        ID=LOOPNUM
 
679
        SQSOINDEX=SQUAREDSOINDEX
 
680
        DO I=0,3
 
681
          TEMP=1
 
682
          DO J=1,NLOOPLINE
 
683
            PL(I,J)=0.D0
 
684
            IF (DOING_QP) THEN
 
685
              MP_PL(I,J)=0.0E+0_16
 
686
            ENDIF
 
687
            DO K=TEMP,(TEMP+PAIRING(J)-1)
 
688
              PL(I,J)=PL(I,J)-DBLE(W(1+I,WE(K)))
 
689
              IF (DOING_QP) THEN
 
690
                MP_PL(I,J)=MP_PL(I,J)-REAL(MP_W(1+I,WE(K)),KIND=16)
 
691
              ENDIF
 
692
            ENDDO
 
693
            TEMP=TEMP+PAIRING(J)
 
694
          ENDDO
 
695
        ENDDO
 
696
C       Determine whether the integral is with complex masses or not
 
697
C       since some reduction libraries, e.g.PJFry++ and IREGI, are
 
698
C        still
 
699
C       not able to deal with complex masses
 
700
        COMPLEX_MASS=.FALSE.
 
701
        DO I=1,NLOOPLINE
 
702
          IF(DIMAG(M2L(I)).EQ.0D0)CYCLE
 
703
          IF(ABS(DIMAG(M2L(I)))/MAX(ABS(M2L(I)),1D-2).GT.1D-15)THEN
 
704
            COMPLEX_MASS=.TRUE.
 
705
            EXIT
 
706
          ENDIF
 
707
        ENDDO
 
708
C       Choose the correct loop library
 
709
        CALL ML5_0_CHOOSE_LOOPLIB(LIBINDEX,NLOOPLINE,RANK,COMPLEX_MASS
 
710
     $   ,ID,DOING_QP,I_LIB)
 
711
        IF(MLREDUCTIONLIB(I_LIB).EQ.1)THEN
 
712
C         CutTools is used
 
713
          CALL ML5_0_CTLOOP(NLOOPLINE,PL,M2L,RANK,LOOPRES(1
 
714
     $     ,SQUAREDSOINDEX,LOOPNUM),S(SQUAREDSOINDEX,LOOPNUM))
 
715
        ELSE
 
716
C         Tensor Integral Reduction is used 
 
717
          CALL ML5_0_TIRLOOP(SQUAREDSOINDEX,LOOPNUM,I_LIB,NLOOPLINE,PL
 
718
     $     ,M2L,RANK,LOOPRES(1,SQUAREDSOINDEX,LOOPNUM)
 
719
     $     ,S(SQUAREDSOINDEX,LOOPNUM))
 
720
        ENDIF
 
721
      ELSE
 
722
        LOOPRES(1,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
 
723
        LOOPRES(2,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
 
724
        LOOPRES(3,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
 
725
        S(SQUAREDSOINDEX,LOOPNUM)=.TRUE.
 
726
      ENDIF
 
727
      END
 
728
 
 
729
      SUBROUTINE ML5_0_LOOP_2(W1, W2, M1, M2,  RANK, SQUAREDSOINDEX,
 
730
     $  LOOPNUM)
 
731
      INTEGER    NEXTERNAL
 
732
      PARAMETER (NEXTERNAL=4)
 
733
      INTEGER    NLOOPLINE
 
734
      PARAMETER (NLOOPLINE=2)
 
735
      INTEGER    NWAVEFUNCS
 
736
      PARAMETER (NWAVEFUNCS=10)
 
737
      INTEGER    NLOOPGROUPS
 
738
      PARAMETER (NLOOPGROUPS=26)
 
739
      INTEGER    NCOMB
 
740
      PARAMETER (NCOMB=16)
 
741
C     These are constants related to the split orders
 
742
      INTEGER    NSQUAREDSO
 
743
      PARAMETER (NSQUAREDSO=0)
 
744
C     
 
745
C     ARGUMENTS 
 
746
C     
 
747
      INTEGER W1, W2
 
748
      COMPLEX*16 M1, M2
 
749
 
 
750
      INTEGER RANK, LSYMFACT
 
751
      INTEGER LOOPNUM, SQUAREDSOINDEX
 
752
C     
 
753
C     LOCAL VARIABLES 
 
754
C     
 
755
      REAL*8 PL(0:3,NLOOPLINE)
 
756
      REAL*16 MP_PL(0:3,NLOOPLINE)
 
757
      COMPLEX*16 M2L(NLOOPLINE)
 
758
      INTEGER PAIRING(NLOOPLINE),WE(2)
 
759
      INTEGER I, J, K, TEMP,I_LIB
 
760
      LOGICAL COMPLEX_MASS,DOING_QP
 
761
C     
 
762
C     GLOBAL VARIABLES
 
763
C     
 
764
      INCLUDE 'MadLoopParams.inc'
 
765
      INTEGER ID,SQSOINDEX,R
 
766
      COMMON/ML5_0_LOOP/ID,SQSOINDEX,R
 
767
 
 
768
      LOGICAL CHECKPHASE, HELDOUBLECHECKED
 
769
      COMMON/ML5_0_INIT/CHECKPHASE, HELDOUBLECHECKED
 
770
 
 
771
      INTEGER HELOFFSET
 
772
      INTEGER GOODHEL(NCOMB)
 
773
      LOGICAL GOODAMP(NSQUAREDSO,NLOOPGROUPS)
 
774
      COMMON/ML5_0_FILTERS/GOODAMP,GOODHEL,HELOFFSET
 
775
 
 
776
      COMPLEX*16 LOOPRES(3,NSQUAREDSO,NLOOPGROUPS)
 
777
      LOGICAL S(NSQUAREDSO,NLOOPGROUPS)
 
778
      COMMON/ML5_0_LOOPRES/LOOPRES,S
 
779
 
 
780
 
 
781
      COMPLEX*16 W(20,NWAVEFUNCS)
 
782
      COMMON/ML5_0_W/W
 
783
      COMPLEX*32 MP_W(20,NWAVEFUNCS)
 
784
      COMMON/ML5_0_MP_W/MP_W
 
785
 
 
786
      REAL*8 LSCALE
 
787
      INTEGER CTMODE
 
788
      COMMON/ML5_0_CT/LSCALE,CTMODE
 
789
      INTEGER LIBINDEX
 
790
      COMMON/ML5_0_I_LIB/LIBINDEX
 
791
 
 
792
C     ----------
 
793
C     BEGIN CODE
 
794
C     ----------
 
795
 
 
796
C     Determine it uses qp or not
 
797
      DOING_QP = (CTMODE.GE.4)
 
798
 
 
799
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED)
 
800
     $ .OR.GOODAMP(SQUAREDSOINDEX,LOOPNUM)) THEN
 
801
        WE(1)=W1
 
802
        WE(2)=W2
 
803
        M2L(1)=M2**2
 
804
        M2L(2)=M1**2
 
805
        DO I=1,NLOOPLINE
 
806
          PAIRING(I)=1
 
807
        ENDDO
 
808
 
 
809
        R=RANK
 
810
        ID=LOOPNUM
 
811
        SQSOINDEX=SQUAREDSOINDEX
 
812
        DO I=0,3
 
813
          TEMP=1
 
814
          DO J=1,NLOOPLINE
 
815
            PL(I,J)=0.D0
 
816
            IF (DOING_QP) THEN
 
817
              MP_PL(I,J)=0.0E+0_16
 
818
            ENDIF
 
819
            DO K=TEMP,(TEMP+PAIRING(J)-1)
 
820
              PL(I,J)=PL(I,J)-DBLE(W(1+I,WE(K)))
 
821
              IF (DOING_QP) THEN
 
822
                MP_PL(I,J)=MP_PL(I,J)-REAL(MP_W(1+I,WE(K)),KIND=16)
 
823
              ENDIF
 
824
            ENDDO
 
825
            TEMP=TEMP+PAIRING(J)
 
826
          ENDDO
 
827
        ENDDO
 
828
C       Determine whether the integral is with complex masses or not
 
829
C       since some reduction libraries, e.g.PJFry++ and IREGI, are
 
830
C        still
 
831
C       not able to deal with complex masses
 
832
        COMPLEX_MASS=.FALSE.
 
833
        DO I=1,NLOOPLINE
 
834
          IF(DIMAG(M2L(I)).EQ.0D0)CYCLE
 
835
          IF(ABS(DIMAG(M2L(I)))/MAX(ABS(M2L(I)),1D-2).GT.1D-15)THEN
 
836
            COMPLEX_MASS=.TRUE.
 
837
            EXIT
 
838
          ENDIF
 
839
        ENDDO
 
840
C       Choose the correct loop library
 
841
        CALL ML5_0_CHOOSE_LOOPLIB(LIBINDEX,NLOOPLINE,RANK,COMPLEX_MASS
 
842
     $   ,ID,DOING_QP,I_LIB)
 
843
        IF(MLREDUCTIONLIB(I_LIB).EQ.1)THEN
 
844
C         CutTools is used
 
845
          CALL ML5_0_CTLOOP(NLOOPLINE,PL,M2L,RANK,LOOPRES(1
 
846
     $     ,SQUAREDSOINDEX,LOOPNUM),S(SQUAREDSOINDEX,LOOPNUM))
 
847
        ELSE
 
848
C         Tensor Integral Reduction is used 
 
849
          CALL ML5_0_TIRLOOP(SQUAREDSOINDEX,LOOPNUM,I_LIB,NLOOPLINE,PL
 
850
     $     ,M2L,RANK,LOOPRES(1,SQUAREDSOINDEX,LOOPNUM)
 
851
     $     ,S(SQUAREDSOINDEX,LOOPNUM))
 
852
        ENDIF
 
853
      ELSE
 
854
        LOOPRES(1,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
 
855
        LOOPRES(2,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
 
856
        LOOPRES(3,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
 
857
        S(SQUAREDSOINDEX,LOOPNUM)=.TRUE.
 
858
      ENDIF
 
859
      END
 
860
 
595
861
      SUBROUTINE ML5_0_LOOP_3_4(P1, P2, P3, W1, W2, W3, W4, M1, M2, M3
596
862
     $ ,  RANK, SQUAREDSOINDEX, LOOPNUM)
597
863
      INTEGER    NEXTERNAL
662
928
C     Determine it uses qp or not
663
929
      DOING_QP = (CTMODE.GE.4)
664
930
 
665
 
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED).OR.GOODAMP(SQUAREDSOIND
666
 
     $EX,LOOPNUM)) THEN
 
931
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED)
 
932
     $ .OR.GOODAMP(SQUAREDSOINDEX,LOOPNUM)) THEN
667
933
        WE(1)=W1
668
934
        WE(2)=W2
669
935
        WE(3)=W3
726
992
      ENDIF
727
993
      END
728
994
 
729
 
      SUBROUTINE ML5_0_LOOP_3(W1, W2, W3, M1, M2, M3,  RANK,
730
 
     $  SQUAREDSOINDEX, LOOPNUM)
731
 
      INTEGER    NEXTERNAL
732
 
      PARAMETER (NEXTERNAL=4)
733
 
      INTEGER    NLOOPLINE
734
 
      PARAMETER (NLOOPLINE=3)
735
 
      INTEGER    NWAVEFUNCS
736
 
      PARAMETER (NWAVEFUNCS=10)
737
 
      INTEGER    NLOOPGROUPS
738
 
      PARAMETER (NLOOPGROUPS=26)
739
 
      INTEGER    NCOMB
740
 
      PARAMETER (NCOMB=16)
741
 
C     These are constants related to the split orders
742
 
      INTEGER    NSQUAREDSO
743
 
      PARAMETER (NSQUAREDSO=0)
744
 
C     
745
 
C     ARGUMENTS 
746
 
C     
747
 
      INTEGER W1, W2, W3
748
 
      COMPLEX*16 M1, M2, M3
749
 
 
750
 
      INTEGER RANK, LSYMFACT
751
 
      INTEGER LOOPNUM, SQUAREDSOINDEX
752
 
C     
753
 
C     LOCAL VARIABLES 
754
 
C     
755
 
      REAL*8 PL(0:3,NLOOPLINE)
756
 
      REAL*16 MP_PL(0:3,NLOOPLINE)
757
 
      COMPLEX*16 M2L(NLOOPLINE)
758
 
      INTEGER PAIRING(NLOOPLINE),WE(3)
759
 
      INTEGER I, J, K, TEMP,I_LIB
760
 
      LOGICAL COMPLEX_MASS,DOING_QP
761
 
C     
762
 
C     GLOBAL VARIABLES
763
 
C     
764
 
      INCLUDE 'MadLoopParams.inc'
765
 
      INTEGER ID,SQSOINDEX,R
766
 
      COMMON/ML5_0_LOOP/ID,SQSOINDEX,R
767
 
 
768
 
      LOGICAL CHECKPHASE, HELDOUBLECHECKED
769
 
      COMMON/ML5_0_INIT/CHECKPHASE, HELDOUBLECHECKED
770
 
 
771
 
      INTEGER HELOFFSET
772
 
      INTEGER GOODHEL(NCOMB)
773
 
      LOGICAL GOODAMP(NSQUAREDSO,NLOOPGROUPS)
774
 
      COMMON/ML5_0_FILTERS/GOODAMP,GOODHEL,HELOFFSET
775
 
 
776
 
      COMPLEX*16 LOOPRES(3,NSQUAREDSO,NLOOPGROUPS)
777
 
      LOGICAL S(NSQUAREDSO,NLOOPGROUPS)
778
 
      COMMON/ML5_0_LOOPRES/LOOPRES,S
779
 
 
780
 
 
781
 
      COMPLEX*16 W(20,NWAVEFUNCS)
782
 
      COMMON/ML5_0_W/W
783
 
      COMPLEX*32 MP_W(20,NWAVEFUNCS)
784
 
      COMMON/ML5_0_MP_W/MP_W
785
 
 
786
 
      REAL*8 LSCALE
787
 
      INTEGER CTMODE
788
 
      COMMON/ML5_0_CT/LSCALE,CTMODE
789
 
      INTEGER LIBINDEX
790
 
      COMMON/ML5_0_I_LIB/LIBINDEX
791
 
 
792
 
C     ----------
793
 
C     BEGIN CODE
794
 
C     ----------
795
 
 
796
 
C     Determine it uses qp or not
797
 
      DOING_QP = (CTMODE.GE.4)
798
 
 
799
 
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED).OR.GOODAMP(SQUAREDSOIND
800
 
     $EX,LOOPNUM)) THEN
801
 
        WE(1)=W1
802
 
        WE(2)=W2
803
 
        WE(3)=W3
804
 
        M2L(1)=M3**2
805
 
        M2L(2)=M1**2
806
 
        M2L(3)=M2**2
807
 
        DO I=1,NLOOPLINE
808
 
          PAIRING(I)=1
809
 
        ENDDO
810
 
 
811
 
        R=RANK
812
 
        ID=LOOPNUM
813
 
        SQSOINDEX=SQUAREDSOINDEX
814
 
        DO I=0,3
815
 
          TEMP=1
816
 
          DO J=1,NLOOPLINE
817
 
            PL(I,J)=0.D0
818
 
            IF (DOING_QP) THEN
819
 
              MP_PL(I,J)=0.0E+0_16
820
 
            ENDIF
821
 
            DO K=TEMP,(TEMP+PAIRING(J)-1)
822
 
              PL(I,J)=PL(I,J)-DBLE(W(1+I,WE(K)))
823
 
              IF (DOING_QP) THEN
824
 
                MP_PL(I,J)=MP_PL(I,J)-REAL(MP_W(1+I,WE(K)),KIND=16)
825
 
              ENDIF
826
 
            ENDDO
827
 
            TEMP=TEMP+PAIRING(J)
828
 
          ENDDO
829
 
        ENDDO
830
 
C       Determine whether the integral is with complex masses or not
831
 
C       since some reduction libraries, e.g.PJFry++ and IREGI, are
832
 
C        still
833
 
C       not able to deal with complex masses
834
 
        COMPLEX_MASS=.FALSE.
835
 
        DO I=1,NLOOPLINE
836
 
          IF(DIMAG(M2L(I)).EQ.0D0)CYCLE
837
 
          IF(ABS(DIMAG(M2L(I)))/MAX(ABS(M2L(I)),1D-2).GT.1D-15)THEN
838
 
            COMPLEX_MASS=.TRUE.
839
 
            EXIT
840
 
          ENDIF
841
 
        ENDDO
842
 
C       Choose the correct loop library
843
 
        CALL ML5_0_CHOOSE_LOOPLIB(LIBINDEX,NLOOPLINE,RANK,COMPLEX_MASS
844
 
     $   ,ID,DOING_QP,I_LIB)
845
 
        IF(MLREDUCTIONLIB(I_LIB).EQ.1)THEN
846
 
C         CutTools is used
847
 
          CALL ML5_0_CTLOOP(NLOOPLINE,PL,M2L,RANK,LOOPRES(1
848
 
     $     ,SQUAREDSOINDEX,LOOPNUM),S(SQUAREDSOINDEX,LOOPNUM))
849
 
        ELSE
850
 
C         Tensor Integral Reduction is used 
851
 
          CALL ML5_0_TIRLOOP(SQUAREDSOINDEX,LOOPNUM,I_LIB,NLOOPLINE,PL
852
 
     $     ,M2L,RANK,LOOPRES(1,SQUAREDSOINDEX,LOOPNUM)
853
 
     $     ,S(SQUAREDSOINDEX,LOOPNUM))
854
 
        ENDIF
855
 
      ELSE
856
 
        LOOPRES(1,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
857
 
        LOOPRES(2,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
858
 
        LOOPRES(3,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
859
 
        S(SQUAREDSOINDEX,LOOPNUM)=.TRUE.
860
 
      ENDIF
861
 
      END
862
 
 
863
 
      SUBROUTINE ML5_0_LOOP_2(W1, W2, M1, M2,  RANK, SQUAREDSOINDEX,
864
 
     $  LOOPNUM)
865
 
      INTEGER    NEXTERNAL
866
 
      PARAMETER (NEXTERNAL=4)
867
 
      INTEGER    NLOOPLINE
868
 
      PARAMETER (NLOOPLINE=2)
869
 
      INTEGER    NWAVEFUNCS
870
 
      PARAMETER (NWAVEFUNCS=10)
871
 
      INTEGER    NLOOPGROUPS
872
 
      PARAMETER (NLOOPGROUPS=26)
873
 
      INTEGER    NCOMB
874
 
      PARAMETER (NCOMB=16)
875
 
C     These are constants related to the split orders
876
 
      INTEGER    NSQUAREDSO
877
 
      PARAMETER (NSQUAREDSO=0)
878
 
C     
879
 
C     ARGUMENTS 
880
 
C     
881
 
      INTEGER W1, W2
882
 
      COMPLEX*16 M1, M2
883
 
 
884
 
      INTEGER RANK, LSYMFACT
885
 
      INTEGER LOOPNUM, SQUAREDSOINDEX
886
 
C     
887
 
C     LOCAL VARIABLES 
888
 
C     
889
 
      REAL*8 PL(0:3,NLOOPLINE)
890
 
      REAL*16 MP_PL(0:3,NLOOPLINE)
891
 
      COMPLEX*16 M2L(NLOOPLINE)
892
 
      INTEGER PAIRING(NLOOPLINE),WE(2)
893
 
      INTEGER I, J, K, TEMP,I_LIB
894
 
      LOGICAL COMPLEX_MASS,DOING_QP
895
 
C     
896
 
C     GLOBAL VARIABLES
897
 
C     
898
 
      INCLUDE 'MadLoopParams.inc'
899
 
      INTEGER ID,SQSOINDEX,R
900
 
      COMMON/ML5_0_LOOP/ID,SQSOINDEX,R
901
 
 
902
 
      LOGICAL CHECKPHASE, HELDOUBLECHECKED
903
 
      COMMON/ML5_0_INIT/CHECKPHASE, HELDOUBLECHECKED
904
 
 
905
 
      INTEGER HELOFFSET
906
 
      INTEGER GOODHEL(NCOMB)
907
 
      LOGICAL GOODAMP(NSQUAREDSO,NLOOPGROUPS)
908
 
      COMMON/ML5_0_FILTERS/GOODAMP,GOODHEL,HELOFFSET
909
 
 
910
 
      COMPLEX*16 LOOPRES(3,NSQUAREDSO,NLOOPGROUPS)
911
 
      LOGICAL S(NSQUAREDSO,NLOOPGROUPS)
912
 
      COMMON/ML5_0_LOOPRES/LOOPRES,S
913
 
 
914
 
 
915
 
      COMPLEX*16 W(20,NWAVEFUNCS)
916
 
      COMMON/ML5_0_W/W
917
 
      COMPLEX*32 MP_W(20,NWAVEFUNCS)
918
 
      COMMON/ML5_0_MP_W/MP_W
919
 
 
920
 
      REAL*8 LSCALE
921
 
      INTEGER CTMODE
922
 
      COMMON/ML5_0_CT/LSCALE,CTMODE
923
 
      INTEGER LIBINDEX
924
 
      COMMON/ML5_0_I_LIB/LIBINDEX
925
 
 
926
 
C     ----------
927
 
C     BEGIN CODE
928
 
C     ----------
929
 
 
930
 
C     Determine it uses qp or not
931
 
      DOING_QP = (CTMODE.GE.4)
932
 
 
933
 
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED).OR.GOODAMP(SQUAREDSOIND
934
 
     $EX,LOOPNUM)) THEN
935
 
        WE(1)=W1
936
 
        WE(2)=W2
937
 
        M2L(1)=M2**2
938
 
        M2L(2)=M1**2
939
 
        DO I=1,NLOOPLINE
940
 
          PAIRING(I)=1
941
 
        ENDDO
942
 
 
943
 
        R=RANK
944
 
        ID=LOOPNUM
945
 
        SQSOINDEX=SQUAREDSOINDEX
946
 
        DO I=0,3
947
 
          TEMP=1
948
 
          DO J=1,NLOOPLINE
949
 
            PL(I,J)=0.D0
950
 
            IF (DOING_QP) THEN
951
 
              MP_PL(I,J)=0.0E+0_16
952
 
            ENDIF
953
 
            DO K=TEMP,(TEMP+PAIRING(J)-1)
954
 
              PL(I,J)=PL(I,J)-DBLE(W(1+I,WE(K)))
955
 
              IF (DOING_QP) THEN
956
 
                MP_PL(I,J)=MP_PL(I,J)-REAL(MP_W(1+I,WE(K)),KIND=16)
957
 
              ENDIF
958
 
            ENDDO
959
 
            TEMP=TEMP+PAIRING(J)
960
 
          ENDDO
961
 
        ENDDO
962
 
C       Determine whether the integral is with complex masses or not
963
 
C       since some reduction libraries, e.g.PJFry++ and IREGI, are
964
 
C        still
965
 
C       not able to deal with complex masses
966
 
        COMPLEX_MASS=.FALSE.
967
 
        DO I=1,NLOOPLINE
968
 
          IF(DIMAG(M2L(I)).EQ.0D0)CYCLE
969
 
          IF(ABS(DIMAG(M2L(I)))/MAX(ABS(M2L(I)),1D-2).GT.1D-15)THEN
970
 
            COMPLEX_MASS=.TRUE.
971
 
            EXIT
972
 
          ENDIF
973
 
        ENDDO
974
 
C       Choose the correct loop library
975
 
        CALL ML5_0_CHOOSE_LOOPLIB(LIBINDEX,NLOOPLINE,RANK,COMPLEX_MASS
976
 
     $   ,ID,DOING_QP,I_LIB)
977
 
        IF(MLREDUCTIONLIB(I_LIB).EQ.1)THEN
978
 
C         CutTools is used
979
 
          CALL ML5_0_CTLOOP(NLOOPLINE,PL,M2L,RANK,LOOPRES(1
980
 
     $     ,SQUAREDSOINDEX,LOOPNUM),S(SQUAREDSOINDEX,LOOPNUM))
981
 
        ELSE
982
 
C         Tensor Integral Reduction is used 
983
 
          CALL ML5_0_TIRLOOP(SQUAREDSOINDEX,LOOPNUM,I_LIB,NLOOPLINE,PL
984
 
     $     ,M2L,RANK,LOOPRES(1,SQUAREDSOINDEX,LOOPNUM)
985
 
     $     ,S(SQUAREDSOINDEX,LOOPNUM))
986
 
        ENDIF
987
 
      ELSE
988
 
        LOOPRES(1,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
989
 
        LOOPRES(2,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
990
 
        LOOPRES(3,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
991
 
        S(SQUAREDSOINDEX,LOOPNUM)=.TRUE.
992
 
      ENDIF
993
 
      END
994