~maddevelopers/mg5amcnlo/nlo_reweighting

« back to all changes in this revision

Viewing changes to tests/input_files/IOTestsComparison/LoopSquaredOrder_IOTest/Loop_sqso_uux_ddx/loop_matrix_QCDpert_default.f

  • Committer: olivier Mattelaer
  • Date: 2016-02-27 14:33:01 UTC
  • mfrom: (256.19.84 2.3.4)
  • Revision ID: olivier.mattelaer@uclouvain.be-20160227143301-zjhafyh7cjw3eamq
merge with 2.3.4 (including spin2/ninja branch)

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
C     Process: u u~ > d d~ [ QCD ]
16
16
C     
17
17
      IMPLICIT NONE
18
 
      INCLUDE 'coef_specs.inc'
19
 
      INCLUDE 'polynomial_specs.inc'
20
18
C     
21
19
C     USER CUSTOMIZABLE OPTIONS
22
20
C     
54
52
      PARAMETER (NEXTERNAL=4)
55
53
      INTEGER    NWAVEFUNCS,NLOOPWAVEFUNCS
56
54
      PARAMETER (NWAVEFUNCS=6,NLOOPWAVEFUNCS=32)
 
55
      INCLUDE 'loop_max_coefs.inc'
 
56
      INCLUDE 'coef_specs.inc'
57
57
      INTEGER    NCOMB
58
58
      PARAMETER (NCOMB=16)
59
59
      REAL*8     ZERO
73
73
      INTEGER NSQUAREDSOP1
74
74
      PARAMETER (NSQUAREDSOP1=NSQUAREDSO+1)
75
75
C     The total number of loop reduction libraries
76
 
C     At present, there are only CutTools,PJFry++,IREGI,Golem95
 
76
C     At present, there are only CutTools,PJFry++,IREGI,Golem95,Samurai
 
77
C      and Ninja
77
78
      INTEGER NLOOPLIB
78
 
      PARAMETER (NLOOPLIB=4)
79
 
C     Only CutTools provides QP
 
79
      PARAMETER (NLOOPLIB=6)
 
80
C     Only CutTools or possibly Ninja (if installed with qp support)
 
81
C      provide QP
80
82
      INTEGER QP_NLOOPLIB
81
83
      PARAMETER (QP_NLOOPLIB=1)
82
84
      INTEGER MAXSTABILITYLENGTH
168
170
      DATA ((LOOPFILTERBUFF(J,I),J=1,NSQUAREDSO),I=1,NLOOPGROUPS)
169
171
     $ /NSQSOXNLG*.FALSE./
170
172
 
171
 
      LOGICAL AUTOMATIC_TIR_CACHE_CLEARING
172
 
      DATA AUTOMATIC_TIR_CACHE_CLEARING/.TRUE./
173
 
      COMMON/ML5_0_RUNTIME_OPTIONS/AUTOMATIC_TIR_CACHE_CLEARING
 
173
      LOGICAL AUTOMATIC_CACHE_CLEARING
 
174
      DATA AUTOMATIC_CACHE_CLEARING/.TRUE./
 
175
      COMMON/ML5_0_RUNTIME_OPTIONS/AUTOMATIC_CACHE_CLEARING
174
176
 
175
177
      INTEGER IDEN
176
178
      DATA IDEN/36/
200
202
C     
201
203
C     GLOBAL VARIABLES
202
204
C     
 
205
      INCLUDE 'process_info.inc'
203
206
      INCLUDE 'coupl.inc'
204
207
      INCLUDE 'mp_coupl.inc'
205
208
      INCLUDE 'MadLoopParams.inc'
229
232
      COMMON/ML5_0_MP_DONE/MP_DONE
230
233
C     A FLAG TO DENOTE WHETHER THE CORRESPONDING LOOPLIBS ARE
231
234
C      AVAILABLE OR NOT
232
 
      LOGICAL LOOPLIBS_AVAILABLE(4)
233
 
      DATA LOOPLIBS_AVAILABLE/.TRUE.,.TRUE.,.TRUE.,.TRUE./
 
235
      LOGICAL LOOPLIBS_AVAILABLE(6)
 
236
      DATA LOOPLIBS_AVAILABLE/.TRUE.,.TRUE.,.TRUE.,.TRUE.,.TRUE.
 
237
     $ ,.TRUE./
234
238
      COMMON/ML5_0_LOOPLIBS_AV/ LOOPLIBS_AVAILABLE
235
239
C     A FLAG TO DENOTE WHETHER THE CORRESPONDING DIRECTION TESTS
236
240
C      AVAILABLE OR NOT IN THE LOOPLIBS
237
 
C     PJFry++ and Golem95 do not support direction test
238
 
      LOGICAL LOOPLIBS_DIRECTEST(4)
239
 
      DATA LOOPLIBS_DIRECTEST /.TRUE.,.TRUE.,.TRUE.,.TRUE./
240
 
 
 
241
      LOGICAL LOOPLIBS_DIRECTEST(6)
 
242
      DATA LOOPLIBS_DIRECTEST /.TRUE.,.TRUE.,.TRUE.,.TRUE.,.TRUE.
 
243
     $ ,.TRUE./
 
244
C     Specifying for which reduction tool quadruple precision is
 
245
C      available.
 
246
C     The index 0 is dummy and simply means that the corresponding
 
247
C      loop_library is not available
 
248
C     in which case neither is its quadruple precision version.
 
249
      LOGICAL LOOPLIBS_QPAVAILABLE(0:6)
 
250
      DATA LOOPLIBS_QPAVAILABLE /.FALSE.,.TRUE.,.FALSE.,.FALSE.
 
251
     $ ,.FALSE.,.FALSE.,.FALSE./
241
252
C     PS CAN POSSIBILY BE PASSED THROUGH IMPROVE_PS BUT IS NOT
242
253
C      MODIFIED FOR THE PURPOSE OF THE STABILITY TEST
243
254
C     EVEN THOUGH THEY ARE PUT IN COMMON BLOCK, FOR NOW THEY ARE NOT
302
313
      DATA CTCALL_REQ_SO_DONE/.FALSE./
303
314
      DATA FILTER_SO/.FALSE./
304
315
      COMMON/ML5_0_SO_REQS/UVCT_REQ_SO_DONE,MP_UVCT_REQ_SO_DONE
305
 
     $ ,CT_REQ_SO_DONE,MP_CT_REQ_SO_DONE,LOOP_REQ_SO_DONE,MP_LOOP_REQ_S
306
 
     $ O_DONE,CTCALL_REQ_SO_DONE,FILTER_SO
 
316
     $ ,CT_REQ_SO_DONE,MP_CT_REQ_SO_DONE,LOOP_REQ_SO_DONE
 
317
     $ ,MP_LOOP_REQ_SO_DONE,CTCALL_REQ_SO_DONE,FILTER_SO
307
318
 
308
319
C     Allows to forbid the zero helicity double check, no matter the
309
320
C      value in MadLoopParams.dat
332
343
      COMPLEX*32 MPW(20,NWAVEFUNCS)
333
344
      COMMON/ML5_0_MP_W/MPW
334
345
 
335
 
      COMPLEX*16 WL(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE,0:NLOOPWAVEF
336
 
     $ UNCS)
 
346
      COMPLEX*16 WL(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE
 
347
     $ ,0:NLOOPWAVEFUNCS)
337
348
      COMPLEX*16 PL(0:3,0:NLOOPWAVEFUNCS)
338
349
      COMMON/ML5_0_WL/WL,PL
339
350
 
386
397
 
387
398
C     This variable controls the *local* initialization of this
388
399
C      particular SubProcess.
389
 
C     For example, the reading of the filters must be done independentl
390
 
C     y by each SubProcess.
 
400
C     For example, the reading of the filters must be done
 
401
C      independently by each SubProcess.
391
402
      LOGICAL LOCAL_ML_INIT
392
403
      DATA LOCAL_ML_INIT/.TRUE./
393
404
 
 
405
      LOGICAL WARNED_LORENTZ_STAB_TEST_OFF
 
406
      DATA WARNED_LORENTZ_STAB_TEST_OFF/.FALSE./
 
407
      INTEGER NROTATIONS_DP_BU,NROTATIONS_QP_BU
 
408
 
 
409
      LOGICAL FPE_IN_DP_REDUCTION, FPE_IN_QP_REDUCTION
 
410
      DATA FPE_IN_DP_REDUCTION, FPE_IN_QP_REDUCTION/.FALSE.,.FALSE./
 
411
      COMMON/ML5_0_FPE_IN_REDUCTION/FPE_IN_DP_REDUCTION,
 
412
     $  FPE_IN_QP_REDUCTION
394
413
C     ----------
395
414
C     BEGIN CODE
396
415
C     ----------
407
426
        ENDIF
408
427
 
409
428
C       Make sure that NROTATIONS_QP and NROTATIONS_DP are set to zero
410
 
C        if AUTOMATIC_TIR_CACHE_CLEARING is disabled.
411
 
        IF(.NOT.AUTOMATIC_TIR_CACHE_CLEARING) THEN
 
429
C        if AUTOMATIC_CACHE_CLEARING is disabled.
 
430
        IF(.NOT.AUTOMATIC_CACHE_CLEARING) THEN
412
431
          IF(NROTATIONS_DP.NE.0.OR.NROTATIONS_QP.NE.0) THEN
413
 
            WRITE(*,*) '##INFO: AUTOMATIC_TIR_CACHE_CLEARING i'
414
 
     $       //'s disabled, so MadLoop automatically resets NROTATIONS'
415
 
     $       //'_DP and NROTATIONS_QP to 0.'
 
432
            WRITE(*,*) '##INFO: AUTOMATIC_CACHE_CLEARING is disabled,'
 
433
     $       //' so MadLoop automatically resets NROTATIONS_DP and'
 
434
     $       //' NROTATIONS_QP to 0.'
416
435
            NROTATIONS_QP=0
417
436
            NROTATIONS_DP=0
418
437
          ENDIF
419
438
        ENDIF
 
439
 
420
440
      ENDIF
421
441
 
422
442
      IF (LOCAL_ML_INIT) THEN
435
455
          ENDIF
436
456
        ENDDO
437
457
        IF(MLREDUCTIONLIB(1).EQ.0)THEN
438
 
          STOP 'No available loop reduction lib is provided. Make sur'
