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/
11
DATA COEFTORANK_MAP(15:34)/20*3/
13
C Map defining the number of coefficients for a symmetric tensor
16
DATA NCOEF_R/1,5,15,35/
18
C Map defining the coef position resulting from the multiplication
19
C of two lower rank coefs.
20
INTEGER COMB_COEF_POS(0:LOOPMAXCOEFS-1,0:4)
21
DATA COMB_COEF_POS( 0, 0: 4) / 0, 1, 2, 3, 4/
22
DATA COMB_COEF_POS( 1, 0: 4) / 1, 5, 6, 8, 11/
23
DATA COMB_COEF_POS( 2, 0: 4) / 2, 6, 7, 9, 12/
24
DATA COMB_COEF_POS( 3, 0: 4) / 3, 8, 9, 10, 13/
25
DATA COMB_COEF_POS( 4, 0: 4) / 4, 11, 12, 13, 14/
26
DATA COMB_COEF_POS( 5, 0: 4) / 5, 15, 16, 19, 25/
27
DATA COMB_COEF_POS( 6, 0: 4) / 6, 16, 17, 20, 26/
28
DATA COMB_COEF_POS( 7, 0: 4) / 7, 17, 18, 21, 27/
29
DATA COMB_COEF_POS( 8, 0: 4) / 8, 19, 20, 22, 28/
30
DATA COMB_COEF_POS( 9, 0: 4) / 9, 20, 21, 23, 29/
31
DATA COMB_COEF_POS( 10, 0: 4) / 10, 22, 23, 24, 30/
32
DATA COMB_COEF_POS( 11, 0: 4) / 11, 25, 26, 28, 31/
33
DATA COMB_COEF_POS( 12, 0: 4) / 12, 26, 27, 29, 32/
34
DATA COMB_COEF_POS( 13, 0: 4) / 13, 28, 29, 30, 33/
35
DATA COMB_COEF_POS( 14, 0: 4) / 14, 31, 32, 33, 34/
36
DATA COMB_COEF_POS( 15, 0: 4) / 15, 35, 36, 40, 50/
37
DATA COMB_COEF_POS( 16, 0: 4) / 16, 36, 37, 41, 51/
38
DATA COMB_COEF_POS( 17, 0: 4) / 17, 37, 38, 42, 52/
39
DATA COMB_COEF_POS( 18, 0: 4) / 18, 38, 39, 43, 53/
40
DATA COMB_COEF_POS( 19, 0: 4) / 19, 40, 41, 44, 54/
41
DATA COMB_COEF_POS( 20, 0: 4) / 20, 41, 42, 45, 55/
42
DATA COMB_COEF_POS( 21, 0: 4) / 21, 42, 43, 46, 56/
43
DATA COMB_COEF_POS( 22, 0: 4) / 22, 44, 45, 47, 57/
44
DATA COMB_COEF_POS( 23, 0: 4) / 23, 45, 46, 48, 58/
45
DATA COMB_COEF_POS( 24, 0: 4) / 24, 47, 48, 49, 59/
46
DATA COMB_COEF_POS( 25, 0: 4) / 25, 50, 51, 54, 60/
47
DATA COMB_COEF_POS( 26, 0: 4) / 26, 51, 52, 55, 61/
48
DATA COMB_COEF_POS( 27, 0: 4) / 27, 52, 53, 56, 62/
49
DATA COMB_COEF_POS( 28, 0: 4) / 28, 54, 55, 57, 63/
50
DATA COMB_COEF_POS( 29, 0: 4) / 29, 55, 56, 58, 64/
51
DATA COMB_COEF_POS( 30, 0: 4) / 30, 57, 58, 59, 65/
52
DATA COMB_COEF_POS( 31, 0: 4) / 31, 60, 61, 63, 66/
53
DATA COMB_COEF_POS( 32, 0: 4) / 32, 61, 62, 64, 67/
54
DATA COMB_COEF_POS( 33, 0: 4) / 33, 63, 64, 65, 68/
55
DATA COMB_COEF_POS( 34, 0: 4) / 34, 66, 67, 68, 69/
57
END MODULE ML5_0_POLYNOMIAL_CONSTANTS
1
60
C THE SUBROUTINE TO CREATE THE COEFFICIENTS FROM LAST LOOP WF AND
2
61
C MULTIPLY BY THE BORN
4
63
SUBROUTINE ML5_0_CREATE_LOOP_COEFS(LOOP_WF,RANK,LCUT_SIZE
5
64
$ ,LOOP_GROUP_NUMBER,SYMFACT,MULTIPLIER,COLOR_ID,HELCONFIG)
65
USE ML5_0_POLYNOMIAL_CONSTANTS
523
609
SUBROUTINE ML5_0_UPDATE_WL_2_1(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
525
INCLUDE 'coef_specs.inc'
527
COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
611
USE ML5_0_POLYNOMIAL_CONSTANTS
614
COMPLEX*16 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
528
615
COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
529
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
616
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
530
617
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
619
COMPLEX*16 UPDATER_COEF
535
OUT(J,K,I)=(0.0D0,0.0D0)
621
C Welcome to the computational heart of MadLoop...
622
OUT(:,:,:)=(0.0D0,0.0D0)
538
OUT(J,0,I)=OUT(J,0,I)+A(K,0,I)*B(J,0,K)
539
OUT(J,1,I)=OUT(J,1,I)+A(K,0,I)*B(J,1,K)+A(K,1,I)*B(J,0,K)
540
OUT(J,2,I)=OUT(J,2,I)+A(K,0,I)*B(J,2,K)+A(K,2,I)*B(J,0,K)
541
OUT(J,3,I)=OUT(J,3,I)+A(K,0,I)*B(J,3,K)+A(K,3,I)*B(J,0,K)
542
OUT(J,4,I)=OUT(J,4,I)+A(K,0,I)*B(J,4,K)+A(K,4,I)*B(J,0,K)
543
OUT(J,5,I)=OUT(J,5,I)+A(K,1,I)*B(J,1,K)+A(K,5,I)*B(J,0,K)
544
OUT(J,6,I)=OUT(J,6,I)+A(K,1,I)*B(J,2,K)+A(K,2,I)*B(J,1,K)
546
OUT(J,7,I)=OUT(J,7,I)+A(K,2,I)*B(J,2,K)+A(K,7,I)*B(J,0,K)
547
OUT(J,8,I)=OUT(J,8,I)+A(K,1,I)*B(J,3,K)+A(K,3,I)*B(J,1,K)
549
OUT(J,9,I)=OUT(J,9,I)+A(K,2,I)*B(J,3,K)+A(K,3,I)*B(J,2,K)
551
OUT(J,10,I)=OUT(J,10,I)+A(K,3,I)*B(J,3,K)+A(K,10,I)
553
OUT(J,11,I)=OUT(J,11,I)+A(K,1,I)*B(J,4,K)+A(K,4,I)
554
$ *B(J,1,K)+A(K,11,I)*B(J,0,K)
555
OUT(J,12,I)=OUT(J,12,I)+A(K,2,I)*B(J,4,K)+A(K,4,I)
556
$ *B(J,2,K)+A(K,12,I)*B(J,0,K)
557
OUT(J,13,I)=OUT(J,13,I)+A(K,3,I)*B(J,4,K)+A(K,4,I)
558
$ *B(J,3,K)+A(K,13,I)*B(J,0,K)
559
OUT(J,14,I)=OUT(J,14,I)+A(K,4,I)*B(J,4,K)+A(K,14,I)
561
OUT(J,15,I)=OUT(J,15,I)+A(K,5,I)*B(J,1,K)
562
OUT(J,16,I)=OUT(J,16,I)+A(K,5,I)*B(J,2,K)+A(K,6,I)*B(J,1,K)
563
OUT(J,17,I)=OUT(J,17,I)+A(K,6,I)*B(J,2,K)+A(K,7,I)*B(J,1,K)
564
OUT(J,18,I)=OUT(J,18,I)+A(K,7,I)*B(J,2,K)
565
OUT(J,19,I)=OUT(J,19,I)+A(K,5,I)*B(J,3,K)+A(K,8,I)*B(J,1,K)
566
OUT(J,20,I)=OUT(J,20,I)+A(K,6,I)*B(J,3,K)+A(K,8,I)
567
$ *B(J,2,K)+A(K,9,I)*B(J,1,K)
568
OUT(J,21,I)=OUT(J,21,I)+A(K,7,I)*B(J,3,K)+A(K,9,I)*B(J,2,K)
569
OUT(J,22,I)=OUT(J,22,I)+A(K,8,I)*B(J,3,K)+A(K,10,I)
571
OUT(J,23,I)=OUT(J,23,I)+A(K,9,I)*B(J,3,K)+A(K,10,I)
573
OUT(J,24,I)=OUT(J,24,I)+A(K,10,I)*B(J,3,K)
574
OUT(J,25,I)=OUT(J,25,I)+A(K,5,I)*B(J,4,K)+A(K,11,I)
576
OUT(J,26,I)=OUT(J,26,I)+A(K,6,I)*B(J,4,K)+A(K,11,I)
577
$ *B(J,2,K)+A(K,12,I)*B(J,1,K)
578
OUT(J,27,I)=OUT(J,27,I)+A(K,7,I)*B(J,4,K)+A(K,12,I)
580
OUT(J,28,I)=OUT(J,28,I)+A(K,8,I)*B(J,4,K)+A(K,11,I)
581
$ *B(J,3,K)+A(K,13,I)*B(J,1,K)
582
OUT(J,29,I)=OUT(J,29,I)+A(K,9,I)*B(J,4,K)+A(K,12,I)
583
$ *B(J,3,K)+A(K,13,I)*B(J,2,K)
584
OUT(J,30,I)=OUT(J,30,I)+A(K,10,I)*B(J,4,K)+A(K,13,I)
586
OUT(J,31,I)=OUT(J,31,I)+A(K,11,I)*B(J,4,K)+A(K,14,I)
588
OUT(J,32,I)=OUT(J,32,I)+A(K,12,I)*B(J,4,K)+A(K,14,I)
590
OUT(J,33,I)=OUT(J,33,I)+A(K,13,I)*B(J,4,K)+A(K,14,I)
592
OUT(J,34,I)=OUT(J,34,I)+A(K,14,I)*B(J,4,K)
626
UPDATER_COEF = B(J,M,K)
627
IF (UPDATER_COEF.EQ.(0.0D0,0.0D0)) CYCLE
629
NEW_POSITION = COMB_COEF_POS(L,M)
631
OUT(J,NEW_POSITION,I)=OUT(J,NEW_POSITION,I) + A(K,L,I)
598
641
SUBROUTINE MP_ML5_0_UPDATE_WL_2_1(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
600
INCLUDE 'coef_specs.inc'
602
COMPLEX*32 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
643
USE ML5_0_POLYNOMIAL_CONSTANTS
646
COMPLEX*32 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
603
647
COMPLEX*32 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
604
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
648
COMPLEX*32 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
605
649
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
651
COMPLEX*32 UPDATER_COEF
610
OUT(J,K,I)=CMPLX(0.0E0_16,0.0E0_16,KIND=16)
653
C Welcome to the computational heart of MadLoop...
654
OUT(:,:,:)=CMPLX(0.0E0_16,0.0E0_16,KIND=16)
613
OUT(J,0,I)=OUT(J,0,I)+A(K,0,I)*B(J,0,K)
614
OUT(J,1,I)=OUT(J,1,I)+A(K,0,I)*B(J,1,K)+A(K,1,I)*B(J,0,K)
615
OUT(J,2,I)=OUT(J,2,I)+A(K,0,I)*B(J,2,K)+A(K,2,I)*B(J,0,K)
616
OUT(J,3,I)=OUT(J,3,I)+A(K,0,I)*B(J,3,K)+A(K,3,I)*B(J,0,K)
617
OUT(J,4,I)=OUT(J,4,I)+A(K,0,I)*B(J,4,K)+A(K,4,I)*B(J,0,K)
618
OUT(J,5,I)=OUT(J,5,I)+A(K,1,I)*B(J,1,K)+A(K,5,I)*B(J,0,K)
619
OUT(J,6,I)=OUT(J,6,I)+A(K,1,I)*B(J,2,K)+A(K,2,I)*B(J,1,K)
621
OUT(J,7,I)=OUT(J,7,I)+A(K,2,I)*B(J,2,K)+A(K,7,I)*B(J,0,K)
622
OUT(J,8,I)=OUT(J,8,I)+A(K,1,I)*B(J,3,K)+A(K,3,I)*B(J,1,K)
624
OUT(J,9,I)=OUT(J,9,I)+A(K,2,I)*B(J,3,K)+A(K,3,I)*B(J,2,K)
626
OUT(J,10,I)=OUT(J,10,I)+A(K,3,I)*B(J,3,K)+A(K,10,I)
628
OUT(J,11,I)=OUT(J,11,I)+A(K,1,I)*B(J,4,K)+A(K,4,I)
629
$ *B(J,1,K)+A(K,11,I)*B(J,0,K)
630
OUT(J,12,I)=OUT(J,12,I)+A(K,2,I)*B(J,4,K)+A(K,4,I)
631
$ *B(J,2,K)+A(K,12,I)*B(J,0,K)
632
OUT(J,13,I)=OUT(J,13,I)+A(K,3,I)*B(J,4,K)+A(K,4,I)
633
$ *B(J,3,K)+A(K,13,I)*B(J,0,K)
634
OUT(J,14,I)=OUT(J,14,I)+A(K,4,I)*B(J,4,K)+A(K,14,I)
636
OUT(J,15,I)=OUT(J,15,I)+A(K,5,I)*B(J,1,K)
637
OUT(J,16,I)=OUT(J,16,I)+A(K,5,I)*B(J,2,K)+A(K,6,I)*B(J,1,K)
638
OUT(J,17,I)=OUT(J,17,I)+A(K,6,I)*B(J,2,K)+A(K,7,I)*B(J,1,K)
639
OUT(J,18,I)=OUT(J,18,I)+A(K,7,I)*B(J,2,K)
640
OUT(J,19,I)=OUT(J,19,I)+A(K,5,I)*B(J,3,K)+A(K,8,I)*B(J,1,K)
641
OUT(J,20,I)=OUT(J,20,I)+A(K,6,I)*B(J,3,K)+A(K,8,I)
642
$ *B(J,2,K)+A(K,9,I)*B(J,1,K)
643
OUT(J,21,I)=OUT(J,21,I)+A(K,7,I)*B(J,3,K)+A(K,9,I)*B(J,2,K)
644
OUT(J,22,I)=OUT(J,22,I)+A(K,8,I)*B(J,3,K)+A(K,10,I)
646
OUT(J,23,I)=OUT(J,23,I)+A(K,9,I)*B(J,3,K)+A(K,10,I)
648
OUT(J,24,I)=OUT(J,24,I)+A(K,10,I)*B(J,3,K)
649
OUT(J,25,I)=OUT(J,25,I)+A(K,5,I)*B(J,4,K)+A(K,11,I)
651
OUT(J,26,I)=OUT(J,26,I)+A(K,6,I)*B(J,4,K)+A(K,11,I)
652
$ *B(J,2,K)+A(K,12,I)*B(J,1,K)
653
OUT(J,27,I)=OUT(J,27,I)+A(K,7,I)*B(J,4,K)+A(K,12,I)
655
OUT(J,28,I)=OUT(J,28,I)+A(K,8,I)*B(J,4,K)+A(K,11,I)
656
$ *B(J,3,K)+A(K,13,I)*B(J,1,K)
657
OUT(J,29,I)=OUT(J,29,I)+A(K,9,I)*B(J,4,K)+A(K,12,I)
658
$ *B(J,3,K)+A(K,13,I)*B(J,2,K)
659
OUT(J,30,I)=OUT(J,30,I)+A(K,10,I)*B(J,4,K)+A(K,13,I)
661
OUT(J,31,I)=OUT(J,31,I)+A(K,11,I)*B(J,4,K)+A(K,14,I)
663
OUT(J,32,I)=OUT(J,32,I)+A(K,12,I)*B(J,4,K)+A(K,14,I)
665
OUT(J,33,I)=OUT(J,33,I)+A(K,13,I)*B(J,4,K)+A(K,14,I)
667
OUT(J,34,I)=OUT(J,34,I)+A(K,14,I)*B(J,4,K)
658
UPDATER_COEF = B(J,M,K)
659
IF (UPDATER_COEF.EQ.CMPLX(0.0E0_16,0.0E0_16,KIND=16)) CYCLE
661
NEW_POSITION = COMB_COEF_POS(L,M)
663
OUT(J,NEW_POSITION,I)=OUT(J,NEW_POSITION,I) + A(K,L,I)
673
673
SUBROUTINE ML5_0_UPDATE_WL_2_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE
675
INCLUDE 'coef_specs.inc'
675
USE ML5_0_POLYNOMIAL_CONSTANTS
677
COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
677
COMPLEX*16 A(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
678
678
COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
679
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
679
COMPLEX*16 OUT(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
680
680
INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE