~madteam/mg5amcnlo/series2.0

« back to all changes in this revision

Viewing changes to tests/input_files/IOTestsComparison/short_ML_SMQCD_optimized/ddx_ttx/loop_matrix.f

  • Committer: olivier Mattelaer
  • Date: 2015-03-05 00:14:16 UTC
  • mfrom: (258.1.9 2.3)
  • mto: (258.8.1 2.3)
  • mto: This revision was merged to the branch mainline in revision 259.
  • Revision ID: olivier.mattelaer@uclouvain.be-20150305001416-y9mzeykfzwnl9t0j
partial merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
C     
17
17
      IMPLICIT NONE
18
18
C     
 
19
C     USER CUSTOMIZABLE OPTIONS
 
20
C     
 
21
C     This parameter is designed for the check timing command of MG5.
 
22
C      It skips the loop reduction.
 
23
      LOGICAL SKIPLOOPEVAL
 
24
      PARAMETER (SKIPLOOPEVAL=.FALSE.)
 
25
C     For timing checks. Stops the code after having only initialized
 
26
C      its arrays from the external data files 
 
27
      LOGICAL BOOTANDSTOP
 
28
      PARAMETER (BOOTANDSTOP=.FALSE.)
 
29
C     
19
30
C     CONSTANTS
20
31
C     
21
32
      CHARACTER*512 PARAMFNAME,HELCONFIGFNAME,LOOPFILTERFNAME
32
43
      INTEGER NBORNAMPS
33
44
      PARAMETER (NBORNAMPS=1)
34
45
      INTEGER    NLOOPS, NLOOPGROUPS, NCTAMPS
35
 
      PARAMETER (NLOOPS=14, NLOOPGROUPS=8, NCTAMPS=29)
 
46
      PARAMETER (NLOOPS=11, NLOOPGROUPS=8, NCTAMPS=29)
 
47
      INTEGER    NLOOPAMPS
 
48
      PARAMETER (NLOOPAMPS=40)
36
49
      INTEGER    NCOLORROWS
37
 
      PARAMETER (NCOLORROWS=43)
 
50
      PARAMETER (NCOLORROWS=NLOOPAMPS)
38
51
      INTEGER    NEXTERNAL
39
52
      PARAMETER (NEXTERNAL=4)
40
53
      INTEGER    NWAVEFUNCS,NLOOPWAVEFUNCS
41
 
      PARAMETER (NWAVEFUNCS=6,NLOOPWAVEFUNCS=32)
 
54
      PARAMETER (NWAVEFUNCS=6,NLOOPWAVEFUNCS=26)
42
55
      INTEGER MAXLWFSIZE
43
56
      PARAMETER (MAXLWFSIZE=4)
44
57
      INTEGER LOOPMAXCOEFS, VERTEXMAXCOEFS
68
81
C     Only CutTools provides QP
69
82
      INTEGER QP_NLOOPLIB
70
83
      PARAMETER (QP_NLOOPLIB=1)
71
 
C     This parameter is designed for the check timing command of MG5
72
 
      LOGICAL SKIPLOOPEVAL
73
 
      PARAMETER (SKIPLOOPEVAL=.FALSE.)
74
 
      LOGICAL BOOTANDSTOP
75
 
      PARAMETER (BOOTANDSTOP=.FALSE.)
76
84
      INTEGER MAXSTABILITYLENGTH
77
85
      DATA MAXSTABILITYLENGTH/20/
78
86
      COMMON/ML5_0_STABILITY_TESTS/MAXSTABILITYLENGTH
 
87
 
79
88
C     
80
89
C     ARGUMENTS 
81
90
C     
103
112
C     
104
113
C     LOCAL VARIABLES 
105
114
C     
106
 
      INTEGER I,J,K,H,DUMMY,I_QP_LIB
 
115
      INTEGER I,J,K,H,HEL_MULT,I_QP_LIB,DUMMY
107
116
 
108
117
      CHARACTER*512 PARAMFN,HELCONFIGFN,LOOPFILTERFN,COLORNUMFN
109
118
     $ ,COLORDENOMFN,HELFILTERFN
134
143
      LOGICAL EVAL_DONE(MAXSTABILITYLENGTH)
135
144
      LOGICAL DOING_QP_EVALS
136
145
      INTEGER STAB_INDEX,BASIC_CT_MODE
137
 
      INTEGER N_DP_EVAL, N_QP_EVAL
138
 
      DATA N_DP_EVAL/1/
139
 
      DATA N_QP_EVAL/1/
 
146
 
 
147
 
140
148
      REAL*8 ACC(0:NSQUAREDSO)
141
149
      REAL*8 DP_RES(3,0:NSQUAREDSO,MAXSTABILITYLENGTH)
142
150
C     QP_RES STORES THE QUADRUPLE PRECISION RESULT OBTAINED FROM
149
157
      REAL*8 HELSAVED(3,NCOMB)
150
158
      INTEGER ITEMP
151
159
      LOGICAL LTEMP
152
 
      REAL*8 BORNBUFF(0:NSQSO_BORN)
 
160
      REAL*8 BORNBUFF(0:NSQSO_BORN),TMPR
153
161
      REAL*8 BUFFR(3,0:NSQUAREDSO),BUFFR_BIS(3,0:NSQUAREDSO),TEMP(0:3
154
 
     $ ,0:NSQUAREDSO),TEMP1(0:NSQUAREDSO),TEMP2
 
162
     $ ,0:NSQUAREDSO),TEMP1(0:NSQUAREDSO)
 
163
      REAL*8 TEMP2
155
164
      COMPLEX*16 COEFS(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
156
165
      COMPLEX*16 CFTOT
157
166
      LOGICAL FOUNDHELFILTER,FOUNDLOOPFILTER
161
170
      DATA ((LOOPFILTERBUFF(J,I),J=1,NSQUAREDSO),I=1,NLOOPGROUPS)
162
171
     $ /NSQSOXNLG*.FALSE./
163
172
 
 
173
      LOGICAL AUTOMATIC_TIR_CACHE_CLEARING
 
174
      DATA AUTOMATIC_TIR_CACHE_CLEARING/.TRUE./
 
175
      COMMON/ML5_0_RUNTIME_OPTIONS/AUTOMATIC_TIR_CACHE_CLEARING
 
176
 
164
177
      INTEGER IDEN
165
178
      DATA IDEN/36/
166
179
      INTEGER HELAVGFACTOR
179
192
C     
180
193
C     FUNCTIONS
181
194
C     
 
195
      INTEGER ML5_0_TIRCACHE_INDEX
182
196
      INTEGER ML5_0_ML5SOINDEX_FOR_BORN_AMP
183
197
      INTEGER ML5_0_ML5SOINDEX_FOR_LOOP_AMP
184
198
      INTEGER ML5_0_ML5SQSOINDEX
192
206
      INCLUDE 'mp_coupl.inc'
193
207
      INCLUDE 'MadLoopParams.inc'
194
208
 
 
209
 
195
210
      LOGICAL CHOSEN_SO_CONFIGS(NSQUAREDSO)
196
211
      DATA CHOSEN_SO_CONFIGS//
197
212
      COMMON/ML5_0_CHOSEN_LOOP_SQSO/CHOSEN_SO_CONFIGS
198
213
 
 
214
      INTEGER N_DP_EVAL, N_QP_EVAL
 
215
      DATA N_DP_EVAL/1/
 
216
      DATA N_QP_EVAL/1/
 
217
      COMMON/ML5_0_N_EVALS/N_DP_EVAL,N_QP_EVAL
 
218
 
199
219
      LOGICAL CHECKPHASE
200
220
      DATA CHECKPHASE/.TRUE./
201
221
      LOGICAL HELDOUBLECHECKED
212
232
C     A FLAG TO DENOTE WHETHER THE CORRESPONDING LOOPLIBS ARE
213
233
C      AVAILABLE OR NOT
214
234
      LOGICAL LOOPLIBS_AVAILABLE(4)
215
 
      DATA LOOPLIBS_AVAILABLE /.TRUE.,.FALSE.,.FALSE.,.FALSE./
 
235
      DATA LOOPLIBS_AVAILABLE/.TRUE.,.FALSE.,.FALSE.,.FALSE./
216
236
      COMMON/ML5_0_LOOPLIBS_AV/ LOOPLIBS_AVAILABLE
217
237
C     A FLAG TO DENOTE WHETHER THE CORRESPONDING DIRECTION TESTS
218
238
C      AVAILABLE OR NOT IN THE LOOPLIBS
219
239
C     PJFry++ and Golem95 do not support direction test
220
240
      LOGICAL LOOPLIBS_DIRECTEST(4)
221
 
      DATA LOOPLIBS_DIRECTEST /.TRUE.,.FALSE.,.TRUE.,.FALSE./
 
241
      DATA LOOPLIBS_DIRECTEST /.TRUE.,.TRUE.,.TRUE.,.TRUE./
222
242
 
223
243
C     PS CAN POSSIBILY BE PASSED THROUGH IMPROVE_PS BUT IS NOT
224
244
C      MODIFIED FOR THE PURPOSE OF THE STABILITY TEST
315
335
      COMPLEX*16 LOOPCOEFS(0:LOOPMAXCOEFS-1,NSQUAREDSO,NLOOPGROUPS)
316
336
      COMMON/ML5_0_LCOEFS/LOOPCOEFS
317
337
 
 
338
 
 
339
 
318
340
      COMPLEX*16 AMPL(3,NCTAMPS)
319
341
      COMMON/ML5_0_AMPL/AMPL
320
342
 
358
380
C     ----------
359
381
 
360
382
      IF(ML_INIT) THEN
 
383
        ML_INIT = .FALSE.
361
384
        CALL PRINT_MADLOOP_BANNER()
362
385
        TMP = 'auto'
363
386
        CALL SETMADLOOPPATH(TMP)
364
387
        CALL JOINPATH(MLPATH,PARAMFNAME,PARAMFN)
365
388
        CALL MADLOOPPARAMREADER(PARAMFN,.TRUE.)
366
 
        ML_INIT = .FALSE.
 
389
 
 
390
C       Make sure that NROTATIONS_QP and NROTATIONS_DP are set to zero
 
391
C        if AUTOMATIC_TIR_CACHE_CLEARING is disabled.
 
392
        IF(.NOT.AUTOMATIC_TIR_CACHE_CLEARING) THEN
 
393
          IF(NROTATIONS_DP.NE.0.OR.NROTATIONS_QP.NE.0) THEN
 
394
            WRITE(*,*) 'INFO: AUTOMATIC_TIR_CACHE_CLEARING is disable'
 
395
     $       //'d, so MadLoop automatically resets NROTATIONS_DP an'
 
396
     $       //'d NROTATIONS_QP to 0.'
 
397
            NROTATIONS_QP=0
 
398
            NROTATIONS_DP=0
 
399
          ENDIF
 
400
        ENDIF
 
401
      ENDIF
 
402
 
 
403
      QP_TOOLS_AVAILABLE=.FALSE.
 
404
      INDEX_QP_TOOLS(1:QP_NLOOPLIB+1)=0
 
405
C     SKIP THE ONES THAT NOT AVAILABLE
 
406
      J=1
 
407
      DO I=1,NLOOPLIB
 
408
        IF(MLREDUCTIONLIB(J).EQ.0)EXIT
 
409
        IF(.NOT.LOOPLIBS_AVAILABLE(MLREDUCTIONLIB(J)))THEN
 
410
          MLREDUCTIONLIB(J:NLOOPLIB-1)=MLREDUCTIONLIB(J+1:NLOOPLIB)
 
411
          MLREDUCTIONLIB(NLOOPLIB)=0
 
412
        ELSE
 
413
          J=J+1
 
414
        ENDIF
 
415
      ENDDO
 
416
      IF(MLREDUCTIONLIB(1).EQ.0)THEN
 
417
        STOP 'No available loop reduction lib is provided. Make sur'
 
418
     $   //'e MLReductionLib is correct.'
 
419
      ENDIF
 
420
      J=0
 
421
      DO I=1,NLOOPLIB
 
422
        IF(MLREDUCTIONLIB(I).EQ.1)THEN
 
423
          J=J+1
 
424
          IF(.NOT.QP_TOOLS_AVAILABLE)QP_TOOLS_AVAILABLE=.TRUE.
 
425
          INDEX_QP_TOOLS(J)=I
 
426
        ENDIF
 
427
      ENDDO
 
428
 
 
429
C     Setup the file paths
 
430
      CALL JOINPATH(MLPATH,PARAMFNAME,PARAMFN)
 
431
      CALL JOINPATH(MLPATH,PROC_PREFIX,TMP)
 
432
      CALL JOINPATH(TMP,HELCONFIGFNAME,HELCONFIGFN)
 
433
      CALL JOINPATH(TMP,LOOPFILTERFNAME,LOOPFILTERFN)
 
434
      CALL JOINPATH(TMP,COLORNUMFNAME,COLORNUMFN)
 
435
      CALL JOINPATH(TMP,COLORDENOMFNAME,COLORDENOMFN)
 
436
      CALL JOINPATH(TMP,HELFILTERFNAME,HELFILTERFN)
 
437
 
 
438
      CALL ML5_0_SET_N_EVALS(N_DP_EVAL,N_QP_EVAL)
 
439
 
 
440
      OPEN(1, FILE=COLORNUMFN, ERR=104, STATUS='OLD',          
 
441
     $  ACTION='READ')
 
442
      DO I=1,NCOLORROWS
 
443
        READ(1,*,END=105) (CF_N(I,J),J=1,NBORNAMPS)
 
444
      ENDDO
 
445
      GOTO 105
 
446
 104  CONTINUE
 
447
      STOP 'Color factors could not be initialized from file ML5_0_Col'
 
448
     $ //'orNumFactors.dat. File not found'
 
449
 105  CONTINUE
 
450
      CLOSE(1)
 
451
      OPEN(1, FILE=COLORDENOMFN, ERR=106, STATUS='OLD',          
 
452
     $  ACTION='READ')
 
453
      DO I=1,NCOLORROWS
 
454
        READ(1,*,END=107) (CF_D(I,J),J=1,NBORNAMPS)
 
455
      ENDDO
 
456
      GOTO 107
 
457
 106  CONTINUE
 
458
      STOP 'Color factors could not be initialized from file ML5_0_Col'
 
459
     $ //'orDenomFactors.dat. File not found'
 
460
 107  CONTINUE
 
461
      CLOSE(1)
 
462
      OPEN(1, FILE=HELCONFIGFN, ERR=108, STATUS='OLD',                
 
463
     $   ACTION='READ')
 
464
      DO H=1,NCOMB
 
465
        READ(1,*,END=109) (HELC(I,H),I=1,NEXTERNAL)
 
466
      ENDDO
 
467
      GOTO 109
 
468
 108  CONTINUE
 
469
      STOP 'Color helictiy configurations could not be initialize'
 
470
     $ //'d from file ML5_0_HelConfigs.dat. File not found'
 
471
 109  CONTINUE
 
472
      CLOSE(1)
 
473
 
 
474
C     SETUP OF THE COMMON STARTING EXTERNAL LOOP WAVEFUNCTION
 
475
C     IT IS ALSO PS POINT INDEPENDENT, SO IT CAN BE DONE HERE.
 
476
      DO I=0,3
 
477
        PL(I,0)=(0.0D0,0.0D0)
 
478
      ENDDO
 
479
      DO I=1,MAXLWFSIZE
 
480
        DO J=0,LOOPMAXCOEFS-1
 
481
          DO K=1,MAXLWFSIZE
 
482
            IF(I.EQ.K.AND.J.EQ.0) THEN
 
483
              WL(I,J,K,0)=(1.0D0,0.0D0)
 
484
            ELSE
 
485
              WL(I,J,K,0)=(0.0D0,0.0D0)
 
486
            ENDIF
 
487
          ENDDO
 
488
        ENDDO
 
489
      ENDDO
 
490
      IF(BOOTANDSTOP) THEN
 
491
        WRITE(*,*) 'Stopped by user request.'
 
492
        STOP
367
493
      ENDIF
368
494
 
369
495
      IF(NTRY.EQ.0) THEN
370
 
C       CALL MADLOOPPARAMREADER(paramFileName,.TRUE.)
371
 
        QP_TOOLS_AVAILABLE=.FALSE.
372
 
        INDEX_QP_TOOLS(1:QP_NLOOPLIB+1)=0
373
 
C       SKIP THE ONES THAT NOT AVAILABLE
374
 
        J=1
375
 
        DO I=1,NLOOPLIB
376
 
          IF(MLREDUCTIONLIB(J).EQ.0)EXIT
377
 
          IF(.NOT.LOOPLIBS_AVAILABLE(MLREDUCTIONLIB(J)))THEN
378
 
            MLREDUCTIONLIB(J:NLOOPLIB-1)=MLREDUCTIONLIB(J+1:NLOOPLIB)
379
 
            MLREDUCTIONLIB(NLOOPLIB)=0
380
 
          ELSE
381
 
            J=J+1
382
 
          ENDIF
383
 
        ENDDO
384
 
        IF(MLREDUCTIONLIB(1).EQ.0)THEN
385
 
          STOP 'No available loop reduction lib is provided. Make sur'
386
 
     $     //'e MLReductionLib is correct.'
387
 
        ENDIF
388
 
        J=0
389
 
        DO I=1,NLOOPLIB
390
 
          IF(MLREDUCTIONLIB(I).EQ.1)THEN
391
 
            J=J+1
392
 
            IF(.NOT.QP_TOOLS_AVAILABLE)QP_TOOLS_AVAILABLE=.TRUE.
393
 
            INDEX_QP_TOOLS(J)=I
394
 
          ENDIF
395
 
        ENDDO
396
 
 
397
 
C       Setup the file paths
398
 
        CALL JOINPATH(MLPATH,PARAMFNAME,PARAMFN)
399
 
        CALL JOINPATH(MLPATH,PROC_PREFIX,TMP)
400
 
        CALL JOINPATH(TMP,HELCONFIGFNAME,HELCONFIGFN)
401
 
        CALL JOINPATH(TMP,LOOPFILTERFNAME,LOOPFILTERFN)
402
 
        CALL JOINPATH(TMP,COLORNUMFNAME,COLORNUMFN)
403
 
        CALL JOINPATH(TMP,COLORDENOMFNAME,COLORDENOMFN)
404
 
        CALL JOINPATH(TMP,HELFILTERFNAME,HELFILTERFN)
405
 
 
406
 
        CALL ML5_0_SET_N_EVALS(N_DP_EVAL,N_QP_EVAL)
407
 
 
408
 
        HELDOUBLECHECKED=.NOT.DOUBLECHECKHELICITYFILTER
 
496
        HELDOUBLECHECKED=(.NOT.DOUBLECHECKHELICITYFILTER).OR.(HELICITYF
 
497
     $   ILTERLEVEL.EQ.0)
409
498
        OPEN(1, FILE=LOOPFILTERFN, ERR=100, STATUS='OLD',          
410
499
     $    ACTION='READ')
411
500
        DO J=1,NLOOPGROUPS
422
511
 101    CONTINUE
423
512
        CLOSE(1)
424
513
 
 
514
        IF (HELICITYFILTERLEVEL.EQ.0) THEN
 
515
          FOUNDHELFILTER=.TRUE.
 
516
          DO J=1,NCOMB
 
517
            GOODHEL(J)=1
 
518
          ENDDO
 
519
          GOTO 122
 
520
        ENDIF
425
521
        OPEN(1, FILE=HELFILTERFN, ERR=102, STATUS='OLD',          
426
522
     $    ACTION='READ')
427
523
        DO I=1,NCOMB
435
531
        ENDDO
436
532
 103    CONTINUE
437
533
        CLOSE(1)
438
 
 
439
 
        OPEN(1, FILE=COLORNUMFN, ERR=104, STATUS='OLD',          
440
 
     $    ACTION='READ')
441
 
        DO I=1,NCOLORROWS
442
 
          READ(1,*,END=105) (CF_N(I,J),J=1,NBORNAMPS)
443
 
        ENDDO
444
 
        GOTO 105
445
 
 104    CONTINUE
446
 
        STOP 'Color factors could not be initialized from fil'
447
 
     $   //'e ML5_0_ColorNumFactors.dat. File not found'
448
 
 105    CONTINUE
449
 
        CLOSE(1)
450
 
        OPEN(1, FILE=COLORDENOMFN, ERR=106, STATUS='OLD',          
451
 
     $    ACTION='READ')
452
 
        DO I=1,NCOLORROWS
453
 
          READ(1,*,END=107) (CF_D(I,J),J=1,NBORNAMPS)
454
 
        ENDDO
455
 
        GOTO 107
456
 
 106    CONTINUE
457
 
        STOP 'Color factors could not be initialized from fil'
458
 
     $   //'e ML5_0_ColorDenomFactors.dat. File not found'
459
 
 107    CONTINUE
460
 
        CLOSE(1)
461
 
        OPEN(1, FILE=HELCONFIGFN, ERR=108, STATUS='OLD',              
462
 
     $       ACTION='READ')
463
 
        DO H=1,NCOMB
464
 
          READ(1,*,END=109) (HELC(I,H),I=1,NEXTERNAL)
465
 
        ENDDO
466
 
        GOTO 109
467
 
 108    CONTINUE
468
 
        STOP 'Color helictiy configurations could not be initialize'
469
 
     $   //'d from file ML5_0_HelConfigs.dat. File not found'
470
 
 109    CONTINUE
471
 
        CLOSE(1)
472
 
 
473
 
C       SETUP OF THE COMMON STARTING EXTERNAL LOOP WAVEFUNCTION
474
 
C       IT IS ALSO PS POINT INDEPENDENT, SO IT CAN BE DONE HERE.
475
 
        DO I=0,3
476
 
          PL(I,0)=(0.0D0,0.0D0)
477
 
        ENDDO
478
 
        DO I=1,MAXLWFSIZE
479
 
          DO J=0,LOOPMAXCOEFS-1
480
 
            DO K=1,MAXLWFSIZE
481
 
              IF(I.EQ.K.AND.J.EQ.0) THEN
482
 
                WL(I,J,K,0)=(1.0D0,0.0D0)
483
 
              ELSE
484
 
                WL(I,J,K,0)=(0.0D0,0.0D0)
485
 
              ENDIF
486
 
            ENDDO
 
534
        IF (HELICITYFILTERLEVEL.EQ.1) THEN
 
535
C         We must make sure to remove the matching-helicity optimisatio
 
536
C         n, as requested by the user.
 
537
          DO J=1,NCOMB
 
538
            IF ((GOODHEL(J).GT.1).OR.(GOODHEL(J).LT.HELOFFSET)) THEN
 
539
              GOODHEL(J)=1
 
540
            ENDIF
487
541
          ENDDO
488
 
        ENDDO
489
 
        IF(BOOTANDSTOP) THEN
490
 
          WRITE(*,*) 'Stopped by user request.'
491
 
          STOP
492
542
        ENDIF
 
543
 122    CONTINUE
493
544
      ENDIF
494
545
 
495
 
 
496
546
C     First compute the borns, it will store them in ANS(0,I)
497
547
C     It is left untouched for the rest of MadLoop evaluation.
498
548
C     Notice that the squared split order index I does NOT
512
562
        ANS(0,I)=BORNBUFF(I)
513
563
      ENDDO
514
564
 
515
 
 
516
565
C     We set here the reference to the born summed over all split
517
566
C      orders
518
567
      REF=0.0D0
557
606
     $ ).AND.USELOOPFILTER).OR.(.NOT.FOUNDHELFILTER))
558
607
 
559
608
      IF (WRITEOUTFILTERS) THEN
560
 
        IF ((.NOT. CHECKPHASE).AND.(.NOT.FOUNDHELFILTER)) THEN
561
 
 
 
609
        IF ((HELICITYFILTERLEVEL.NE.0).AND.(.NOT. CHECKPHASE).AND.(.NOT
 
610
     $   .FOUNDHELFILTER)) THEN
562
611
          OPEN(1, FILE=HELFILTERFN, ERR=110, STATUS='NEW',ACTION='WRIT'
563
612
     $     //'E')
564
613
          DO I=1,NCOMB
627
676
        ENDDO
628
677
      ENDDO
629
678
 
 
679
 
630
680
      IF (IMPROVEPSPOINT.GE.0) THEN
631
681
C       Make the input PS more precise (exact onshell and energy-moment
632
682
C       um conservation)
647
697
          AMPL(K,I)=(0.0D0,0.0D0)
648
698
        ENDDO
649
699
      ENDDO
650
 
C     USE THE FIRST LOOP REDUCTION LIBRARY AND THE FIRST QP LOOP
651
 
C      REDUCTION LIBRARY
 
700
 
 
701
C     Start by using the first available loop reduction library and qp
 
702
C      library.
652
703
      I_LIB=1
653
704
      I_QP_LIB=1
 
705
 
 
706
      GOTO 208
 
707
C     MadLoop jumps to this label during stability checks when it
 
708
C      recomputes a rotated PS point
654
709
 200  CONTINUE
 
710
C     For the computation of a rotated version of this PS point we
 
711
C      must reset the TIR cache since this changes the definition of
 
712
C      the loop denominators.
 
713
      CALL ML5_0_CLEAR_TIR_CACHE()
 
714
 208  CONTINUE
 
715
 
 
716
C     MadLoop jumps to this label during initialization when it goes
 
717
C      to the computation of the next helicity.
 
718
 205  CONTINUE
655
719
 
656
720
      IF (.NOT.MP_PS_SET.AND.(CTMODE.EQ.0.OR.CTMODE.GE.4)) THEN
657
721
        CALL ML5_0_SET_MP_PS(P_USER)
676
740
      DO I=1,NLOOPGROUPS
677
741
        DO J=1,3
678
742
          DO K=1,NSQUAREDSO
679
 
            LOOPRES(J,K,I)=0.0D0
 
743
            LOOPRES(J,K,I)=(0.0D0,0.0D0)
680
744
          ENDDO
681
745
        ENDDO
682
746
      ENDDO
713
777
          CT_REQ_SO_DONE=.FALSE.
714
778
          LOOP_REQ_SO_DONE=.FALSE.
715
779
 
 
780
          IF (.NOT.CHECKPHASE.AND.HELDOUBLECHECKED.AND.HELPICKED.EQ.
 
781
     $     -1) THEN
 
782
            HEL_MULT=GOODHEL(H)
 
783
          ELSE
 
784
            HEL_MULT=1
 
785
          ENDIF
 
786
 
 
787
 
716
788
C         Helas calls for the born amplitudes and counterterms
717
789
C          associated to given loops
718
790
          CALL IXXXXX(P(0,1),ZERO,NHEL(1),+1*IC(1),W(1,1))
725
797
          CALL FFV1P0_3(W(1,4),W(1,3),GC_5,ZERO,ZERO,W(1,6))
726
798
C         Counter-term amplitude(s) for loop diagram number 2
727
799
          CALL R2_GG_1_0(W(1,5),W(1,6),R2_GGQ,AMPL(1,1))
 
800
          CALL R2_GG_1_0(W(1,5),W(1,6),R2_GGQ,AMPL(1,2))
 
801
          CALL R2_GG_1_0(W(1,5),W(1,6),R2_GGQ,AMPL(1,3))
 
802
          CALL R2_GG_1_0(W(1,5),W(1,6),R2_GGQ,AMPL(1,4))
728
803
C         Counter-term amplitude(s) for loop diagram number 5
729
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQQ_1EPS,AMPL(2,2))
730
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQQ_1EPS,AMPL(2,3))
731
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQQ_1EPS,AMPL(2,4))
732
804
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQQ_1EPS,AMPL(2,5))
733
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQB,AMPL(1,6))
 
