~maddevelopers/mg5amcnlo/FKS_EW_flattened_dsig_merged2.3.3

« back to all changes in this revision

Viewing changes to tests/input_files/IOTestsComparison/IOExportFKSTest/test_ppw_fksall/%SubProcesses%P0_dxu_wp%V0_dxu_wp%GOLEM_interface.f

  • Committer: Marco Zaro
  • Date: 2016-05-24 12:48:05 UTC
  • mfrom: (78.337.150 2.4.1)
  • Revision ID: marco.zaro@gmail.com-20160524124805-d0y3ij808wdroloh
merged with 2.4.1 rev 410

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
      SUBROUTINE GOLEMLOOP(NLOOPLINE,PL,M2L,RANK,RES,STABLE)
 
2
C     
 
3
C     Generated by MadGraph5_aMC@NLO v. %(version)s, %(date)s
 
4
C     By the MadGraph5_aMC@NLO Development Team
 
5
C     Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
 
6
C     
 
7
C     Interface between MG5 and Golem95.
 
8
C     The Golem95 version should be higher than 1.3.0.
 
9
C     It supports RANK = NLOOPLINE + 1 tensor integrals when 1 <
 
10
C      NLOOPLINE < 6.
 
11
C     
 
12
C     Process: d~ u > w+ WEIGHTED<=2 QED<=1 [ all = QCD ]
 
13
C     Process: s~ c > w+ WEIGHTED<=2 QED<=1 [ all = QCD ]
 
14
C     
 
15
C     
 
16
C     MODULES
 
17
C     
 
18
      USE MATRICE_S
 
19
      USE FORM_FACTOR_TYPE, ONLY: FORM_FACTOR
 
20
      USE PRECISION_GOLEM, ONLY: KI
 
21
      USE TENS_COMB
 
22
      USE TENS_REC
 
23
      USE FORM_FACTOR_1P, ONLY: A10
 
24
      USE FORM_FACTOR_2P, ONLY: A20
 
25
      USE FORM_FACTOR_3P, ONLY: A30
 
26
      USE FORM_FACTOR_4P, ONLY: A40
 
27
      USE FORM_FACTOR_5P, ONLY: A50
 
28
      USE FORM_FACTOR_6P, ONLY: A60
 
29
      IMPLICIT NONE
 
30
C     
 
31
C     CONSTANTS 
 
32
C     
 
33
      INTEGER    NEXTERNAL
 
34
      PARAMETER (NEXTERNAL=3)
 
35
      LOGICAL CHECKPCONSERVATION
 
36
      PARAMETER (CHECKPCONSERVATION=.TRUE.)
 
37
      REAL*8 NORMALIZATION
 
38
      PARAMETER (NORMALIZATION = 1.D0/(16.D0*3.14159265358979323846D0*
 
39
     $ *2))
 
40
      REAL(KI),DIMENSION(0:3),PARAMETER::NULL_VEC = (/0.0_KI,0.0_KI
 
41
     $ ,0.0_KI,0.0_KI/)
 
42
C     GOLEM_RUN_MODE = 1: Use directly MadLoop tensorial coefficients
 
43
C     GOLEM_RUN_MODE = 2: Reconstruct the tensorial coefficeints
 
44
C      directly from 
 
45
C     numerator using golem internal reconstruction routine
 
46
C     GOLEM_RUN_MODE = 3: Cross-checked reconstructed coefficients
 
47
C      against
 
48
C     MadLoop internal ones.
 
49
      INTEGER GOLEM_RUN_MODE
 
50
      PARAMETER (GOLEM_RUN_MODE=1)
 
51
C     The following is the acceptance threshold used for
 
52
C      GOLEM_RUN_MODE = 3
 
53
      REAL*8 COEF_CHECK_THRS
 
54
      DATA COEF_CHECK_THRS/1.0D-13/
 
55
      COMMON/COEF_CHECK_THRS/COEF_CHECK_THRS
 
56
 
 
57
      LOGICAL PASS_COEF_CHECK
 
58
C     
 
59
C     ARGUMENTS 
 
60
C     
 
61
      INTEGER NLOOPLINE, RANK
 
62
      REAL*8 PL(0:3,NLOOPLINE)
 
63
      REAL*8 PCT(0:3,0:NLOOPLINE-1), ABSPCT(0:3)
 
64
      REAL*8 REF_P
 
65
      REAL(KI) PGOLEM(NLOOPLINE,0:3)
 
66
      COMPLEX*16 M2L(NLOOPLINE)
 
67
      COMPLEX(KI) M2LGOLEM(NLOOPLINE)
 
68
      COMPLEX*16 RES(3)
 
69
      LOGICAL STABLE
 
70
C     
 
71
C     LOCAL VARIABLES 
 
72
C     
 
73
      INTEGER I, J, K
 
74
      TYPE(FORM_FACTOR)::RES_GOLEM
 
75
 
 
76
      COMPLEX(KI)::COEFFS0,COEFFS0_REC
 
77
      TYPE(COEFF_TYPE_1)::COEFFS1,COEFFS1_REC
 
78
      TYPE(COEFF_TYPE_2)::COEFFS2,COEFFS2_REC
 
79
      TYPE(COEFF_TYPE_3)::COEFFS3,COEFFS3_REC
 
80
      TYPE(COEFF_TYPE_4)::COEFFS4,COEFFS4_REC
 
81
      TYPE(COEFF_TYPE_5)::COEFFS5,COEFFS5_REC
 
82
      TYPE(COEFF_TYPE_6)::COEFFS6,COEFFS6_REC
 
83
 
 
84
C     The pinch propagator optimization is not used, so for now it is
 
85
C     always 0.
 
86
      INTEGER PINCH
 
87
C     
 