439
 
     $     //'e MLReductionLib is correct.'
 
458
          STOP 'No available loop reduction lib is provided. Make sure'
 
459
     $     //' MLReductionLib is correct.'
440
460
        ENDIF
441
461
        J=0
442
462
        DO I=1,NLOOPLIB
443
 
          IF(MLREDUCTIONLIB(I).EQ.1)THEN
 
463
          IF(LOOPLIBS_QPAVAILABLE(MLREDUCTIONLIB(I)))THEN
444
464
            J=J+1
445
 
            IF(.NOT.QP_TOOLS_AVAILABLE)QP_TOOLS_AVAILABLE=.TRUE.
 
465
            IF(.NOT.QP_TOOLS_AVAILABLE) THEN
 
466
              QP_TOOLS_AVAILABLE=.TRUE.
 
467
            ENDIF
446
468
            INDEX_QP_TOOLS(J)=I
447
469
          ENDIF
448
470
        ENDDO
458
480
 
459
481
        CALL ML5_0_SET_N_EVALS(N_DP_EVAL,N_QP_EVAL)
460
482
 
 
483
C       Make sure that the loop filter is disabled when there is
 
484
C        spin-2 particles for 2>1 or 1>2 processes
 
485
        IF(MAX_SPIN_EXTERNAL_PARTICLE.GT.3.AND.(NEXTERNAL.LE.3.AND.HELI
 
486
     $CITYFILTERLEVEL.NE.0)) THEN
 
487
          WRITE(*,*) '##INFO: Helicity filter deactivated for 2>1'
 
488
     $     //' processes involving spin 2 particles.'
 
489
          HELICITYFILTERLEVEL = 0
 
490
C         We write a dummy filter for structural reasons here
 
491
          OPEN(1, FILE=HELFILTERFN, ERR=6116, STATUS='NEW'
 
492
     $     ,ACTION='WRITE')
 
493
          DO I=1,NCOMB
 
494
            WRITE(1,*) 1
 
495
          ENDDO
 
496
 6116     CONTINUE
 
497
          CLOSE(1)
 
498
        ENDIF
 
499
 
461
500
        OPEN(1, FILE=COLORNUMFN, ERR=104, STATUS='OLD',          
462
501
     $    ACTION='READ')
463
502
        DO I=1,NCOLORROWS
465
504
        ENDDO
466
505
        GOTO 105
467
506
 104    CONTINUE
468
 
        STOP 'Color factors could not be initialized from fil'
469
 
     $   //'e ML5_0_ColorNumFactors.dat. File not found'
 
507
        STOP 'Color factors could not be initialized from file'
 
508
     $   //' ML5_0_ColorNumFactors.dat. File not found'
470
509
 105    CONTINUE
471
510
        CLOSE(1)
472
511
        OPEN(1, FILE=COLORDENOMFN, ERR=106, STATUS='OLD',          
476
515
        ENDDO
477
516
        GOTO 107
478
517
 106    CONTINUE
479
 
        STOP 'Color factors could not be initialized from fil'
480
 
     $   //'e ML5_0_ColorDenomFactors.dat. File not found'
 
518
        STOP 'Color factors could not be initialized from file'
 
519
     $   //' ML5_0_ColorDenomFactors.dat. File not found'
481
520
 107    CONTINUE
482
521
        CLOSE(1)
483
522
        OPEN(1, FILE=HELCONFIGFN, ERR=108, STATUS='OLD',              
487
526
        ENDDO
488
527
        GOTO 109
489
528
 108    CONTINUE
490
 
        STOP 'Color helictiy configurations could not be initialize'
491
 
     $   //'d from file ML5_0_HelConfigs.dat. File not found'
 
529
        STOP 'Color helictiy configurations could not be initialized'
 
530
     $   //' from file ML5_0_HelConfigs.dat. File not found'
492
531
 109    CONTINUE
493
532
        CLOSE(1)
494
533
 
514
553
        ENDIF
515
554
      ENDIF
516
555
 
 
556
C     Make sure that lorentz rotation tests are not used if there is
 
557
C      external loop wavefunction of spin 2 and that one specific
 
558
C      helicity is asked
 
559
      NROTATIONS_DP_BU = NROTATIONS_DP
 
560
      NROTATIONS_QP_BU = NROTATIONS_QP
 
561
      IF(MAX_SPIN_EXTERNAL_PARTICLE.GT.3.AND.USERHEL.NE.-1) THEN
 
562
        IF(.NOT.WARNED_LORENTZ_STAB_TEST_OFF) THEN
 
563
          WRITE(*,*) '##WARNING: Evaluation of a specific helicity was'
 
564
     $     //' asked for this PS point, and there is a spin-2 (or'
 
565
     $     //' higher) particle in the external states.'
 
566
          WRITE(*,*) '##WARNING: As a result, MadLoop disabled the'
 
567
     $     //' Lorentz rotation test for this phase-space point only.'
 
568
          WRITE(*,*) '##WARNING: Further warning of that type'
 
569
     $     //' suppressed.'
 
570
          WARNED_LORENTZ_STAB_TEST_OFF = .TRUE.
 
571
        ENDIF
 
572
        NROTATIONS_QP=0
 
573
        NROTATIONS_DP=0
 
574
        CALL ML5_0_SET_N_EVALS(N_DP_EVAL,N_QP_EVAL)
 
575
      ENDIF
 
576
 
517
577
      IF(NTRY.EQ.0) THEN
518
 
        HELDOUBLECHECKED=(.NOT.DOUBLECHECKHELICITYFILTER).OR.(HELICITYF
519
 
     $   ILTERLEVEL.EQ.0)
 
578
        HELDOUBLECHECKED=(.NOT.DOUBLECHECKHELICITYFILTER)
 
579
     $   .OR.(HELICITYFILTERLEVEL.EQ.0)
520
580
        OPEN(1, FILE=LOOPFILTERFN, ERR=100, STATUS='OLD',          
521
581
     $    ACTION='READ')
522
582
        DO J=1,NLOOPGROUPS
554
614
 103    CONTINUE
555
615
        CLOSE(1)
556
616
        IF (HELICITYFILTERLEVEL.EQ.1) THEN
557
 
C         We must make sure to remove the matching-helicity optimisatio
558
 
C         n, as requested by the user.
 
617
C         We must make sure to remove the matching-helicity
 
618
C          optimisation, as requested by the user.
559
619
          DO J=1,NCOMB
560
620
            IF ((GOODHEL(J).GT.1).OR.(GOODHEL(J).LT.-HELOFFSET)) THEN
561
621
              GOODHEL(J)=1
624
684
        DONEHELDOUBLECHECK=.FALSE.
625
685
      ENDIF
626
686
 
627
 
      CHECKPHASE=(NTRY.LE.CHECKCYCLE).AND.(((.NOT.FOUNDLOOPFILTER
628
 
     $ ).AND.USELOOPFILTER).OR.(.NOT.FOUNDHELFILTER))
 
687
      CHECKPHASE=(NTRY.LE.CHECKCYCLE).AND.(((.NOT.FOUNDLOOPFILTER)
 
688
     $ .AND.USELOOPFILTER).OR.(.NOT.FOUNDHELFILTER))
629
689
 
630
690
      IF (WRITEOUTFILTERS) THEN
631
 
        IF ((HELICITYFILTERLEVEL.NE.0).AND.(.NOT. CHECKPHASE).AND.(.NOT
632
 
     $   .FOUNDHELFILTER)) THEN
633
 
          OPEN(1, FILE=HELFILTERFN, ERR=110, STATUS='NEW',ACTION='WRIT'
634
 
     $     //'E')
 
691
        IF ((HELICITYFILTERLEVEL.NE.0).AND.(.NOT. CHECKPHASE)
 
692
     $   .AND.(.NOT.FOUNDHELFILTER)) THEN
 
693
          OPEN(1, FILE=HELFILTERFN, ERR=110, STATUS='NEW'
 
694
     $     ,ACTION='WRITE')
635
695
          DO I=1,NCOMB
636
696
            WRITE(1,*) GOODHEL(I)
637
697
          ENDDO
640
700
          FOUNDHELFILTER=.TRUE.
641
701
        ENDIF
642
702
 
643
 
        IF ((.NOT. CHECKPHASE).AND.(.NOT.FOUNDLOOPFILTER).AND.USELOOPFI
644
 
     $   LTER) THEN
645
 
          OPEN(1, FILE=LOOPFILTERFN, ERR=111, STATUS='NEW',ACTION='WRI'
646
 
     $     //'TE')
 
703
        IF ((.NOT. CHECKPHASE).AND.(.NOT.FOUNDLOOPFILTER)
 
704
     $   .AND.USELOOPFILTER) THEN
 
705
          OPEN(1, FILE=LOOPFILTERFN, ERR=111, STATUS='NEW'
 
706
     $     ,ACTION='WRITE')
647
707
          DO J=1,NLOOPGROUPS
648
708
            WRITE(1,*) (GOODAMP(I,J),I=1,NSQUAREDSO)
649
709
          ENDDO
698
758
        ENDDO
699
759
      ENDDO
700
760
 
 
761
C     Make sure we start with empty caches
 
762
      IF (AUTOMATIC_CACHE_CLEARING) THEN
 
763
        CALL ML5_0_CLEAR_CACHES()
 
764
      ENDIF
701
765
 
702
766
      IF (IMPROVEPSPOINT.GE.0) THEN
703
 
C       Make the input PS more precise (exact onshell and energy-moment
704
 
C       um conservation)
 
767
C       Make the input PS more precise (exact onshell and
 
768
C        energy-momentum conservation)
705
769
        CALL ML5_0_IMPROVE_PS_POINT_PRECISION(PS)
706
770
      ENDIF
707
771
 
730
794
C      recomputes a rotated PS point
731
795
 200  CONTINUE
732
796
C     For the computation of a rotated version of this PS point we
733
 
C      must reset the TIR cache since this changes the definition of
734
 
C      the loop denominators.
735
 
      CALL ML5_0_CLEAR_TIR_CACHE()
 
797
C      must reset the all MadLoop cache since this changes the
 
798
C      definition of the loop denominators.
 
799
C     We don't check for AUTOMATIC_CACHE_CLEARING here because the
 
800
C      Lorentz test should anyway be disabled if the flag is turned
 
801
C      off.
 
802
      CALL ML5_0_CLEAR_CACHES()
736
803
 208  CONTINUE
737
804
 
738
805
C     MadLoop jumps to this label during initialization when it goes
749
816
 
750
817
      CTCALL_REQ_SO_DONE=.FALSE.
751
818
      FILTER_SO = (.NOT.CHECKPHASE).AND.HELDOUBLECHECKED.AND.(SQSO_TARG
752
 
     $ ET.NE.-1)
 
819
     $ET.NE.-1)
753
820
 
754
821
      DO I=1,NLOOPGROUPS
755
822
        DO J=0,LOOPMAXCOEFS-1
789
856
 
790
857
      DO H=1,NCOMB
791
858
        IF ((HELPICKED.EQ.H).OR.((HELPICKED.EQ.-1).AND.(CHECKPHASE.OR.(
792
 
     $   .NOT.HELDOUBLECHECKED).OR.(GOODHEL(H).GT.-HELOFFSET.AND.GOODHE
793
 
     $   L(H).NE.0)))) THEN
 
859
     $.NOT.HELDOUBLECHECKED).OR.(GOODHEL(H).GT.-HELOFFSET.AND.GOODHEL(H)
 
860
     $   .NE.0)))) THEN
794
861
          DO I=1,NEXTERNAL
795
862
            NHEL(I)=HELC(I,H)
796
863
          ENDDO
799
866
          CT_REQ_SO_DONE=.FALSE.
800
867
          LOOP_REQ_SO_DONE=.FALSE.
801
868
 
802
 
          IF (.NOT.CHECKPHASE.AND.HELDOUBLECHECKED.AND.HELPICKED.EQ.
803
 
     $     -1) THEN
 
869
          IF (.NOT.CHECKPHASE.AND.HELDOUBLECHECKED.AND.HELPICKED.EQ.-1)
 
870
     $      THEN
804
871
            HEL_MULT=GOODHEL(H)
805
872
          ELSE
806
873
            HEL_MULT=1
809
876
 
810
877
C         Helas calls for the born amplitudes and counterterms
811
878
C          associated to given loops
812
 
          CALL IXXXXX(P(0,1),MDL_MU,NHEL(1),+1*IC(1),W(1,1))
813
 
          CALL OXXXXX(P(0,2),MDL_MU,NHEL(2),-1*IC(2),W(1,2))
814
 
          CALL OXXXXX(P(0,3),MDL_MD,NHEL(3),+1*IC(3),W(1,3))
815
 
          CALL IXXXXX(P(0,4),MDL_MD,NHEL(4),-1*IC(4),W(1,4))
816
 
          CALL FFV1P0_3(W(1,1),W(1,2),GC_11,ZERO,ZERO,W(1,5))
817
 
C         Amplitude(s) for born diagram with ID 1
818
 
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),GC_11,AMP(1))
819
 
          CALL FFV1P0_3(W(1,4),W(1,3),GC_11,ZERO,ZERO,W(1,6))
820
 
C         Counter-term amplitude(s) for loop diagram number 2
821
 
          CALL R2_GG_1_R2_GG_2_0(W(1,5),W(1,6),R2_GGG_1,R2_GGG_2
822
 
     $     ,AMPL(1,1))
823
 
C         Counter-term amplitude(s) for loop diagram number 3
824
 
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),UV_GQQQ_1EPS,AMPL(2,2))
825
 
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),UV_GQQQ_1EPS,AMPL(2,3))
826
 
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),UV_GQQQ_1EPS,AMPL(2,4))
827
 
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),UV_GQQQ_1EPS,AMPL(2,5))
828
 
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),UV_GQQB,AMPL(1,6))
829
 
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),UV_GQQB_1EPS,AMPL(2,7))
830
 
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),UV_GQQT,AMPL(1,8))
831
 
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),UV_GQQT_1EPS,AMPL(2,9))
832
 
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),UV_GQQG_1EPS,AMPL(2,10))
833
 
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),R2_GQQ,AMPL(1,11))
834
 
C         Counter-term amplitude(s) for loop diagram number 5
835
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQQ_1EPS,AMPL(2,12))
836
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQQ_1EPS,AMPL(2,13))
837
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQQ_1EPS,AMPL(2,14))
838
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQQ_1EPS,AMPL(2,15))
839
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQB,AMPL(1,16))
840
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQB_1EPS,AMPL(2,17))
841
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQT,AMPL(1,18))
842
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQT_1EPS,AMPL(2,19))
843
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQG_1EPS,AMPL(2,20))
844
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),R2_GQQ,AMPL(1,21))
845
 
C         Counter-term amplitude(s) for loop diagram number 10
846
 
          CALL R2_GG_1_0(W(1,5),W(1,6),R2_GGQ,AMPL(1,22))
847
 
C         Counter-term amplitude(s) for loop diagram number 11
848
 
          CALL R2_GG_1_0(W(1,5),W(1,6),R2_GGQ,AMPL(1,23))
849
 
C         Counter-term amplitude(s) for loop diagram number 12
850
 
          CALL R2_GG_1_R2_GG_3_0(W(1,5),W(1,6),R2_GGQ,R2_GGT,AMPL(1
851
 
     $     ,24))
852
 
C         Counter-term amplitude(s) for loop diagram number 13
853
 
          CALL R2_GG_1_0(W(1,5),W(1,6),R2_GGQ,AMPL(1,25))
854
 
C         Counter-term amplitude(s) for loop diagram number 14
855
 
          CALL R2_GG_1_0(W(1,5),W(1,6),R2_GGQ,AMPL(1,26))
856
 
C         Counter-term amplitude(s) for loop diagram number 15
857
 
          CALL R2_GG_1_R2_GG_3_0(W(1,5),W(1,6),R2_GGQ,R2_GGB,AMPL(1
858
 
     $     ,27))
859
 
C         At this point, all CT amps needed for (QCD=6), i.e. of split
860
 
C          order ID=1, are computed.
861
 
          IF(FILTER_SO.AND.SQSO_TARGET.EQ.1) GOTO 2000
 
879
          CALL ML5_0_HELAS_CALLS_AMPB_1(P,NHEL,H,IC)
862
880
 2000     CONTINUE
863
881
          CT_REQ_SO_DONE=.TRUE.
864
882
 
877
895
              CFTOT=DCMPLX(CF_N(I,J)/DBLE(ABS(CF_D(I,J))),0.0D0)
878
896
              IF(CF_D(I,J).LT.0) CFTOT=CFTOT*IMAG1
879
897
              ITEMP = ML5_0_ML5SQSOINDEX(ML5_0_ML5SOINDEX_FOR_LOOP_AMP(
880
 
     $         I),ML5_0_ML5SOINDEX_FOR_BORN_AMP(J))
 
898
     $I),ML5_0_ML5SOINDEX_FOR_BORN_AMP(J))
881
899
              IF (.NOT.FILTER_SO.OR.SQSO_TARGET.EQ.ITEMP) THEN
882
900
                DO K=1,3
883
901
                  TEMP2 = 2.0D0*HEL_MULT*DBLE(CFTOT*AMPL(K,I)
889
907
            ENDDO
890
908
          ENDDO
891
909
 
892
 
C         Coefficient construction for loop diagram with ID 2
893
 
          CALL VVV1L2P0_1(PL(0,0),W(1,5),GC_10,ZERO,ZERO,PL(0,1),COEFS)
894
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1,1))
895
 
          CALL VVV1L2P0_1(PL(0,1),W(1,6),GC_10,ZERO,ZERO,PL(0,2),COEFS)
896
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,1),4,COEFS,4,4,WL(1,0,1,2))
897
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,2),2,4,1,2,1,28,H)
898
 
C         Coefficient construction for loop diagram with ID 3
899
 
          CALL FFV1L3_1(PL(0,0),W(1,3),GC_11,MDL_MD,ZERO,PL(0,3),COEFS)
900
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1,3))
901
 
          CALL FFV1L2P0_3(PL(0,3),W(1,4),GC_11,ZERO,ZERO,PL(0,4),COEFS)
902
 
          CALL ML5_0_UPDATE_WL_1_0(WL(1,0,1,3),4,COEFS,4,4,WL(1,0,1,4))
903
 
          CALL VVV1L2P0_1(PL(0,4),W(1,5),GC_10,ZERO,ZERO,PL(0,5),COEFS)
904
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,4),4,COEFS,4,4,WL(1,0,1,5))
905
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,5),2,4,2,1,1,29,H)
906
 
C         Coefficient construction for loop diagram with ID 4
907
 
          CALL FFV1L1P0_3(PL(0,0),W(1,3),GC_11,ZERO,ZERO,PL(0,6),COEFS)
908
 
          CALL ML5_0_UPDATE_WL_0_0(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1,6))
909
 
          CALL FFV1L3_2(PL(0,6),W(1,4),GC_11,MDL_MD,ZERO,PL(0,7),COEFS)
910
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,6),4,COEFS,4,4,WL(1,0,1,7))
911
 
          CALL FFV1L1_2(PL(0,7),W(1,5),GC_11,MDL_MD,ZERO,PL(0,8),COEFS)
912
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,7),4,COEFS,4,4,WL(1,0,1,8))
913
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,8),2,4,3,1,1,30,H)
914
 
C         Coefficient construction for loop diagram with ID 5
915
 
          CALL FFV1L2P0_3(PL(0,0),W(1,1),GC_11,ZERO,ZERO,PL(0,9),COEFS)
916
 
          CALL ML5_0_UPDATE_WL_0_0(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1,9))
917
 
          CALL FFV1L3_1(PL(0,9),W(1,2),GC_11,MDL_MU,ZERO,PL(0,10)
918
 
     $     ,COEFS)
919
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,9),4,COEFS,4,4,WL(1,0,1
920
 
     $     ,10))
921
 
          CALL FFV1L2_1(PL(0,10),W(1,6),GC_11,MDL_MU,ZERO,PL(0,11)
922
 
     $     ,COEFS)
923
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,10),4,COEFS,4,4,WL(1,0,1
924
 
     $     ,11))
925
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,11),2,4,4,1,1,31,H)
926
 
C         Coefficient construction for loop diagram with ID 6
927
 
          CALL FFV1L3_2(PL(0,0),W(1,1),GC_11,MDL_MU,ZERO,PL(0,12)
928
 
     $     ,COEFS)
929
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
930
 
     $     ,12))
931
 
          CALL FFV1L1P0_3(PL(0,12),W(1,2),GC_11,ZERO,ZERO,PL(0,13)
932
 
     $     ,COEFS)
933
 
          CALL ML5_0_UPDATE_WL_1_0(WL(1,0,1,12),4,COEFS,4,4,WL(1,0,1
934
 
     $     ,13))
935
 
          CALL VVV1L2P0_1(PL(0,13),W(1,6),GC_10,ZERO,ZERO,PL(0,14)
936
 
     $     ,COEFS)
937
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,13),4,COEFS,4,4,WL(1,0,1
938
 
     $     ,14))
939
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,14),2,4,5,1,1,32,H)
940
 
C         Coefficient construction for loop diagram with ID 7
941
 
          CALL FFV1L3_2(PL(0,13),W(1,4),GC_11,MDL_MD,ZERO,PL(0,15)
942
 
     $     ,COEFS)
943
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,13),4,COEFS,4,4,WL(1,0,1
944
 
     $     ,15))
945
 
          CALL FFV1L1P0_3(PL(0,15),W(1,3),GC_11,ZERO,ZERO,PL(0,16)
946
 
     $     ,COEFS)
947
 
          CALL ML5_0_UPDATE_WL_2_0(WL(1,0,1,15),4,COEFS,4,4,WL(1,0,1
948
 
     $     ,16))
949
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,16),2,4,6,1,1,33,H)
950
 
C         Coefficient construction for loop diagram with ID 8
951
 
          CALL FFV1L3_1(PL(0,13),W(1,3),GC_11,MDL_MD,ZERO,PL(0,17)
952
 
     $     ,COEFS)
953
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,13),4,COEFS,4,4,WL(1,0,1
954
 
     $     ,17))
955
 
          CALL FFV1L2P0_3(PL(0,17),W(1,4),GC_11,ZERO,ZERO,PL(0,18)
956
 
     $     ,COEFS)
957
 
          CALL ML5_0_UPDATE_WL_2_0(WL(1,0,1,17),4,COEFS,4,4,WL(1,0,1
958
 
     $     ,18))
959
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,18),2,4,7,1,1,34,H)
960
 
C         Coefficient construction for loop diagram with ID 9
961
 
          CALL UUV1L1_2(PL(0,0),W(1,5),GC_10,ZERO,ZERO,PL(0,19),COEFS)
962
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),1,COEFS,1,1,WL(1,0,1
963
 
     $     ,19))
964
 
          CALL UUV1L1_2(PL(0,19),W(1,6),GC_10,ZERO,ZERO,PL(0,20),COEFS)
965
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,19),1,COEFS,1,1,WL(1,0,1
966
 
     $     ,20))
967
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,20),2,1,1,1,1,35,H)
968
 
C         Coefficient construction for loop diagram with ID 10
969
 
          CALL FFV1L2_1(PL(0,0),W(1,5),GC_11,MDL_MU,ZERO,PL(0,21)
970
 
     $     ,COEFS)
971
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
972
 
     $     ,21))
973
 
          CALL FFV1L2_1(PL(0,21),W(1,6),GC_11,MDL_MU,ZERO,PL(0,22)
974
 
     $     ,COEFS)
975
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,21),4,COEFS,4,4,WL(1,0,1
976
 
     $     ,22))
977
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,22),2,4,8,1,1,36,H)
978
 
C         Coefficient construction for loop diagram with ID 11
979
 
          CALL FFV1L2_1(PL(0,0),W(1,5),GC_11,MDL_MC,ZERO,PL(0,23)
980
 
     $     ,COEFS)
981
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
982
 
     $     ,23))
983
 
          CALL FFV1L2_1(PL(0,23),W(1,6),GC_11,MDL_MC,ZERO,PL(0,24)
984
 
     $     ,COEFS)
985
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,23),4,COEFS,4,4,WL(1,0,1
986
 
     $     ,24))
987
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,24),2,4,9,1,1,37,H)
988
 
C         Coefficient construction for loop diagram with ID 12
989
 
          CALL FFV1L2_1(PL(0,0),W(1,5),GC_11,MDL_MT,MDL_WT,PL(0,25)
990
 
     $     ,COEFS)
991
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
992
 
     $     ,25))
993
 
          CALL FFV1L2_1(PL(0,25),W(1,6),GC_11,MDL_MT,MDL_WT,PL(0,26)
994
 
     $     ,COEFS)
995
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,25),4,COEFS,4,4,WL(1,0,1
996
 
     $     ,26))
997
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,26),2,4,10,1,1,38,H)
998
 
C         Coefficient construction for loop diagram with ID 13
999
 
          CALL FFV1L2_1(PL(0,0),W(1,5),GC_11,MDL_MD,ZERO,PL(0,27)
1000
 
     $     ,COEFS)
1001
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
1002
 
     $     ,27))
1003
 
          CALL FFV1L2_1(PL(0,27),W(1,6),GC_11,MDL_MD,ZERO,PL(0,28)
1004
 
     $     ,COEFS)
1005
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,27),4,COEFS,4,4,WL(1,0,1
1006
 
     $     ,28))
1007
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,28),2,4,11,1,1,39,H)
1008
 
C         Coefficient construction for loop diagram with ID 14
1009
 
          CALL FFV1L2_1(PL(0,0),W(1,5),GC_11,MDL_MS,ZERO,PL(0,29)
1010
 
     $     ,COEFS)
1011
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
1012
 
     $     ,29))
1013
 
          CALL FFV1L2_1(PL(0,29),W(1,6),GC_11,MDL_MS,ZERO,PL(0,30)
1014
 
     $     ,COEFS)
1015
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,29),4,COEFS,4,4,WL(1,0,1
1016
 
     $     ,30))
1017
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,30),2,4,12,1,1,40,H)
1018
 
C         Coefficient construction for loop diagram with ID 15
1019
 
          CALL FFV1L2_1(PL(0,0),W(1,5),GC_11,MDL_MB,ZERO,PL(0,31)
1020
 
     $     ,COEFS)
1021
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
1022
 
     $     ,31))
1023
 
          CALL FFV1L2_1(PL(0,31),W(1,6),GC_11,MDL_MB,ZERO,PL(0,32)
1024
 
     $     ,COEFS)
1025
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,31),4,COEFS,4,4,WL(1,0,1
1026
 
     $     ,32))
1027
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,32),2,4,13,1,1,41,H)
1028
 
C         At this point, all loop coefficients needed for (QCD=6),
1029
 
C          i.e. of split order ID=1, are computed.
1030
 
          IF(FILTER_SO.AND.SQSO_TARGET.EQ.1) GOTO 4000
 
910
          CALL ML5_0_COEF_CONSTRUCTION_1(P,NHEL,H,IC)
1031
911
 4000     CONTINUE
1032
912
          LOOP_REQ_SO_DONE=.TRUE.
1033
913
 
1077
957
          S(I_SO,J)=.TRUE.
1078
958
        ENDDO
1079
959
        IF (FILTER_SO.AND.SQSO_TARGET.NE.I_SO) GOTO 5001
1080
 
C       CutTools call for loop numbers 1,8
1081
 
        CALL ML5_0_LOOP_2(5,6,DCMPLX(ZERO),DCMPLX(ZERO),2,I_SO,1)
1082
 
C       CutTools call for loop numbers 2
1083
 
        CALL ML5_0_LOOP_3(3,4,5,DCMPLX(MDL_MD),DCMPLX(ZERO),DCMPLX(ZERO
1084
 
     $   ),2,I_SO,2)
1085
 
C       CutTools call for loop numbers 3
1086
 
        CALL ML5_0_LOOP_3(3,4,5,DCMPLX(ZERO),DCMPLX(MDL_MD),DCMPLX(MDL_
1087
 
     $   MD),2,I_SO,3)
1088
 
C       CutTools call for loop numbers 4
1089
 
        CALL ML5_0_LOOP_3(1,2,6,DCMPLX(ZERO),DCMPLX(MDL_MU),DCMPLX(MDL_
1090
 
     $   MU),2,I_SO,4)
1091
 
C       CutTools call for loop numbers 5
1092
 
        CALL ML5_0_LOOP_3(1,2,6,DCMPLX(MDL_MU),DCMPLX(ZERO),DCMPLX(ZERO
1093
 
     $   ),2,I_SO,5)
1094
 
C       CutTools call for loop numbers 6
1095
 
        CALL ML5_0_LOOP_4(1,2,4,3,DCMPLX(MDL_MU),DCMPLX(ZERO)
1096
 
     $   ,DCMPLX(MDL_MD),DCMPLX(ZERO),2,I_SO,6)
1097
 
C       CutTools call for loop numbers 7
1098
 
        CALL ML5_0_LOOP_4(1,2,3,4,DCMPLX(MDL_MU),DCMPLX(ZERO)
1099
 
     $   ,DCMPLX(MDL_MD),DCMPLX(ZERO),2,I_SO,7)
1100
 
C       CutTools call for loop numbers 9
1101
 
        CALL ML5_0_LOOP_2(5,6,DCMPLX(MDL_MU),DCMPLX(MDL_MU),2,I_SO,8)
1102
 
C       CutTools call for loop numbers 10
1103
 
        CALL ML5_0_LOOP_2(5,6,DCMPLX(MDL_MC),DCMPLX(MDL_MC),2,I_SO,9)
1104
 
C       CutTools call for loop numbers 11
1105
 
        CALL ML5_0_LOOP_2(5,6,DCMPLX(MDL_MT),DCMPLX(MDL_MT),2,I_SO,10)
1106
 
C       CutTools call for loop numbers 12
1107
 
        CALL ML5_0_LOOP_2(5,6,DCMPLX(MDL_MD),DCMPLX(MDL_MD),2,I_SO,11)
1108
 
C       CutTools call for loop numbers 13
1109
 
        CALL ML5_0_LOOP_2(5,6,DCMPLX(MDL_MS),DCMPLX(MDL_MS),2,I_SO,12)
1110
 
C       CutTools call for loop numbers 14
1111
 
        CALL ML5_0_LOOP_2(5,6,DCMPLX(MDL_MB),DCMPLX(MDL_MB),2,I_SO,13)
1112
 
C       At this point, all reductions needed for (QCD=6), i.e. of
1113
 
C        split order ID=1, are computed.
1114
 
        IF(FILTER_SO.AND.SQSO_TARGET.EQ.1) GOTO 5000
 
960
        CALL ML5_0_LOOP_CT_CALLS_1(P,NHEL,H,IC)
1115
961
        GOTO 5001
1116
962
 5000   CONTINUE
1117
963
        CTCALL_REQ_SO_DONE=.TRUE.
1134
980
        ENDIF
1135
981
      ENDDO
1136
982
 
 
983
C     Make sure that no NaN is present in the result
 
984
      DO K=1,NSQUAREDSO
 
985
        DO J=1,3
 
986
          IF (.NOT.(ANS(J,K).EQ.ANS(J,K))) THEN
 
987
            IF (DOING_QP_EVALS) THEN
 
988
              FPE_IN_QP_REDUCTION = .TRUE.
 
989
            ELSE
 
990
              FPE_IN_DP_REDUCTION = .TRUE.
 
991
            ENDIF
 
992
          ENDIF
 
993
        ENDDO
 
994
      ENDDO
 
995
 
1137
996
 1226 CONTINUE
1138
997
 
1139
998
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED)) THEN
1163
1022
C         SET THE HELICITY FILTER
1164
1023
          IF(.NOT.FOUNDHELFILTER) THEN
1165
1024
            HEL_INCONSISTENT=.FALSE.
1166
 
            IF(ML5_0_ISZERO(DABS(HELSAVED(1,HELPICKED))+DABS(HELSAVED(2
1167
 
     $       ,HELPICKED))+DABS(HELSAVED(3,HELPICKED)),REF/DBLE(NCOMB),
1168
 
     $       -1,-1)) THEN
 
1025
            IF(ML5_0_ISZERO(DABS(HELSAVED(1,HELPICKED))
 
1026
     $       +DABS(HELSAVED(2,HELPICKED))+DABS(HELSAVED(3,HELPICKED))
 
1027
     $       ,REF/DBLE(NCOMB),-1,-1)) THEN
1169
1028
              IF(NTRY.EQ.1) THEN
1170
1029
                GOODHEL(HELPICKED)=-HELOFFSET
1171
1030
              ELSEIF(GOODHEL(HELPICKED).NE.-HELOFFSET) THEN
1172
 
                WRITE(*,*) '##W02A WARNING Inconsistent zero helicit'
1173
 
     $           //'y ',HELPICKED
 
1031
                WRITE(*,*) '##W02A WARNING Inconsistent zero helicity'
 
1032
     $           //' ',HELPICKED
1174
1033
                IF(HELINITSTARTOVER) THEN
1175
 
                  WRITE(*,*) '##I01 INFO Initialization starting ove'
1176
 
     $             //'r because of inconsistency in the helicit'
1177
 
     $             //'y filter setup.'
 
1034
                  WRITE(*,*) '##I01 INFO Initialization starting over'
 
1035
     $             //' because of inconsistency in the helicity filter'
 
1036
     $             //' setup.'
1178
1037
                  NTRY=0
1179
1038
                ELSE
1180
1039
                  HEL_INCONSISTENT=.TRUE.
1197
1056
C                     Make sure we have paired this hel config to the
1198
1057
C                      same one last PS point
1199
1058
                    ELSEIF(GOODHEL(HELPICKED).NE.(-H-HELOFFSET)) THEN
1200
 
                      WRITE(*,*) '##W02B WARNING Inconsistent matchin'
1201
 
     $                 //'g helicity ',HELPICKED
 
1059
                      WRITE(*,*) '##W02B WARNING Inconsistent matching'
 
1060
     $                 //' helicity ',HELPICKED
1202
1061
                      IF(HELINITSTARTOVER) THEN
1203
 
                        WRITE(*,*) '##I01 INFO Initialization startin'
1204
 
     $                   //'g over because of inconsistency in th'
1205
 
     $                   //'e helicity filter setup.'
 
1062
                        WRITE(*,*) '##I01 INFO Initialization starting'
 
1063
     $                   //' over because of inconsistency in the'
 
1064
     $                   //' helicity filter setup.'
1206
1065
                        NTRY=0
1207
1066
                      ELSE
1208
1067
                        HEL_INCONSISTENT=.TRUE.
1215
1074
            IF(HEL_INCONSISTENT) THEN
1216
1075
C             This helicity has unstable filter so we will always
1217
1076
C              compute it by itself.
1218
 
C             We therefore also need to remove it from the multiplicati
1219
 
C             ve factor of the corresponding helicity.
 
1077
C             We therefore also need to remove it from the
 
1078
C              multiplicative factor of the corresponding helicity.
1220
1079
              IF(GOODHEL(HELPICKED).LT.-HELOFFSET) THEN
1221
1080
                GOODHEL(-GOODHEL(HELPICKED)-HELOFFSET)=GOODHEL(
1222
1081
     $           -GOODHEL(HELPICKED)-HELOFFSET)-1
1227
1086
C             Of course if it is one, then we do not need to do
1228
1087
C              anything (because with HELINITSTARTOVER=.FALSE. we only
1229
1088
C              support exactly identical Hels.)
1230
 
              IF(GOODHEL(HELPICKED).GT.-HELOFFSET.AND.GOODHEL(HELPICKED
1231
 
     $         ).NE.1) THEN
 
1089
              IF(GOODHEL(HELPICKED).GT.-HELOFFSET.AND.GOODHEL(HELPICKED)
 
1090
     $         .NE.1) THEN
1232
1091
                NEWHELREF=-1
1233
1092
                DO H=1,NCOMB
1234
1093
                  IF (GOODHEL(H).EQ.(-HELOFFSET-HELPICKED)) THEN
1262
1121
                    WRITE(*,*) '##W02 WARNING Inconsistent loop amp '
1263
1122
     $               ,I,'.'
1264
1123
                    IF(LOOPINITSTARTOVER) THEN
1265
 
                      WRITE(*,*) '##I01 INFO Initialization startin'
1266
 
     $                 //'g over because of inconsistency in the loo'
1267
 
     $                 //'p filter setup.'
 
1124
                      WRITE(*,*) '##I01 INFO Initialization starting'
 
1125
     $                 //' over because of inconsistency in the loop'
 
1126
     $                 //' filter setup.'
1268
1127
                      NTRY=0
1269
1128
                    ELSE
1270
1129
                      GOODAMP(J,I)=.TRUE.
1280
1139
            IF (.NOT.ML5_0_ISZERO(DABS(HELSAVED(1,HELPICKED))
1281
1140
     $       +DABS(HELSAVED(2,HELPICKED))+DABS(HELSAVED(2,HELPICKED))
1282
1141
     $       ,REF/DBLE(NCOMB),-1,-1)) THEN
1283
 
              WRITE(*,*) '##W15 Helicity filter could not be successfu'
1284
 
     $         //'lly double checked.'
1285
 
              WRITE(*,*) '##One reason for this is that you might hav'
1286
 
     $         //'e changed sensible parameters which affected wha'
1287
 
     $         //'t are the zero helicity configurations.'
1288
 
              WRITE(*,*) '##MadLoop will try to reset the Helicit'
1289
 
     $         //'y filter with the next PS points it receives.'
 
1142
              WRITE(*,*) '##W15 Helicity filter could not be'
 
1143
     $         //' successfully double checked.'
 
1144
              WRITE(*,*) '##One reason for this is that you might have'
 
1145
     $         //' changed sensible parameters which affected what are'
 
1146
     $         //' the zero helicity configurations.'
 
1147
              WRITE(*,*) '##MadLoop will try to reset the Helicity'
 
1148
     $         //' filter with the next PS points it receives.'
1290
1149
              NTRY=0
1291
1150
              OPEN(29,FILE=HELFILTERFN,ERR=348)
1292
1151
 348          CONTINUE
1294
1153
            ENDIF
1295
1154
          ENDIF
1296
1155
          IF (GOODHEL(HELPICKED).LT.-HELOFFSET.AND.NTRY.NE.0) THEN
1297
 
            IF(ML5_0_ISSAME(HELSAVED(1,HELPICKED),HELSAVED(1,ABS(GOODHE
1298
 
     $       L(HELPICKED)+HELOFFSET)),REF,.TRUE.).EQ.0) THEN
1299
 
              WRITE(*,*) '##W15 Helicity filter could not be successfu'
1300
 
     $         //'lly double checked.'
1301
 
              WRITE(*,*) '##One reason for this is that you might hav'
1302
 
     $         //'e changed sensible parameters which affected th'
1303
 
     $         //'e helicity dependance relations.'
1304
 
              WRITE(*,*) '##MadLoop will try to reset the Helicit'
1305
 
     $         //'y filter with the next PS points it receives.'
 
1156
            IF(ML5_0_ISSAME(HELSAVED(1,HELPICKED),HELSAVED(1
 
1157
     $       ,ABS(GOODHEL(HELPICKED)+HELOFFSET)),REF,.TRUE.).EQ.0) THEN
 
1158
              WRITE(*,*) '##W15 Helicity filter could not be'
 
1159
     $         //' successfully double checked.'
 
1160
              WRITE(*,*) '##One reason for this is that you might have'
 
1161
     $         //' changed sensible parameters which affected the'
 
1162
     $         //' helicity dependance relations.'
 
1163
              WRITE(*,*) '##MadLoop will try to reset the Helicity'
 
1164
     $         //' filter with the next PS points it receives.'
1306
1165
              NTRY=0
1307
1166
              OPEN(30,FILE=HELFILTERFN,ERR=349)
1308
1167
 349          CONTINUE
1310
1169
            ENDIF
1311
1170
          ENDIF
1312
1171
C         SET HELDOUBLECHECKED TO .TRUE. WHEN DONE
1313
 
C         even if it failed we do not want to redo the check afterwards
1314
 
C          if HELINITSTARTOVER=.FALSE.
 
1172
C         even if it failed we do not want to redo the check
 
1173
C          afterwards if HELINITSTARTOVER=.FALSE.
1315
1174
          IF (HELPICKED.EQ.NCOMB.AND.(NTRY.NE.0.OR..NOT.HELINITSTARTOVE
1316
 
     $     R)) THEN
 
1175
     $R)) THEN
1317
1176
            DONEHELDOUBLECHECK=.TRUE.
1318
1177
          ENDIF
1319
1178
        ENDIF