805
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQQ_1EPS,AMPL(2,6))
734
806
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQQ_1EPS,AMPL(2,7))
735
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQT,AMPL(1,8))
736
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQQ_1EPS,AMPL(2,9))
737
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQG_1EPS,AMPL(2,10))
738
 
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),R2_GQQ,AMPL(1,11))
 
807
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQQ_1EPS,AMPL(2,8))
 
808
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQB,AMPL(1,9))
 
809
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQQ_1EPS,AMPL(2,10))
 
810
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQT,AMPL(1,11))
 
811
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQQ_1EPS,AMPL(2,12))
 
812
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),UV_GQQG_1EPS,AMPL(2,13))
 
813
          CALL FFV1_0(W(1,1),W(1,2),W(1,6),R2_GQQ,AMPL(1,14))
739
814
C         Counter-term amplitude(s) for loop diagram number 7
740
 
          CALL R2_GG_1_0(W(1,5),W(1,6),R2_GGQ,AMPL(1,12))
 
815
          CALL R2_GG_1_R2_GG_3_0(W(1,5),W(1,6),R2_GGQ,R2_GGB,AMPL(1
 
816
     $     ,15))
741
817
C         Counter-term amplitude(s) for loop diagram number 8
742
 
          CALL R2_GG_1_0(W(1,5),W(1,6),R2_GGQ,AMPL(1,13))
 
818
          CALL R2_GG_1_R2_GG_3_0(W(1,5),W(1,6),R2_GGQ,R2_GGT,AMPL(1
 
819
     $     ,16))
743
820
C         Counter-term amplitude(s) for loop diagram number 9
744
 
          CALL R2_GG_1_0(W(1,5),W(1,6),R2_GGQ,AMPL(1,14))
745
 
C         Counter-term amplitude(s) for loop diagram number 10
746
 
          CALL R2_GG_1_R2_GG_3_0(W(1,5),W(1,6),R2_GGQ,R2_GGB,AMPL(1
747
 
     $     ,15))
748
 
C         Counter-term amplitude(s) for loop diagram number 11
749
 
          CALL R2_GG_1_R2_GG_3_0(W(1,5),W(1,6),R2_GGQ,R2_GGT,AMPL(1
750
 
     $     ,16))
751
 
C         Counter-term amplitude(s) for loop diagram number 12
752
821
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),UV_GQQQ_1EPS,AMPL(2,17))
753
822
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),UV_GQQQ_1EPS,AMPL(2,18))
754
823
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),UV_GQQQ_1EPS,AMPL(2,19))
759
828
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),UV_GQQQ_1EPS,AMPL(2,24))
760
829
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),UV_GQQG_1EPS,AMPL(2,25))
761
830
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),R2_GQQ,AMPL(1,26))
762
 
C         Counter-term amplitude(s) for loop diagram number 14
 
831
C         Counter-term amplitude(s) for loop diagram number 11
763
832
          CALL R2_GG_1_R2_GG_2_0(W(1,5),W(1,6),R2_GGG_1,R2_GGG_2
764
833
     $     ,AMPL(1,27))
765
834
 2000     CONTINUE
771
840
C         (if needed by the loop UFO model) are of this type.
772
841
C         Quite often and in principle for all loop UFO models from 
773
842
C         FeynRules, there are none of these type of counterterms.
774
 
C         Amplitude(s) for UVCT diagram with ID 16
 
843
C         Amplitude(s) for UVCT diagram with ID 13
775
844
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),GC_5,AMPL(1,28))
776
845
          AMPL(1,28)=AMPL(1,28)*(2.0D0*UVWFCT_T_0)
777
 
C         Amplitude(s) for UVCT diagram with ID 17
 
846
C         Amplitude(s) for UVCT diagram with ID 14
778
847
          CALL FFV1_0(W(1,4),W(1,3),W(1,5),GC_5,AMPL(2,29))
779
848
          AMPL(2,29)=AMPL(2,29)*(2.0D0*UVWFCT_B_0_1EPS)
780
849
 3000     CONTINUE
781
850
          UVCT_REQ_SO_DONE=.TRUE.
782
851
 
783
 
          IF (.NOT.CHECKPHASE.AND.HELDOUBLECHECKED.AND.HELPICKED.EQ.
784
 
     $     -1) THEN
785
 
            DUMMY=GOODHEL(H)
786
 
          ELSE
787
 
            DUMMY=1
788
 
          ENDIF
789
852
          DO I=1,NCTAMPS
790
853
            DO J=1,NBORNAMPS
791
854
              CFTOT=DCMPLX(CF_N(I,J)/DBLE(ABS(CF_D(I,J))),0.0D0)
794
857
     $         I),ML5_0_ML5SOINDEX_FOR_BORN_AMP(J))
795
858
              IF (.NOT.FILTER_SO.OR.SQSO_TARGET.EQ.ITEMP) THEN
796
859
                DO K=1,3
797
 
                  TEMP2 = 2.0D0*DUMMY*DBLE(CFTOT*AMPL(K,I)*DCONJG(AMP(J
798
 
     $             )))
 
860
                  TEMP2 = 2.0D0*HEL_MULT*DBLE(CFTOT*AMPL(K,I)
 
861
     $             *DCONJG(AMP(J)))
799
862
                  ANS(K,ITEMP)=ANS(K,ITEMP)+TEMP2
800
863
                  ANS(K,0)=ANS(K,0)+TEMP2
801
864
                ENDDO
808
871
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1,1))
809
872
          CALL FFV1L2_1(PL(0,1),W(1,6),GC_5,ZERO,ZERO,PL(0,2),COEFS)
810
873
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,1),4,COEFS,4,4,WL(1,0,1,2))
811
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,2),2,4,1,1,30,H)
 
874
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,2),2,4,1,1,4,30,H)
812
875
C         Coefficient construction for loop diagram with ID 3
813
876
          CALL FFV1L3_2(PL(0,0),W(1,1),GC_5,ZERO,ZERO,PL(0,3),COEFS)
814
877
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1,3))
819
882
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,4),4,COEFS,4,4,WL(1,0,1,5))
820
883
          CALL FFV1L1P0_3(PL(0,5),W(1,3),GC_5,ZERO,ZERO,PL(0,6),COEFS)
821
884
          CALL ML5_0_UPDATE_WL_2_0(WL(1,0,1,5),4,COEFS,4,4,WL(1,0,1,6))
822
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,6),2,4,2,1,31,H)
 
885
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,6),2,4,2,1,1,31,H)
823
886
C         Coefficient construction for loop diagram with ID 4
824
887
          CALL FFV1L3_1(PL(0,4),W(1,3),GC_5,MDL_MT,MDL_WT,PL(0,7)
825
888
     $     ,COEFS)
826
889
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,4),4,COEFS,4,4,WL(1,0,1,7))
827
890
          CALL FFV1L2P0_3(PL(0,7),W(1,4),GC_5,ZERO,ZERO,PL(0,8),COEFS)
828
891
          CALL ML5_0_UPDATE_WL_2_0(WL(1,0,1,7),4,COEFS,4,4,WL(1,0,1,8))
829
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,8),2,4,3,1,32,H)
 
892
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,8),2,4,3,1,1,32,H)
830
893
C         Coefficient construction for loop diagram with ID 5
831
894
          CALL VVV1L2P0_1(PL(0,4),W(1,6),GC_4,ZERO,ZERO,PL(0,9),COEFS)
832
895
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,4),4,COEFS,4,4,WL(1,0,1,9))
833
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,9),2,4,4,1,33,H)
 
896
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,9),2,4,4,1,1,33,H)
834
897
C         Coefficient construction for loop diagram with ID 6
835
898
          CALL FFV1L2P0_3(PL(0,0),W(1,1),GC_5,ZERO,ZERO,PL(0,10),COEFS)
836
899
          CALL ML5_0_UPDATE_WL_0_0(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
841
904
          CALL FFV1L2_1(PL(0,11),W(1,6),GC_5,ZERO,ZERO,PL(0,12),COEFS)
842
905
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,11),4,COEFS,4,4,WL(1,0,1
843
906
     $     ,12))
844
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,12),2,4,4,1,34,H)
 
907
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,12),2,4,4,1,1,34,H)
845
908
C         Coefficient construction for loop diagram with ID 7
846
 
          CALL FFV1L2_1(PL(0,0),W(1,5),GC_5,ZERO,ZERO,PL(0,13),COEFS)
 
909
          CALL FFV1L2_1(PL(0,0),W(1,5),GC_5,MDL_MB,ZERO,PL(0,13),COEFS)
847
910
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
848
911
     $     ,13))
849
 
          CALL FFV1L2_1(PL(0,13),W(1,6),GC_5,ZERO,ZERO,PL(0,14),COEFS)
 
912
          CALL FFV1L2_1(PL(0,13),W(1,6),GC_5,MDL_MB,ZERO,PL(0,14)
 
913
     $     ,COEFS)
850
914
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,13),4,COEFS,4,4,WL(1,0,1
851
915
     $     ,14))
852
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,14),2,4,1,1,35,H)
 
916
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,14),2,4,5,1,1,35,H)
853
917
C         Coefficient construction for loop diagram with ID 8
854
 
          CALL FFV1L2_1(PL(0,0),W(1,5),GC_5,ZERO,ZERO,PL(0,15),COEFS)
 
918
          CALL FFV1L2_1(PL(0,0),W(1,5),GC_5,MDL_MT,MDL_WT,PL(0,15)
 
919
     $     ,COEFS)
855
920
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
856
921
     $     ,15))
857
 
          CALL FFV1L2_1(PL(0,15),W(1,6),GC_5,ZERO,ZERO,PL(0,16),COEFS)
 
922
          CALL FFV1L2_1(PL(0,15),W(1,6),GC_5,MDL_MT,MDL_WT,PL(0,16)
 
923
     $     ,COEFS)
858
924
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,15),4,COEFS,4,4,WL(1,0,1
859
925
     $     ,16))
860
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,16),2,4,1,1,36,H)
 
926
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,16),2,4,6,1,1,36,H)
861
927
C         Coefficient construction for loop diagram with ID 9
862
 
          CALL FFV1L2_1(PL(0,0),W(1,5),GC_5,ZERO,ZERO,PL(0,17),COEFS)
863
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
 
928
          CALL FFV1L1P0_3(PL(0,0),W(1,3),GC_5,ZERO,ZERO,PL(0,17),COEFS)
 
929
          CALL ML5_0_UPDATE_WL_0_0(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
864
930
     $     ,17))
865
 
          CALL FFV1L2_1(PL(0,17),W(1,6),GC_5,ZERO,ZERO,PL(0,18),COEFS)
866
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,17),4,COEFS,4,4,WL(1,0,1
 
931
          CALL FFV1L3_2(PL(0,17),W(1,4),GC_5,MDL_MT,MDL_WT,PL(0,18)
 
932
     $     ,COEFS)
 
933
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,17),4,COEFS,4,4,WL(1,0,1
867
934
     $     ,18))
868
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,18),2,4,1,1,37,H)
 
