~maddevelopers/mg5amcnlo/2.7.1.3

« back to all changes in this revision

Viewing changes to tests/input_files/IOTestsComparison/long_ML_SMQCD_optimized/dux_mumvmxg/TIR_interface.f

  • Committer: olivier Mattelaer
  • Date: 2016-05-12 11:00:18 UTC
  • mfrom: (262.1.150 2.3.4)
  • Revision ID: olivier.mattelaer@uclouvain.be-20160512110018-sevb79f0wm4g8mpp
pass to 2.4.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
C     
8
8
C     Interface between MG5 and TIR.
9
9
C     
10
 
C     Process: d u~ > m- vm~ g QED=2 QCD=1 [ virt = QCD ]
 
10
C     Process: d u~ > m- vm~ g QED<=2 QCD<=1 [ virt = QCD ]
11
11
C     
12
12
C     
13
13
C     CONSTANTS 
17
17
C     These are constants related to the split orders
18
18
      INTEGER NSQUAREDSO
19
19
      PARAMETER (NSQUAREDSO=0)
20
 
      INTEGER LOOPMAXCOEFS
21
 
      PARAMETER (LOOPMAXCOEFS=35)
 
20
      INCLUDE 'loop_max_coefs.inc'
22
21
      INTEGER    NEXTERNAL
23
22
      PARAMETER (NEXTERNAL=5)
24
23
      LOGICAL CHECKPCONSERVATION
32
31
      INTEGER I_SQSO,I_LOOPGROUP,I_LIB
33
32
      INTEGER NLOOPLINE, RANK
34
33
      REAL*8 PL(0:3,NLOOPLINE)
35
 
      REAL*8 PCT(0:3,0:NLOOPLINE-1)
 
34
      REAL*8 PCT(0:3,0:NLOOPLINE-1),ABSPCT(0:3)
 
35
      REAL*8 REF_P
36
36
      REAL*8 PDEN(0:3,NLOOPLINE-1)
37
37
      COMPLEX*16 M2L(NLOOPLINE)
38
38
      COMPLEX*16 M2LCT(0:NLOOPLINE-1)
43
43
C     
44
44
      INTEGER I, J, K
45
45
      INTEGER NLOOPCOEFS
46
 
      LOGICAL CTINIT, TIRINIT, GOLEMINIT
47
 
      COMMON/REDUCTIONCODEINIT/CTINIT,TIRINIT,GOLEMINIT
 
46
      LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT
 
47
      COMMON/REDUCTIONCODEINIT/CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT
 
48
     $ ,NINJAINIT
48
49
 
49
50
C     This variable will be used to detect changes in the TIR library
50
51
C      used so as to force the reset of the TIR filter.
65
66
      REAL*8 LSCALE
66
67
      COMMON/ML5_0_CT/LSCALE,CTMODE
67
68
 
 
69
C     The variables below are just for monitoring purposes. 
 
70
      INTEGER ID,SQSOINDEX,R
 
71
      COMMON/ML5_0_LOOP/ID,SQSOINDEX,R
 
72
 
68
73
C     The argument ILIB is the TIR library to be used for that
69
74
C      specific library.
70
75
      INTEGER LIBINDEX
107
112
 
108
113
C     CONVERT THE MOMENTA FLOWING IN THE LOOP LINES TO CT CONVENTIONS
109
114
      DO I=0,3
 
115
        ABSPCT(I) = 0.D0
110
116
        DO J=0,(NLOOPLINE-1)
111
117
          PCT(I,J)=0.D0
112
118
        ENDDO
114
120
      DO I=0,3
115
121
        DO J=1,NLOOPLINE
116
122
          PCT(I,0)=PCT(I,0)+PL(I,J)
 
123
          ABSPCT(I)=ABSPCT(I)+ABS(PL(I,J))
117
124
        ENDDO
118
125
      ENDDO
119
 
      IF (CHECKPCONSERVATION) THEN
120
 
        IF (PCT(0,0).GT.1.D-6) THEN
121
 
          WRITE(*,*) 'energy is not conserved ',PCT(0,0)
122
 
          STOP 'energy is not conserved'
123
 
        ELSEIF (PCT(1,0).GT.1.D-6) THEN
124
 
          WRITE(*,*) 'px is not conserved ',PCT(1,0)
125
 
          STOP 'px is not conserved'
126
 
        ELSEIF (PCT(2,0).GT.1.D-6) THEN
127
 
          WRITE(*,*) 'py is not conserved ',PCT(2,0)
128
 
          STOP 'py is not conserved'
129
 
        ELSEIF (PCT(3,0).GT.1.D-6) THEN
130
 
          WRITE(*,*) 'pz is not conserved ',PCT(3,0)
131
 
          STOP 'pz is not conserved'
 
126
      REF_P = MAX(ABSPCT(0), ABSPCT(1),ABSPCT(2),ABSPCT(3))
 
127
      DO I=0,3
 
128
        ABSPCT(I) = MAX(REF_P*1E-6, ABSPCT(I))
 
129
      ENDDO
 
130
 
 
131
      IF (CHECKPCONSERVATION.AND.REF_P.GT.1D-8) THEN
 
132
        IF ((PCT(0,0)/ABSPCT(0)).GT.1.D-6) THEN
 
133
          WRITE(*,*) 'energy is not conserved (flag: TIR)',PCT(0,0)
 
134
          STOP 'energy is not conserved (flag: TIR)'
 
135
        ELSEIF ((PCT(1,0)/ABSPCT(1)).GT.1.D-6) THEN
 
136
          WRITE(*,*) 'px is not conserved (flag: TIR)',PCT(1,0)
 
137
          STOP 'px is not conserved (flag: TIR)'
 
138
        ELSEIF ((PCT(2,0)/ABSPCT(2)).GT.1.D-6) THEN
 
139
          WRITE(*,*) 'py is not conserved (flag: TIR)',PCT(2,0)
 
140
          STOP 'py is not conserved (flag: TIR)'
 
141
        ELSEIF ((PCT(3,0)/ABSPCT(3)).GT.1.D-6) THEN
 
142
          WRITE(*,*) 'pz is not conserved (flag: TIR)',PCT(3,0)
 
143
          STOP 'pz is not conserved (flag: TIR)'
132
144
        ENDIF
133
145
      ENDIF
134
146
      DO I=0,3
168
180
      RES(1)=NORMALIZATION*2.0D0*DBLE(RES(1))
169
181
      RES(2)=NORMALIZATION*2.0D0*DBLE(RES(2))
170
182
      RES(3)=NORMALIZATION*2.0D0*DBLE(RES(3))
171
 
C     WRITE(*,*) 'Loop ID',ID,' =',RES(1),RES(2),RES(3)
 
183
C     IF(MLReductionLib(I_LIB).EQ.2) THEN
 
184
C     WRITE(*,*) 'PJFry: Loop ID',ID,' =',RES(1),RES(2),RES(3)
 
185
C     ELSEIF(MLReductionLib(I_LIB).EQ.3) THEN
 
186
C     WRITE(*,*) 'Iregi: Loop ID',ID,' =',RES(1),RES(2),RES(3)
 
187
C     ENDIF
172
188
      END
173
189
 
174
190
      SUBROUTINE ML5_0_SWITCH_ORDER(CTMODE,NLOOPLINE,PL,PDEN,M2L)
185
201
 
186
202
      INTEGER I,J,K
187
203
 
188
 
      IF (CTMODE.NE.2.AND.CTMODE.NE.4) THEN
 
204
      IF (CTMODE.NE.2.AND.CTMODE.NE.5) THEN
 
205
        RETURN
 
206
      ENDIF
 
207
 
 
208
      IF (NLOOPLINE.LE.2) THEN
 
209
        RETURN
 
210
      ENDIF
 
211
 
 
212
      DO I=1,NLOOPLINE-1
 
213
        DO J=0,3
 
214
          NEW_PDEN(J,NLOOPLINE-I) = PDEN(J,I)
 
215
        ENDDO
 
216
      ENDDO
 
217
      DO I=1,NLOOPLINE-1
 
218
        DO J=0,3
 
219
          PDEN(J,I) = NEW_PDEN(J,I)
 
220
        ENDDO
 
221
      ENDDO
 
222
 
 
223
      DO I=2,NLOOPLINE
 
224
        NEW_M2L(I)=M2L(NLOOPLINE-I+2)
 
225
      ENDDO
 
226
      DO I=2,NLOOPLINE
 
227
        M2L(I)=NEW_M2L(I)
 
228
      ENDDO
 
229
 
 
230
 
 
231
      DO I=1,NLOOPLINE
 
232
        DO J=0,3
 
233
          NEW_PL(J,I) = -PL(J,NLOOPLINE+1-I)
 
234
        ENDDO
 
235
      ENDDO
 
236
      DO I=1,NLOOPLINE
 
237
        DO J=0,3
 
238
          PL(J,I) = NEW_PL(J,I)
 
239
        ENDDO
 
240
      ENDDO
 
241
 
 
242
      END
 
243
 
 
244
      SUBROUTINE ML5_0_MP_SWITCH_ORDER(CTMODE,NLOOPLINE,PL,PDEN,M2L)
 
245
      IMPLICIT NONE
 
246
 
 
247
      INTEGER CTMODE,NLOOPLINE
 
248
 
 
249
      REAL*16 PL(0:3,NLOOPLINE)
 
250
      REAL*16 PDEN(0:3,NLOOPLINE-1)
 
251
      COMPLEX*32 M2L(NLOOPLINE)
 
252
      REAL*16 NEW_PL(0:3,NLOOPLINE)
 
253
      REAL*16 NEW_PDEN(0:3,NLOOPLINE-1)
 
254
      COMPLEX*32 NEW_M2L(NLOOPLINE)
 
255
 
 
256
      INTEGER I,J,K
 
257
 
 
258
      IF (CTMODE.NE.2.AND.CTMODE.NE.5) THEN
189
259
        RETURN
190
260
      ENDIF
191
261
 
237
307
C     GLOBAL VARIABLES 
238
308
C     
239
309
      INCLUDE 'MadLoopParams.inc'
240
 
      LOGICAL CTINIT, TIRINIT, GOLEMINIT
241
 
      COMMON/REDUCTIONCODEINIT/CTINIT,TIRINIT,GOLEMINIT
 
310
      LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT
 
311
      COMMON/REDUCTIONCODEINIT/CTINIT,TIRINIT,GOLEMINIT,SAMURAIINIT
 
312
     $ ,NINJAINIT
242
313
 
243
314
C     ----------
244
315
C     BEGIN CODE
266
337
      END
267
338
 
268
339
      SUBROUTINE ML5_0_CHOOSE_LOOPLIB(LIBINDEX,NLOOPLINE,RANK
269
 
     $ ,COMPLEX_MASS,DOING_QP,I_LIB)
 
340
     $ ,COMPLEX_MASS,LOOP_ID,DOING_QP,I_LIB)
270
341
C     
271
342
C     CHOOSE THE CORRECT LOOP LIB
272
343
C     Example:
279
350
C     
280
351
C     CONSTANTS
281
352
C     
282
 
      INTEGER NLOOPLIB,QP_NLOOPLIB
283
 
      PARAMETER (NLOOPLIB=4,QP_NLOOPLIB=1)
 
353
      INTEGER NLOOPLIB
 
354
      PARAMETER (NLOOPLIB=4)
 
355
      INTEGER QP_NLOOPLIB
 
356
      PARAMETER (QP_NLOOPLIB=1)
 
357
      INTEGER NLOOPGROUPS
 
358
      PARAMETER (NLOOPGROUPS=9)
284
359
C     
285
360
C     ARGUMENTS
286
361
C     
287
 
      INTEGER LIBINDEX,NLOOPLINE,RANK,I_LIB
 
362
      INTEGER LIBINDEX,NLOOPLINE,RANK,I_LIB,LOOP_ID
288
363
      LOGICAL COMPLEX_MASS,DOING_QP
289
364
C     
290
365
C     LOCAL VARIABLES
291
366
C     
292
367
      INTEGER I,J_LIB,LIBNUM,SELECT_LIBINDEX
293
368
      LOGICAL LPASS
 
369
C     This list specifies what loop involve an Higgs effective vertex
 
370
C      so that CutTools limitations can be correctly implemented
 
371
      LOGICAL HAS_AN_HEFT_VERTEX(NLOOPGROUPS)
 
372
      DATA (HAS_AN_HEFT_VERTEX(I),I=     1,     9) /.FALSE.,.FALSE.
 
373
     $ ,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE./
294
374
C     
295
375
C     GLOBAL VARIABLES
296
376
C     
297
377
      INCLUDE 'MadLoopParams.inc'
298
 
C     TILL NOW, ONLY CUTTOOLS PROVIDE QP
 
378
      INCLUDE 'process_info.inc'
 
379
C     Change the list 'LOOPLIBS_QPAVAILABLE' in loop_matrix_standalone.
 
380
C     inc to change the list of QPTools availables
299
381
      LOGICAL QP_TOOLS_AVAILABLE
300
 
      INTEGER INDEX_QP_TOOLS(QP_NLOOPLIB)
 
382
      INTEGER INDEX_QP_TOOLS(QP_NLOOPLIB+1)
301
383
      COMMON/ML5_0_LOOP_TOOLS/QP_TOOLS_AVAILABLE,INDEX_QP_TOOLS
 
384
 
302
385
C     ----------
303
386
C     BEGIN CODE
304
387
C     ----------
306
389
      IF(DOING_QP)THEN
307
390
C       QP EVALUATION, ONLY CUTTOOLS
308
391
        IF(.NOT.QP_TOOLS_AVAILABLE)THEN
309
 
          STOP 'No qp tools available, please make sure MLReductionLi'
310
 
     $     //'b is correct'
 
392
          STOP 'No qp tools available, please make sure MLReductionLib'
 
393
     $     //' is correct'
311
394
        ENDIF
312
395
        J_LIB=0
313
396
        SELECT_LIBINDEX=LIBINDEX
321
404
          IF(J_LIB.EQ.0)THEN
322
405
            SELECT_LIBINDEX=SELECT_LIBINDEX+1
323
406
            IF(SELECT_LIBINDEX.GT.NLOOPLIB.OR.MLREDUCTIONLIB(SELECT_LIB
324
 
     $       INDEX).EQ.0)SELECT_LIBINDEX=1
 
407
     $INDEX).EQ.0)SELECT_LIBINDEX=1
325
408
          ENDIF
326
409
        ENDDO
327
410
        I=J_LIB
328
411
        I_LIB=SELECT_LIBINDEX
329
412
        LIBNUM=MLREDUCTIONLIB(I_LIB)
330
413
        DO
331
 
        CALL DETECT_LOOPLIB(LIBNUM,NLOOPLINE,RANK,COMPLEX_MASS,LPASS)
 
414
        CALL DETECT_LOOPLIB(LIBNUM,NLOOPLINE,RANK,COMPLEX_MASS
 
415
     $   ,HAS_AN_HEFT_VERTEX(LOOP_ID),MAX_SPIN_CONNECTED_TO_LOOP,LPASS)
332
416
        IF(LPASS)EXIT
333
417
        I=I+1
334
418
        IF(I.GT.QP_NLOOPLIB.AND.INDEX_QP_TOOLS(I).EQ.0)THEN
345
429
        I_LIB=LIBINDEX
346
430
        LIBNUM=MLREDUCTIONLIB(I_LIB)
347
431
        DO
348
 
        CALL DETECT_LOOPLIB(LIBNUM,NLOOPLINE,RANK,COMPLEX_MASS,LPASS)
 
432
        CALL DETECT_LOOPLIB(LIBNUM,NLOOPLINE,RANK,COMPLEX_MASS
 
433
     $   ,HAS_AN_HEFT_VERTEX(LOOP_ID),MAX_SPIN_CONNECTED_TO_LOOP,LPASS)
349
434
        IF(LPASS)EXIT
350
435
        I_LIB=I_LIB+1
351
436
        IF(I_LIB.GT.NLOOPLIB.OR.MLREDUCTIONLIB(I_LIB).EQ.0)THEN