~madteam/mg5amcnlo/series2.0

« back to all changes in this revision

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

  • Committer: olivier Mattelaer
  • Date: 2014-06-11 19:47:48 UTC
  • mfrom: (253.1.38 2.1.2)
  • mto: (253.1.70 2.1.2)
  • mto: This revision was merged to the branch mainline in revision 254.
  • Revision ID: olivier.mattelaer@uclouvain.be-20140611194748-nhxx3210gudd1qfw
merge with 2.1.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
C     THE SUBROUTINE TO CREATE THE COEFFICIENTS FROM LAST LOOP WF AND 
 
2
C     MULTIPLY BY THE BORN
 
3
 
 
4
      SUBROUTINE CREATE_LOOP_COEFS(LOOP_WF,RANK,LCUT_SIZE,LOOP_COEFS
 
5
     $ ,SYMFACT,COLOR_ID,HELCONFIG)
 
6
      IMPLICIT NONE
 
7
C     
 
8
C     CONSTANTS 
 
9
C     
 
10
      INTEGER NBORNAMPS
 
11
      PARAMETER (NBORNAMPS=2)
 
12
      COMPLEX*16 IMAG1
 
13
      PARAMETER (IMAG1=(0D0,1D0))
 
14
      INTEGER MAXLWFSIZE
 
15
      PARAMETER (MAXLWFSIZE=4)
 
16
      INTEGER LOOPMAXCOEFS
 
17
      PARAMETER (LOOPMAXCOEFS=35)
 
18
      INTEGER    NCOLORROWS
 
19
      PARAMETER (NCOLORROWS=39)
 
20
      INTEGER    NLOOPGROUPS
 
21
      PARAMETER (NLOOPGROUPS=9)
 
22
      INTEGER    NCOMB
 
23
      PARAMETER (NCOMB=32)
 
24
C     
 
25
C     ARGUMENTS 
 
26
C     
 
27
      COMPLEX*16 LOOP_WF(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
 
28
      INTEGER RANK, COLOR_ID, SYMFACT, LCUT_SIZE, HELCONFIG
 
29
      COMPLEX*16 LOOP_COEFS(LOOPMAXCOEFS)
 
30
C     
 
31
C     LOCAL VARIABLES 
 
32
C     
 
33
      COMPLEX*16 CFTOT
 
34
      COMPLEX*16 CONST
 
35
      INTEGER I,H
 
36
C     
 
37
C     GLOBAL VARIABLES
 
38
C     
 
39
      INTEGER CF_D(NCOLORROWS,NBORNAMPS)
 
40
      INTEGER CF_N(NCOLORROWS,NBORNAMPS)
 
41
      COMMON/CF/CF_D,CF_N
 
42
 
 
43
      LOGICAL CHECKPHASE
 
44
      LOGICAL HELDOUBLECHECKED
 
45
      COMMON/INIT/CHECKPHASE, HELDOUBLECHECKED
 
46
 
 
47
      INTEGER HELOFFSET
 
48
      INTEGER GOODHEL(NCOMB)
 
49
      LOGICAL GOODAMP(NLOOPGROUPS)
 
50
      COMMON/FILTERS/GOODAMP,GOODHEL,HELOFFSET
 
51
 
 
52
      INTEGER HELPICKED
 
53
      COMMON/HELCHOICE/HELPICKED
 
54
 
 
55
      COMPLEX*16 AMP(NBORNAMPS)
 
56
      COMMON/AMPS/AMP
 
57
 
 
58
      CONST=(0.0D0,0.0D0)
 
59
 
 
60
      DO I=1,NBORNAMPS
 
61
        CFTOT=DCMPLX(CF_N(COLOR_ID,I)/DBLE(ABS(CF_D(COLOR_ID,I)))
 
62
     $   ,0.0D0)
 
63
        IF(CF_D(COLOR_ID,I).LT.0) CFTOT=CFTOT*IMAG1
 
64
        CONST=CONST+CFTOT*DCONJG(AMP(I))
 
65
      ENDDO
 
66
      CONST=CONST/SYMFACT
 
67
      IF (.NOT.CHECKPHASE.AND.HELDOUBLECHECKED.AND.HELPICKED.EQ.
 
68
     $ -1) THEN
 
69
        CONST=CONST*GOODHEL(HELCONFIG)
 
70
      ENDIF
 
71
      CALL MERGE_WL(LOOP_WF,RANK,LCUT_SIZE,CONST,LOOP_COEFS)
 
72
 
 
73
      END
 
74
 
 
75
      SUBROUTINE MP_CREATE_LOOP_COEFS(LOOP_WF,RANK,LCUT_SIZE,LOOP_COEFS
 
76
     $ ,SYMFACT,COLOR_ID,HELCONFIG)
 
77
C     
 
78
C     CONSTANTS 
 
79
C     
 
80
      INTEGER NBORNAMPS
 
81
      PARAMETER (NBORNAMPS=2)
 
82
      COMPLEX*32 IMAG1
 
83
      PARAMETER (IMAG1=(0E0_16,1E0_16))
 
84
      INTEGER MAXLWFSIZE
 
85
      PARAMETER (MAXLWFSIZE=4)
 
86
      INTEGER LOOPMAXCOEFS
 
87
      PARAMETER (LOOPMAXCOEFS=35)
 
88
      INTEGER    NCOLORROWS
 
89
      PARAMETER (NCOLORROWS=39)
 
90
      INTEGER    NLOOPGROUPS
 
91
      PARAMETER (NLOOPGROUPS=9)
 
92
      INTEGER    NCOMB
 
93
      PARAMETER (NCOMB=32)
 
94
C     
 
95
C     ARGUMENTS 
 
96
C     
 
97
      COMPLEX*32 LOOP_WF(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE)
 
98
      INTEGER RANK, COLOR_ID, SYMFACT, LCUT_SIZE, HELCONFIG
 
99
      COMPLEX*32 LOOP_COEFS(LOOPMAXCOEFS)
 
100
C     
 
101
C     LOCAL VARIABLES 
 
102
C     
 
103
      COMPLEX*32 CFTOT
 
104
      COMPLEX*32 CONST
 
105
      INTEGER I,H
 
106
C     
 
107
C     GLOBAL VARIABLES
 
108
C     
 
109
      INTEGER CF_D(NCOLORROWS,NBORNAMPS)
 
110
      INTEGER CF_N(NCOLORROWS,NBORNAMPS)
 
111
      COMMON/CF/CF_D,CF_N
 
112
 
 
113
      LOGICAL CHECKPHASE
 
114
      LOGICAL HELDOUBLECHECKED
 
115
      COMMON/INIT/CHECKPHASE, HELDOUBLECHECKED
 
116
 
 
117
      INTEGER HELOFFSET
 
118
      INTEGER GOODHEL(NCOMB)
 
119
      LOGICAL GOODAMP(NLOOPGROUPS)
 
120
      COMMON/FILTERS/GOODAMP,GOODHEL,HELOFFSET
 
121
 
 
122
      INTEGER HELPICKED
 
123
      COMMON/HELCHOICE/HELPICKED
 
124
 
 
125
      COMPLEX*32 AMP(NBORNAMPS)
 
126
      COMMON/MP_AMPS/AMP
 
127
 
 
128
      CONST=(0.0E0_16,0.0E0_16)
 
129
 
 
130
      DO I=1,NBORNAMPS
 
131
        CFTOT=CMPLX(CF_N(COLOR_ID,I)/REAL(ABS(CF_D(COLOR_ID,I))
 
132
     $   ,KIND=16),0.0E0_16,KIND=16)
 
133
        IF(CF_D(COLOR_ID,I).LT.0) CFTOT=CFTOT*IMAG1
 
134
        CONST=CONST+CFTOT*CONJG(AMP(I))
 
135
      ENDDO
 
136
      CONST=CONST/SYMFACT
 
137
      IF (.NOT.CHECKPHASE.AND.HELDOUBLECHECKED.AND.HELPICKED.EQ.
 
138
     $ -1) THEN
 
139
        CONST=CONST*GOODHEL(HELCONFIG)
 
140
      ENDIF
 
141
      CALL MP_MERGE_WL(LOOP_WF,RANK,LCUT_SIZE,CONST,LOOP_COEFS)
 
142
 
 
143
      END
 
144
 
 
145
 
 
146
      SUBROUTINE EVAL_POLY(C,R,Q,OUT)
 
147
      INCLUDE 'coef_specs.inc'
 
148
      COMPLEX*16 C(0:LOOP_MAXCOEFS-1)
 
149
      INTEGER R
 
150
      COMPLEX*16 Q(0:3)
 
151
      COMPLEX*16 OUT
 
152
 
 
153
      OUT=C(0)
 
154
      IF (R.GE.1) THEN
 
155
        OUT=OUT+C(1)*Q(0)+C(2)*Q(1)+C(3)*Q(2)+C(4)*Q(3)
 
156
      ENDIF
 
157
      IF (R.GE.2) THEN
 
158
        OUT=OUT+C(5)*Q(0)*Q(0)+C(6)*Q(0)*Q(1)+C(7)*Q(0)*Q(2)+C(8)*Q(0)
 
159
     $   *Q(3)+C(9)*Q(1)*Q(1)+C(10)*Q(1)*Q(2)+C(11)*Q(1)*Q(3)
 
160
     $   +C(12)*Q(2)*Q(2)+C(13)*Q(2)*Q(3)+C(14)*Q(3)*Q(3)
 
161
      ENDIF
 
162
      IF (R.GE.3) THEN
 
163
        OUT=OUT+C(15)*Q(0)*Q(0)*Q(0)+C(16)*Q(0)*Q(0)*Q(1)+C(17)*Q(0)
 
164
     $   *Q(0)*Q(2)+C(18)*Q(0)*Q(0)*Q(3)+C(19)*Q(0)*Q(1)*Q(1)
 
165
     $   +C(20)*Q(0)*Q(1)*Q(2)+C(21)*Q(0)*Q(1)*Q(3)+C(22)*Q(0)*Q(2)
 
166
     $   *Q(2)+C(23)*Q(0)*Q(2)*Q(3)+C(24)*Q(0)*Q(3)*Q(3)+C(25)*Q(1)
 
167
     $   *Q(1)*Q(1)+C(26)*Q(1)*Q(1)*Q(2)+C(27)*Q(1)*Q(1)*Q(3)
 
168
     $   +C(28)*Q(1)*Q(2)*Q(2)+C(29)*Q(1)*Q(2)*Q(3)+C(30)*Q(1)*Q(3)
 
169
     $   *Q(3)+C(31)*Q(2)*Q(2)*Q(2)+C(32)*Q(2)*Q(2)*Q(3)+C(33)*Q(2)
 
170
     $   *Q(3)*Q(3)+C(34)*Q(3)*Q(3)*Q(3)
 
171
      ENDIF
 
172
      END
 
173
 
 
174
      SUBROUTINE MP_EVAL_POLY(C,R,Q,OUT)
 
175
      INCLUDE 'coef_specs.inc'
 
176
      COMPLEX*32 C(0:LOOP_MAXCOEFS-1)
 
177
      INTEGER R
 
178
      COMPLEX*32 Q(0:3)
 
179
      COMPLEX*32 OUT
 
180
 
 
181
      OUT=C(0)
 
182
      IF (R.GE.1) THEN
 
183
        OUT=OUT+C(1)*Q(0)+C(2)*Q(1)+C(3)*Q(2)+C(4)*Q(3)
 
184
      ENDIF
 
185
      IF (R.GE.2) THEN
 
186
        OUT=OUT+C(5)*Q(0)*Q(0)+C(6)*Q(0)*Q(1)+C(7)*Q(0)*Q(2)+C(8)*Q(0)
 
187
     $   *Q(3)+C(9)*Q(1)*Q(1)+C(10)*Q(1)*Q(2)+C(11)*Q(1)*Q(3)
 
188
     $   +C(12)*Q(2)*Q(2)+C(13)*Q(2)*Q(3)+C(14)*Q(3)*Q(3)
 
189
      ENDIF
 
190
      IF (R.GE.3) THEN
 
191
        OUT=OUT+C(15)*Q(0)*Q(0)*Q(0)+C(16)*Q(0)*Q(0)*Q(1)+C(17)*Q(0)
 
192
     $   *Q(0)*Q(2)+C(18)*Q(0)*Q(0)*Q(3)+C(19)*Q(0)*Q(1)*Q(1)
 
193
     $   +C(20)*Q(0)*Q(1)*Q(2)+C(21)*Q(0)*Q(1)*Q(3)+C(22)*Q(0)*Q(2)
 
194
     $   *Q(2)+C(23)*Q(0)*Q(2)*Q(3)+C(24)*Q(0)*Q(3)*Q(3)+C(25)*Q(1)
 
195
     $   *Q(1)*Q(1)+C(26)*Q(1)*Q(1)*Q(2)+C(27)*Q(1)*Q(1)*Q(3)
 
196
     $   +C(28)*Q(1)*Q(2)*Q(2)+C(29)*Q(1)*Q(2)*Q(3)+C(30)*Q(1)*Q(3)
 
197
     $   *Q(3)+C(31)*Q(2)*Q(2)*Q(2)+C(32)*Q(2)*Q(2)*Q(3)+C(33)*Q(2)
 
198
     $   *Q(3)*Q(3)+C(34)*Q(3)*Q(3)*Q(3)
 
199
      ENDIF
 
200
      END
 
201
 
 
202
      SUBROUTINE ADD_COEFS(A,RA,B,RB)
 
203
      INCLUDE 'coef_specs.inc'
 
204
      INTEGER I
 
205
      COMPLEX*16 A(0:LOOP_MAXCOEFS-1),B(0:LOOP_MAXCOEFS-1)
 
206
      INTEGER RA,RB
 
207
 
 
208
      INTEGER NCOEF_R(0:3)
 
209
      DATA NCOEF_R/1,5,15,35/
 
210
 
 
211
      DO I=0,NCOEF_R(RB)-1
 
212
        A(I)=A(I)+B(I)
 
213
      ENDDO
 
214
      END
 
215
 
 
216
      SUBROUTINE MP_ADD_COEFS(A,RA,B,RB)
 
217
      INCLUDE 'coef_specs.inc'
 
218
      INTEGER I
 
219
      COMPLEX*32 A(0:LOOP_MAXCOEFS-1),B(0:LOOP_MAXCOEFS-1)
 
220
      INTEGER RA,RB
 
221
 
 
222
      INTEGER NCOEF_R(0:3)
 
223
      DATA NCOEF_R/1,5,15,35/
 
224
 
 
225
      DO I=0,NCOEF_R(RB)-1
 
226
        A(I)=A(I)+B(I)
 
227
      ENDDO
 
228
      END
 
229
 
 
230
      SUBROUTINE MERGE_WL(WL,R,LCUT_SIZE,CONST,OUT)
 
231
      INCLUDE 'coef_specs.inc'
 
232
      INTEGER I,J
 
233
      COMPLEX*16 WL(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
234
      INTEGER R,LCUT_SIZE
 
235
      COMPLEX*16 CONST
 
236
      COMPLEX*16 OUT(0:LOOP_MAXCOEFS-1)
 
237
 
 
238
      INTEGER NCOEF_R(0:3)
 
239
      DATA NCOEF_R/1,5,15,35/
 
240
 
 
241
      DO I=1,LCUT_SIZE
 
242
        DO J=0,NCOEF_R(R)-1
 
243
          OUT(J)=OUT(J)+WL(I,J,I)*CONST
 
244
        ENDDO
 
245
      ENDDO
 
246
      END
 
247
 
 
248
      SUBROUTINE MP_MERGE_WL(WL,R,LCUT_SIZE,CONST,OUT)
 
249
      INCLUDE 'coef_specs.inc'
 
250
      INTEGER I,J
 
251
      COMPLEX*32 WL(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
252
      INTEGER R,LCUT_SIZE
 
253
      COMPLEX*32 CONST
 
254
      COMPLEX*32 OUT(0:LOOP_MAXCOEFS-1)
 
255
 
 
256
      INTEGER NCOEF_R(0:3)
 
257
      DATA NCOEF_R/1,5,15,35/
 
258
 
 
259
      DO I=1,LCUT_SIZE
 
260
        DO J=0,NCOEF_R(R)-1
 
261
          OUT(J)=OUT(J)+WL(I,J,I)*CONST
 
262
        ENDDO
 
263
      ENDDO
 
264
      END
 
265
 
 
266
      SUBROUTINE UPDATE_WL_0_1(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE,OUT)
 
267
      INCLUDE 'coef_specs.inc'
 
268
      INTEGER I,J,K
 
269
      COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
270
      COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
 
271
      COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
272
      INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
 
273
 
 
274
      DO I=1,LCUT_SIZE
 
275
        DO J=1,OUT_SIZE
 
276
          DO K=0,4
 
277
            OUT(J,K,I)=(0.0D0,0.0D0)
 
278
          ENDDO
 
279
          DO K=1,IN_SIZE
 
280
            OUT(J,0,I)=OUT(J,0,I)+A(K,0,I)*B(J,0,K)
 
281
            OUT(J,1,I)=OUT(J,1,I)+A(K,0,I)*B(J,1,K)
 
282
            OUT(J,2,I)=OUT(J,2,I)+A(K,0,I)*B(J,2,K)
 
283
            OUT(J,3,I)=OUT(J,3,I)+A(K,0,I)*B(J,3,K)
 
284
            OUT(J,4,I)=OUT(J,4,I)+A(K,0,I)*B(J,4,K)
 
285
          ENDDO
 
286
        ENDDO
 
287
      ENDDO
 
288
      END
 
289
 
 
290
      SUBROUTINE MP_UPDATE_WL_0_1(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE,OUT)
 
291
      INCLUDE 'coef_specs.inc'
 
292
      INTEGER I,J,K
 
293
      COMPLEX*32 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
294
      COMPLEX*32 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
 
295
      COMPLEX*32 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
296
      INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
 
297
 
 
298
      DO I=1,LCUT_SIZE
 
299
        DO J=1,OUT_SIZE
 
300
          DO K=0,4
 
301
            OUT(J,K,I)=CMPLX(0.0E0_16,0.0E0_16,KIND=16)
 
302
          ENDDO
 
303
          DO K=1,IN_SIZE
 
304
            OUT(J,0,I)=OUT(J,0,I)+A(K,0,I)*B(J,0,K)
 
305
            OUT(J,1,I)=OUT(J,1,I)+A(K,0,I)*B(J,1,K)
 
306
            OUT(J,2,I)=OUT(J,2,I)+A(K,0,I)*B(J,2,K)
 
307
            OUT(J,3,I)=OUT(J,3,I)+A(K,0,I)*B(J,3,K)
 
308
            OUT(J,4,I)=OUT(J,4,I)+A(K,0,I)*B(J,4,K)
 
309
          ENDDO
 
310
        ENDDO
 
311
      ENDDO
 
312
      END
 
313
 
 
314
      SUBROUTINE UPDATE_WL_2_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE,OUT)
 
315
      INCLUDE 'coef_specs.inc'
 
316
      INTEGER I,J,K
 
317
      COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
318
      COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
 
319
      COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
320
      INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
 
321
 
 
322
      DO I=1,LCUT_SIZE
 
323
        DO J=1,OUT_SIZE
 
324
          DO K=0,14
 
325
            OUT(J,K,I)=(0.0D0,0.0D0)
 
326
          ENDDO
 
327
          DO K=1,IN_SIZE
 
328
            OUT(J,0,I)=OUT(J,0,I)+A(K,0,I)*B(J,0,K)
 
329
            OUT(J,1,I)=OUT(J,1,I)+A(K,1,I)*B(J,0,K)
 
330
            OUT(J,2,I)=OUT(J,2,I)+A(K,2,I)*B(J,0,K)
 
331
            OUT(J,3,I)=OUT(J,3,I)+A(K,3,I)*B(J,0,K)
 
332
            OUT(J,4,I)=OUT(J,4,I)+A(K,4,I)*B(J,0,K)
 
333
            OUT(J,5,I)=OUT(J,5,I)+A(K,5,I)*B(J,0,K)
 
334
            OUT(J,6,I)=OUT(J,6,I)+A(K,6,I)*B(J,0,K)
 
335
            OUT(J,7,I)=OUT(J,7,I)+A(K,7,I)*B(J,0,K)
 
336
            OUT(J,8,I)=OUT(J,8,I)+A(K,8,I)*B(J,0,K)
 
337
            OUT(J,9,I)=OUT(J,9,I)+A(K,9,I)*B(J,0,K)
 
338
            OUT(J,10,I)=OUT(J,10,I)+A(K,10,I)*B(J,0,K)
 
339
            OUT(J,11,I)=OUT(J,11,I)+A(K,11,I)*B(J,0,K)
 
340
            OUT(J,12,I)=OUT(J,12,I)+A(K,12,I)*B(J,0,K)
 
341
            OUT(J,13,I)=OUT(J,13,I)+A(K,13,I)*B(J,0,K)
 
342
            OUT(J,14,I)=OUT(J,14,I)+A(K,14,I)*B(J,0,K)
 
343
          ENDDO
 
344
        ENDDO
 
345
      ENDDO
 
346
      END
 
347
 
 
348
      SUBROUTINE MP_UPDATE_WL_2_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE,OUT)
 
349
      INCLUDE 'coef_specs.inc'
 
350
      INTEGER I,J,K
 
351
      COMPLEX*32 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
352
      COMPLEX*32 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
 
353
      COMPLEX*32 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
354
      INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
 
355
 
 
356
      DO I=1,LCUT_SIZE
 
357
        DO J=1,OUT_SIZE
 
358
          DO K=0,14
 
359
            OUT(J,K,I)=CMPLX(0.0E0_16,0.0E0_16,KIND=16)
 
360
          ENDDO
 
361
          DO K=1,IN_SIZE
 
362
            OUT(J,0,I)=OUT(J,0,I)+A(K,0,I)*B(J,0,K)
 
363
            OUT(J,1,I)=OUT(J,1,I)+A(K,1,I)*B(J,0,K)
 
364
            OUT(J,2,I)=OUT(J,2,I)+A(K,2,I)*B(J,0,K)
 
365
            OUT(J,3,I)=OUT(J,3,I)+A(K,3,I)*B(J,0,K)
 
366
            OUT(J,4,I)=OUT(J,4,I)+A(K,4,I)*B(J,0,K)
 
367
            OUT(J,5,I)=OUT(J,5,I)+A(K,5,I)*B(J,0,K)
 
368
            OUT(J,6,I)=OUT(J,6,I)+A(K,6,I)*B(J,0,K)
 
369
            OUT(J,7,I)=OUT(J,7,I)+A(K,7,I)*B(J,0,K)
 
370
            OUT(J,8,I)=OUT(J,8,I)+A(K,8,I)*B(J,0,K)
 
371
            OUT(J,9,I)=OUT(J,9,I)+A(K,9,I)*B(J,0,K)
 
372
            OUT(J,10,I)=OUT(J,10,I)+A(K,10,I)*B(J,0,K)
 
373
            OUT(J,11,I)=OUT(J,11,I)+A(K,11,I)*B(J,0,K)
 
374
            OUT(J,12,I)=OUT(J,12,I)+A(K,12,I)*B(J,0,K)
 
375
            OUT(J,13,I)=OUT(J,13,I)+A(K,13,I)*B(J,0,K)
 
376
            OUT(J,14,I)=OUT(J,14,I)+A(K,14,I)*B(J,0,K)
 
377
          ENDDO
 
378
        ENDDO
 
379
      ENDDO
 
380
      END
 
381
 
 
382
      SUBROUTINE UPDATE_WL_0_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE,OUT)
 
383
      INCLUDE 'coef_specs.inc'
 
384
      INTEGER I,J,K
 
385
      COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
386
      COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
 
387
      COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
388
      INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
 
389
 
 
390
      DO I=1,LCUT_SIZE
 
391
        DO J=1,OUT_SIZE
 
392
          DO K=0,0
 
393
            OUT(J,K,I)=(0.0D0,0.0D0)
 
394
          ENDDO
 
395
          DO K=1,IN_SIZE
 
396
            OUT(J,0,I)=OUT(J,0,I)+A(K,0,I)*B(J,0,K)
 
397
          ENDDO
 
398
        ENDDO
 
399
      ENDDO
 
400
      END
 
401
 
 
402
      SUBROUTINE MP_UPDATE_WL_0_0(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE,OUT)
 
403
      INCLUDE 'coef_specs.inc'
 
404
      INTEGER I,J,K
 
405
      COMPLEX*32 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
406
      COMPLEX*32 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
 
407
      COMPLEX*32 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
408
      INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
 
409
 
 
410
      DO I=1,LCUT_SIZE
 
411
        DO J=1,OUT_SIZE
 
412
          DO K=0,0
 
413
            OUT(J,K,I)=CMPLX(0.0E0_16,0.0E0_16,KIND=16)
 
414
          ENDDO
 
415
          DO K=1,IN_SIZE
 
416
            OUT(J,0,I)=OUT(J,0,I)+A(K,0,I)*B(J,0,K)
 
417
          ENDDO
 
418
        ENDDO
 
419
      ENDDO
 
420
      END
 
421
 
 
422
      SUBROUTINE UPDATE_WL_1_1(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE,OUT)
 
423
      INCLUDE 'coef_specs.inc'
 
424
      INTEGER I,J,K
 
425
      COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
426
      COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
 
427
      COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
428
      INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
 
429
 
 
430
      DO I=1,LCUT_SIZE
 
431
        DO J=1,OUT_SIZE
 
432
          DO K=0,14
 
433
            OUT(J,K,I)=(0.0D0,0.0D0)
 
434
          ENDDO
 
435
          DO K=1,IN_SIZE
 
436
            OUT(J,0,I)=OUT(J,0,I)+A(K,0,I)*B(J,0,K)
 
437
            OUT(J,1,I)=OUT(J,1,I)+A(K,0,I)*B(J,1,K)+A(K,1,I)*B(J,0,K)
 
438
            OUT(J,2,I)=OUT(J,2,I)+A(K,0,I)*B(J,2,K)+A(K,2,I)*B(J,0,K)
 
