1
MODULE ML5_0_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 ML5_0_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 ML5_0_CREATE_LOOP_COEFS(LOOP_WF,RANK,LCUT_SIZE
5
43
$ ,LOOP_GROUP_NUMBER,SYMFACT,MULTIPLIER,COLOR_ID,HELCONFIG)
44
USE ML5_0_POLYNOMIAL_CONSTANTS
80
115
IF(CF_D(COLOR_ID,I).LT.0) CFTOT=CFTOT*IMAG1
81
116
CONST(ML5_0_ML5SOINDEX_FOR_BORN_AMP(I))=CONST(ML5_0_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 ML5_0_MERGE_WL(LOOP_WF,RANK,LCUT_SIZE,CONST(I)
93
128
$ ,LOOPCOEFS(0,ML5_0_ML5SQSOINDEX(I,ML5_0_ML5SOINDEX_FOR_LOOP_
94
$ AMP(COLOR_ID)),LOOP_GROUP_NUMBER))
129
$AMP(COLOR_ID)),LOOP_GROUP_NUMBER))
136
C Now the routines to update the wavefunctions
101
140
C THE SUBROUTINE TO CREATE THE COEFFICIENTS FROM LAST LOOP WF AND
102
141
C MULTIPLY BY THE BORN
104
143
SUBROUTINE MP_ML5_0_CREATE_LOOP_COEFS(LOOP_WF,RANK,LCUT_SIZE
105
144
$ ,LOOP_GROUP_NUMBER,SYMFACT,MULTIPLIER,COLOR_ID,HELCONFIG)
145
USE ML5_0_POLYNOMIAL_CONSTANTS
180
216
IF(CF_D(COLOR_ID,I).LT.0) CFTOT=CFTOT*IMAG1
181
217
CONST(ML5_0_ML5SOINDEX_FOR_BORN_AMP(I))=CONST(ML5_0_ML5SOINDEX_
182
$ FOR_BORN_AMP(I))+CFTOT*CONJG(AMP(I))
218
$FOR_BORN_AMP(I))+CFTOT*CONJG(AMP(I))
186
222
IF (CONST(I).NE.CMPLX_ZERO) THEN
187
223
CONST(I)=(CONST(I)*MULTIPLIER)/SYMFACT
188
IF (.NOT.CHECKPHASE.AND.HELDOUBLECHECKED.AND.HELPICKED.EQ.
224
IF (.NOT.CHECKPHASE.AND.HELDOUBLECHECKED.AND.HELPICKED.EQ.-1)
190
226
CONST(I)=CONST(I)*GOODHEL(HELCONFIG)
192
228
CALL MP_ML5_0_MERGE_WL(LOOP_WF,RANK,LCUT_SIZE,CONST(I)
193
229
$ ,LOOPCOEFS(0,ML5_0_ML5SQSOINDEX(I,ML5_0_ML5SOINDEX_FOR_LOOP_
194
$ AMP(COLOR_ID)),LOOP_GROUP_NUMBER))
230
$AMP(COLOR_ID)),LOOP_GROUP_NUMBER))
237
C Now the routines to update the wavefunctions
201
241
SUBROUTINE ML5_0_EVAL_POLY(C,R,Q,OUT)
202
INCLUDE 'coef_specs.inc'
203
COMPLEX*16 C(0:LOOP_MAXCOEFS-1)
242
USE ML5_0_POLYNOMIAL_CONSTANTS
243
COMPLEX*16 C(0:LOOPMAXCOEFS-1)
205
245
COMPLEX*16 Q(0:3)
213
253
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)
254
$ *Q(2)+C(9)*Q(1)*Q(2)+C(10)*Q(2)*Q(2)+C(11)*Q(0)*Q(3)+C(12)
255
$ *Q(1)*Q(3)+C(13)*Q(2)*Q(3)+C(14)*Q(3)*Q(3)
219
259
SUBROUTINE MP_ML5_0_EVAL_POLY(C,R,Q,OUT)
220
INCLUDE 'coef_specs.inc'
221
COMPLEX*32 C(0:LOOP_MAXCOEFS-1)
260
USE ML5_0_POLYNOMIAL_CONSTANTS
261
COMPLEX*32 C(0:LOOPMAXCOEFS-1)
223
263
COMPLEX*32 Q(0:3)
231
271
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)
272
$ *Q(2)+C(9)*Q(1)*Q(2)+C(10)*Q(2)*Q(2)+C(11)*Q(0)*Q(3)+C(12)
273
$ *Q(1)*Q(3)+C(13)*Q(2)*Q(3)+C(14)*Q(3)*Q(3)
237
277
SUBROUTINE ML5_0_ADD_COEFS(A,RA,B,RB)
238
INCLUDE 'coef_specs.inc'
278
USE ML5_0_POLYNOMIAL_CONSTANTS
240
COMPLEX*16 A(0:LOOP_MAXCOEFS-1),B(0:LOOP_MAXCOEFS-1)
280
COMPLEX*16 A(0:LOOPMAXCOEFS-1),B(0:LOOPMAXCOEFS-1)
246
283
DO I=0,NCOEF_R(RB)-1
251
288
SUBROUTINE MP_ML5_0_ADD_COEFS(A,RA,B,RB)
252
INCLUDE 'coef_specs.inc'
289
USE ML5_0_POLYNOMIAL_CONSTANTS
254
COMPLEX*32 A(0:LOOP_MAXCOEFS-1),B(0:LOOP_MAXCOEFS-1)
291
COMPLEX*32 A(0:LOOPMAXCOEFS-1),B(0:LOOPMAXCOEFS-1)
260
294
DO I=0,NCOEF_R(RB)-1
265
299
SUBROUTINE ML5_0_MERGE_WL(WL,R,LCUT_SIZE,CONST,OUT)
266
INCLUDE 'coef_specs.inc'
300
USE ML5_0_POLYNOMIAL_CONSTANTS
268
COMPLEX*16 WL(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
302
COMPLEX*16 WL(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
269
303
INTEGER R,LCUT_SIZE
271
COMPLEX*16 OUT(0:LOOP_MAXCOEFS-1)
305
COMPLEX*16 OUT(0:LOOPMAXCOEFS-1)
277
308
DO J=0,NCOEF_R(R)-1
301
329
SUBROUTINE ML5_0_UPDATE_WL_0_1(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
303
INCLUDE 'coef_specs.inc'
331
USE ML5_0_POLYNOMIAL_CONSTANTS
305
COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
333
COMPLEX*16 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
306
334
COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
307
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
335
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
308
336
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
326
354
SUBROUTINE MP_ML5_0_UPDATE_WL_0_1(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
328
INCLUDE 'coef_specs.inc'
356
USE ML5_0_POLYNOMIAL_CONSTANTS
330
COMPLEX*32 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
358
COMPLEX*32 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
331
359
COMPLEX*32 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
332
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
360
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
333
361
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
351
379
SUBROUTINE ML5_0_UPDATE_WL_2_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
353
INCLUDE 'coef_specs.inc'
381
USE ML5_0_POLYNOMIAL_CONSTANTS
355
COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
383
COMPLEX*16 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
356
384
COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
357
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
385
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
358
386
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
386
414
SUBROUTINE MP_ML5_0_UPDATE_WL_2_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
388
INCLUDE 'coef_specs.inc'
416
USE ML5_0_POLYNOMIAL_CONSTANTS
390
COMPLEX*32 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
418
COMPLEX*32 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
391
419
COMPLEX*32 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
392
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
420
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
393
421
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
421
449
SUBROUTINE ML5_0_UPDATE_WL_1_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
423
INCLUDE 'coef_specs.inc'
451
USE ML5_0_POLYNOMIAL_CONSTANTS
425
COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
453
COMPLEX*16 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
426
454
COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
427
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
455
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
428
456
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
446
474
SUBROUTINE MP_ML5_0_UPDATE_WL_1_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
448
INCLUDE 'coef_specs.inc'
476
USE ML5_0_POLYNOMIAL_CONSTANTS
450
COMPLEX*32 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
478
COMPLEX*32 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
451
479
COMPLEX*32 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
452
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
480
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
453
481
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
471
499
SUBROUTINE ML5_0_UPDATE_WL_0_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
473
INCLUDE 'coef_specs.inc'
501
USE ML5_0_POLYNOMIAL_CONSTANTS
475
COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
503
COMPLEX*16 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
476
504
COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
477
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
505
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
478
506
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
492
520
SUBROUTINE MP_ML5_0_UPDATE_WL_0_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
494
INCLUDE 'coef_specs.inc'
522
USE ML5_0_POLYNOMIAL_CONSTANTS
496
COMPLEX*32 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
524
COMPLEX*32 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
497
525
COMPLEX*32 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
498
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
526
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
499
527
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
513
541
SUBROUTINE ML5_0_UPDATE_WL_1_1(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
515
INCLUDE 'coef_specs.inc'
543
USE ML5_0_POLYNOMIAL_CONSTANTS
517
COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
545
COMPLEX*16 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
518
546
COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
519
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
547
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
520
548
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
548
576
SUBROUTINE MP_ML5_0_UPDATE_WL_1_1(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
550
INCLUDE 'coef_specs.inc'
578
USE ML5_0_POLYNOMIAL_CONSTANTS
552
COMPLEX*32 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
580
COMPLEX*32 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
553
581
COMPLEX*32 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
554
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
582
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
555
583
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE