~madteam/mg5amcnlo/series2.0

« back to all changes in this revision

Viewing changes to tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/gg_wmtbx/CT_interface.f

mwrge with 2.7.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
325
325
 
326
326
 
327
327
 
 
328
      SUBROUTINE ML5_0_LOOP_3(W1, W2, W3, M1, M2, M3,  RANK,
 
329
     $  SQUAREDSOINDEX, LOOPNUM)
 
330
      INTEGER    NEXTERNAL
 
331
      PARAMETER (NEXTERNAL=5)
 
332
      INTEGER    NLOOPLINE
 
333
      PARAMETER (NLOOPLINE=3)
 
334
      INTEGER    NWAVEFUNCS
 
335
      PARAMETER (NWAVEFUNCS=28)
 
336
      INTEGER    NLOOPGROUPS
 
337
      PARAMETER (NLOOPGROUPS=77)
 
338
      INTEGER    NCOMB
 
339
      PARAMETER (NCOMB=48)
 
340
C     These are constants related to the split orders
 
341
      INTEGER    NSQUAREDSO
 
342
      PARAMETER (NSQUAREDSO=0)
 
343
C     
 
344
C     ARGUMENTS 
 
345
C     
 
346
      INTEGER W1, W2, W3
 
347
      COMPLEX*16 M1, M2, M3
 
348
 
 
349
      INTEGER RANK, LSYMFACT
 
350
      INTEGER LOOPNUM, SQUAREDSOINDEX
 
351
C     
 
352
C     LOCAL VARIABLES 
 
353
C     
 
354
      REAL*8 PL(0:3,NLOOPLINE)
 
355
      REAL*16 MP_PL(0:3,NLOOPLINE)
 
356
      COMPLEX*16 M2L(NLOOPLINE)
 
357
      INTEGER PAIRING(NLOOPLINE),WE(3)
 
358
      INTEGER I, J, K, TEMP,I_LIB
 
359
      LOGICAL COMPLEX_MASS,DOING_QP
 
360
C     
 
361
C     GLOBAL VARIABLES
 
362
C     
 
363
      INCLUDE 'MadLoopParams.inc'
 
364
      INTEGER ID,SQSOINDEX,R
 
365
      COMMON/ML5_0_LOOP/ID,SQSOINDEX,R
 
366
 
 
367
      LOGICAL CHECKPHASE, HELDOUBLECHECKED
 
368
      COMMON/ML5_0_INIT/CHECKPHASE, HELDOUBLECHECKED
 
369
 
 
370
      INTEGER HELOFFSET
 
371
      INTEGER GOODHEL(NCOMB)
 
372
      LOGICAL GOODAMP(NSQUAREDSO,NLOOPGROUPS)
 
373
      COMMON/ML5_0_FILTERS/GOODAMP,GOODHEL,HELOFFSET
 
374
 
 
375
      COMPLEX*16 LOOPRES(3,NSQUAREDSO,NLOOPGROUPS)
 
376
      LOGICAL S(NSQUAREDSO,NLOOPGROUPS)
 
377
      COMMON/ML5_0_LOOPRES/LOOPRES,S
 
378
 
 
379
 
 
380
      COMPLEX*16 W(20,NWAVEFUNCS)
 
381
      COMMON/ML5_0_W/W
 
382
      COMPLEX*32 MP_W(20,NWAVEFUNCS)
 
383
      COMMON/ML5_0_MP_W/MP_W
 
384
 
 
385
      REAL*8 LSCALE
 
386
      INTEGER CTMODE
 
387
      COMMON/ML5_0_CT/LSCALE,CTMODE
 
388
      INTEGER LIBINDEX
 
389
      COMMON/ML5_0_I_LIB/LIBINDEX
 
390
 
 
391
C     ----------
 
392
C     BEGIN CODE
 
393
C     ----------
 
394
 
 
395
C     Determine it uses qp or not
 
396
      DOING_QP = (CTMODE.GE.4)
 
397
 
 
398
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED)
 
399
     $ .OR.GOODAMP(SQUAREDSOINDEX,LOOPNUM)) THEN
 
400
        WE(1)=W1
 
401
        WE(2)=W2
 
402
        WE(3)=W3
 
403
        M2L(1)=M3**2
 
404
        M2L(2)=M1**2
 
405
        M2L(3)=M2**2
 
406
        DO I=1,NLOOPLINE
 
407
          PAIRING(I)=1
 
408
        ENDDO
 
409
 
 
410
        R=RANK
 
411
        ID=LOOPNUM
 
412
        SQSOINDEX=SQUAREDSOINDEX
 
413
        DO I=0,3
 
414
          TEMP=1
 
415
          DO J=1,NLOOPLINE
 
416
            PL(I,J)=0.D0
 
417
            IF (DOING_QP) THEN
 
418
              MP_PL(I,J)=0.0E+0_16
 
419
            ENDIF
 
420
            DO K=TEMP,(TEMP+PAIRING(J)-1)
 
421
              PL(I,J)=PL(I,J)-DBLE(W(1+I,WE(K)))
 
422
              IF (DOING_QP) THEN
 
423
                MP_PL(I,J)=MP_PL(I,J)-REAL(MP_W(1+I,WE(K)),KIND=16)
 
424
              ENDIF
 
425
            ENDDO
 
426
            TEMP=TEMP+PAIRING(J)
 
427
          ENDDO
 
428
        ENDDO
 
429
C       Determine whether the integral is with complex masses or not
 
430
C       since some reduction libraries, e.g.PJFry++ and IREGI, are
 
431
C        still
 
432
C       not able to deal with complex masses
 
433
        COMPLEX_MASS=.FALSE.
 
434
        DO I=1,NLOOPLINE
 
435
          IF(DIMAG(M2L(I)).EQ.0D0)CYCLE
 
436
          IF(ABS(DIMAG(M2L(I)))/MAX(ABS(M2L(I)),1D-2).GT.1D-15)THEN
 
437
            COMPLEX_MASS=.TRUE.
 
438
            EXIT
 
439
          ENDIF
 
440
        ENDDO
 
441
C       Choose the correct loop library
 
442
        CALL ML5_0_CHOOSE_LOOPLIB(LIBINDEX,NLOOPLINE,RANK,COMPLEX_MASS
 
443
     $   ,ID,DOING_QP,I_LIB)
 
444
        IF(MLREDUCTIONLIB(I_LIB).EQ.1)THEN
 
445
C         CutTools is used
 
446
          CALL ML5_0_CTLOOP(NLOOPLINE,PL,M2L,RANK,LOOPRES(1
 
447
     $     ,SQUAREDSOINDEX,LOOPNUM),S(SQUAREDSOINDEX,LOOPNUM))
 
448
        ELSE
 
449
C         Tensor Integral Reduction is used 
 
450
          CALL ML5_0_TIRLOOP(SQUAREDSOINDEX,LOOPNUM,I_LIB,NLOOPLINE,PL
 
451
     $     ,M2L,RANK,LOOPRES(1,SQUAREDSOINDEX,LOOPNUM)
 
452
     $     ,S(SQUAREDSOINDEX,LOOPNUM))
 
453
        ENDIF
 
454
      ELSE
 
455
        LOOPRES(1,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
 
456
        LOOPRES(2,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
 
457
        LOOPRES(3,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
 
458
        S(SQUAREDSOINDEX,LOOPNUM)=.TRUE.
 
459
      ENDIF
 
460
      END
 
461
 
328
462
      SUBROUTINE ML5_0_LOOP_5(W1, W2, W3, W4, W5, M1, M2, M3, M4, M5, 
329
463
     $  RANK, SQUAREDSOINDEX, LOOPNUM)
330
464
      INTEGER    NEXTERNAL
395
529
C     Determine it uses qp or not
396
530
      DOING_QP = (CTMODE.GE.4)
397
531
 
398
 
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED).OR.GOODAMP(SQUAREDSOIND
399
 
     $EX,LOOPNUM)) THEN
 
532
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED)
 
533
     $ .OR.GOODAMP(SQUAREDSOINDEX,LOOPNUM)) THEN
400
534
        WE(1)=W1
401
535
        WE(2)=W2
402
536
        WE(3)=W3
533
667
C     Determine it uses qp or not
534
668
      DOING_QP = (CTMODE.GE.4)
535
669
 
536
 
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED).OR.GOODAMP(SQUAREDSOIND
537
 
     $EX,LOOPNUM)) THEN
 
670
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED)
 
671
     $ .OR.GOODAMP(SQUAREDSOINDEX,LOOPNUM)) THEN
538
672
        WE(1)=W1
539
673
        WE(2)=W2
540
674
        WE(3)=W3
670
804
C     Determine it uses qp or not
671
805
      DOING_QP = (CTMODE.GE.4)
672
806
 
673
 
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED).OR.GOODAMP(SQUAREDSOIND
674
 
     $EX,LOOPNUM)) THEN
 
807
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED)
 
808
     $ .OR.GOODAMP(SQUAREDSOINDEX,LOOPNUM)) THEN
675
809
        WE(1)=W1
676
810
        WE(2)=W2
677
811
        WE(3)=W3
806
940
C     Determine it uses qp or not
807
941
      DOING_QP = (CTMODE.GE.4)
808
942
 
809
 
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED).OR.GOODAMP(SQUAREDSOIND
810
 
     $EX,LOOPNUM)) THEN
 
943
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED)
 
944
     $ .OR.GOODAMP(SQUAREDSOINDEX,LOOPNUM)) THEN
811
945
        WE(1)=W1
812
946
        WE(2)=W2
813
947
        WE(3)=W3
937
1071
C     Determine it uses qp or not
938
1072
      DOING_QP = (CTMODE.GE.4)
939
1073
 
940
 
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED).OR.GOODAMP(SQUAREDSOIND
941
 
     $EX,LOOPNUM)) THEN
 
1074
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED)
 
1075
     $ .OR.GOODAMP(SQUAREDSOINDEX,LOOPNUM)) THEN
942
1076
        WE(1)=W1
943
1077
        WE(2)=W2
944
1078
        M2L(1)=M2**2
1069
1203
C     Determine it uses qp or not
1070
1204
      DOING_QP = (CTMODE.GE.4)
1071
1205
 
1072
 
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED).OR.GOODAMP(SQUAREDSOIND
1073
 
     $EX,LOOPNUM)) THEN
 
1206
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED)
 
1207
     $ .OR.GOODAMP(SQUAREDSOINDEX,LOOPNUM)) THEN
1074
1208
        WE(1)=W1
1075
1209
        WE(2)=W2
1076
1210
        WE(3)=W3
1133
1267
      ENDIF
1134
1268
      END
1135
1269
 
1136
 
      SUBROUTINE ML5_0_LOOP_3(W1, W2, W3, M1, M2, M3,  RANK,
1137
 
     $  SQUAREDSOINDEX, LOOPNUM)
1138
 
      INTEGER    NEXTERNAL
1139
 
      PARAMETER (NEXTERNAL=5)
1140
 
      INTEGER    NLOOPLINE
1141
 
      PARAMETER (NLOOPLINE=3)
1142
 
      INTEGER    NWAVEFUNCS
1143
 
      PARAMETER (NWAVEFUNCS=28)
1144
 
      INTEGER    NLOOPGROUPS
1145
 
      PARAMETER (NLOOPGROUPS=77)
1146
 
      INTEGER    NCOMB
1147
 
      PARAMETER (NCOMB=48)
1148
 
C     These are constants related to the split orders
1149
 
      INTEGER    NSQUAREDSO
1150
 
      PARAMETER (NSQUAREDSO=0)
1151
 
C     
1152
 
C     ARGUMENTS 
1153
 
C     
1154
 
      INTEGER W1, W2, W3
1155
 
      COMPLEX*16 M1, M2, M3
1156
 
 
1157
 
      INTEGER RANK, LSYMFACT
1158
 
      INTEGER LOOPNUM, SQUAREDSOINDEX
1159
 
C     
1160
 
C     LOCAL VARIABLES 
1161
 
C     
1162
 
      REAL*8 PL(0:3,NLOOPLINE)
1163
 
      REAL*16 MP_PL(0:3,NLOOPLINE)
1164
 
      COMPLEX*16 M2L(NLOOPLINE)
1165
 
      INTEGER PAIRING(NLOOPLINE),WE(3)
1166
 
      INTEGER I, J, K, TEMP,I_LIB
1167
 
      LOGICAL COMPLEX_MASS,DOING_QP
1168
 
C     
1169
 
C     GLOBAL VARIABLES
1170
 
C     
1171
 
      INCLUDE 'MadLoopParams.inc'
1172
 
      INTEGER ID,SQSOINDEX,R
1173
 
      COMMON/ML5_0_LOOP/ID,SQSOINDEX,R
1174
 
 
1175
 
      LOGICAL CHECKPHASE, HELDOUBLECHECKED
1176
 
      COMMON/ML5_0_INIT/CHECKPHASE, HELDOUBLECHECKED
1177
 
 
1178
 
      INTEGER HELOFFSET
1179
 
      INTEGER GOODHEL(NCOMB)
1180
 
      LOGICAL GOODAMP(NSQUAREDSO,NLOOPGROUPS)
1181
 
      COMMON/ML5_0_FILTERS/GOODAMP,GOODHEL,HELOFFSET
1182
 
 
1183
 
      COMPLEX*16 LOOPRES(3,NSQUAREDSO,NLOOPGROUPS)
1184
 
      LOGICAL S(NSQUAREDSO,NLOOPGROUPS)
1185
 
      COMMON/ML5_0_LOOPRES/LOOPRES,S
1186
 
 
1187
 
 
1188
 
      COMPLEX*16 W(20,NWAVEFUNCS)
1189
 
      COMMON/ML5_0_W/W
1190
 
      COMPLEX*32 MP_W(20,NWAVEFUNCS)
1191
 
      COMMON/ML5_0_MP_W/MP_W
1192
 
 
1193
 
      REAL*8 LSCALE
1194
 
      INTEGER CTMODE
1195
 
      COMMON/ML5_0_CT/LSCALE,CTMODE
1196
 
      INTEGER LIBINDEX
1197
 
      COMMON/ML5_0_I_LIB/LIBINDEX
1198
 
 
1199
 
C     ----------
1200
 
C     BEGIN CODE
1201
 
C     ----------
1202
 
 
1203
 
C     Determine it uses qp or not
1204
 
      DOING_QP = (CTMODE.GE.4)
1205
 
 
1206
 
      IF (CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED).OR.GOODAMP(SQUAREDSOIND
1207
 
     $EX,LOOPNUM)) THEN
1208
 
        WE(1)=W1
1209
 
        WE(2)=W2
1210
 
        WE(3)=W3
1211
 
        M2L(1)=M3**2
1212
 
        M2L(2)=M1**2
1213
 
        M2L(3)=M2**2
1214
 
        DO I=1,NLOOPLINE
1215
 
          PAIRING(I)=1
1216
 
        ENDDO
1217
 
 
1218
 
        R=RANK
1219
 
        ID=LOOPNUM
1220
 
        SQSOINDEX=SQUAREDSOINDEX
1221
 
        DO I=0,3
1222
 
          TEMP=1
1223
 
          DO J=1,NLOOPLINE
1224
 
            PL(I,J)=0.D0
1225
 
            IF (DOING_QP) THEN
1226
 
              MP_PL(I,J)=0.0E+0_16
1227
 
            ENDIF
1228
 
            DO K=TEMP,(TEMP+PAIRING(J)-1)
1229
 
              PL(I,J)=PL(I,J)-DBLE(W(1+I,WE(K)))
1230
 
              IF (DOING_QP) THEN
1231
 
                MP_PL(I,J)=MP_PL(I,J)-REAL(MP_W(1+I,WE(K)),KIND=16)
1232
 
              ENDIF
1233
 
            ENDDO
1234
 
            TEMP=TEMP+PAIRING(J)
1235
 
          ENDDO
1236
 
        ENDDO
1237
 
C       Determine whether the integral is with complex masses or not
1238
 
C       since some reduction libraries, e.g.PJFry++ and IREGI, are
1239
 
C        still
1240
 
C       not able to deal with complex masses
1241
 
        COMPLEX_MASS=.FALSE.
1242
 
        DO I=1,NLOOPLINE
1243
 
          IF(DIMAG(M2L(I)).EQ.0D0)CYCLE
1244
 
          IF(ABS(DIMAG(M2L(I)))/MAX(ABS(M2L(I)),1D-2).GT.1D-15)THEN
1245
 
            COMPLEX_MASS=.TRUE.
1246
 
            EXIT
1247
 
          ENDIF
1248
 
        ENDDO
1249
 
C       Choose the correct loop library
1250
 
        CALL ML5_0_CHOOSE_LOOPLIB(LIBINDEX,NLOOPLINE,RANK,COMPLEX_MASS
1251
 
     $   ,ID,DOING_QP,I_LIB)
1252
 
        IF(MLREDUCTIONLIB(I_LIB).EQ.1)THEN
1253
 
C         CutTools is used
1254
 
          CALL ML5_0_CTLOOP(NLOOPLINE,PL,M2L,RANK,LOOPRES(1
1255
 
     $     ,SQUAREDSOINDEX,LOOPNUM),S(SQUAREDSOINDEX,LOOPNUM))
1256
 
        ELSE
1257
 
C         Tensor Integral Reduction is used 
1258
 
          CALL ML5_0_TIRLOOP(SQUAREDSOINDEX,LOOPNUM,I_LIB,NLOOPLINE,PL
1259
 
     $     ,M2L,RANK,LOOPRES(1,SQUAREDSOINDEX,LOOPNUM)
1260
 
     $     ,S(SQUAREDSOINDEX,LOOPNUM))
1261
 
        ENDIF
1262
 
      ELSE
1263
 
        LOOPRES(1,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
1264
 
        LOOPRES(2,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
1265
 
        LOOPRES(3,SQUAREDSOINDEX,LOOPNUM)=(0.0D0,0.0D0)
1266
 
        S(SQUAREDSOINDEX,LOOPNUM)=.TRUE.
1267
 
      ENDIF
1268
 
      END
1269