88
C     EXTERNAL FUNCTIONS
 
89
C     
 
90
      COMPLEX(KI) GOLEM_LOOPNUM
 
91
      EXTERNAL GOLEM_LOOPNUM
 
92
      LOGICAL COMPARE_COEFS_0
 
93
      LOGICAL COMPARE_COEFS_1
 
94
      LOGICAL COMPARE_COEFS_2
 
95
      LOGICAL COMPARE_COEFS_3
 
96
      LOGICAL COMPARE_COEFS_4
 
97
      LOGICAL COMPARE_COEFS_5
 
98
      LOGICAL COMPARE_COEFS_6
 
99
C     
 
100
C     GLOBAL VARIABLES
 
101
C     
 
102
      INCLUDE 'coupl.inc'
 
103
      INTEGER CTMODE
 
104
      REAL*8 LSCALE
 
105
      COMMON/CT/LSCALE,CTMODE
 
106
 
 
107
      INTEGER ID,SQSOINDEX,R
 
108
      COMMON/LOOP/ID,SQSOINDEX,R
 
109
 
 
110
      LOGICAL CTINIT, TIRINIT, GOLEMINIT, SAMURAIINIT, NINJAINIT
 
111
      COMMON/REDUCTIONCODEINIT/CTINIT, TIRINIT,GOLEMINIT,SAMURAIINIT
 
112
     $ ,NINJAINIT
 
113
 
 
114
      INTEGER NLOOPGROUPS
 
115
      PARAMETER (NLOOPGROUPS=1)
 
116
      INTEGER NSQUAREDSO
 
117
      PARAMETER (NSQUAREDSO=1)
 
118
      INCLUDE 'loop_max_coefs.inc'
 
119
 
 
120
      COMPLEX*16 LOOPCOEFS(0:LOOPMAXCOEFS-1,NSQUAREDSO,NLOOPGROUPS)
 
121
      COMMON/LCOEFS/LOOPCOEFS
 
122
C     ----------
 
123
C     BEGIN CODE
 
124
C     ----------
 
125
 
 
126
C     The CT initialization is also performed here if not done already
 
127
C      because it calls MPINIT of OneLOop which is necessary on some
 
128
C      system
 
129
      IF (CTINIT) THEN
 
130
        CTINIT=.FALSE.
 
131
        CALL INITCT()
 
132
      ENDIF
 
133
 
 
134
C     INITIALIZE GOLEM IF NEEDED
 
135
      IF (GOLEMINIT) THEN
 
136
        GOLEMINIT=.FALSE.
 
137
        CALL INITGOLEM()
 
138
      ENDIF
 
139
 
 
140
C     No stability test intrisic to Golem95 now
 
141
      STABLE=.TRUE.
 
142
 
 
143
C     This initialization must be done for each reduction because we
 
144
C     have not setup anyoptimization using pinched propagators yet.
 
145
      CALL INITGOLEM95(NLOOPLINE)
 
146
      PINCH = 0
 
147
 
 
148
C     YOU CAN FIND THE DETAILS ABOUT THE DIFFERENT CTMODE AT THE
 
149
C      BEGINNING OF THE FILE CTS_CUTS.F90 IN THE CUTTOOLS DISTRIBUTION
 
150
 
 
151
C     CONVERT THE MASSES TO BE COMPLEX
 
152
      DO I=1,NLOOPLINE
 
153
        M2LGOLEM(I)=M2L(I)
 
154
      ENDDO
 
155
 
 
156
C     CONVERT THE MOMENTA FLOWING IN THE LOOP LINES TO CT CONVENTIONS
 
157
      DO I=0,3
 
158
        ABSPCT(I) = 0.D0
 
159
        DO J=0,(NLOOPLINE-1)
 
160
          PCT(I,J)=0.D0
 
161
        ENDDO
 
162
      ENDDO
 
163
      DO I=0,3
 
164
        DO J=1,NLOOPLINE
 
165
          PCT(I,0)=PCT(I,0)+PL(I,J)
 
166
          ABSPCT(I)=ABSPCT(I)+ABS(PL(I,J))
 
167
        ENDDO
 
168
      ENDDO
 
169
      REF_P = MAX(ABSPCT(0), ABSPCT(1),ABSPCT(2),ABSPCT(3))
 
170
      DO I=0,3
 
171
        ABSPCT(I) = MAX(REF_P*1E-6, ABSPCT(I))
 
172
      ENDDO
 
173
      IF (CHECKPCONSERVATION.AND.REF_P.GT.1D-8) THEN
 
174
        IF ((PCT(0,0)/ABSPCT(0)).GT.1.D-6) THEN
 
175
          WRITE(*,*) 'energy is not conserved ',PCT(0,0)
 
176
          STOP 'energy is not conserved'
 
177
        ELSEIF ((PCT(1,0)/ABSPCT(1)).GT.1.D-6) THEN
 
178
          WRITE(*,*) 'px is not conserved ',PCT(1,0)
 
179
          STOP 'px is not conserved'
 
180
        ELSEIF ((PCT(2,0)/ABSPCT(2)).GT.1.D-6) THEN
 
181
          WRITE(*,*) 'py is not conserved ',PCT(2,0)
 
182
          STOP 'py is not conserved'
 
183
        ELSEIF ((PCT(3,0)/ABSPCT(3)).GT.1.D-6) THEN
 
184
          WRITE(*,*) 'pz is not conserved ',PCT(3,0)
 
185
          STOP 'pz is not conserved'
 
186
        ENDIF
 
187
      ENDIF
 
188
      DO I=0,3
 
189
        DO J=1,(NLOOPLINE-1)
 
190
          DO K=1,J
 
191
            PCT(I,J)=PCT(I,J)+PL(I,K)
 
192
          ENDDO
 
193
        ENDDO
 
194
      ENDDO
 
195
 
 
196
C     Now convert the loop momenta to Golem95 conventions
 
197
      DO I=0,3
 
198
        PGOLEM(1,I)=0.0E0_KI
 
199
        DO J=2,NLOOPLINE
 
200
          PGOLEM(J,I)=PCT(I,J-1)
 
201
        ENDDO
 
202
      ENDDO
 
203
 
 
204
C     Fill in the kinematic s-matrix while taking care of on-shell
 
205
C      limits.
 
206
      CALL SETUP_KIN_MATRIX(NLOOPLINE,PGOLEM,M2LGOLEM)
 
207
C     Construct the golem internal matrices derived from the kinetic
 
208
C      one.
 
209
      CALL PREPARESMATRIX()
 
210
 
 
211
C     Fill in the golem coefficents and compute the loop
 
212
      IF(GOLEM_RUN_MODE.EQ.2)THEN
 
213
        RES_GOLEM = EVALUATE_B(GOLEM_LOOPNUM,PGOLEM,0,RANK)
 
214
      ELSE
 
215
        PASS_COEF_CHECK=.TRUE.
 
216
        SELECT CASE(RANK)
 
217
        CASE(0)
 
218
        CALL FILL_GOLEM_COEFFS_0(LOOPCOEFS(0,SQSOINDEX,ID),COEFFS0)
 
219
        IF(GOLEM_RUN_MODE.EQ.3)THEN
 
220
          COEFFS0_REC = GOLEM_LOOPNUM(NULL_VEC,0.0_KI)
 
221
          PASS_COEF_CHECK=COMPARE_COEFS_0(COEFFS0,COEFFS0_REC)
 
222
        ENDIF
 
223
        CASE(1)
 
224
        CALL FILL_GOLEM_COEFFS_1(LOOPCOEFS(0,SQSOINDEX,ID),COEFFS1)
 
225
        IF(GOLEM_RUN_MODE.EQ.3)THEN
 
226
          CALL RECONSTRUCT1(GOLEM_LOOPNUM,COEFFS1_REC)
 
227
          PASS_COEF_CHECK=COMPARE_COEFS_1(COEFFS1,COEFFS1_REC)
 
228
        ENDIF
 
229
        CASE(2)
 
230
        CALL FILL_GOLEM_COEFFS_2(LOOPCOEFS(0,SQSOINDEX,ID),COEFFS2)
 
231
        IF(GOLEM_RUN_MODE.EQ.3)THEN
 
232
          CALL RECONSTRUCT2(GOLEM_LOOPNUM,COEFFS2_REC)
 
233
          PASS_COEF_CHECK=COMPARE_COEFS_2(COEFFS2,COEFFS2_REC)
 
234
        ENDIF
 
235
        CASE(3)
 
236
        CALL FILL_GOLEM_COEFFS_3(LOOPCOEFS(0,SQSOINDEX,ID),COEFFS3)
 
237
        IF(GOLEM_RUN_MODE.EQ.3)THEN
 
238
          CALL RECONSTRUCT3(GOLEM_LOOPNUM,COEFFS3_REC)
 
239
          PASS_COEF_CHECK=COMPARE_COEFS_3(COEFFS3,COEFFS3_REC)
 
240
        ENDIF
 
241
        CASE(4)
 
242
        CALL FILL_GOLEM_COEFFS_4(LOOPCOEFS(0,SQSOINDEX,ID),COEFFS4)
 
243
        IF(GOLEM_RUN_MODE.EQ.3)THEN
 
244
          CALL RECONSTRUCT4(GOLEM_LOOPNUM,COEFFS4_REC)
 
245
          PASS_COEF_CHECK=COMPARE_COEFS_4(COEFFS4,COEFFS4_REC)
 
246
        ENDIF
 
247
        CASE(5)
 
248
        CALL FILL_GOLEM_COEFFS_5(LOOPCOEFS(0,SQSOINDEX,ID),COEFFS5)
 
249
        IF(GOLEM_RUN_MODE.EQ.3)THEN
 
250
          CALL RECONSTRUCT5(GOLEM_LOOPNUM,COEFFS5_REC)
 
251
          PASS_COEF_CHECK=COMPARE_COEFS_5(COEFFS5,COEFFS5_REC)
 
252
        ENDIF
 
253
        CASE(6)
 
254
        CALL FILL_GOLEM_COEFFS_6(LOOPCOEFS(0,SQSOINDEX,ID),COEFFS6)
 
255
        IF(GOLEM_RUN_MODE.EQ.3)THEN
 
256
          CALL RECONSTRUCT6(GOLEM_LOOPNUM,COEFFS6_REC)
 
257
          PASS_COEF_CHECK=COMPARE_COEFS_6(COEFFS6,COEFFS6_REC)
 
258
        ENDIF
 
259
        CASE DEFAULT
 
260
        WRITE(*,*)'Not yet implemented in Golem95 for rank= ',RANK
 
261
        STOP
 
262
        END SELECT
 
263
 
 
264
        IF(.NOT.PASS_COEF_CHECK)THEN
 
265
          WRITE(*,*)'Coefs mismatch for ID ',ID,' and rank ',RANK
 
266
          WRITE(*,*)'Coefs form MadLoop5:'
 
267
          SELECT CASE(RANK)
 
268
          CASE(0)
 
269
          WRITE(*,*)'Constant coef = ',COEFFS0
 
270
          CASE(1)
 
271
          CALL PRINT_COEFFS(COEFFS1)
 
272
          CASE(2)
 
273
          CALL PRINT_COEFFS(COEFFS2)
 
274
          CASE(3)
 
275
          CALL PRINT_COEFFS(COEFFS3)
 
276
          CASE(4)
 
277
          CALL PRINT_COEFFS(COEFFS4)
 
278
          CASE(5)
 
279
          CALL PRINT_COEFFS(COEFFS5)
 
280
          CASE(6)
 
281
          CALL PRINT_COEFFS(COEFFS6)
 
282
          END SELECT
 
283
          WRITE(*,*)'Coefs reconstructed by Golem95:'
 
284
          SELECT CASE(RANK)
 
285
          CASE(0)
 
286
          WRITE(*,*)'Constant coef = ',COEFFS0_REC
 
287
          CASE(1)
 
288
          CALL PRINT_COEFFS(COEFFS1_REC)
 
289
          CASE(2)
 
290
          CALL PRINT_COEFFS(COEFFS2_REC)
 
291
          CASE(3)
 
292
          CALL PRINT_COEFFS(COEFFS3_REC)
 
293
          CASE(4)
 
294
          CALL PRINT_COEFFS(COEFFS4_REC)
 
295
          CASE(5)
 
296
          CALL PRINT_COEFFS(COEFFS5_REC)
 
297
          CASE(6)
 
298
          CALL PRINT_COEFFS(COEFFS6_REC)
 
299
          END SELECT
 
300
          STOP
 
301
        ENDIF
 
302
 
 
303
        SELECT CASE(NLOOPLINE)
 
304
        CASE(1)
 
305
        WRITE(*,*)'Golem95 cannot handle with tadpole yet'
 
306
        STOP
 
307
        CASE(2)
 
308
        SELECT CASE(RANK)
 
309
        CASE(0)
 
310
        RES_GOLEM = COEFFS0*A20(PINCH)
 
311
        CASE(1)
 
312
        RES_GOLEM = CONTRACT2_1(COEFFS1,PGOLEM,PINCH)
 
313
        CASE(2)
 
314
        RES_GOLEM = CONTRACT2_2(COEFFS2,PGOLEM,PINCH)
 
315
        CASE(3)
 
316
        RES_GOLEM = CONTRACT2_3(COEFFS3,PGOLEM,PINCH)
 
317
        CASE DEFAULT
 
318
        WRITE(*,*)'Golem95 cannot handle with: N,r = ',2,RANK
 
319
        STOP
 
320
        END SELECT
 
321
        CASE(3)
 
322
        SELECT CASE(RANK)
 
323
        CASE(0)
 
324
        RES_GOLEM = COEFFS0*A30(PINCH)
 
325
        CASE(1)
 
326
        RES_GOLEM = CONTRACT3_1(COEFFS1,PGOLEM,PINCH)
 
327
        CASE(2)
 
328
        RES_GOLEM = CONTRACT3_2(COEFFS2,PGOLEM,PINCH)
 
329
        CASE(3)
 
330
        RES_GOLEM = CONTRACT3_3(COEFFS3,PGOLEM,PINCH)
 
331
        CASE(4)
 
332
        RES_GOLEM = CONTRACT3_4(COEFFS4,PGOLEM,PINCH)
 
333
        CASE DEFAULT
 
334
        WRITE(*,*)'Golem95 cannot handle with: N,r = ',3,RANK
 
335
        STOP
 
336
        END SELECT
 
337
        CASE(4)
 
338
        SELECT CASE(RANK)
 
339
        CASE(0)
 
340
        RES_GOLEM = COEFFS0*A40(PINCH)
 
341
        CASE(1)
 
342
        RES_GOLEM = CONTRACT4_1(COEFFS1,PGOLEM,PINCH)
 
343
        CASE(2)
 
344
        RES_GOLEM = CONTRACT4_2(COEFFS2,PGOLEM,PINCH)
 
345
        CASE(3)
 
346
        RES_GOLEM = CONTRACT4_3(COEFFS3,PGOLEM,PINCH)
 
347
        CASE(4)
 
348
        RES_GOLEM = CONTRACT4_4(COEFFS4,PGOLEM,PINCH)
 
349
        CASE(5)
 
350
        RES_GOLEM = CONTRACT4_5(COEFFS5,PGOLEM,PINCH)
 
351
        CASE DEFAULT
 
352
        WRITE(*,*)'Golem95 cannot handle with: N,r = ',4,RANK
 
353
        STOP
 
354
        END SELECT
 
355
        CASE(5)
 
356
        SELECT CASE(RANK)
 
357
        CASE(0)
 
358
        RES_GOLEM = COEFFS0*A50(PINCH)
 
359
        CASE(1)
 
360
        RES_GOLEM = CONTRACT5_1(COEFFS1,PGOLEM,PINCH)
 
361
        CASE(2)
 
362
        RES_GOLEM = CONTRACT5_2(COEFFS2,PGOLEM,PINCH)
 
363
        CASE(3)
 
364
        RES_GOLEM = CONTRACT5_3(COEFFS3,PGOLEM,PINCH)
 
365
        CASE(4)
 
366
        RES_GOLEM = CONTRACT5_4(COEFFS4,PGOLEM,PINCH)
 
367
        CASE(5)
 
368
        RES_GOLEM = CONTRACT5_5(COEFFS5,PGOLEM,PINCH)
 
369
        CASE(6)
 
370
        RES_GOLEM = CONTRACT5_6(COEFFS6,PGOLEM,PINCH)
 
371
        CASE DEFAULT
 
372
        WRITE(*,*)'Golem95 cannot handle with: N,r = ',5,RANK
 
373
        STOP
 
374
        END SELECT
 
375
        CASE(6)
 
376
        SELECT CASE(RANK)
 
377
        CASE(0)
 
378
        RES_GOLEM = COEFFS0*A60(PINCH)
 
379
        CASE(1)
 
380
        RES_GOLEM = CONTRACT6_1(COEFFS1,PGOLEM,PINCH)
 
381
        CASE(2)
 
382
        RES_GOLEM = CONTRACT6_2(COEFFS2,PGOLEM,PINCH)
 
383
        CASE(3)
 
384
        RES_GOLEM = CONTRACT6_3(COEFFS3,PGOLEM,PINCH)
 
385
        CASE(4)
 
386
        RES_GOLEM = CONTRACT6_4(COEFFS4,PGOLEM,PINCH)
 
387
        CASE(5)
 
388
        RES_GOLEM = CONTRACT6_5(COEFFS5,PGOLEM,PINCH)
 
389
        CASE(6)
 
390
        RES_GOLEM = CONTRACT6_6(COEFFS6,PGOLEM,PINCH)
 
391
        CASE DEFAULT
 
392
        WRITE(*,*)'Golem95 cannot handle with: N,r = ',6,RANK
 
393
        STOP
 
394
        END SELECT
 
395
        CASE DEFAULT
 
396
        WRITE(*,*)'Golem95 cannot handle with: N = ',NLOOPLINE
 
397
        STOP
 
398
        END SELECT
 
399
      ENDIF
 
400
 
 
401
      RES(1)=NORMALIZATION*2.0D0*DBLE(RES_GOLEM%%C+2.0*LOG(MU_R)
 
402
     $ *RES_GOLEM%%B+2.0*LOG(MU_R)**2*RES_GOLEM%%A)
 
403
      RES(2)=NORMALIZATION*2.0D0*DBLE(RES_GOLEM%%B+2.0*LOG(MU_R)
 
404
     $ *RES_GOLEM%%A)
 
405
      RES(3)=NORMALIZATION*2.0D0*DBLE(RES_GOLEM%%A)
 
406
C     WRITE(*,*) 'Loop ID',ID,' =',RES(1),RES(2),RES(3)
 
407
 
 
408
C     Finally free golem memory and cache
 
409
      CALL EXITGOLEM95()
 
410
 
 
411
      END
 
412
 
 
413
      FUNCTION GOLEM_LOOPNUM(Q,MU2)
 
414
      USE PRECISION_GOLEM, ONLY: KI
 
415
      REAL(KI),DIMENSION(0:3),INTENT(IN)::Q
 
416
      REAL(KI),INTENT(IN)::MU2
 
417
      COMPLEX(KI)::GOLEM_LOOPNUM
 
418
 
 
419
      COMPLEX*16 QQ(0:3),NUM
 
420
      INTEGER I
 
421
 
 
422
      DO I=0,3
 
423
        QQ(I)=CMPLX(Q(I),0.0D0,KIND=16)
 
424
      ENDDO
 
425
 
 
426
      CALL LOOPNUM(QQ,NUM)
 
427
      GOLEM_LOOPNUM=NUM
 
428
      RETURN
 
429
      END FUNCTION
 
430
 
 
431
      SUBROUTINE INITGOLEM()
 
432
C     
 
433
C     INITIALISATION OF GOLEM
 
434
C     
 
435
C     
 
436
C     MODULE
 
437
C     
 
438
      USE PARAMETRE
 
439
C     
 
440
C     LOCAL VARIABLES 
 
441
C     
 
442
      REAL*8 THRS
 
443
      LOGICAL EXT_NUM_FOR_R1
 
444
C     
 
445
C     GLOBAL VARIABLES 
 
446
C     
 
447
      INCLUDE 'MadLoopParams.inc'
 
448
C     ----------
 
449
C     BEGIN CODE
 
450
C     ----------
 
451
 
 
452
C     DEFAULT PARAMETERS FOR GOLEM
 
453
C     -------------------------------  
 
454
C     One can chose here to have either just the rational R1 piece 
 
455
C     or everything but the R2
 
456
      RAT_OR_TOT_PAR = TOT
 
457
 
 
458
      END
 
459
 
 
460
      SUBROUTINE SETUP_KIN_MATRIX(NLOOPLINE,PGOLEM,M2L)
 
461
C     
 
462
C     MODULE
 
463
C     
 
464
      USE MATRICE_S
 
465
      USE PRECISION_GOLEM, ONLY: KI
 
466
C     
 
467
C     ARGUMENTS
 
468
C     
 
469
      INTEGER NLOOPLINE
 
470
      REAL(KI) PGOLEM(NLOOPLINE,0:3)
 
471
      COMPLEX(KI) M2L(NLOOPLINE)
 
472
C     
 
473
C     LOCAL VARIABLES
 
474
C     
 
475
      INTEGER I,J
 
476
      COMPLEX*16 S_MAT_FROM_MG(NLOOPLINE,NLOOPLINE)
 
477
C     ----------
 
478
C     BEGIN CODE
 
479
C     ----------
 
480
 
 
481
      CALL BUILD_KINEMATIC_MATRIX(NLOOPLINE,PGOLEM,M2L,S_MAT_FROM_MG)
 
482
 
 
483
      DO I=1,NLOOPLINE
 
484
        DO J=1,NLOOPLINE
 
485
          S_MAT(I,J)=S_MAT_FROM_MG(I,J)
 
486
        ENDDO
 
487
      ENDDO
 
488
 
 
489
      END
 
490
 
 
491
      FUNCTION COMPARE_COEFS_0(COEFS_A,COEFS_B)
 
492
 
 
493
      USE PRECISION_GOLEM, ONLY: KI
 
494
      COMPLEX(KI) COEFS_A,COEFS_B
 
495
      REAL*8 COEF_CHECK_THRS
 
496
      COMMON/COEF_CHECK_THRS/COEF_CHECK_THRS
 
497
      REAL*8 DENOM,NUM
 
498
      LOGICAL COMPARE_COEFS_0
 
499
 
 
500
      NUM = ABS(COEFS_A-COEFS_B)
 
501
      DENOM = ABS(COEFS_A+COEFS_B)
 
502
      IF(DENOM.GT.0D0)THEN
 
503
        COMPARE_COEFS_0=((NUM/DENOM).LT.COEF_CHECK_THRS)
 
504
      ELSE
 
505
        COMPARE_COEFS_0=(NUM.LT.COEF_CHECK_THRS)
 
506
      ENDIF
 
507
 
 
508
      END
 
509
 
 
510
      FUNCTION COMPARE_COEFS_1(COEFS_A,COEFS_B)
 
511
 
 
512
      USE TENS_REC
 
513
      TYPE(COEFF_TYPE_1)COEFS_A,COEFS_B
 
514
      REAL*8 COEF_CHECK_THRS
 
515
      COMMON/COEF_CHECK_THRS/COEF_CHECK_THRS
 
516
      REAL*8 DENOM,NUM
 
517
      LOGICAL COMPARE_COEFS_1
 
518
 
 
519
      NUM = ABS(COEFS_A%%C0-COEFS_B%%C0)+SUM(ABS(COEFS_A%%C1-COEFS_B%%C1))
 
520
      DENOM = ABS(COEFS_A%%C0+COEFS_B%%C0)+SUM(ABS(COEFS_A%%C1+COEFS_B%%C1)
 
521
     $ )
 
522
 
 
523
      IF(DENOM.GT.0D0)THEN
 
524
        COMPARE_COEFS_1=((NUM/DENOM).LT.COEF_CHECK_THRS)
 
525
      ELSE
 
526
        COMPARE_COEFS_1=(NUM.LT.COEF_CHECK_THRS)
 
527
      ENDIF
 
528
 
 
529
      END
 
530
 
 
531
      FUNCTION COMPARE_COEFS_2(COEFS_A,COEFS_B)
 
532
 
 
533
      USE TENS_REC
 
534
      TYPE(COEFF_TYPE_2) COEFS_A,COEFS_B
 
535
      REAL*8 COEF_CHECK_THRS
 
536
      COMMON/COEF_CHECK_THRS/COEF_CHECK_THRS
 
537
      REAL*8 DENOM,NUM
 
538
      LOGICAL COMPARE_COEFS_2
 
539
 
 
540
      NUM = ABS(COEFS_A%%C0-COEFS_B%%C0)+SUM(ABS(COEFS_A%%C1-COEFS_B%%C1))
 
541
     $ +SUM(ABS(COEFS_A%%C2-COEFS_B%%C2))
 
542
      DENOM = ABS(COEFS_A%%C0+COEFS_B%%C0)+SUM(ABS(COEFS_A%%C1+COEFS_B%%C1)
 
543
     $ )+SUM(ABS(COEFS_A%%C2+COEFS_B%%C2))
 
544
      IF(DENOM.GT.0D0)THEN
 
545
        COMPARE_COEFS_2=((NUM/DENOM).LT.COEF_CHECK_THRS)
 
546
      ELSE
 
547
        COMPARE_COEFS_2=(NUM.LT.COEF_CHECK_THRS)
 
548
      ENDIF
 
549
 
 
550
      END
 
551
 
 
552
      FUNCTION COMPARE_COEFS_3(COEFS_A,COEFS_B)
 
553
 
 
554
      USE TENS_REC
 
555
      TYPE(COEFF_TYPE_3) COEFS_A, COEFS_B
 
556
      REAL*8 COEF_CHECK_THRS
 
557
      COMMON/COEF_CHECK_THRS/COEF_CHECK_THRS
 
558
      REAL*8 DENOM,NUM
 
559
      LOGICAL COMPARE_COEFS_3
 
560
 
 
561
      NUM = ABS(COEFS_A%%C0-COEFS_B%%C0)+SUM(ABS(COEFS_A%%C1-COEFS_B%%C1))
 
562
     $ +SUM(ABS(COEFS_A%%C2-COEFS_B%%C2))+SUM(ABS(COEFS_A%%C3-COEFS_B%%C3))
 
563
      DENOM = ABS(COEFS_A%%C0+COEFS_B%%C0)+SUM(ABS(COEFS_A%%C1+COEFS_B%%C1)
 
564
     $ )+SUM(ABS(COEFS_A%%C2+COEFS_B%%C2))+SUM(ABS(COEFS_A%%C3+COEFS_B%%C3)
 
565
     $ )
 
566
      IF(DENOM.GT.0D0)THEN
 
567
        COMPARE_COEFS_3=((NUM/DENOM).LT.COEF_CHECK_THRS)
 
568
      ELSE
 
569
        COMPARE_COEFS_3=(NUM.LT.COEF_CHECK_THRS)
 
570
      ENDIF
 
571
 
 
572
      END
 
573
 
 
574
      FUNCTION COMPARE_COEFS_4(COEFS_A,COEFS_B)
 
575
 
 
576
      USE TENS_REC
 
577
      TYPE(COEFF_TYPE_4) COEFS_A, COEFS_B
 
578
      REAL*8 COEF_CHECK_THRS
 
579
      COMMON/COEF_CHECK_THRS/COEF_CHECK_THRS
 
580
      REAL*8 DENOM,NUM
 
581
      LOGICAL COMPARE_COEFS_4
 
582
 
 
583
      NUM = ABS(COEFS_A%%C0-COEFS_B%%C0)+SUM(ABS(COEFS_A%%C1-COEFS_B%%C1))
 
584
     $ +SUM(ABS(COEFS_A%%C2-COEFS_B%%C2))+SUM(ABS(COEFS_A%%C3-COEFS_B%%C3))
 
585
     $ +SUM(ABS(COEFS_A%%C4-COEFS_B%%C4))
 
586
      DENOM = ABS(COEFS_A%%C0+COEFS_B%%C0)+SUM(ABS(COEFS_A%%C1+COEFS_B%%C1)
 
587
     $ )+SUM(ABS(COEFS_A%%C2+COEFS_B%%C2))+SUM(ABS(COEFS_A%%C3+COEFS_B%%C3)
 
588
     $ )+SUM(ABS(COEFS_A%%C4+COEFS_B%%C4))
 
589
      IF(DENOM.GT.0D0)THEN
 
590
        COMPARE_COEFS_4=((NUM/DENOM).LT.COEF_CHECK_THRS)
 
591
      ELSE
 
592
        COMPARE_COEFS_4=(NUM.LT.COEF_CHECK_THRS)
 
593
      ENDIF
 
594
 
 
595
      END
 
596
 
 
597
      FUNCTION COMPARE_COEFS_5(COEFS_A,COEFS_B)
 
598
 
 
599
      USE TENS_REC
 
600
      TYPE(COEFF_TYPE_5) COEFS_A,COEFS_B
 
601
      REAL*8 COEF_CHECK_THRS
 
602
      COMMON/COEF_CHECK_THRS/COEF_CHECK_THRS
 
603
      REAL*8 DENOM,NUM
 
604
      LOGICAL COMPARE_COEFS_5
 
605
 
 
606
      NUM = ABS(COEFS_A%%C0-COEFS_B%%C0)+SUM(ABS(COEFS_A%%C1-COEFS_B%%C1))
 
607
     $ +SUM(ABS(COEFS_A%%C2-COEFS_B%%C2))+SUM(ABS(COEFS_A%%C3-COEFS_B%%C3))
 
608
     $ +SUM(ABS(COEFS_A%%C4-COEFS_B%%C4))
 
609
      DENOM = ABS(COEFS_A%%C0+COEFS_B%%C0)+SUM(ABS(COEFS_A%%C1+COEFS_B%%C1)
 
610
     $ )+SUM(ABS(COEFS_A%%C2+COEFS_B%%C2))+SUM(ABS(COEFS_A%%C3+COEFS_B%%C3)
 
611
     $ )+SUM(ABS(COEFS_A%%C4+COEFS_B%%C4))
 
612
      IF(DENOM.GT.0D0)THEN
 
613
        COMPARE_COEFS_5=((NUM/DENOM).LT.COEF_CHECK_THRS)
 
614
      ELSE
 
615
        COMPARE_COEFS_5=(NUM.LT.COEF_CHECK_THRS)
 
616
      ENDIF
 
617
 
 
618
      END
 
619
 
 
620
      FUNCTION COMPARE_COEFS_6(COEFS_A,COEFS_B)
 
621
 
 
622
      USE TENS_REC
 
623
      TYPE(COEFF_TYPE_6) COEFS_A,COEFS_B
 
624
      REAL*8 COEF_CHECK_THRS
 
625
      COMMON/COEF_CHECK_THRS/COEF_CHECK_THRS
 
626
      REAL*8 DENOM,NUM
 
627
      LOGICAL COMPARE_COEFS_6
 
628
 
 
629
      NUM = ABS(COEFS_A%%C0-COEFS_B%%C0)+SUM(ABS(COEFS_A%%C1-COEFS_B%%C1))
 
630
     $ +SUM(ABS(COEFS_A%%C2-COEFS_B%%C2))+SUM(ABS(COEFS_A%%C3-COEFS_B%%C3))
 
631
     $ +SUM(ABS(COEFS_A%%C4-COEFS_B%%C4))
 
632
      DENOM = ABS(COEFS_A%%C0+COEFS_B%%C0)+SUM(ABS(COEFS_A%%C1+COEFS_B%%C1)
 
633
     $ )+SUM(ABS(COEFS_A%%C2+COEFS_B%%C2))+SUM(ABS(COEFS_A%%C3+COEFS_B%%C3)
 
634
     $ )+SUM(ABS(COEFS_A%%C4+COEFS_B%%C4))
 
635
      IF(DENOM.GT.0D0)THEN
 
636
        COMPARE_COEFS_6=((NUM/DENOM).LT.COEF_CHECK_THRS)
 
637
      ELSE
 
638
        COMPARE_COEFS_6=(NUM.LT.COEF_CHECK_THRS)
 
639
      ENDIF
 
640
 
 
641
      END
 
642
 
 
643
 
 
644
      SUBROUTINE FILL_GOLEM_COEFFS_0(ML_COEFS,GOLEM_COEFS)
 
645
      USE PRECISION_GOLEM, ONLY: KI
 
646
      INCLUDE 'coef_specs.inc'
 
647
      INCLUDE 'loop_max_coefs.inc'
 
648
      COMPLEX*16 ML_COEFS(0:LOOPMAXCOEFS-1)
 
649
      COMPLEX(KI) GOLEM_COEFS
 
650
      GOLEM_COEFS=ML_COEFS(0)
 
651
      END
 
652
 
 
653
      SUBROUTINE FILL_GOLEM_COEFFS_1(ML_COEFS,GOLEM_COEFS)
 
654
      USE TENS_REC, ONLY: COEFF_TYPE_1
 
655
      INCLUDE 'coef_specs.inc'
 
656
      INCLUDE 'loop_max_coefs.inc'
 
657
      COMPLEX*16 ML_COEFS(0:LOOPMAXCOEFS-1)
 
658
      TYPE(COEFF_TYPE_1) GOLEM_COEFS
 
659
C     Constant coefficient 
 
660
      GOLEM_COEFS%%C0=ML_COEFS(0)
 
661
C     Coefficient q(0)
 
662
      GOLEM_COEFS%%C1(1,1)=-ML_COEFS(1)
 