935
          CALL FFV1L1_2(PL(0,18),W(1,5),GC_5,MDL_MT,MDL_WT,PL(0,19)
 
936
     $     ,COEFS)
 
937
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,18),4,COEFS,4,4,WL(1,0,1
 
938
     $     ,19))
 
939
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,19),2,4,7,1,1,37,H)
869
940
C         Coefficient construction for loop diagram with ID 10
870
 
          CALL FFV1L2_1(PL(0,0),W(1,5),GC_5,MDL_MB,ZERO,PL(0,19),COEFS)
 
941
          CALL FFV1L3_1(PL(0,0),W(1,3),GC_5,MDL_MT,MDL_WT,PL(0,20)
 
942
     $     ,COEFS)
871
943
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
872
 
     $     ,19))
873
 
          CALL FFV1L2_1(PL(0,19),W(1,6),GC_5,MDL_MB,ZERO,PL(0,20)
874
 
     $     ,COEFS)
875
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,19),4,COEFS,4,4,WL(1,0,1
876
944
     $     ,20))
877
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,20),2,4,5,1,38,H)
878
 
C         Coefficient construction for loop diagram with ID 11
879
 
          CALL FFV1L2_1(PL(0,0),W(1,5),GC_5,MDL_MT,MDL_WT,PL(0,21)
 
945
          CALL FFV1L2P0_3(PL(0,20),W(1,4),GC_5,ZERO,ZERO,PL(0,21)
880
946
     $     ,COEFS)
881
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
 
947
          CALL ML5_0_UPDATE_WL_1_0(WL(1,0,1,20),4,COEFS,4,4,WL(1,0,1
882
948
     $     ,21))
883
 
          CALL FFV1L2_1(PL(0,21),W(1,6),GC_5,MDL_MT,MDL_WT,PL(0,22)
 
949
          CALL VVV1L2P0_1(PL(0,21),W(1,5),GC_4,ZERO,ZERO,PL(0,22)
884
950
     $     ,COEFS)
885
951
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,21),4,COEFS,4,4,WL(1,0,1
886
952
     $     ,22))
887
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,22),2,4,6,1,39,H)
888
 
C         Coefficient construction for loop diagram with ID 12
889
 
          CALL FFV1L1P0_3(PL(0,0),W(1,3),GC_5,ZERO,ZERO,PL(0,23),COEFS)
890
 
          CALL ML5_0_UPDATE_WL_0_0(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
 
953
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,22),2,4,8,1,1,38,H)
 
954
C         Coefficient construction for loop diagram with ID 11
 
955
          CALL VVV1L2P0_1(PL(0,0),W(1,5),GC_4,ZERO,ZERO,PL(0,23),COEFS)
 
956
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
891
957
     $     ,23))
892
 
          CALL FFV1L3_2(PL(0,23),W(1,4),GC_5,MDL_MT,MDL_WT,PL(0,24)
 
958
          CALL VVV1L2P0_1(PL(0,23),W(1,6),GC_4,ZERO,ZERO,PL(0,24)
893
959
     $     ,COEFS)
894
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,23),4,COEFS,4,4,WL(1,0,1
 
960
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,23),4,COEFS,4,4,WL(1,0,1
895
961
     $     ,24))
896
 
          CALL FFV1L1_2(PL(0,24),W(1,5),GC_5,MDL_MT,MDL_WT,PL(0,25)
897
 
     $     ,COEFS)
898
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,24),4,COEFS,4,4,WL(1,0,1
 
962
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,24),2,4,1,2,1,39,H)
 
963
C         Coefficient construction for loop diagram with ID 12
 
964
          CALL GHGHGL2_1(PL(0,0),W(1,5),GC_4,ZERO,ZERO,PL(0,25),COEFS)
 
965
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),1,COEFS,1,1,WL(1,0,1
899
966
     $     ,25))
900
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,25),2,4,7,1,40,H)
901
 
C         Coefficient construction for loop diagram with ID 13
902
 
          CALL FFV1L3_1(PL(0,0),W(1,3),GC_5,MDL_MT,MDL_WT,PL(0,26)
903
 
     $     ,COEFS)
904
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
 
967
          CALL GHGHGL2_1(PL(0,25),W(1,6),GC_4,ZERO,ZERO,PL(0,26),COEFS)
 
968
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,25),1,COEFS,1,1,WL(1,0,1
905
969
     $     ,26))
906
 
          CALL FFV1L2P0_3(PL(0,26),W(1,4),GC_5,ZERO,ZERO,PL(0,27)
907
 
     $     ,COEFS)
908
 
          CALL ML5_0_UPDATE_WL_1_0(WL(1,0,1,26),4,COEFS,4,4,WL(1,0,1
909
 
     $     ,27))
910
 
          CALL VVV1L2P0_1(PL(0,27),W(1,5),GC_4,ZERO,ZERO,PL(0,28)
911
 
     $     ,COEFS)
912
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,27),4,COEFS,4,4,WL(1,0,1
913
 
     $     ,28))
914
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,28),2,4,8,1,41,H)
915
 
C         Coefficient construction for loop diagram with ID 14
916
 
          CALL VVV1L2P0_1(PL(0,0),W(1,5),GC_4,ZERO,ZERO,PL(0,29),COEFS)
917
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
918
 
     $     ,29))
919
 
          CALL VVV1L2P0_1(PL(0,29),W(1,6),GC_4,ZERO,ZERO,PL(0,30)
920
 
     $     ,COEFS)
921
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,29),4,COEFS,4,4,WL(1,0,1
922
 
     $     ,30))
923
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,30),2,4,1,2,42,H)
924
 
C         Coefficient construction for loop diagram with ID 15
925
 
          CALL GHGHGL2_1(PL(0,0),W(1,5),GC_4,ZERO,ZERO,PL(0,31),COEFS)
926
 
          CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),1,COEFS,1,1,WL(1,0,1
927
 
     $     ,31))
928
 
          CALL GHGHGL2_1(PL(0,31),W(1,6),GC_4,ZERO,ZERO,PL(0,32),COEFS)
929
 
          CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,31),1,COEFS,1,1,WL(1,0,1
930
 
     $     ,32))
931
 
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,32),2,1,1,1,43,H)
 
970
          CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,26),2,1,1,1,1,40,H)
932
971
 4000     CONTINUE
933
972
          LOOP_REQ_SO_DONE=.TRUE.
934
973
 
 
974
 
 
975
 
935
976
        ENDIF
936
977
      ENDDO
937
978
 
944
985
        ENDDO
945
986
      ENDDO
946
987
 
 
988
 
 
989
C     MadLoop jumps to this label during stability checks when it
 
990
C      recomputes the same PS point with a different CTMode
947
991
 300  CONTINUE
948
 
C     Free cache when using IREGI
 
992
 
 
993
 
949
994
 
950
995
 
951
996
      DO I=0,NSQUAREDSO
954
999
        ENDDO
955
1000
      ENDDO
956
1001
 
 
1002
 
957
1003
      IF(SKIPLOOPEVAL) THEN
958
1004
        GOTO 1226
959
1005
      ENDIF
963
1009
          S(I_SO,J)=.TRUE.
964
1010
        ENDDO
965
1011
        IF (FILTER_SO.AND.SQSO_TARGET.NE.I_SO) GOTO 5001
966
 
C       CutTools call for loop numbers 1,6,7,8,13,14
 
1012
C       CutTools call for loop numbers 1,10,11
967
1013
        CALL ML5_0_LOOP_2(5,6,DCMPLX(ZERO),DCMPLX(ZERO),2,I_SO,1)
968
1014
C       CutTools call for loop numbers 2
969
1015
        CALL ML5_0_LOOP_4(1,2,4,3,DCMPLX(ZERO),DCMPLX(ZERO),DCMPLX(MDL_
974
1020
C       CutTools call for loop numbers 4,5
975
1021
        CALL ML5_0_LOOP_3(1,2,6,DCMPLX(ZERO),DCMPLX(ZERO),DCMPLX(ZERO)
976
1022
     $   ,2,I_SO,4)
977
 
C       CutTools call for loop numbers 9
 
1023
C       CutTools call for loop numbers 6
978
1024
        CALL ML5_0_LOOP_2(5,6,DCMPLX(MDL_MB),DCMPLX(MDL_MB),2,I_SO,5)
979
 
C       CutTools call for loop numbers 10
 
1025
C       CutTools call for loop numbers 7
980
1026
        CALL ML5_0_LOOP_2(5,6,DCMPLX(MDL_MT),DCMPLX(MDL_MT),2,I_SO,6)
981
 
C       CutTools call for loop numbers 11
 
1027
C       CutTools call for loop numbers 8
982
1028
        CALL ML5_0_LOOP_3(3,4,5,DCMPLX(ZERO),DCMPLX(MDL_MT),DCMPLX(MDL_
983
1029
     $   MT),2,I_SO,7)
984
 
C       CutTools call for loop numbers 12
 
1030
C       CutTools call for loop numbers 9
985
1031
        CALL ML5_0_LOOP_3(3,4,5,DCMPLX(MDL_MT),DCMPLX(ZERO),DCMPLX(ZERO
986
1032
     $   ),2,I_SO,8)
987
1033
        GOTO 5001
1024
1070
        HELSAVED(2,HELPICKED)=ANS(2,0)
1025
1071
        HELSAVED(3,HELPICKED)=ANS(3,0)
1026
1072
 
1027
 
        IF (CHECKPHASE) THEN
 
1073
        IF (CHECKPHASE.AND.NTRY.NE.0) THEN
1028
1074
C         SET THE HELICITY FILTER
1029
1075
          IF(.NOT.FOUNDHELFILTER) THEN
1030
1076
            HEL_INCONSISTENT=.FALSE.
1033
1079
              IF(NTRY.EQ.1) THEN
1034
1080
                GOODHEL(HELPICKED)=-HELOFFSET
1035
1081
              ELSEIF(GOODHEL(HELPICKED).NE.-HELOFFSET) THEN
1036
 
                WRITE(*,*) '##W02A WARNING Inconsistent helicity '
1037
 
     $           ,HELPICKED
 
1082
                WRITE(*,*) '##W02A WARNING Inconsistent zero helicit'
 
1083
     $           //'y ',HELPICKED
1038
1084
                IF(HELINITSTARTOVER) THEN
1039
1085
                  WRITE(*,*) '##I01 INFO Initialization starting ove'
1040
1086
     $             //'r because of inconsistency in the helicit'
1044
1090
                  HEL_INCONSISTENT=.TRUE.
1045
1091
                ENDIF
1046
1092
              ENDIF
1047
 
            ELSE
 
1093
            ELSEIF(HELICITYFILTERLEVEL.GT.1) THEN
1048
1094
              DO H=1,HELPICKED-1
1049
1095
                IF(GOODHEL(H).GT.-HELOFFSET) THEN
1050
1096
C                 Be looser for helicity check, bring a factor 100
1061
1107
C                     Make sure we have paired this hel config to the
1062
1108
C                      same one last PS point
1063
1109
                    ELSEIF(GOODHEL(HELPICKED).NE.(-H-HELOFFSET)) THEN
1064
 
                      WRITE(*,*) '##W02B WARNING Inconsistent helicit'
1065
 
     $                 //'y ',HELPICKED
 
1110
                      WRITE(*,*) '##W02B WARNING Inconsistent matchin'
 
1111
     $                 //'g helicity ',HELPICKED
1066
1112
                      IF(HELINITSTARTOVER) THEN
1067
1113
                        WRITE(*,*) '##I01 INFO Initialization startin'
1068
1114
     $                   //'g over because of inconsistency in th'
1185
1231
        IF(HELPICKED.NE.NCOMB) THEN
1186
1232
          HELPICKED=HELPICKED+1
1187
1233
          MP_DONE=.FALSE.
1188
 
          GOTO 200
 
1234
          GOTO 205
1189
1235
        ELSE
1190
1236
C         Useful printout
1191
1237
C         do I=1,NCOMB
1208
1254
            ENDIF
1209
1255
          ENDIF
1210
1256
        ENDIF
1211
 
 
1212
1257
      ENDIF
1213
1258
 
1214
1259
      DO K=1,3
1220
1265
        ENDDO
1221
1266
      ENDDO
1222
1267
 
 
1268
 
1223
1269
      IF(.NOT.CHECKPHASE.AND.HELDOUBLECHECKED.AND.(CTMODERUN.EQ.
1224
1270
     $ -1)) THEN
1225
1271
        STAB_INDEX=STAB_INDEX+1
1253
1299
            CTMODE=BASIC_CT_MODE+1
1254
1300
            GOTO 300
1255
1301
          ELSE
1256
 
C           NO DIRECTION TEST LIBRARIES: e.g. PJFry++ and Golem95
 
1302
C           If some TIR library would not support the loop direction
 
1303
C            test (they all do for now), then we would just copy the
 
1304
C            answer from mode 1 and carry on.
1257
1305
            STAB_INDEX=STAB_INDEX+1
1258
1306
            IF(DOING_QP_EVALS)THEN
1259
1307
              DO I=0,NSQUAREDSO
1617
1665
     $       -1)) THEN
1618
1666
              GOTO 1231
1619
1667
            ENDIF
1620
 
C           Be loser for helicity comparison, so bring a factor 100
1621
 
          ELSEIF(.NOT.ML5_0_ISZERO((RESA(J)/RESB(J))-DBLE(WGT_TO_TRY(I
1622
 
     $     )),REF*100.0D0,-1,-1)) THEN
 
1668
C           Be looser for helicity comparison, so bring a factor 100
 
1669
          ELSEIF(.NOT.ML5_0_ISZERO(ABS((RESA(J)/RESB(J))-DBLE(WGT_TO_TR
 
1670
     $     Y(I))),1.0D0,-1,-1)) THEN
1623
1671
            GOTO 1231
1624
1672
          ENDIF
1625
1673
        ENDDO
1814
1862
      INTEGER I,J
1815
1863
      INTEGER SQPLITORDERS(NSQSO,NSO)
1816
1864
 
 
1865
      COMMON/ML5_0_ML5SQPLITORDERS/SQPLITORDERS
1817
1866
C     
1818
1867
C     BEGIN CODE
1819
1868
C     
1870
1919
C     CONSTANTS
1871
1920
C     
1872
1921
      INTEGER    NLOOPAMPS
1873
 
      PARAMETER (NLOOPAMPS=43)
 
1922
      PARAMETER (NLOOPAMPS=40)
1874
1923
C     
1875
1924
C     ARGUMENTS
1876
1925
C     
1904
1953
C     
1905
1954
C     CONSTANTS
1906
1955
C     
1907
 
 
1908
1956
      INTEGER    NSO, NSQUAREDSO, NAMPSO
1909
1957
      PARAMETER (NSO=0, NSQUAREDSO=0, NAMPSO=0)
1910
1958
C     
1917
1965
      INTEGER I, SQORDERS(NSO)
1918
1966
      INTEGER AMPSPLITORDERS(NAMPSO,NSO)
1919
1967
 
 
1968
      COMMON/ML5_0_ML5AMPSPLITORDERS/AMPSPLITORDERS
1920
1969
C     
1921
1970
C     FUNCTION
1922
1971
C     
1931
1980
      ML5_0_ML5SQSOINDEX=ML5_0_ML5SOINDEX_FOR_SQUARED_ORDERS(SQORDERS)
1932
1981
      END
1933
1982
 
 
1983
C     This is the inverse subroutine of ML5SOINDEX_FOR_SQUARED_ORDERS.
 
1984
C      Not directly useful, but provided nonetheless.
 
