1
MODULE MG5_1_POLYNOMIAL_CONSTANTS
3
INCLUDE 'coef_specs.inc'
4
INCLUDE 'loop_max_coefs.inc'
6
C Map associating a rank to each coefficient position
7
INTEGER COEFTORANK_MAP(0:LOOPMAXCOEFS-1)
8
DATA COEFTORANK_MAP(0:0)/1*0/
9
DATA COEFTORANK_MAP(1:4)/4*1/
10
DATA COEFTORANK_MAP(5:14)/10*2/
12
C Map defining the number of coefficients for a symmetric tensor
17
C Map defining the coef position resulting from the multiplication
18
C of two lower rank coefs.
19
INTEGER COMB_COEF_POS(0:LOOPMAXCOEFS-1,0:4)
20
DATA COMB_COEF_POS( 0, 0: 4) / 0, 1, 2, 3, 4/
21
DATA COMB_COEF_POS( 1, 0: 4) / 1, 5, 6, 8, 11/
22
DATA COMB_COEF_POS( 2, 0: 4) / 2, 6, 7, 9, 12/
23
DATA COMB_COEF_POS( 3, 0: 4) / 3, 8, 9, 10, 13/
24
DATA COMB_COEF_POS( 4, 0: 4) / 4, 11, 12, 13, 14/
25
DATA COMB_COEF_POS( 5, 0: 4) / 5, 15, 16, 19, 25/
26
DATA COMB_COEF_POS( 6, 0: 4) / 6, 16, 17, 20, 26/
27
DATA COMB_COEF_POS( 7, 0: 4) / 7, 17, 18, 21, 27/
28
DATA COMB_COEF_POS( 8, 0: 4) / 8, 19, 20, 22, 28/
29
DATA COMB_COEF_POS( 9, 0: 4) / 9, 20, 21, 23, 29/
30
DATA COMB_COEF_POS( 10, 0: 4) / 10, 22, 23, 24, 30/
31
DATA COMB_COEF_POS( 11, 0: 4) / 11, 25, 26, 28, 31/
32
DATA COMB_COEF_POS( 12, 0: 4) / 12, 26, 27, 29, 32/
33
DATA COMB_COEF_POS( 13, 0: 4) / 13, 28, 29, 30, 33/
34
DATA COMB_COEF_POS( 14, 0: 4) / 14, 31, 32, 33, 34/
36
END MODULE MG5_1_POLYNOMIAL_CONSTANTS
1
39
C THE SUBROUTINE TO CREATE THE COEFFICIENTS FROM LAST LOOP WF AND
2
40
C MULTIPLY BY THE BORN
4
42
SUBROUTINE MG5_1_CREATE_LOOP_COEFS(LOOP_WF,RANK,LCUT_SIZE
5
43
$ ,LOOP_GROUP_NUMBER,SYMFACT,MULTIPLIER,COLOR_ID,HELCONFIG)
44
USE MG5_1_POLYNOMIAL_CONSTANTS
80
115
IF(CF_D(COLOR_ID,I).LT.0) CFTOT=CFTOT*IMAG1
81
116
CONST(MG5_1_ML5SOINDEX_FOR_BORN_AMP(I))=CONST(MG5_1_ML5SOINDEX_
82
$ FOR_BORN_AMP(I))+CFTOT*CONJG(AMP(I))
117
$FOR_BORN_AMP(I))+CFTOT*CONJG(AMP(I))
86
121
IF (CONST(I).NE.CMPLX_ZERO) THEN
87
122
CONST(I)=(CONST(I)*MULTIPLIER)/SYMFACT
88
IF (.NOT.CHECKPHASE.AND.HELDOUBLECHECKED.AND.HELPICKED.EQ.
123
IF (.NOT.CHECKPHASE.AND.HELDOUBLECHECKED.AND.HELPICKED.EQ.-1)
90
125
CONST(I)=CONST(I)*GOODHEL(HELCONFIG)
92
127
CALL MG5_1_MERGE_WL(LOOP_WF,RANK,LCUT_SIZE,CONST(I)
93
128
$ ,LOOPCOEFS(0,MG5_1_ML5SQSOINDEX(I,MG5_1_ML5SOINDEX_FOR_LOOP_
94
$ AMP(COLOR_ID)),LOOP_GROUP_NUMBER))
129
$AMP(COLOR_ID)),LOOP_GROUP_NUMBER))
135
SUBROUTINE MG5_1_INVERT_MOMENTA_IN_POLYNOMIAL(NCOEFS,POLYNOMIAL)
136
C Just a handy subroutine to modify the coefficients for the
137
C tranformation q_loop -> -q_loop
138
C It is only used for the NINJA interface
139
USE MG5_1_POLYNOMIAL_CONSTANTS
144
COMPLEX*16 POLYNOMIAL(0:NCOEFS-1)
147
IF (MOD(COEFTORANK_MAP(I),2).EQ.1) THEN
148
POLYNOMIAL(I)=-POLYNOMIAL(I)
154
C Now the routines to update the wavefunctions
101
158
C THE SUBROUTINE TO CREATE THE COEFFICIENTS FROM LAST LOOP WF AND
180
234
IF(CF_D(COLOR_ID,I).LT.0) CFTOT=CFTOT*IMAG1
181
235
CONST(MG5_1_ML5SOINDEX_FOR_BORN_AMP(I))=CONST(MG5_1_ML5SOINDEX_
182
$ FOR_BORN_AMP(I))+CFTOT*CONJG(AMP(I))
236
$FOR_BORN_AMP(I))+CFTOT*CONJG(AMP(I))
186
240
IF (CONST(I).NE.CMPLX_ZERO) THEN
187
241
CONST(I)=(CONST(I)*MULTIPLIER)/SYMFACT
188
IF (.NOT.CHECKPHASE.AND.HELDOUBLECHECKED.AND.HELPICKED.EQ.
242
IF (.NOT.CHECKPHASE.AND.HELDOUBLECHECKED.AND.HELPICKED.EQ.-1)
190
244
CONST(I)=CONST(I)*GOODHEL(HELCONFIG)
192
246
CALL MP_MG5_1_MERGE_WL(LOOP_WF,RANK,LCUT_SIZE,CONST(I)
193
247
$ ,LOOPCOEFS(0,MG5_1_ML5SQSOINDEX(I,MG5_1_ML5SOINDEX_FOR_LOOP_
194
$ AMP(COLOR_ID)),LOOP_GROUP_NUMBER))
248
$AMP(COLOR_ID)),LOOP_GROUP_NUMBER))
254
SUBROUTINE MP_MG5_1_INVERT_MOMENTA_IN_POLYNOMIAL(NCOEFS
256
C Just a handy subroutine to modify the coefficients for the
257
C tranformation q_loop -> -q_loop
258
C It is only used for the NINJA interface
259
USE MG5_1_POLYNOMIAL_CONSTANTS
264
COMPLEX*32 POLYNOMIAL(0:NCOEFS-1)
267
IF (MOD(COEFTORANK_MAP(I),2).EQ.1) THEN
268
POLYNOMIAL(I)=-POLYNOMIAL(I)
274
C Now the routines to update the wavefunctions
201
278
SUBROUTINE MG5_1_EVAL_POLY(C,R,Q,OUT)
202
INCLUDE 'coef_specs.inc'
203
COMPLEX*16 C(0:LOOP_MAXCOEFS-1)
279
USE MG5_1_POLYNOMIAL_CONSTANTS
280
COMPLEX*16 C(0:LOOPMAXCOEFS-1)
205
282
COMPLEX*16 Q(0:3)
213
290
OUT=OUT+C(5)*Q(0)*Q(0)+C(6)*Q(0)*Q(1)+C(7)*Q(1)*Q(1)+C(8)*Q(0)
214
$ *Q(2)+C(9)*Q(1)*Q(2)+C(10)*Q(2)*Q(2)+C(11)*Q(0)*Q(3)
215
$ +C(12)*Q(1)*Q(3)+C(13)*Q(2)*Q(3)+C(14)*Q(3)*Q(3)
291
$ *Q(2)+C(9)*Q(1)*Q(2)+C(10)*Q(2)*Q(2)+C(11)*Q(0)*Q(3)+C(12)
292
$ *Q(1)*Q(3)+C(13)*Q(2)*Q(3)+C(14)*Q(3)*Q(3)
219
296
SUBROUTINE MP_MG5_1_EVAL_POLY(C,R,Q,OUT)
220
INCLUDE 'coef_specs.inc'
221
COMPLEX*32 C(0:LOOP_MAXCOEFS-1)
297
USE MG5_1_POLYNOMIAL_CONSTANTS
298
COMPLEX*32 C(0:LOOPMAXCOEFS-1)
223
300
COMPLEX*32 Q(0:3)
231
308
OUT=OUT+C(5)*Q(0)*Q(0)+C(6)*Q(0)*Q(1)+C(7)*Q(1)*Q(1)+C(8)*Q(0)
232
$ *Q(2)+C(9)*Q(1)*Q(2)+C(10)*Q(2)*Q(2)+C(11)*Q(0)*Q(3)
233
$ +C(12)*Q(1)*Q(3)+C(13)*Q(2)*Q(3)+C(14)*Q(3)*Q(3)
309
$ *Q(2)+C(9)*Q(1)*Q(2)+C(10)*Q(2)*Q(2)+C(11)*Q(0)*Q(3)+C(12)
310
$ *Q(1)*Q(3)+C(13)*Q(2)*Q(3)+C(14)*Q(3)*Q(3)
237
314
SUBROUTINE MG5_1_ADD_COEFS(A,RA,B,RB)
238
INCLUDE 'coef_specs.inc'
315
USE MG5_1_POLYNOMIAL_CONSTANTS
240
COMPLEX*16 A(0:LOOP_MAXCOEFS-1),B(0:LOOP_MAXCOEFS-1)
317
COMPLEX*16 A(0:LOOPMAXCOEFS-1),B(0:LOOPMAXCOEFS-1)
246
320
DO I=0,NCOEF_R(RB)-1
251
325
SUBROUTINE MP_MG5_1_ADD_COEFS(A,RA,B,RB)
252
INCLUDE 'coef_specs.inc'
326
USE MG5_1_POLYNOMIAL_CONSTANTS
254
COMPLEX*32 A(0:LOOP_MAXCOEFS-1),B(0:LOOP_MAXCOEFS-1)
328
COMPLEX*32 A(0:LOOPMAXCOEFS-1),B(0:LOOPMAXCOEFS-1)
260
331
DO I=0,NCOEF_R(RB)-1
265
336
SUBROUTINE MG5_1_MERGE_WL(WL,R,LCUT_SIZE,CONST,OUT)
266
INCLUDE 'coef_specs.inc'
337
USE MG5_1_POLYNOMIAL_CONSTANTS
268
COMPLEX*16 WL(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
339
COMPLEX*16 WL(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
269
340
INTEGER R,LCUT_SIZE
271
COMPLEX*16 OUT(0:LOOP_MAXCOEFS-1)
342
COMPLEX*16 OUT(0:LOOPMAXCOEFS-1)
277
345
DO J=0,NCOEF_R(R)-1
301
366
SUBROUTINE MG5_1_UPDATE_WL_0_1(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
303
INCLUDE 'coef_specs.inc'
368
USE MG5_1_POLYNOMIAL_CONSTANTS
305
COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
370
COMPLEX*16 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
306
371
COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
307
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
372
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
308
373
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
326
391
SUBROUTINE MP_MG5_1_UPDATE_WL_0_1(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
328
INCLUDE 'coef_specs.inc'
393
USE MG5_1_POLYNOMIAL_CONSTANTS
330
COMPLEX*32 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
395
COMPLEX*32 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
331
396
COMPLEX*32 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
332
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
397
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
333
398
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
351
416
SUBROUTINE MG5_1_UPDATE_WL_2_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
353
INCLUDE 'coef_specs.inc'
418
USE MG5_1_POLYNOMIAL_CONSTANTS
355
COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
420
COMPLEX*16 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
356
421
COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
357
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
422
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
358
423
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
386
451
SUBROUTINE MP_MG5_1_UPDATE_WL_2_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
388
INCLUDE 'coef_specs.inc'
453
USE MG5_1_POLYNOMIAL_CONSTANTS
390
COMPLEX*32 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
455
COMPLEX*32 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
391
456
COMPLEX*32 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
392
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
457
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
393
458
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
421
486
SUBROUTINE MG5_1_UPDATE_WL_1_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
423
INCLUDE 'coef_specs.inc'
488
USE MG5_1_POLYNOMIAL_CONSTANTS
425
COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
490
COMPLEX*16 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
426
491
COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
427
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
492
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
428
493
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
446
511
SUBROUTINE MP_MG5_1_UPDATE_WL_1_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
448
INCLUDE 'coef_specs.inc'
513
USE MG5_1_POLYNOMIAL_CONSTANTS
450
COMPLEX*32 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
515
COMPLEX*32 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
451
516
COMPLEX*32 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
452
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
517
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
453
518
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
471
536
SUBROUTINE MG5_1_UPDATE_WL_0_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
473
INCLUDE 'coef_specs.inc'
538
USE MG5_1_POLYNOMIAL_CONSTANTS
475
COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
540
COMPLEX*16 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
476
541
COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
477
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
542
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
478
543
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
492
557
SUBROUTINE MP_MG5_1_UPDATE_WL_0_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
494
INCLUDE 'coef_specs.inc'
559
USE MG5_1_POLYNOMIAL_CONSTANTS
496
COMPLEX*32 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
561
COMPLEX*32 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
497
562
COMPLEX*32 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
498
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
563
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
499
564
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
513
578
SUBROUTINE MG5_1_UPDATE_WL_1_1(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
515
INCLUDE 'coef_specs.inc'
580
USE MG5_1_POLYNOMIAL_CONSTANTS
517
COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
582
COMPLEX*16 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
518
583
COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
519
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
584
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
520
585
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
548
613
SUBROUTINE MP_MG5_1_UPDATE_WL_1_1(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
550
INCLUDE 'coef_specs.inc'
615
USE MG5_1_POLYNOMIAL_CONSTANTS
552
COMPLEX*32 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
617
COMPLEX*32 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
553
618
COMPLEX*32 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
554
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
619
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
555
620
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE