1
SUBROUTINE MP_COMPUTE_LOOP_COEFS(PS,ANSDP)
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
7
C Returns amplitude squared summed/avg over colors
8
C and helicities for the point in phase space P(0:3,NEXTERNAL)
9
C and external lines W(0:6,NEXTERNAL)
11
C Process: d~ u > ve e+ [ all = QCD QED ] QCD^2<=0 QED^2<=6
12
C Process: s~ c > ve e+ [ all = QCD QED ] QCD^2<=0 QED^2<=6
16
USE POLYNOMIAL_CONSTANTS
22
CHARACTER*64 PARAMFILENAME
23
PARAMETER ( PARAMFILENAME='MadLoopParams.dat')
25
PARAMETER (NBORNAMPS=1)
26
INTEGER NLOOPS, NLOOPGROUPS, NCTAMPS
27
PARAMETER (NLOOPS=35, NLOOPGROUPS=25, NCTAMPS=15)
29
PARAMETER (NLOOPAMPS=50)
31
PARAMETER (NCOLORROWS=NLOOPAMPS)
33
PARAMETER (NEXTERNAL=4)
34
INTEGER NWAVEFUNCS,NLOOPWAVEFUNCS
35
PARAMETER (NWAVEFUNCS=6,NLOOPWAVEFUNCS=73)
39
PARAMETER (ZERO=0E0_16)
41
PARAMETER (IMAG1=(0E0_16,1E0_16))
43
PARAMETER (DP_IMAG1=(0D0,1D0))
44
C These are constants related to the split orders
45
INTEGER NSO, NSQUAREDSO, NAMPSO
46
PARAMETER (NSO=2, NSQUAREDSO=1, NAMPSO=2)
52
REAL*16 PS(0:3,NEXTERNAL)
53
REAL*8 ANSDP(3,0:NSQUAREDSO)
58
LOGICAL COMPUTE_INTEGRAND_IN_QP
59
INTEGER I,J,K,H,HEL_MULT,ITEMP
65
INTEGER NHEL(NEXTERNAL), IC(NEXTERNAL)
66
REAL*16 MP_P(0:3,NEXTERNAL)
67
REAL*8 P(0:3,NEXTERNAL)
70
REAL*16 ANS(3,0:NSQUAREDSO)
71
COMPLEX*32 COEFS(MAXLWFSIZE,0:VERTEXMAXCOEFS-1,MAXLWFSIZE)
77
LOGICAL IS_HEL_SELECTED
78
INTEGER ML5SOINDEX_FOR_BORN_AMP
79
INTEGER ML5SOINDEX_FOR_LOOP_AMP
84
INCLUDE 'mp_coupl_same_name.inc'
86
INCLUDE 'MadLoopParams.inc'
88
LOGICAL CHECKPHASE, HELDOUBLECHECKED
89
COMMON/INIT/CHECKPHASE, HELDOUBLECHECKED
92
INTEGER GOODHEL(NCOMB)
93
LOGICAL GOODAMP(NSQUAREDSO,NLOOPGROUPS)
94
COMMON/FILTERS/GOODAMP,GOODHEL,HELOFFSET
97
COMMON/HELCHOICE/HELPICKED
100
COMMON/USERCHOICE/USERHEL
103
COMMON/SOCHOICE/SQSO_TARGET
105
LOGICAL UVCT_REQ_SO_DONE,MP_UVCT_REQ_SO_DONE,CT_REQ_SO_DONE
106
$ ,MP_CT_REQ_SO_DONE,LOOP_REQ_SO_DONE,MP_LOOP_REQ_SO_DONE
107
$ ,CTCALL_REQ_SO_DONE,FILTER_SO
108
COMMON/SO_REQS/UVCT_REQ_SO_DONE,MP_UVCT_REQ_SO_DONE
109
$ ,CT_REQ_SO_DONE,MP_CT_REQ_SO_DONE,LOOP_REQ_SO_DONE
110
$ ,MP_LOOP_REQ_SO_DONE,CTCALL_REQ_SO_DONE,FILTER_SO
112
COMPLEX*32 AMP(NBORNAMPS)
114
COMPLEX*16 DP_AMP(NBORNAMPS)
116
COMPLEX*32 W(20,NWAVEFUNCS)
119
COMPLEX*16 DPW(20,NWAVEFUNCS)
122
COMPLEX*32 WL(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE,
124
COMPLEX*32 PL(0:3,-1:NLOOPWAVEFUNCS)
127
COMPLEX*16 DP_WL(MAXLWFSIZE,0:LOOPMAXCOEFS-1,MAXLWFSIZE,
129
COMPLEX*16 DP_PL(0:3,-1:NLOOPWAVEFUNCS)
130
COMMON/WL/DP_WL,DP_PL
132
COMPLEX*32 LOOPCOEFS(0:LOOPMAXCOEFS-1,NSQUAREDSO,NLOOPGROUPS)
133
COMMON/MP_LCOEFS/LOOPCOEFS
135
COMPLEX*16 DP_LOOPCOEFS(0:LOOPMAXCOEFS-1,NSQUAREDSO,NLOOPGROUPS)
136
COMMON/LCOEFS/DP_LOOPCOEFS
139
COMPLEX*32 AMPL(3,NCTAMPS)
142
COMPLEX*16 DP_AMPL(3,NCTAMPS)
146
INTEGER CF_D(NCOLORROWS,NBORNAMPS)
147
INTEGER CF_N(NCOLORROWS,NBORNAMPS)
150
INTEGER HELC(NEXTERNAL,NCOMB)
151
COMMON/HELCONFIGS/HELC
154
COMMON/MP_DONE_ONCE/MP_DONE_ONCE
157
COMMON/I_LIB/LIBINDEX
159
C This array specify potential special requirements on the
161
C consider. POLARIZATIONS(0,0) is -1 if there is not such
163
INTEGER POLARIZATIONS(0:NEXTERNAL,0:5)
164
COMMON/BEAM_POL/POLARIZATIONS
170
C Decide whether to really compute the integrand in quadruple
171
C precision or to fake it and copy the double precision
172
C computation in the quadruple precision variables.
173
COMPUTE_INTEGRAND_IN_QP = ((MLREDUCTIONLIB(LIBINDEX)
174
$ .EQ.6.AND.USEQPINTEGRANDFORNINJA) .OR. (MLREDUCTIONLIB(LIBINDEX)
175
$ .EQ.1.AND.USEQPINTEGRANDFORCUTTOOLS))
177
C To be on the safe side, we always update the MP params here.
178
C It can be redundant as this routine can be called a couple of
179
C times for the same PS point during the stability checks.
180
C But it is really not time consuming and I would rather be safe.
181
CALL MP_UPDATE_AS_PARAM()
183
MP_DONE_ONCE = .TRUE.
185
C AS A SAFETY MEASURE WE FIRST COPY HERE THE PS POINT
189
P(J,I) = REAL(PS(J,I),KIND=8)
194
PL(I,-1)=CMPLX(ZERO,ZERO,KIND=16)
195
PL(I,0)=CMPLX(ZERO,ZERO,KIND=16)
196
IF (.NOT.COMPUTE_INTEGRAND_IN_QP) THEN
197
DP_PL(I,-1)=DCMPLX(0.0D0,0.0D0)
198
DP_PL(I,0)=DCMPLX(0.0D0,0.0D0)
203
DO J=0,LOOPMAXCOEFS-1
205
WL(I,J,K,-1)=(ZERO,ZERO)
206
DP_WL(I,J,K,-1)=(0.0D0,0.0D0)
207
IF (I.EQ.K.AND.J.EQ.0) THEN
208
WL(I,J,K,0)=(1.0E0_16,ZERO)
210
WL(I,J,K,0)=(ZERO,ZERO)
212
IF (.NOT.COMPUTE_INTEGRAND_IN_QP) THEN
213
IF (I.EQ.K.AND.J.EQ.0) THEN
214
DP_WL(I,J,K,0)=(1.0D0,0.0D0)
216
DP_WL(I,J,K,0)=(0.0D0,0.0D0)
223
C This is the chare conjugate version of the unit 4-currents in
224
C the canonical cartesian basis.
225
C This, for now, is only defined for 4-fermionic currents.
226
WL(1,0,2,-1) = (-1.0E0_16,ZERO)
227
WL(2,0,1,-1) = (1.0E0_16,ZERO)
228
WL(3,0,4,-1) = (1.0E0_16,ZERO)
229
WL(4,0,3,-1) = (-1.0E0_16,ZERO)
230
DP_WL(1,0,2,-1) = DCMPLX(-1.0D0,0.0D0)
231
DP_WL(2,0,1,-1) = DCMPLX(1.0D0,0.0D0)
232
DP_WL(3,0,4,-1) = DCMPLX(1.0D0,0.0D0)
233
DP_WL(4,0,3,-1) = DCMPLX(-1.0D0,0.0D0)
238
AMPL(K,I)=(ZERO,ZERO)
239
IF (.NOT.COMPUTE_INTEGRAND_IN_QP) THEN
240
DP_AMPL(K,I)=(0.0D0,0.0D0)
247
DP_AMP(I) = (0.0D0,0.0D0)
248
AMP(I) = (ZERO, ZERO)
252
DO J=0,LOOPMAXCOEFS-1
254
LOOPCOEFS(J,K,I)=(ZERO,ZERO)
255
IF (.NOT.COMPUTE_INTEGRAND_IN_QP) THEN
256
DP_LOOPCOEFS(J,K,I)=(0.0D0,0.0D0)
271
IF ((HELPICKED.EQ.H).OR.((HELPICKED.EQ.-1)
272
$ .AND.(CHECKPHASE.OR.(.NOT.HELDOUBLECHECKED).OR.(GOODHEL(H)
273
$ .GT.-HELOFFSET.AND.GOODHEL(H).NE.0)))) THEN
275
C Handle the possible requirement of specific polarizations
276
IF ((.NOT.CHECKPHASE)
277
$ .AND.HELDOUBLECHECKED.AND.POLARIZATIONS(0,0)
278
$ .EQ.0.AND.(.NOT.IS_HEL_SELECTED(H))) THEN
286
IF (COMPUTE_INTEGRAND_IN_QP) THEN
287
MP_UVCT_REQ_SO_DONE=.FALSE.
288
MP_CT_REQ_SO_DONE=.FALSE.
289
MP_LOOP_REQ_SO_DONE=.FALSE.
291
UVCT_REQ_SO_DONE=.FALSE.
292
CT_REQ_SO_DONE=.FALSE.
293
LOOP_REQ_SO_DONE=.FALSE.
296
IF (.NOT.CHECKPHASE.AND.HELDOUBLECHECKED.AND.HELPICKED.EQ.-1)
304
IF (COMPUTE_INTEGRAND_IN_QP) THEN
305
CALL MP_HELAS_CALLS_AMPB_1(MP_P,NHEL,H,IC)
308
CALL HELAS_CALLS_AMPB_1(P,NHEL,H,IC)
313
MP_CT_REQ_SO_DONE=.TRUE.
315
IF (COMPUTE_INTEGRAND_IN_QP) THEN
323
IF (.NOT.COMPUTE_INTEGRAND_IN_QP) THEN
324
C Copy back to the quantities computed in DP in the QP
325
C containers (but only those needed)
327
AMP(I)=CMPLX(DP_AMP(I),KIND=16)
331
AMPL(K,I)=CMPLX(DP_AMPL(K,I),KIND=16)
336
W(J,I)=CMPLX(DPW(J,I),KIND=16)
342
MP_UVCT_REQ_SO_DONE=.TRUE.
344
IF (COMPUTE_INTEGRAND_IN_QP) THEN
347
CTEMP = HEL_MULT*2.0E0_16*CONJG(AMP(J))
349
CFTOT=CMPLX(CF_N(I,J)/REAL(ABS(CF_D(I,J)),KIND=16)
351
IF(CF_D(I,J).LT.0) CFTOT=CFTOT*IMAG1
352
ITEMP = ML5SQSOINDEX(ML5SOINDEX_FOR_LOOP_AMP(I)
353
$ ,ML5SOINDEX_FOR_BORN_AMP(J))
354
IF (.NOT.FILTER_SO.OR.SQSO_TARGET.EQ.ITEMP) THEN
356
TEMP2 = REAL(CFTOT*AMPL(K,I)*CTEMP,KIND=16)
357
ANS(K,ITEMP)=ANS(K,ITEMP)+TEMP2
358
ANS(K,0)=ANS(K,0)+TEMP2
367
DP_CTEMP = HEL_MULT*2.0D0*DCONJG(DP_AMP(J))
369
DP_CFTOT=CMPLX(CF_N(I,J)/REAL(ABS(CF_D(I,J)),KIND=8)
371
IF(CF_D(I,J).LT.0) DP_CFTOT=DP_CFTOT*DP_IMAG1
372
ITEMP = ML5SQSOINDEX(ML5SOINDEX_FOR_LOOP_AMP(I)
373
$ ,ML5SOINDEX_FOR_BORN_AMP(J))
374
IF (.NOT.FILTER_SO.OR.SQSO_TARGET.EQ.ITEMP) THEN
376
DP_TEMP2 = REAL(DP_CFTOT*DP_AMPL(K,I)*DP_CTEMP
378
ANSDP(K,ITEMP)=ANSDP(K,ITEMP)+DP_TEMP2
379
ANSDP(K,0)=ANSDP(K,0)+DP_TEMP2
388
IF (COMPUTE_INTEGRAND_IN_QP) THEN
390
CALL MP_COEF_CONSTRUCTION_1(MP_P,NHEL,H,IC)
394
CALL COEF_CONSTRUCTION_1(P,NHEL,H,IC)
396
C Copy back to the coefficients computed in DP in the QP
398
DO I=0,LOOPMAXCOEFS-1
401
LOOPCOEFS(I,J,K)=CMPLX(DP_LOOPCOEFS(I,J,K),KIND=16)
408
MP_LOOP_REQ_SO_DONE=.TRUE.
411
C Copy the qp wfs to the dp ones as they are used to setup the
413
C This needs to be done once since only the momenta of these
415
IF(.NOT.DPW_COPIED.AND.COMPUTE_INTEGRAND_IN_QP) THEN
418
DPW(J,I)=CMPLX(W(J,I),KIND=8)
432
C If we were not computing the integrand in QP, then we were
433
C already updating ANSDP all along, so that fetching it here from
434
C the QP ANS(:,:) should not be done.
435
IF (COMPUTE_INTEGRAND_IN_QP) THEN
438
ANSDP(I,J)=REAL(ANS(I,J),KIND=8)
443
C Grouping of loop diagrams now done directly when creating the
445
C If some kind of coefficient merging was done above, do not
446
C forget to copy back the LOOPCOEFS merged into DP_LOOPCOEFS if
447
C COMPUTE_INTEGRAND_IN_QP is False.