439
            OUT(J,3,I)=OUT(J,3,I)+A(K,0,I)*B(J,3,K)+A(K,3,I)*B(J,0,K)
 
440
            OUT(J,4,I)=OUT(J,4,I)+A(K,0,I)*B(J,4,K)+A(K,4,I)*B(J,0,K)
 
441
            OUT(J,5,I)=OUT(J,5,I)+A(K,1,I)*B(J,1,K)
 
442
            OUT(J,6,I)=OUT(J,6,I)+A(K,1,I)*B(J,2,K)+A(K,2,I)*B(J,1,K)
 
443
            OUT(J,7,I)=OUT(J,7,I)+A(K,1,I)*B(J,3,K)+A(K,3,I)*B(J,1,K)
 
444
            OUT(J,8,I)=OUT(J,8,I)+A(K,1,I)*B(J,4,K)+A(K,4,I)*B(J,1,K)
 
445
            OUT(J,9,I)=OUT(J,9,I)+A(K,2,I)*B(J,2,K)
 
446
            OUT(J,10,I)=OUT(J,10,I)+A(K,2,I)*B(J,3,K)+A(K,3,I)*B(J,2,K)
 
447
            OUT(J,11,I)=OUT(J,11,I)+A(K,2,I)*B(J,4,K)+A(K,4,I)*B(J,2,K)
 
448
            OUT(J,12,I)=OUT(J,12,I)+A(K,3,I)*B(J,3,K)
 
449
            OUT(J,13,I)=OUT(J,13,I)+A(K,3,I)*B(J,4,K)+A(K,4,I)*B(J,3,K)
 
450
            OUT(J,14,I)=OUT(J,14,I)+A(K,4,I)*B(J,4,K)
 