1339
1198
          IF(NTRY.EQ.0) THEN
1340
1199
            NATTEMPTS=NATTEMPTS+1
1341
1200
            IF(NATTEMPTS.EQ.MAXATTEMPTS) THEN
1342
 
              WRITE(*,*) '##E01 ERROR Could not initialize the filter'
1343
 
     $         //'s in ',MAXATTEMPTS,' trials'
 
1201
              WRITE(*,*) '##E01 ERROR Could not initialize the filters'
 
1202
     $         //' in ',MAXATTEMPTS,' trials'
1344
1203
              STOP 1
1345
1204
            ENDIF
1346
1205
          ENDIF
1357
1216
      ENDDO
1358
1217
 
1359
1218
 
1360
 
      IF(.NOT.CHECKPHASE.AND.HELDOUBLECHECKED.AND.(CTMODERUN.EQ.
1361
 
     $ -1)) THEN
 
1219
      IF(.NOT.CHECKPHASE.AND.HELDOUBLECHECKED.AND.(CTMODERUN.EQ.-1))
 
1220
     $  THEN
1362
1221
        STAB_INDEX=STAB_INDEX+1
1363
 
        IF(DOING_QP_EVALS.AND.MLREDUCTIONLIB(I_LIB).EQ.1) THEN
1364
 
C         NOW,ONLY CUTTOOLS PROVIDES QP
 
1222
        IF(DOING_QP_EVALS.AND.LOOPLIBS_QPAVAILABLE(MLREDUCTIONLIB(I_LIB)
 
1223
     $   )) THEN
 
1224
C         Only run over the reduction algorithms which support
 
1225
C          quadruple precision
1365
1226
          DO I=0,NSQUAREDSO
1366
1227
            DO K=1,3
1367
1228
              QP_RES(K,I,STAB_INDEX)=ANS(K,I)
1375
1236
          ENDDO
1376
1237
        ENDIF
1377
1238
 
1378
 
        IF(DOING_QP_EVALS.AND.MLREDUCTIONLIB(I_LIB).EQ.1) THEN
 
1239
        IF(DOING_QP_EVALS.AND.LOOPLIBS_QPAVAILABLE(MLREDUCTIONLIB(I_LIB)
 
1240
     $   )) THEN
1379
1241
          BASIC_CT_MODE=4
1380
1242
        ELSE
1381
1243
          BASIC_CT_MODE=1
1413
1275
        CTMODE=BASIC_CT_MODE
1414
1276
 
1415
1277
        IF(.NOT.EVAL_DONE(3).AND. ((DOING_QP_EVALS.AND.NROTATIONS_QP.GE
1416
 
     $   .1).OR.((.NOT.DOING_QP_EVALS).AND.NROTATIONS_DP.GE.1)) ) THEN
 
1278
     $.1).OR.((.NOT.DOING_QP_EVALS).AND.NROTATIONS_DP.GE.1)) ) THEN
1417
1279
          EVAL_DONE(3)=.TRUE.
1418
1280
          CALL ML5_0_ROTATE_PS(PS,P,1)
1419
1281
          IF (DOING_QP_EVALS) CALL ML5_0_MP_ROTATE_PS(MP_PS,MP_P,1)
1421
1283
        ENDIF
1422
1284
 
1423
1285
        IF(.NOT.EVAL_DONE(4).AND. ((DOING_QP_EVALS.AND.NROTATIONS_QP.GE
1424
 
     $   .2).OR.((.NOT.DOING_QP_EVALS).AND.NROTATIONS_DP.GE.2)) ) THEN
 
1286
     $.2).OR.((.NOT.DOING_QP_EVALS).AND.NROTATIONS_DP.GE.2)) ) THEN
1425
1287
          EVAL_DONE(4)=.TRUE.
1426
1288
          CALL ML5_0_ROTATE_PS(PS,P,2)
1427
1289
          IF (DOING_QP_EVALS) CALL ML5_0_MP_ROTATE_PS(MP_PS,MP_P,2)
1433
1295
 
1434
1296
C       END OF THE DEFINITIONS OF THE DIFFERENT EVALUATION METHODS
1435
1297
 
1436
 
        IF(DOING_QP_EVALS.AND.MLREDUCTIONLIB(I_LIB).EQ.1) THEN
 
1298
        IF(DOING_QP_EVALS.AND.LOOPLIBS_QPAVAILABLE(MLREDUCTIONLIB(I_LIB)
 
1299
     $   )) THEN
1437
1300
          CALL ML5_0_COMPUTE_ACCURACY(QP_RES,N_QP_EVAL,ACC,ANS)
 
1301
C         If a floating point exception was encountered during the
 
1302
C          reduction,
 
1303
C         the result cannot be trusted at all and we hardset all
 
1304
C          accuracies to 1.0
 
1305
          IF(FPE_IN_QP_REDUCTION) THEN
 
1306
            DO I=0,NSQUAREDSO
 
1307
              ACC(I)=1.0D0
 
1308
            ENDDO
 
1309
          ENDIF
1438
1310
          DO I=0,NSQUAREDSO
1439
1311
            ACCURACY(I)=ACC(I)
1440
1312
          ENDDO
1443
1315
     $     ,.TRUE.)
1444
1316
          IF(MAXVAL(ACC).GE.MLSTABTHRES) THEN
1445
1317
            I_QP_LIB=I_QP_LIB+1
1446
 
            IF(I_QP_LIB.GT.QP_NLOOPLIB.OR.INDEX_QP_TOOLS(I_QP_LIB
1447
 
     $       ).EQ.0)THEN
 
1318
            IF(I_QP_LIB.GT.QP_NLOOPLIB.OR.INDEX_QP_TOOLS(I_QP_LIB)
 
1319
     $       .EQ.0)THEN
1448
1320
              RET_CODE_H=4
1449
1321
              RET_CODE_U=SET_RET_CODE_U(MLREDUCTIONLIB(I_LIB),.TRUE.
1450
1322
     $         ,.FALSE.)
1451
1323
              NEPS=NEPS+1
1452
1324
              CALL ML5_0_COMPUTE_ACCURACY(DP_RES,N_DP_EVAL,TEMP1,TEMP)
 
1325
              CALL ML5_0_COMPUTE_ACCURACY(QP_RES,N_QP_EVAL,ACC,ANS)
1453
1326
              IF(NEPS.LE.10) THEN
1454
 
                WRITE(*,*) '##W03 WARNING An unstable PS point was'
1455
 
     $           ,       ' detected.'
 
1327
                WRITE(*,*) '##W03 WARNING An unstable PS point was',  
 
1328
     $                ' detected.'
 
1329
                IF(FPE_IN_QP_REDUCTION) THEN
 
1330
                  WRITE(*,*) '## The last QP reduction was deemed'
 
1331
     $             //' unstable because a floating point exception was'
 
1332
     $             //' encountered.'
 
1333
                ENDIF
1456
1334
                IF (NSQUAREDSO.NE.1) THEN
1457
 
                  WRITE(*,*) '##Accuracies for each split orde'
1458
 
     $             //'r, starting with the summed case'
1459
 
                  WRITE(*,*) '##DP accuracies (for each split orde'
1460
 
     $             //'r): ',(TEMP1(I),I=0,NSQUAREDSO)
1461
 
                  WRITE(*,*) '##QP accuracies (for each split orde'
1462
 
     $             //'r): ',(ACC(I),I=0,NSQUAREDSO)
 
1335
                  WRITE(*,*) '##Accuracies for each split order,'
 
1336
     $             //' starting with the summed case'
 
1337
                  WRITE(*,*) '##DP accuracies (for each split order):'
 
1338
     $             //' ',(TEMP1(I),I=0,NSQUAREDSO)
 
1339
                  WRITE(*,*) '##QP accuracies (for each split order):'
 
1340
     $             //' ',(ACC(I),I=0,NSQUAREDSO)
1463
1341
                ELSE
1464
1342
                  WRITE(*,*) '##DP accuracy: ',TEMP1(1)
1465
1343
                  WRITE(*,*) '##QP accuracy: ',ACC(1)
1467
1345
                DO J=0,NSQUAREDSO
1468
1346
                  IF (NSQUAREDSO.NE.1.OR.J.NE.0) THEN
1469
1347
                    IF (J.EQ.0) THEN
1470
 
                      WRITE(*,*) 'Details for all split orders summe'
1471
 
     $                 //'d :'
 
1348
                      WRITE(*,*) 'Details for all split orders summed'
 
1349
     $                 //' :'
1472
1350
                    ELSE
1473
1351
                      WRITE(*,*) 'Details for split order index : ',J
1474
1352
                    ENDIF
1488
1366
                ENDDO
1489
1367
              ENDIF
1490
1368
              IF(NEPS.EQ.10) THEN
1491
 
                WRITE(*,*) 'Further output of the details of thes'
1492
 
     $           //'e unstable PS points will now be suppressed.'
 
1369
                WRITE(*,*) 'Further output of the details of these'
 
1370
     $           //' unstable PS points will now be suppressed.'
1493
1371
              ENDIF
1494
1372
            ELSE
 
1373
C             A new reduction tool will be used. Reinitialize the FPE
 
1374
C              flags.
 
1375
              FPE_IN_DP_REDUCTION=.FALSE.
 
1376
              FPE_IN_QP_REDUCTION=.FALSE.
1495
1377
              I_LIB=INDEX_QP_TOOLS(I_QP_LIB)
1496
1378
              EVAL_DONE(1)=.TRUE.
1497
1379
              DO I=2,MAXSTABILITYLENGTH
1507
1389
          ENDIF
1508
1390
        ELSEIF(.NOT.DOING_QP_EVALS)THEN
1509
1391
          CALL ML5_0_COMPUTE_ACCURACY(DP_RES,N_DP_EVAL,ACC,ANS)
 
1392
C         If a floating point exception was encountered during the
 
1393
C          reduction,
 
1394
C         the result cannot be trusted at all and we hardset all
 
1395
C          accuracies to 1.0
 
1396
          IF(FPE_IN_DP_REDUCTION) THEN
 
1397
            DO I=0,NSQUAREDSO
 
1398
              ACC(I)=1.0D0
 
1399
            ENDDO
 
1400
          ENDIF
1510
1401
          IF(MAXVAL(ACC).GE.MLSTABTHRES) THEN
1511
1402
            I_LIB=I_LIB+1
