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./
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
361
384
CALL PRINT_MADLOOP_BANNER()
363
386
CALL SETMADLOOPPATH(TMP)
364
387
CALL JOINPATH(MLPATH,PARAMFNAME,PARAMFN)
365
388
CALL MADLOOPPARAMREADER(PARAMFN,.TRUE.)
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.'
403
QP_TOOLS_AVAILABLE=.FALSE.
404
INDEX_QP_TOOLS(1:QP_NLOOPLIB+1)=0
405
C SKIP THE ONES THAT NOT AVAILABLE
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
416
IF(MLREDUCTIONLIB(1).EQ.0)THEN
417
STOP 'No available loop reduction lib is provided. Make sur'
418
$ //'e MLReductionLib is correct.'
422
IF(MLREDUCTIONLIB(I).EQ.1)THEN
424
IF(.NOT.QP_TOOLS_AVAILABLE)QP_TOOLS_AVAILABLE=.TRUE.
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)
438
CALL ML5_0_SET_N_EVALS(N_DP_EVAL,N_QP_EVAL)
440
OPEN(1, FILE=COLORNUMFN, ERR=104, STATUS='OLD',
443
READ(1,*,END=105) (CF_N(I,J),J=1,NBORNAMPS)
447
STOP 'Color factors could not be initialized from file ML5_0_Col'
448
$ //'orNumFactors.dat. File not found'
451
OPEN(1, FILE=COLORDENOMFN, ERR=106, STATUS='OLD',
454
READ(1,*,END=107) (CF_D(I,J),J=1,NBORNAMPS)
458
STOP 'Color factors could not be initialized from file ML5_0_Col'
459
$ //'orDenomFactors.dat. File not found'
462
OPEN(1, FILE=HELCONFIGFN, ERR=108, STATUS='OLD',
465
READ(1,*,END=109) (HELC(I,H),I=1,NEXTERNAL)
469
STOP 'Color helictiy configurations could not be initialize'
470
$ //'d from file ML5_0_HelConfigs.dat. File not found'
474
C SETUP OF THE COMMON STARTING EXTERNAL LOOP WAVEFUNCTION
475
C IT IS ALSO PS POINT INDEPENDENT, SO IT CAN BE DONE HERE.
477
PL(I,0)=(0.0D0,0.0D0)
480
DO J=0,LOOPMAXCOEFS-1
482
IF(I.EQ.K.AND.J.EQ.0) THEN
483
WL(I,J,K,0)=(1.0D0,0.0D0)
485
WL(I,J,K,0)=(0.0D0,0.0D0)
491
WRITE(*,*) 'Stopped by user request.'
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
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
384
IF(MLREDUCTIONLIB(1).EQ.0)THEN
385
STOP 'No available loop reduction lib is provided. Make sur'
386
$ //'e MLReductionLib is correct.'
390
IF(MLREDUCTIONLIB(I).EQ.1)THEN
392
IF(.NOT.QP_TOOLS_AVAILABLE)QP_TOOLS_AVAILABLE=.TRUE.
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)
406
CALL ML5_0_SET_N_EVALS(N_DP_EVAL,N_QP_EVAL)
408
HELDOUBLECHECKED=.NOT.DOUBLECHECKHELICITYFILTER
496
HELDOUBLECHECKED=(.NOT.DOUBLECHECKHELICITYFILTER).OR.(HELICITYF
409
498
OPEN(1, FILE=LOOPFILTERFN, ERR=100, STATUS='OLD',
411
500
DO J=1,NLOOPGROUPS
439
OPEN(1, FILE=COLORNUMFN, ERR=104, STATUS='OLD',
442
READ(1,*,END=105) (CF_N(I,J),J=1,NBORNAMPS)
446
STOP 'Color factors could not be initialized from fil'
447
$ //'e ML5_0_ColorNumFactors.dat. File not found'
450
OPEN(1, FILE=COLORDENOMFN, ERR=106, STATUS='OLD',
453
READ(1,*,END=107) (CF_D(I,J),J=1,NBORNAMPS)
457
STOP 'Color factors could not be initialized from fil'
458
$ //'e ML5_0_ColorDenomFactors.dat. File not found'
461
OPEN(1, FILE=HELCONFIGFN, ERR=108, STATUS='OLD',
464
READ(1,*,END=109) (HELC(I,H),I=1,NEXTERNAL)
468
STOP 'Color helictiy configurations could not be initialize'
469
$ //'d from file ML5_0_HelConfigs.dat. File not found'
473
C SETUP OF THE COMMON STARTING EXTERNAL LOOP WAVEFUNCTION
474
C IT IS ALSO PS POINT INDEPENDENT, SO IT CAN BE DONE HERE.
476
PL(I,0)=(0.0D0,0.0D0)
479
DO J=0,LOOPMAXCOEFS-1
481
IF(I.EQ.K.AND.J.EQ.0) THEN
482
WL(I,J,K,0)=(1.0D0,0.0D0)
484
WL(I,J,K,0)=(0.0D0,0.0D0)
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.
538
IF ((GOODHEL(J).GT.1).OR.(GOODHEL(J).LT.HELOFFSET)) THEN
490
WRITE(*,*) 'Stopped by user request.'
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
811
877
CALL ML5_0_UPDATE_WL_0_0(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1,1))
812
878
CALL FFV1L3_1(PL(0,1),W(1,9),GC_5,ZERO,ZERO,PL(0,2),COEFS)
813
879
CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,1),4,COEFS,4,4,WL(1,0,1,2))
814
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,2),1,4,1,1,29,H)
880
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,2),1,4,1,1,1,29,H)
815
881
C Coefficient construction for loop diagram with ID 4
816
882
CALL FFV1L3_1(PL(0,0),W(1,2),GC_5,ZERO,ZERO,PL(0,3),COEFS)
817
883
CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1,3))
819
885
CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,3),4,COEFS,4,4,WL(1,0,1,4))
820
886
CALL FFV1L2P0_3(PL(0,4),W(1,6),GC_5,ZERO,ZERO,PL(0,5),COEFS)
821
887
CALL ML5_0_UPDATE_WL_2_0(WL(1,0,1,4),4,COEFS,4,4,WL(1,0,1,5))
822
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,5),2,4,2,1,30,H)
888
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,5),2,4,2,1,1,30,H)
823
889
C Coefficient construction for loop diagram with ID 5
824
890
CALL FFV1L3_2(PL(0,0),W(1,1),GC_5,ZERO,ZERO,PL(0,6),COEFS)
825
891
CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1,6))
827
893
CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,6),4,COEFS,4,4,WL(1,0,1,7))
828
894
CALL FFV1L1P0_3(PL(0,7),W(1,8),GC_5,ZERO,ZERO,PL(0,8),COEFS)
829
895
CALL ML5_0_UPDATE_WL_2_0(WL(1,0,1,7),4,COEFS,4,4,WL(1,0,1,8))
830
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,8),2,4,3,1,31,H)
896
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,8),2,4,3,1,1,31,H)
831
897
C Coefficient construction for loop diagram with ID 6
832
898
CALL FFV1L2P0_3(PL(0,0),W(1,1),GC_5,ZERO,ZERO,PL(0,9),COEFS)
833
899
CALL ML5_0_UPDATE_WL_0_0(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1,9))
840
906
CALL FFV2L2_1(PL(0,11),W(1,7),GC_47,ZERO,ZERO,PL(0,12),COEFS)
841
907
CALL ML5_0_UPDATE_WL_2_1(WL(1,0,1,11),4,COEFS,4,4,WL(1,0,1
843
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,12),3,4,4,1,32,H)
909
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,12),3,4,4,1,1,32,H)
844
910
C Coefficient construction for loop diagram with ID 7
845
911
CALL VVV1L2P0_1(PL(0,9),W(1,5),GC_4,ZERO,ZERO,PL(0,13),COEFS)
846
912
CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,9),4,COEFS,4,4,WL(1,0,1
848
914
CALL FFV1L3_1(PL(0,13),W(1,9),GC_5,ZERO,ZERO,PL(0,14),COEFS)
849
915
CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,13),4,COEFS,4,4,WL(1,0,1
851
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,14),2,4,5,1,33,H)
917
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,14),2,4,5,1,1,33,H)
852
918
C Coefficient construction for loop diagram with ID 8
853
919
CALL FFV1L3_1(PL(0,13),W(1,2),GC_5,ZERO,ZERO,PL(0,15),COEFS)
854
920
CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,13),4,COEFS,4,4,WL(1,0,1
856
922
CALL FFV2L2_1(PL(0,15),W(1,7),GC_47,ZERO,ZERO,PL(0,16),COEFS)
857
923
CALL ML5_0_UPDATE_WL_2_1(WL(1,0,1,15),4,COEFS,4,4,WL(1,0,1
859
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,16),3,4,6,1,34,H)
925
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,16),3,4,6,1,1,34,H)
860
926
C Coefficient construction for loop diagram with ID 9
861
927
CALL FFV2L2_1(PL(0,10),W(1,7),GC_47,ZERO,ZERO,PL(0,17),COEFS)
862
928
CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,10),4,COEFS,4,4,WL(1,0,1
864
930
CALL FFV1L2_1(PL(0,17),W(1,5),GC_5,ZERO,ZERO,PL(0,18),COEFS)
865
931
CALL ML5_0_UPDATE_WL_2_1(WL(1,0,1,17),4,COEFS,4,4,WL(1,0,1
867
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,18),3,4,7,1,35,H)
933
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,18),3,4,7,1,1,35,H)
868
934
C Coefficient construction for loop diagram with ID 10
869
935
CALL FFV1L1_2(PL(0,6),W(1,5),GC_5,ZERO,ZERO,PL(0,19),COEFS)
870
936
CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,6),4,COEFS,4,4,WL(1,0,1
874
940
CALL ML5_0_UPDATE_WL_2_0(WL(1,0,1,19),4,COEFS,4,4,WL(1,0,1
876
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,20),2,4,5,1,36,H)
942
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,20),2,4,5,1,1,36,H)
877
943
C Coefficient construction for loop diagram with ID 11
878
944
CALL FFV1L1P0_3(PL(0,0),W(1,8),GC_5,ZERO,ZERO,PL(0,21),COEFS)
879
945
CALL ML5_0_UPDATE_WL_0_0(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
881
947
CALL FFV1L3_2(PL(0,21),W(1,10),GC_5,ZERO,ZERO,PL(0,22),COEFS)
882
948
CALL ML5_0_UPDATE_WL_0_1(WL(1,0,1,21),4,COEFS,4,4,WL(1,0,1
884
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,22),1,4,8,1,37,H)
950
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,22),1,4,8,1,1,37,H)
885
951
C Coefficient construction for loop diagram with ID 12
886
952
CALL FFV1L1P0_3(PL(0,0),W(1,2),GC_5,ZERO,ZERO,PL(0,23),COEFS)
887
953
CALL ML5_0_UPDATE_WL_0_0(WL(1,0,1,0),4,COEFS,4,4,WL(1,0,1
893
959
CALL FFV1L3_2(PL(0,24),W(1,10),GC_5,ZERO,ZERO,PL(0,25),COEFS)
894
960
CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,24),4,COEFS,4,4,WL(1,0,1
896
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,25),2,4,9,1,38,H)
962
CALL ML5_0_CREATE_LOOP_COEFS(WL(1,0,1,25),2,4,9,1,1,38,H)
897
963
C Coefficient construction for loop diagram with ID 13
898
964
CALL FFV1L2_1(PL(0,3),W(1,5),GC_5,ZERO,ZERO,PL(0,26),COEFS)
899
965
CALL ML5_0_UPDATE_WL_1_1(WL(1,0,1,3),4,COEFS,4,4,WL(1,0,1
1909
1985
ML5_0_ML5SQSOINDEX=ML5_0_ML5SOINDEX_FOR_SQUARED_ORDERS(SQORDERS)
1988
C This is the inverse subroutine of ML5SOINDEX_FOR_SQUARED_ORDERS.
1989
C Not directly useful, but provided nonetheless.
1990
SUBROUTINE ML5_0_ML5GET_SQUARED_ORDERS_FOR_SOINDEX(SOINDEX
1993
C This functions returns the orders identified by the squared
1994
C split order index in argument. Order values correspond to
1995
C following list of couplings (and in this order):
2001
PARAMETER (NSO=0, NSQSO=0)
2005
INTEGER SOINDEX, ORDERS(NSO)
2010
INTEGER SQPLITORDERS(NSQSO,NSO)
2011
COMMON/ML5_0_ML5SQPLITORDERS/SQPLITORDERS
2015
IF (SOINDEX.GT.0.AND.SOINDEX.LE.NSQSO) THEN
2017
ORDERS(I) = SQPLITORDERS(SOINDEX,I)
2022
WRITE(*,*) 'ERROR:: Stopping function ML5_0_ML5GET_SQUARED_ORDER'
2024
WRITE(*,*) 'Could not find squared orders index ',SOINDEX
2029
C This is the inverse subroutine of getting amplitude SO orders.
2030
C Not directly useful, but provided nonetheless.
2031
SUBROUTINE ML5_0_ML5GET_ORDERS_FOR_AMPSOINDEX(SOINDEX,ORDERS)
2033
C This functions returns the orders identified by the split order
2034
C index in argument. Order values correspond to following list of
2035
C couplings (and in this order):
2041
PARAMETER (NSO=0, NAMPSO=0)
2045
INTEGER SOINDEX, ORDERS(NSO)
2050
INTEGER AMPSPLITORDERS(NAMPSO,NSO)
2051
COMMON/ML5_0_ML5AMPSPLITORDERS/AMPSPLITORDERS
2055
IF (SOINDEX.GT.0.AND.SOINDEX.LE.NAMPSO) THEN
2057
ORDERS(I) = AMPSPLITORDERS(SOINDEX,I)
2062
WRITE(*,*) 'ERROR:: Stopping function ML5_0_ML5GET_ORDERS_FOR_AM'
2064
WRITE(*,*) 'Could not find amplitude split orders index ',SOINDEX
2070
C This function is not directly useful, but included for completene
2072
INTEGER FUNCTION ML5_0_ML5SOINDEX_FOR_AMPORDERS(ORDERS)
2074
C This functions returns the integer index identifying the
2075
C amplitude split orders passed in argument which correspond to
2076
C the values of the following list of couplings (and in this
2083
PARAMETER (NSO=0, NAMPSO=0)
2092
INTEGER AMPSPLITORDERS(NAMPSO,NSO)
2093
COMMON/ML5_0_ML5AMPSPLITORDERS/AMPSPLITORDERS
2099
IF (ORDERS(J).NE.AMPSPLITORDERS(I,J)) GOTO 1009
2101
ML5_0_ML5SOINDEX_FOR_AMPORDERS = I
2106
WRITE(*,*) 'ERROR:: Stopping function ML5_0_ML5SOINDEX_FOR_AMPOR'
2108
WRITE(*,*) 'Could not find squared orders ',(ORDERS(I),I=1,NSO)
1912
2113
C --=========================================--
1913
2114
C Definition of additional access routines
1914
2115
C --=========================================--