451
          ENDDO
 
452
        ENDDO
 
453
      ENDDO
 
454
      END
 
455
 
 
456
      SUBROUTINE MP_UPDATE_WL_1_1(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE,OUT)
 
457
      INCLUDE 'coef_specs.inc'
 
458
      INTEGER I,J,K
 
459
      COMPLEX*32 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
460
      COMPLEX*32 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
 
461
      COMPLEX*32 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
462
      INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
 
463
 
 
464
      DO I=1,LCUT_SIZE
 
465
        DO J=1,OUT_SIZE
 
466
          DO K=0,14
 
467
            OUT(J,K,I)=CMPLX(0.0E0_16,0.0E0_16,KIND=16)
 
468
          ENDDO
 
469
          DO K=1,IN_SIZE
 
470
            OUT(J,0,I)=OUT(J,0,I)+A(K,0,I)*B(J,0,K)
 
471
            OUT(J,1,I)=OUT(J,1,I)+A(K,0,I)*B(J,1,K)+A(K,1,I)*B(J,0,K)
 
472
            OUT(J,2,I)=OUT(J,2,I)+A(K,0,I)*B(J,2,K)+A(K,2,I)*B(J,0,K)
 
473
            OUT(J,3,I)=OUT(J,3,I)+A(K,0,I)*B(J,3,K)+A(K,3,I)*B(J,0,K)
 
474
            OUT(J,4,I)=OUT(J,4,I)+A(K,0,I)*B(J,4,K)+A(K,4,I)*B(J,0,K)
 
475
            OUT(J,5,I)=OUT(J,5,I)+A(K,1,I)*B(J,1,K)
 
476
            OUT(J,6,I)=OUT(J,6,I)+A(K,1,I)*B(J,2,K)+A(K,2,I)*B(J,1,K)
 
477
            OUT(J,7,I)=OUT(J,7,I)+A(K,1,I)*B(J,3,K)+A(K,3,I)*B(J,1,K)
 
478
            OUT(J,8,I)=OUT(J,8,I)+A(K,1,I)*B(J,4,K)+A(K,4,I)*B(J,1,K)
 
479
            OUT(J,9,I)=OUT(J,9,I)+A(K,2,I)*B(J,2,K)
 
480
            OUT(J,10,I)=OUT(J,10,I)+A(K,2,I)*B(J,3,K)+A(K,3,I)*B(J,2,K)
 
481
            OUT(J,11,I)=OUT(J,11,I)+A(K,2,I)*B(J,4,K)+A(K,4,I)*B(J,2,K)
 
482
            OUT(J,12,I)=OUT(J,12,I)+A(K,3,I)*B(J,3,K)
 
483
            OUT(J,13,I)=OUT(J,13,I)+A(K,3,I)*B(J,4,K)+A(K,4,I)*B(J,3,K)
 
484
            OUT(J,14,I)=OUT(J,14,I)+A(K,4,I)*B(J,4,K)
 
485
          ENDDO
 
486
        ENDDO
 
487
      ENDDO
 
488
      END
 
489
 
 
490
      SUBROUTINE UPDATE_WL_2_1(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE,OUT)
 
491
      INCLUDE 'coef_specs.inc'
 
492
      INTEGER I,J,K
 
493
      COMPLEX*16 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
494
      COMPLEX*16 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
 
495
      COMPLEX*16 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
496
      INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
 
497
 
 
498
      DO I=1,LCUT_SIZE
 
499
        DO J=1,OUT_SIZE
 
500
          DO K=0,34
 
501
            OUT(J,K,I)=(0.0D0,0.0D0)
 
502
          ENDDO
 
503
          DO K=1,IN_SIZE
 
504
            OUT(J,0,I)=OUT(J,0,I)+A(K,0,I)*B(J,0,K)
 
505
            OUT(J,1,I)=OUT(J,1,I)+A(K,0,I)*B(J,1,K)+A(K,1,I)*B(J,0,K)
 
506
            OUT(J,2,I)=OUT(J,2,I)+A(K,0,I)*B(J,2,K)+A(K,2,I)*B(J,0,K)
 
507
            OUT(J,3,I)=OUT(J,3,I)+A(K,0,I)*B(J,3,K)+A(K,3,I)*B(J,0,K)
 
508
            OUT(J,4,I)=OUT(J,4,I)+A(K,0,I)*B(J,4,K)+A(K,4,I)*B(J,0,K)
 
509
            OUT(J,5,I)=OUT(J,5,I)+A(K,1,I)*B(J,1,K)+A(K,5,I)*B(J,0,K)
 
510
            OUT(J,6,I)=OUT(J,6,I)+A(K,1,I)*B(J,2,K)+A(K,2,I)*B(J,1,K)
 
511
     $       +A(K,6,I)*B(J,0,K)
 
512
            OUT(J,7,I)=OUT(J,7,I)+A(K,1,I)*B(J,3,K)+A(K,3,I)*B(J,1,K)
 
513
     $       +A(K,7,I)*B(J,0,K)
 
514
            OUT(J,8,I)=OUT(J,8,I)+A(K,1,I)*B(J,4,K)+A(K,4,I)*B(J,1,K)
 
515
     $       +A(K,8,I)*B(J,0,K)
 
516
            OUT(J,9,I)=OUT(J,9,I)+A(K,2,I)*B(J,2,K)+A(K,9,I)*B(J,0,K)
 
517
            OUT(J,10,I)=OUT(J,10,I)+A(K,2,I)*B(J,3,K)+A(K,3,I)
 
518
     $       *B(J,2,K)+A(K,10,I)*B(J,0,K)
 
519
            OUT(J,11,I)=OUT(J,11,I)+A(K,2,I)*B(J,4,K)+A(K,4,I)
 
520
     $       *B(J,2,K)+A(K,11,I)*B(J,0,K)
 
521
            OUT(J,12,I)=OUT(J,12,I)+A(K,3,I)*B(J,3,K)+A(K,12,I)
 
522
     $       *B(J,0,K)
 
523
            OUT(J,13,I)=OUT(J,13,I)+A(K,3,I)*B(J,4,K)+A(K,4,I)
 
524
     $       *B(J,3,K)+A(K,13,I)*B(J,0,K)
 
525
            OUT(J,14,I)=OUT(J,14,I)+A(K,4,I)*B(J,4,K)+A(K,14,I)
 
526
     $       *B(J,0,K)
 
527
            OUT(J,15,I)=OUT(J,15,I)+A(K,5,I)*B(J,1,K)
 
528
            OUT(J,16,I)=OUT(J,16,I)+A(K,5,I)*B(J,2,K)+A(K,6,I)*B(J,1,K)
 
529
            OUT(J,17,I)=OUT(J,17,I)+A(K,5,I)*B(J,3,K)+A(K,7,I)*B(J,1,K)
 
530
            OUT(J,18,I)=OUT(J,18,I)+A(K,5,I)*B(J,4,K)+A(K,8,I)*B(J,1,K)
 
531
            OUT(J,19,I)=OUT(J,19,I)+A(K,6,I)*B(J,2,K)+A(K,9,I)*B(J,1,K)
 
532
            OUT(J,20,I)=OUT(J,20,I)+A(K,6,I)*B(J,3,K)+A(K,7,I)
 
533
     $       *B(J,2,K)+A(K,10,I)*B(J,1,K)
 
534
            OUT(J,21,I)=OUT(J,21,I)+A(K,6,I)*B(J,4,K)+A(K,8,I)
 
535
     $       *B(J,2,K)+A(K,11,I)*B(J,1,K)
 
536
            OUT(J,22,I)=OUT(J,22,I)+A(K,7,I)*B(J,3,K)+A(K,12,I)
 
537
     $       *B(J,1,K)
 
538
            OUT(J,23,I)=OUT(J,23,I)+A(K,7,I)*B(J,4,K)+A(K,8,I)
 
539
     $       *B(J,3,K)+A(K,13,I)*B(J,1,K)
 
540
            OUT(J,24,I)=OUT(J,24,I)+A(K,8,I)*B(J,4,K)+A(K,14,I)
 
541
     $       *B(J,1,K)
 
542
            OUT(J,25,I)=OUT(J,25,I)+A(K,9,I)*B(J,2,K)
 
543
            OUT(J,26,I)=OUT(J,26,I)+A(K,9,I)*B(J,3,K)+A(K,10,I)
 
544
     $       *B(J,2,K)
 
545
            OUT(J,27,I)=OUT(J,27,I)+A(K,9,I)*B(J,4,K)+A(K,11,I)
 
546
     $       *B(J,2,K)
 
547
            OUT(J,28,I)=OUT(J,28,I)+A(K,10,I)*B(J,3,K)+A(K,12,I)
 
548
     $       *B(J,2,K)
 
549
            OUT(J,29,I)=OUT(J,29,I)+A(K,10,I)*B(J,4,K)+A(K,11,I)
 
550
     $       *B(J,3,K)+A(K,13,I)*B(J,2,K)
 
551
            OUT(J,30,I)=OUT(J,30,I)+A(K,11,I)*B(J,4,K)+A(K,14,I)
 
552
     $       *B(J,2,K)
 
553
            OUT(J,31,I)=OUT(J,31,I)+A(K,12,I)*B(J,3,K)
 
554
            OUT(J,32,I)=OUT(J,32,I)+A(K,12,I)*B(J,4,K)+A(K,13,I)
 
555
     $       *B(J,3,K)
 
556
            OUT(J,33,I)=OUT(J,33,I)+A(K,13,I)*B(J,4,K)+A(K,14,I)
 
557
     $       *B(J,3,K)
 
558
            OUT(J,34,I)=OUT(J,34,I)+A(K,14,I)*B(J,4,K)
 
559
          ENDDO
 
560
        ENDDO
 
561
      ENDDO
 
562
      END
 
563
 
 
564
      SUBROUTINE MP_UPDATE_WL_2_1(A,LCUT_SIZE,B,IN_SIZE,OUT_SIZE,OUT)
 
565
      INCLUDE 'coef_specs.inc'
 
566
      INTEGER I,J,K
 
567
      COMPLEX*32 A(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
568
      COMPLEX*32 B(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
 
569
      COMPLEX*32 OUT(MAXLWFSIZE,0:LOOP_MAXCOEFS-1,MAXLWFSIZE)
 
570
      INTEGER LCUT_SIZE,IN_SIZE,OUT_SIZE
 
571
 
 
572
      DO I=1,LCUT_SIZE
 
573
        DO J=1,OUT_SIZE
 
574
          DO K=0,34
 
575
            OUT(J,K,I)=CMPLX(0.0E0_16,0.0E0_16,KIND=16)
 
576
          ENDDO
 
577
          DO K=1,IN_SIZE
 
578
            OUT(J,0,I)=OUT(J,0,I)+A(K,0,I)*B(J,0,K)
 
579
            OUT(J,1,I)=OUT(J,1,I)+A(K,0,I)*B(J,1,K)+A(K,1,I)*B(J,0,K)
 
580
            OUT(J,2,I)=OUT(J,2,I)+A(K,0,I)*B(J,2,K)+A(K,2,I)*B(J,0,K)
 
581
            OUT(J,3,I)=OUT(J,3,I)+A(K,0,I)*B(J,3,K)+A(K,3,I)*B(J,0,K)
 
582
            OUT(J,4,I)=OUT(J,4,I)+A(K,0,I)*B(J,4,K)+A(K,4,I)*B(J,0,K)
 
583
            OUT(J,5,I)=OUT(J,5,I)+A(K,1,I)*B(J,1,K)+A(K,5,I)*B(J,0,K)
 
584
            OUT(J,6,I)=OUT(J,6,I)+A(K,1,I)*B(J,2,K)+A(K,2,I)*B(J,1,K)
 
585
     $       +A(K,6,I)*B(J,0,K)
 
586
            OUT(J,7,I)=OUT(J,7,I)+A(K,1,I)*B(J,3,K)+A(K,3,I)*B(J,1,K)
 
587
     $       +A(K,7,I)*B(J,0,K)
 
588
            OUT(J,8,I)=OUT(J,8,I)+A(K,1,I)*B(J,4,K)+A(K,4,I)*B(J,1,K)
 
589
     $       +A(K,8,I)*B(J,0,K)
 
590
            OUT(J,9,I)=OUT(J,9,I)+A(K,2,I)*B(J,2,K)+A(K,9,I)*B(J,0,K)
 
591
            OUT(J,10,I)=OUT(J,10,I)+A(K,2,I)*B(J,3,K)+A(K,3,I)
 
592
     $       *B(J,2,K)+A(K,10,I)*B(J,0,K)
 
593
            OUT(J,11,I)=OUT(J,11,I)+A(K,2,I)*B(J,4,K)+A(K,4,I)
 
594
     $       *B(J,2,K)+A(K,11,I)*B(J,0,K)
 
595
            OUT(J,12,I)=OUT(J,12,I)+A(K,3,I)*B(J,3,K)+A(K,12,I)
 
596
     $       *B(J,0,K)
 
597
            OUT(J,13,I)=OUT(J,13,I)+A(K,3,I)*B(J,4,K)+A(K,4,I)
 
598
     $       *B(J,3,K)+A(K,13,I)*B(J,0,K)
 
599
            OUT(J,14,I)=OUT(J,14,I)+A(K,4,I)*B(J,4,K)+A(K,14,I)
 
600
     $       *B(J,0,K)
 
601
            OUT(J,15,I)=OUT(J,15,I)+A(K,5,I)*B(J,1,K)
 
602
            OUT(J,16,I)=OUT(J,16,I)+A(K,5,I)*B(J,2,K)+A(K,6,I)*B(J,1,K)
 
603
            OUT(J,17,I)=OUT(J,17,I)+A(K,5,I)*B(J,3,K)+A(K,7,I)*B(J,1,K)
 
604
            OUT(J,18,I)=OUT(J,18,I)+A(K,5,I)*B(J,4,K)+A(K,8,I)*B(J,1,K)
 
605
            OUT(J,19,I)=OUT(J,19,I)+A(K,6,I)*B(J,2,K)+A(K,9,I)*B(J,1,K)
 
606
            OUT(J,20,I)=OUT(J,20,I)+A(K,6,I)*B(J,3,K)+A(K,7,I)
 
607
     $       *B(J,2,K)+A(K,10,I)*B(J,1,K)
 
608
            OUT(J,21,I)=OUT(J,21,I)+A(K,6,I)*B(J,4,K)+A(K,8,I)
 
609
     $       *B(J,2,K)+A(K,11,I)*B(J,1,K)
 
610
            OUT(J,22,I)=OUT(J,22,I)+A(K,7,I)*B(J,3,K)+A(K,12,I)
 
611
     $       *B(J,1,K)
 
612
            OUT(J,23,I)=OUT(J,23,I)+A(K,7,I)*B(J,4,K)+A(K,8,I)
 
613
     $       *B(J,3,K)+A(K,13,I)*B(J,1,K)
 
614
            OUT(J,24,I)=OUT(J,24,I)+A(K,8,I)*B(J,4,K)+A(K,14,I)
 
615
     $       *B(J,1,K)
 
616
            OUT(J,25,I)=OUT(J,25,I)+A(K,9,I)*B(J,2,K)
 
617
            OUT(J,26,I)=OUT(J,26,I)+A(K,9,I)*B(J,3,K)+A(K,10,I)
 
618
     $       *B(J,2,K)
 
619
            OUT(J,27,I)=OUT(J,27,I)+A(K,9,I)*B(J,4,K)+A(K,11,I)
 
620
     $       *B(J,2,K)
 
621
            OUT(J,28,I)=OUT(J,28,I)+A(K,10,I)*B(J,3,K)+A(K,12,I)
 
622
     $       *B(J,2,K)
 
623
            OUT(J,29,I)=OUT(J,29,I)+A(K,10,I)*B(J,4,K)+A(K,11,I)
 
624
     $       *B(J,3,K)+A(K,13,I)*B(J,2,K)
 
625
            OUT(J,30,I)=OUT(J,30,I)+A(K,11,I)*B(J,4,K)+A(K,14,I)
 
626
     $       *B(J,2,K)
 
627
            OUT(J,31,I)=OUT(J,31,I)+A(K,12,I)*B(J,3,K)
 
628
            OUT(J,32,I)=OUT(J,32,I)+A(K,12,I)*B(J,4,K)+A(K,13,I)
 
629
     $       *B(J,3,K)
 
630
            OUT(J,33,I)=OUT(J,33,I)+A(K,13,I)*B(J,4,K)+A(K,14,I)
 
631
     $       *B(J,3,K)
 
632
            OUT(J,34,I)=OUT(J,34,I)+A(K,14,I)*B(J,4,K)
 
633
          ENDDO
 
634
        ENDDO
 
635
      ENDDO
 
636
      END