1985
      SUBROUTINE ML5_0_ML5GET_SQUARED_ORDERS_FOR_SOINDEX(SOINDEX
 
1986
     $ ,ORDERS)
 
1987
C     
 
1988
C     This functions returns the orders identified by the squared
 
1989
C      split order index in argument. Order values correspond to
 
1990
C      following list of couplings (and in this order):
 
1991
C     []
 
1992
C     
 
1993
C     CONSTANTS
 
1994
C     
 
1995
      INTEGER    NSO, NSQSO
 
1996
      PARAMETER (NSO=0, NSQSO=0)
 
1997
C     
 
1998
C     ARGUMENTS
 
1999
C     
 
2000
      INTEGER SOINDEX, ORDERS(NSO)
 
2001
C     
 
2002
C     LOCAL VARIABLES
 
2003
C     
 
2004
      INTEGER I
 
2005
      INTEGER SQPLITORDERS(NSQSO,NSO)
 
2006
      COMMON/ML5_0_ML5SQPLITORDERS/SQPLITORDERS
 
2007
C     
 
2008
C     BEGIN CODE
 
2009
C     
 
2010
      IF (SOINDEX.GT.0.AND.SOINDEX.LE.NSQSO) THEN
 
2011
        DO I=1,NSO
 
2012
          ORDERS(I) =  SQPLITORDERS(SOINDEX,I)
 
2013
        ENDDO
 
2014
        RETURN
 
2015
      ENDIF
 
2016
 
 
2017
      WRITE(*,*) 'ERROR:: Stopping function ML5_0_ML5GET_SQUARED_ORDER'
 
2018
     $ //'S_FOR_SOINDEX'
 
2019
      WRITE(*,*) 'Could not find squared orders index ',SOINDEX
 
2020
      STOP
 
2021
 
 
2022
      END SUBROUTINE
 
2023
 
 
2024
C     This is the inverse subroutine of getting amplitude SO orders.
 
2025
C      Not directly useful, but provided nonetheless.
 
2026
      SUBROUTINE ML5_0_ML5GET_ORDERS_FOR_AMPSOINDEX(SOINDEX,ORDERS)
 
2027
C     
 
2028
C     This functions returns the orders identified by the split order
 
2029
C      index in argument. Order values correspond to following list of
 
2030
C      couplings (and in this order):
 
2031
C     []
 
2032
C     
 
2033
C     CONSTANTS
 
2034
C     
 
2035
      INTEGER    NSO, NAMPSO
 
2036
      PARAMETER (NSO=0, NAMPSO=0)
 
2037
C     
 
2038
C     ARGUMENTS
 
2039
C     
 
2040
      INTEGER SOINDEX, ORDERS(NSO)
 
2041
C     
 
2042
C     LOCAL VARIABLES
 
2043
C     
 
2044
      INTEGER I
 
2045
      INTEGER AMPSPLITORDERS(NAMPSO,NSO)
 
2046
      COMMON/ML5_0_ML5AMPSPLITORDERS/AMPSPLITORDERS
 
2047
C     
 
2048
C     BEGIN CODE
 
2049
C     
 
2050
      IF (SOINDEX.GT.0.AND.SOINDEX.LE.NAMPSO) THEN
 
2051
        DO I=1,NSO
 
2052
          ORDERS(I) =  AMPSPLITORDERS(SOINDEX,I)
 
2053
        ENDDO
 
2054
        RETURN
 
2055
      ENDIF
 
2056
 
 
2057
      WRITE(*,*) 'ERROR:: Stopping function ML5_0_ML5GET_ORDERS_FOR_AM'
 
2058
     $ //'PSOINDEX'
 
2059
      WRITE(*,*) 'Could not find amplitude split orders index ',SOINDEX
 
2060
      STOP
 
2061
 
 
2062
      END SUBROUTINE
 
2063
 
 
2064
 
 
2065
C     This function is not directly useful, but included for completene
 
2066
C     ss
 
2067
      INTEGER FUNCTION ML5_0_ML5SOINDEX_FOR_AMPORDERS(ORDERS)
 
2068
C     
 
2069
C     This functions returns the integer index identifying the
 
2070
C      amplitude split orders passed in argument which correspond to
 
2071
C      the values of the following list of couplings (and in this
 
2072
C      order):
 
2073
C     []
 
2074
C     
 
2075
C     CONSTANTS
 
2076
C     
 
2077
      INTEGER    NSO, NAMPSO
 
2078
      PARAMETER (NSO=0, NAMPSO=0)
 
2079
C     
 
2080
C     ARGUMENTS
 
2081
C     
 
2082
      INTEGER ORDERS(NSO)
 
2083
C     
 
2084
C     LOCAL VARIABLES
 
2085
C     
 
2086
      INTEGER I,J
 
2087
      INTEGER AMPSPLITORDERS(NAMPSO,NSO)
 
2088
      COMMON/ML5_0_ML5AMPSPLITORDERS/AMPSPLITORDERS
 
2089
C     
 
2090
C     BEGIN CODE
 
2091
C     
 
2092
      DO I=1,NAMPSO
 
2093
        DO J=1,NSO
 
2094
          IF (ORDERS(J).NE.AMPSPLITORDERS(I,J)) GOTO 1009
 
2095
        ENDDO
 
2096
        ML5_0_ML5SOINDEX_FOR_AMPORDERS = I
 
2097
        RETURN
 
2098
 1009   CONTINUE
 
2099
      ENDDO
 
2100
 
 
2101
      WRITE(*,*) 'ERROR:: Stopping function ML5_0_ML5SOINDEX_FOR_AMPOR'
 
2102
     $ //'DERS'
 
2103
      WRITE(*,*) 'Could not find squared orders ',(ORDERS(I),I=1,NSO)
 
2104
      STOP
 
2105
 
 
2106
      END
 
2107
 
1934
2108
C     --=========================================--
1935
2109
C     Definition of additional access routines
1936
2110
C     --=========================================--
1950
2124
 
1951
2125
      ALWAYS_TEST_STABILITY = ONOFF
1952
2126
 
1953
 
      END
 
2127
      END SUBROUTINE
 
2128
 
 
2129
      SUBROUTINE ML5_0_SET_AUTOMATIC_TIR_CACHE_CLEARING(ONOFF)
 
2130
C     
 
2131
C     This function can be called by the MadLoop user so as to
 
2132
C      manually chose when
 
2133
C     to reset the TIR cache.
 
2134
C     
 
2135
      IMPLICIT NONE
 
2136
 
 
2137
      INCLUDE 'MadLoopParams.inc'
 
2138
 
 
2139
      LOGICAL ONOFF
 
2140
 
 
2141
      LOGICAL AUTOMATIC_TIR_CACHE_CLEARING
 
2142
      DATA AUTOMATIC_TIR_CACHE_CLEARING/.TRUE./
 
2143
      COMMON/ML5_0_RUNTIME_OPTIONS/AUTOMATIC_TIR_CACHE_CLEARING
 
2144
 
 
2145
      INTEGER N_DP_EVAL, N_QP_EVAL
 
2146
      COMMON/ML5_0_N_EVALS/N_DP_EVAL,N_QP_EVAL
 
2147
 
 
2148
      WRITE(*,*) 'Warning: No TIR caching implemented. Call t'
 
2149
     $ //'o SET_AUTOMATIC_TIR_CACHE_CLEARING did nothing.'
 
2150
      END SUBROUTINE
1954
2151
 
1955
2152
      SUBROUTINE ML5_0_SET_COUPLINGORDERS_TARGET(SOTARGET)
1956
2153
      IMPLICIT NONE
2171
2368
 
2172
2369
      END
2173
2370
 
 
2371
C     The subroutine below perform clean-up duties for MadLoop like
 
2372
C      de-allocating
 
2373
C     arrays
 
2374
      SUBROUTINE ML5_0_EXIT_MADLOOP()
 
2375
      CONTINUE
 
2376
      END
 
2377
 
 
2378