1512
 
            IF((I_LIB.GT.NLOOPLIB.OR.MLREDUCTIONLIB(I_LIB).EQ.0
1513
 
     $       ).AND.QP_TOOLS_AVAILABLE)THEN
 
1403
            IF((I_LIB.GT.NLOOPLIB.OR.MLREDUCTIONLIB(I_LIB).EQ.0)
 
1404
     $       .AND.QP_TOOLS_AVAILABLE)THEN
1514
1405
              I_LIB=INDEX_QP_TOOLS(1)
 
1406
C             A new reduction tool will be used. Reinitialize the FPE
 
1407
C              flags.
 
1408
              FPE_IN_DP_REDUCTION=.FALSE.
 
1409
              FPE_IN_QP_REDUCTION=.FALSE.
1515
1410
              I_QP_LIB=1
1516
1411
              DOING_QP_EVALS=.TRUE.
1517
1412
              EVAL_DONE(1)=.TRUE.
1521
1416
              STAB_INDEX=0
1522
1417
              CTMODE=4
1523
1418
              GOTO 200
1524
 
            ELSEIF(I_LIB.LE.NLOOPLIB.AND.MLREDUCTIONLIB(I_LIB).GT.0
1525
 
     $       )THEN
 
1419
            ELSEIF(I_LIB.LE.NLOOPLIB.AND.MLREDUCTIONLIB(I_LIB).GT.0)
 
1420
     $       THEN
 
1421
C             A new reduction tool will be used. Reinitialize the FPE
 
1422
C              flags.
 
1423
              FPE_IN_DP_REDUCTION=.FALSE.
 
1424
              FPE_IN_QP_REDUCTION=.FALSE.
1526
1425
              EVAL_DONE(1)=.TRUE.
1527
1426
              DO I=2,MAXSTABILITYLENGTH
1528
1427
                EVAL_DONE(I)=.FALSE.
1542
1441
     $         ,.FALSE.)
1543
1442
              NEPS=NEPS+1
1544
1443
              IF(NEPS.LE.10) THEN
1545
 
                WRITE(*,*) '##W03 WARNING An unstable PS point was'
1546
 
     $           ,       ' detected.'
1547
 
                WRITE(*,*) '##W03 WARNING No quadruple precision wil'
1548
 
     $           //'l be used.'
 
1444
                WRITE(*,*) '##W03 WARNING An unstable PS point was',  
 
1445
     $                ' detected.'
 
1446
                WRITE(*,*) '##W03 WARNING No quadruple precision will'
 
1447
     $           //' be used.'
 
1448
                IF(FPE_IN_DP_REDUCTION) THEN
 
1449
                  WRITE(*,*) '## The last DP reduction was deemed'
 
1450
     $             //' unstable because a floating point exception was'
 
1451
     $             //' encountered.'
 
1452
                ENDIF
 
1453
                CALL ML5_0_COMPUTE_ACCURACY(DP_RES,N_DP_EVAL,ACC,ANS)
1549
1454
                IF (NSQUAREDSO.NE.1) THEN
1550
 
                  WRITE(*,*) 'Accuracies for each split orde'
1551
 
     $             //'r, starting with the summed case'
 
1455
                  WRITE(*,*) 'Accuracies for each split order,'
 
1456
     $             //' starting with the summed case'
1552
1457
                  WRITE(*,*) 'DP accuracies (for each split order): '
1553
1458
     $             ,(ACC(I),I=0,NSQUAREDSO)
1554
1459
                ELSE
1557
1462
                DO J=0,NSQUAREDSO
1558
1463
                  IF (NSQUAREDSO.NE.1.OR.J.NE.0) THEN
1559
1464
                    IF (J.EQ.0) THEN
1560
 
                      WRITE(*,*) 'Details for all split orders summe'
1561
 
     $                 //'d :'
 
1465
                      WRITE(*,*) 'Details for all split orders summed'
 
1466
     $                 //' :'
1562
1467
                    ELSE
1563
1468
                      WRITE(*,*) 'Details for split order index : ',J
1564
1469
                    ENDIF
1576
1481
                ENDDO
1577
1482
              ENDIF
1578
1483
              IF(NEPS.EQ.10) THEN
1579
 
                WRITE(*,*) 'Further output of the details of thes'
1580
 
     $           //'e unstable PS points will now be suppressed.'
 
1484
                WRITE(*,*) 'Further output of the details of these'
 
1485
     $           //' unstable PS points will now be suppressed.'
1581
1486
              ENDIF
1582
1487
            ENDIF
1583
1488
          ELSE
1638
1543
        CTMODEINIT=CTMODEINIT_BU
1639
1544
      ENDIF
1640
1545
 
 
1546
C     Reinitialize the Lorentz test if it had been disabled because
 
1547
C      spin-2 particles are in the external states.
 
1548
      NROTATIONS_DP = NROTATIONS_DP_BU
 
1549
      NROTATIONS_QP = NROTATIONS_QP_BU
 
1550
 
1641
1551
C     Reinitialize the check phase logicals and the filters if check
1642
1552
C      bypassed
1643
1553
      IF (BYPASS_CHECK) THEN
1652
1562
          ENDDO
1653
1563
        ENDDO
1654
1564
      ENDIF
 
1565
 
 
1566
C     Make sure that we finish by emptying caches
 
1567
      IF (AUTOMATIC_CACHE_CLEARING) THEN
 
1568
        CALL ML5_0_CLEAR_CACHES()
 
1569
      ENDIF
 
1570
      END
 
1571
 
 
1572
      SUBROUTINE ML5_0_CLEAR_CACHES()
 
1573
C     Clears all the caches used at some point in MadLoop
 
1574
      CALL ML5_0_CLEAR_TIR_CACHE()
 
1575
      CALL NINJA_CLEAR_INTEGRAL_CACHE()
1655
1576
      END
1656
1577
 
1657
1578
C     --=========================================--
1659
1580
C     for the main sloopmatrix subroutine
1660
1581
C     --=========================================--
1661
1582
 
1662
 
      LOGICAL FUNCTION ML5_0_ISZERO(TOTEST, REFERENCE_VALUE, LOOP
1663
 
     $ , SOINDEX)
 
1583
      LOGICAL FUNCTION ML5_0_ISZERO(TOTEST, REFERENCE_VALUE, LOOP,
 
1584
     $  SOINDEX)
1664
1585
      IMPLICIT NONE
1665
1586
C     
1666
1587
C     CONSTANTS
1686
1607
C     ----------
1687
1608
      IF(ABS(REFERENCE_VALUE).EQ.0.0D0) THEN
1688
1609
        ML5_0_ISZERO=.FALSE.
1689
 
        WRITE(*,*) '##E02 ERRROR Reference value for comparison i'
1690
 
     $   //'s zero.'
 
1610
        WRITE(*,*) '##E02 ERRROR Reference value for comparison is'
 
1611
     $   //' zero.'
1691
1612
        STOP 1
1692
1613
      ELSE
1693
1614
        ML5_0_ISZERO=((ABS(TOTEST)/ABS(REFERENCE_VALUE)).LT.ZEROTHRES)
1695
1616
 
1696
1617
      IF(LOOP.NE.-1) THEN
1697
1618
        IF((.NOT.ML5_0_ISZERO).AND.(.NOT.S(SOINDEX,LOOP))) THEN
1698
 
          WRITE(*,*) '##W01 WARNING Contribution ',LOOP,' of spli'
1699
 
     $     //'t order ',SOINDEX,' is detected as contributing wit'
1700
 
     $     //'h CR=',(ABS(TOTEST)/ABS(REFERENCE_VALUE)),' but i'
1701
 
     $     //'s unstable.'
 
1619
          WRITE(*,*) '##W01 WARNING Contribution ',LOOP,' of split'
 
1620
     $     //' order ',SOINDEX,' is detected as contributing with CR='
 
1621
     $     ,(ABS(TOTEST)/ABS(REFERENCE_VALUE)),' but is unstable.'
1702
1622
        ENDIF
1703
1623
      ENDIF
1704
1624
 
1708
1628
      IMPLICIT NONE
1709
1629
C     This function compares the result from two different helicity
1710
1630
C      configuration A and B
1711
 
C     It returns 0 if they are not related and (+/-wgt) if A=(+/-wgt)*B
1712
 
C     .
 
1631
C     It returns 0 if they are not related and (+/-wgt) if
 
1632
C      A=(+/-wgt)*B.
1713
1633
C     For now, the only wgt implemented is the integer 1 or -1.
1714
1634
C     If useMax is .TRUE., it uses all implemented weights no matter
1715
1635
C      what is HELINITSTARTOVER
1752
1672
      DO I=1,N_WGT_TO_TRY
1753
1673
        DO J=1,3
1754
1674
          IF (ML5_0_ISZERO(ABS(RESB(J)),REF,-1,-1)) THEN
1755
 
            IF(.NOT.ML5_0_ISZERO(ABS(RESB(J))+ABS(RESA(J)),REF,-1,
1756
 
     $       -1)) THEN
 
1675
            IF(.NOT.ML5_0_ISZERO(ABS(RESB(J))+ABS(RESA(J)),REF,-1,-1))
 
1676
     $        THEN
1757
1677
              GOTO 1231
1758
1678
            ENDIF
1759
1679
C           Be looser for helicity comparison, so bring a factor 100
1760
 
          ELSEIF(.NOT.ML5_0_ISZERO(ABS((RESA(J)/RESB(J))-DBLE(WGT_TO_TR
1761
 
     $     Y(I))),1.0D0,-1,-1)) THEN
 
1680
          ELSEIF(.NOT.ML5_0_ISZERO(ABS((RESA(J)/RESB(J))
 
1681
     $     -DBLE(WGT_TO_TRY(I))),1.0D0,-1,-1)) THEN
1762
1682
            GOTO 1231
1763
1683
          ENDIF
1764
1684
        ENDDO
1768
1688
      ENDDO
1769
1689
      END
1770
1690
 
1771
 
      SUBROUTINE ML5_0_COMPUTE_ACCURACY(FULLLIST, LENGTH, ACC
1772
 
     $ , ESTIMATE)
 
1691
      SUBROUTINE ML5_0_COMPUTE_ACCURACY(FULLLIST, LENGTH, ACC,
 
1692
     $  ESTIMATE)
1773
1693
      IMPLICIT NONE
1774
1694
C     
1775
1695
C     PARAMETERS 
1916
1836
 
1917
1837
      SUBROUTINE ML5_0_GET_ANSWER_DIMENSION(ANS_DIM)
1918
1838
C     
1919
 
C     MadLoop subroutines return an array of dimension ANS(0:3,0:ANS_DI
1920
 
C     M)
 
1839
C     MadLoop subroutines return an array of dimension
 
1840
C      ANS(0:3,0:ANS_DIM)
1921
1841
C     In order for the user program to be able to correctly declare
1922
1842
C      this
1923
1843
C     array when calling MadLoop, this subroutine returns its dimension
1966
1886
 1009   CONTINUE
1967
1887
      ENDDO
1968
1888
 
1969
 
      WRITE(*,*) 'ERROR:: Stopping function ML5_0_ML5SOINDEX_FOR_SQUAR'
1970
 
     $ //'ED_ORDERS'
 
1889
      WRITE(*,*) 'ERROR:: Stopping function ML5_0_ML5SOINDEX_FOR_SQUARE'
 
1890
     $ //'D_ORDERS'
1971
1891
      WRITE(*,*) 'Could not find squared orders ',(ORDERS(I),I=1,NSO)
1972
1892
      STOP
1973
1893
 
1995
1915
C     BEGIN CODE
1996
1916
C     -----------
1997
1917
      IF (AMPID.GT.NBORNAMPS) THEN
1998
 
        WRITE(*,*) 'ERROR:: Born amplitude ID ',AMPID,' above th'
1999
 
     $   //'e maximum ',NBORNAMPS
 
1918
        WRITE(*,*) 'ERROR:: Born amplitude ID ',AMPID,' above the'
 
1919
     $   //' maximum ',NBORNAMPS
2000
1920
      ENDIF
2001
1921
      ML5_0_ML5SOINDEX_FOR_BORN_AMP = BORNAMPORDERS(AMPID)
2002
1922
 
2032
1952
C     BEGIN CODE
2033
1953
C     -----------
2034
1954
      IF (AMPID.GT.NLOOPAMPS) THEN
2035
 
        WRITE(*,*) 'ERROR:: Loop amplitude ID ',AMPID,' above th'
2036
 
     $   //'e maximum ',NLOOPAMPS
 
1955
        WRITE(*,*) 'ERROR:: Loop amplitude ID ',AMPID,' above the'
 
1956
     $   //' maximum ',NLOOPAMPS
2037
1957
      ENDIF
2038
1958
      ML5_0_ML5SOINDEX_FOR_LOOP_AMP = LOOPAMPORDERS(AMPID)
2039
1959
 
2046
1966
C      be hardcoded or 
2047
1967
C     made more elegant using hashtables if its execution speed ever
2048
1968
C      becomes a relevant
2049
 
C     factor. From two split order indices, it return the corresponding
2050
 
C      index in the squared 
 
1969
C     factor. From two split order indices, it return the
 
1970
C      corresponding index in the squared 
2051
1971
C     order canonical ordering.
2052
1972
C     
2053
1973
C     CONSTANTS
2075
1995
C     
2076
1996
      DO I=1,NSO
2077
1997
        SQORDERS(I)=AMPSPLITORDERS(ORDERINDEXA,I)+AMPSPLITORDERS(ORDERI
2078
 
     $   NDEXB,I)
 
1998
     $NDEXB,I)
2079
1999
      ENDDO
2080
2000
      ML5_0_ML5SQSOINDEX=ML5_0_ML5SOINDEX_FOR_SQUARED_ORDERS(SQORDERS)
2081
2001
      END
2114
2034
        RETURN
2115
2035
      ENDIF
2116
2036
 
2117
 
      WRITE(*,*) 'ERROR:: Stopping function ML5_0_ML5GET_SQUARED_ORDER'
2118
 
     $ //'S_FOR_SOINDEX'
 
2037
      WRITE(*,*) 'ERROR:: Stopping function ML5_0_ML5GET_SQUARED_ORDERS'
 
2038
     $ //'_FOR_SOINDEX'
2119
2039
      WRITE(*,*) 'Could not find squared orders index ',SOINDEX
2120
2040
      STOP
2121
2041
 
2154
2074
        RETURN
2155
2075
      ENDIF
2156
2076
 
2157
 
      WRITE(*,*) 'ERROR:: Stopping function ML5_0_ML5GET_ORDERS_FOR_AM'
2158
 
     $ //'PSOINDEX'
 
2077
      WRITE(*,*) 'ERROR:: Stopping function ML5_0_ML5GET_ORDERS_FOR_AMP'
 
2078
     $ //'SOINDEX'
2159
2079
      WRITE(*,*) 'Could not find amplitude split orders index ',SOINDEX
2160
2080
      STOP
2161
2081
 
2162
2082
      END SUBROUTINE
2163
2083
 
2164
2084
 
2165
 
C     This function is not directly useful, but included for completene
2166
 
C     ss
 
2085
C     This function is not directly useful, but included for
 
2086
C      completeness
2167
2087
      INTEGER FUNCTION ML5_0_ML5SOINDEX_FOR_AMPORDERS(ORDERS)
2168
2088
C     
2169
2089
C     This functions returns the integer index identifying the
2198
2118
 1009   CONTINUE
2199
2119
      ENDDO
2200
2120
 
2201
 
      WRITE(*,*) 'ERROR:: Stopping function ML5_0_ML5SOINDEX_FOR_AMPOR'
2202
 
     $ //'DERS'
 
2121
      WRITE(*,*) 'ERROR:: Stopping function ML5_0_ML5SOINDEX_FOR_AMPORD'
 
2122
     $ //'ERS'
2203
2123
      WRITE(*,*) 'Could not find squared orders ',(ORDERS(I),I=1,NSO)
2204
2124
      STOP
2205
2125
 
2226
2146
 
2227
2147
      END SUBROUTINE
2228
2148
 
2229
 
      SUBROUTINE ML5_0_SET_AUTOMATIC_TIR_CACHE_CLEARING(ONOFF)
 
2149
      SUBROUTINE ML5_0_SET_AUTOMATIC_CACHE_CLEARING(ONOFF)
2230
2150
C     
2231
2151
C     This function can be called by the MadLoop user so as to
2232
2152
C      manually chose when
2238
2158
 
2239
2159
      LOGICAL ONOFF
2240
2160
 
2241
 
      LOGICAL AUTOMATIC_TIR_CACHE_CLEARING
2242
 
      DATA AUTOMATIC_TIR_CACHE_CLEARING/.TRUE./
2243
 
      COMMON/ML5_0_RUNTIME_OPTIONS/AUTOMATIC_TIR_CACHE_CLEARING
 
2161
      LOGICAL AUTOMATIC_CACHE_CLEARING
 
2162
      DATA AUTOMATIC_CACHE_CLEARING/.TRUE./
 
2163
      COMMON/ML5_0_RUNTIME_OPTIONS/AUTOMATIC_CACHE_CLEARING
2244
2164
 
2245
2165
      INTEGER N_DP_EVAL, N_QP_EVAL
2246
2166
      COMMON/ML5_0_N_EVALS/N_DP_EVAL,N_QP_EVAL
2247
2167
 
2248
 
      WRITE(*,*) 'Warning: No TIR caching implemented. Call t'
2249
 
     $ //'o SET_AUTOMATIC_TIR_CACHE_CLEARING did nothing.'
 
2168
      WRITE(*,*) 'Warning: No TIR caching implemented. Call to'
 
2169
     $ //' SET_AUTOMATIC_CACHE_CLEARING did nothing.'
2250
2170
      END SUBROUTINE
2251
2171
 
2252
2172
      SUBROUTINE ML5_0_SET_COUPLINGORDERS_TARGET(SOTARGET)
2339
2259
      USER_STAB_PREC = PREC_ASKED
2340
2260
 
2341
2261
      CALL ML5_0_SLOOPMATRIXHEL(P,HEL,ANS)
2342
 
      IF(ALWAYS_TEST_STABILITY.AND.(H.EQ.1.OR.ACCURACY(0).LT.0.0D0)
2343
 
     $ ) THEN
 
2262
      IF(ALWAYS_TEST_STABILITY.AND.(H.EQ.1.OR.ACCURACY(0).LT.0.0D0))
 
2263
     $  THEN
2344
2264
        BYPASS_CHECK = .TRUE.
2345
2265
        CALL ML5_0_SLOOPMATRIXHEL(P,HEL,ANS)
2346
2266
        BYPASS_CHECK = .FALSE.
2363
2283
     $ ,RET_CODE)
2364
2284
C     
2365
2285
C     Inputs are:
2366
 
C     P(0:3, Nexternal)  double  :: Kinematic configuration (E,px,py,pz
2367
 
C     )
 
2286
C     P(0:3, Nexternal)  double  :: Kinematic configuration
 
2287
C      (E,px,py,pz)
2368
2288
C     PEC_ASKED          double  :: Target relative accuracy, -1 for
2369
2289
C      default
2370
2290
C     
2409
2329
C     Stable with IREGI.
2410
2330
C     U == 4
2411
2331
C     Stable with Golem95
 
2332
C     U == 5
 
2333
C     Stable with Samurai
 
2334
C     U == 6
 
2335
C     Stable with Ninja in double precision
 
2336
C     U == 8
 
2337
C     Stable with Ninja in quadruple precision
2412
2338
C     U == 9
2413
2339
C     Stable with CutTools in quadruple precision.         
2414
2340
C     
2449
2375
C     ----------
2450
2376
      USER_STAB_PREC = PREC_ASKED
2451
2377
      CALL ML5_0_SLOOPMATRIX(P,ANS)
2452
 
      IF(ALWAYS_TEST_STABILITY.AND.(H.EQ.1.OR.ACCURACY(0).LT.0.0D0)
2453
 
     $ ) THEN
 
2378
      IF(ALWAYS_TEST_STABILITY.AND.(H.EQ.1.OR.ACCURACY(0).LT.0.0D0))
 
2379
     $  THEN
2454
2380
        BYPASS_CHECK = .TRUE.
2455
2381
        CALL ML5_0_SLOOPMATRIX(P,ANS)
2456
2382
        BYPASS_CHECK = .FALSE.
2475
2401
      CONTINUE
2476
2402
      END
2477
2403
 
2478