663
C     Coefficient q(1)
 
664
      GOLEM_COEFS%%C1(2,1)=-ML_COEFS(2)
 
665
C     Coefficient q(2)
 
666
      GOLEM_COEFS%%C1(3,1)=-ML_COEFS(3)
 
667
C     Coefficient q(3)
 
668
      GOLEM_COEFS%%C1(4,1)=-ML_COEFS(4)
 
669
      END
 
670
 
 
671
      SUBROUTINE FILL_GOLEM_COEFFS_2(ML_COEFS,GOLEM_COEFS)
 
672
      USE TENS_REC, ONLY: COEFF_TYPE_2
 
673
      INCLUDE 'coef_specs.inc'
 
674
      INCLUDE 'loop_max_coefs.inc'
 
675
      COMPLEX*16 ML_COEFS(0:LOOPMAXCOEFS-1)
 
676
      TYPE(COEFF_TYPE_2) GOLEM_COEFS
 
677
C     Constant coefficient 
 
678
      GOLEM_COEFS%%C0=ML_COEFS(0)
 
679
C     Coefficient q(0)
 
680
      GOLEM_COEFS%%C1(1,1)=-ML_COEFS(1)
 
681
C     Coefficient q(0)^2
 
682
      GOLEM_COEFS%%C1(1,2)= ML_COEFS(5)
 
683
C     Coefficient q(1)
 
684
      GOLEM_COEFS%%C1(2,1)=-ML_COEFS(2)
 
685
C     Coefficient q(1)^2
 
686
      GOLEM_COEFS%%C1(2,2)= ML_COEFS(7)
 
687
C     Coefficient q(2)
 
688
      GOLEM_COEFS%%C1(3,1)=-ML_COEFS(3)
 
689
C     Coefficient q(2)^2
 
690
      GOLEM_COEFS%%C1(3,2)= ML_COEFS(10)
 
691
C     Coefficient q(3)
 
692
      GOLEM_COEFS%%C1(4,1)=-ML_COEFS(4)
 
693
C     Coefficient q(3)^2
 
694
      GOLEM_COEFS%%C1(4,2)= ML_COEFS(14)
 
695
C     Coefficient q(0)*q(1)
 
696
      GOLEM_COEFS%%C2(1,1)= ML_COEFS(6)
 
697
C     Coefficient q(0)*q(2)
 
698
      GOLEM_COEFS%%C2(2,1)= ML_COEFS(8)
 
699
C     Coefficient q(0)*q(3)
 
700
      GOLEM_COEFS%%C2(3,1)= ML_COEFS(11)
 
701
C     Coefficient q(1)*q(2)
 
702
      GOLEM_COEFS%%C2(4,1)= ML_COEFS(9)
 
703
C     Coefficient q(1)*q(3)
 
704
      GOLEM_COEFS%%C2(5,1)= ML_COEFS(12)
 
705
C     Coefficient q(2)*q(3)
 
706
      GOLEM_COEFS%%C2(6,1)= ML_COEFS(13)
 
707
      END
 
708
 
 
709
      SUBROUTINE FILL_GOLEM_COEFFS_3(ML_COEFS,GOLEM_COEFS)
 
710
      USE TENS_REC, ONLY: COEFF_TYPE_3
 
711
      INCLUDE 'coef_specs.inc'
 
712
      INCLUDE 'loop_max_coefs.inc'
 
713
      COMPLEX*16 ML_COEFS(0:LOOPMAXCOEFS-1)
 
714
      TYPE(COEFF_TYPE_3) GOLEM_COEFS
 
715
C     Dummy routine for FILL_GOLEM_COEFS_3
 
716
      STOP 'ERROR: 3 > 2'
 
717
      END
 
718
 
 
719
      SUBROUTINE FILL_GOLEM_COEFFS_4(ML_COEFS,GOLEM_COEFS)
 
720
      USE TENS_REC, ONLY: COEFF_TYPE_4
 
721
      INCLUDE 'coef_specs.inc'
 
722
      INCLUDE 'loop_max_coefs.inc'
 
723
      COMPLEX*16 ML_COEFS(0:LOOPMAXCOEFS-1)
 
724
      TYPE(COEFF_TYPE_4) GOLEM_COEFS
 
725
C     Dummy routine for FILL_GOLEM_COEFS_4
 
726
      STOP 'ERROR: 4 > 2'
 
727
      END
 
728
 
 
729
      SUBROUTINE FILL_GOLEM_COEFFS_5(ML_COEFS,GOLEM_COEFS)
 
730
      USE TENS_REC, ONLY: COEFF_TYPE_5
 
731
      INCLUDE 'coef_specs.inc'
 
732
      INCLUDE 'loop_max_coefs.inc'
 
733
      COMPLEX*16 ML_COEFS(0:LOOPMAXCOEFS-1)
 
734
      TYPE(COEFF_TYPE_5) GOLEM_COEFS
 
735
C     Dummy routine for FILL_GOLEM_COEFS_5
 
736
      STOP 'ERROR: 5 > 2'
 
737
      END
 
738
 
 
739
      SUBROUTINE FILL_GOLEM_COEFFS_6(ML_COEFS,GOLEM_COEFS)
 
740
      USE TENS_REC, ONLY: COEFF_TYPE_6
 
741
      INCLUDE 'coef_specs.inc'
 
742
      INCLUDE 'loop_max_coefs.inc'
 
743
      COMPLEX*16 ML_COEFS(0:LOOPMAXCOEFS-1)
 
744
      TYPE(COEFF_TYPE_6) GOLEM_COEFS
 
745
C     Dummy routine for FILL_GOLEM_COEFS_6
 
746
      STOP 'ERROR: 6 > 2'
 
747
      END