2
subroutine aaxdx(cbxi,ccxi,cdxi,d0,xmm,xpi,level,ier)
3
***#[*comment:***********************************************************
5
* Calculation of four point tensor integrals. Just a wrapper *
6
* for ffxdx nowadays, see there for the real description. *
9
* xpi the same as in Geert Jan's routines *
10
* level rank of tensor(integral) *
12
* cbxi(12) cb0(1),cb1(1),[cb2(2)] x 6 *
13
* ccxi(28) cc0(1),cc1(2),cc2(4),[cc3(6)] x 4 *
14
* cdxi(24) cd0(1),cd1(3),cd2(7),cd3(13) *
16
***#]*comment:***********************************************************
23
DOUBLE PRECISION xpi(13),d0,xmm
24
DOUBLE COMPLEX cbxi(12),ccxi(28),cdxi(24)
28
DOUBLE COMPLEX caxi(4)
29
DOUBLE PRECISION maxi(4),mbxi(12),mcxi(28),mdxi(24)
34
call ffxdx(caxi,maxi,cbxi,mbxi,ccxi,mcxi,cdxi,mdxi,d0,xmm,xpi,
41
subroutine ffxdx(caxi,maxi,cbxi,mbxi,ccxi,mcxi,cdxi,mdxi,d0,xmm,
43
***#[*comment:***********************************************************
45
* Calculation of four point form factors with more accurate *
46
* error estimates. Calls ffxd1, the rest is still here. *
48
* D0 = 1/(i pi^2)*\int d^4 Q 1/((Q^2-m_1^2)((Q+p1)^2-m2^2) *
49
* ((Q+p1+p2)^2-m3^2))((Q-p4)^2-m4^2)) *
50
* D1 = 1/(i pi^2)*\int d^n Q Q(mu)/(...) *
51
* = D11*p1 + D12*p2 + D13*p3 *
52
* D2 = D21*p1*p1 + D22*p2*p2 + D23*p3*p3 + D24*(p1*p2+p2*p1) + *
53
* D25*(p1*p3+p3*p1) + D26*(p2*p3+p3*p2) + D27*g *
54
* D3 = D31*p1*p1*p1 + D32*p2*p2*p2 + D33*p3*p3*p3 + D34*(p1*p1*p2+*
55
* p1*p2*p1+p2*p1*p1) + D35*(p1*p1*p3+p1*p3*p1+p3*p1*p1) + D36*
56
* *(p1*p2*p2+p2*p1*p2+p1*p2*p2) + D37*(p1*p3*p3+p3*p1*p3+p1* *
57
* p3*p3) + D38*(p2*p2*p3+p2*p3*p2+p3*p2*p2) + D39*(p2*p3*p3+ *
58
* p3*p2*p3+p2*p3*p3) + D310*(p1*p2*p3+p2*p3*p1+p3*p1*p2+p1*p3*
59
* *p2+p3*p2*p1+p2*p1*p3) + D311*(p1*g+g*p1+'g*p1*g') + D312* *
60
* (p2*g+g*p2+'g*p2*g') + D313*(p3*g+g*p3+'g*p3*g') *
61
* D4 has not yet been implemented *
63
* Input: xpi(13) real m_i^2 (1:4), p_{i-4}^2 (4:8),s,t*
64
* optionally u,v,w (see ffxd0a) *
65
* d0,xmm real renormalisation constants *
66
* level integer rank of tensor (integral) *
67
* Output: caxi(4) complex A0(m_i^2) only when level>3 *
68
* maxi(12) real max term in sum to caxi() *
69
* cbxi(12) complex 6x(B0,B11,B21,B22)(p_i^2) *
70
* mbxi(12) real max term in sum to cbxi() *
71
* ccxi(28) complex 4x(C0,C1(2),C2(4)) *
72
* mcxi(28) real max term in sum to ccxi() *
73
* cdxi(24) complex D0,D1(3),D2(7),D3(13) *
74
* mdxi(24) real max term in sum to cdxi() *
75
* Note that if level<3 some of these are not defined. *
77
***#]*comment:***********************************************************
84
DOUBLE PRECISION xpi(13),d0,xmm
85
DOUBLE COMPLEX caxi(4),cbxi(12),ccxi(28),cdxi(24)
86
DOUBLE PRECISION maxi(4),mbxi(12),mcxi(28),mdxi(24)
90
integer i,j,cl,ier0,ier1,iinx(6,4)
91
DOUBLE PRECISION xpi3(6),fdel2i(4),absc,big
92
DOUBLE COMPLEX caxj(12),cbxj(48),ccxj(52),cc,cd0
93
DOUBLE PRECISION maxj(12),mbxj(48),mcxj(52)
103
absc(cc) = abs(DBLE(cc)) + abs(DIMAG(cc))
107
data iinx /2,3,4,6,7,10,
113
* #[ initialisations:
115
* initialize to something ridiculous so that one immediately
116
* notices when it is accidentally used...
118
big = 1/(1d20*xclogm)
132
* #] initialisations:
135
* futhermore dotpr and determinants are delivered by ff
138
call ffxd0(cdxi(1),xpi,ier1)
139
if ( ier1.gt.10 ) then
141
print *,'ffxdx: id = ',id,', nevent = ',nevent
142
print *,'ffxdx: lost ',ier1,' digits in D0 with isgnal '
143
+ ,isgnal,', trying other roots, isgnal ',-isgnal
144
print *,' if OK (no further messages) adding this'
145
+ ,' to your code will improve speed'
149
call ffxd0(cd0,xpi,ier0)
151
if ( ier0.lt.ier1 ) then
158
print *,'ffxdx : level 0: id,nevent ',id,nevent
159
print *,'D0 =',cdxi(1),ier1
161
if ( ier1 .gt. 10 ) then
162
print *,'ffxdx: id = ',id,', nevent = ',nevent
163
print *,'ffxdx: error: D0 not stable, lost ',ier1,' digits'
164
print *,' please try another permutation or contact',
165
+ ' author (t19@nikhef.nl)'
168
* note that we may have lost another factor xloss**3 or so
169
mdxi(1) = absc(cdxi(1))*DBLE(10)**mod(ier1,50)
171
if (level .eq. 0) goto 990
174
* #[ need C-functions till c-level=(level-1):
175
if ( level.gt.3 ) then
176
print *,'ffxdx: error: higher than third rank ',
177
+ 'not yet implemented'
181
* go trough the 4 different cancellation patterns
183
print '(a,i1)','####[ C-function output: to level ',cl
187
xpi3(j) = xpi(iinx(j,i))
190
call ffxcx( caxj(3*i-2),maxj(3*i-2),cbxj(12*i-11),
191
+ mbxj(12*i-11),ccxj(13*i-12),mcxj(13*i-12),d0,xmm,xpi3,
193
ier1 = max(ier1,ier0)
197
print '(a)','####] C-function output:'
199
* #] need C-functions till c-level=(level-1):
200
* #[ break to let ffzdz tie in:
202
* convert ??xj to ??xi
204
call ffdji(ccxi,mcxi,cbxi,mbxi,caxi,maxi,
205
+ ccxj,mcxj,cbxj,mbxj,caxj,maxj,level)
207
* and call the real routine for the rest
209
call ffxdxp(caxj,maxj,cbxj,mbxj,ccxj,mcxj,cdxi,mdxi,xpi,fdel2i,
211
* #] break to let ffzdz tie in:
214
subroutine ffxdxp(caxj,maxj,cbxj,mbxj,ccxj,mcxj,cdxi,mdxi,xpi,
222
DOUBLE PRECISION xpi(13)
223
DOUBLE COMPLEX caxj(12),cbxj(48),ccxj(52),cdxi(24)
224
DOUBLE PRECISION maxj(12),mbxj(48),mcxj(52),mdxi(24),fdel2i(4)
228
integer i,j,ier0,ier1,ier2,iinx(6,4),bij(12)
229
DOUBLE PRECISION xi4(6),f1,f2,f3,absc,xmax,Rm(20:55),
230
+ d11max,d22max,d23max,d24max,d0,xmm
231
DOUBLE PRECISION dl2pij(6,6),del3p
232
DOUBLE PRECISION mc0i(4),mxy(3),mc21i(4),mc22i(4),mc23i(4),
233
+ mc24i(4),mc11i(4),mc12i(4),md1i(3)
234
DOUBLE COMPLEX R20,R21,R22,R30,R31,R32,R33,R34,R35,R36,R37,R38,
235
+ R41,R42,R43,R44,R45,R46,R47,R48,R49,R50,R51,R52,R53,R54,
236
+ R55,cd1i(3),cc0i(4),cc11i(4),cc12i(4),
237
+ cc21i(4),cc22i(4),cc23i(4),cc24i(4),cc,cxy(3)
238
DOUBLE COMPLEX cd4pppp(3,3,3,3),cd4ppdel(3,3),cd4deldel,
239
+ cd3ppp(3,3,3),cd3pdel(3),cd2pp(3,3),cd2del,
240
+ cb0ij(4,4),ca0i(4),cd2(7)
250
data iinx /2,3,4,6,7,10,
254
data bij /1,2,5,6,9,10,17,18,21,22,33,34/
258
absc(cc) = abs(DBLE(cc)) + abs(DIMAG(cc))
261
* #[ kinematical quantities for 4pv-red :
262
* if ( abs(fdel3) .lt. 1.d-6 ) then
263
* print *,'kinematical det = 0, PV-scheme breaks down'
269
+ - xpi(5)*xpi(5)*xpi(7) + xpi(5)*xpi(6)*xpi(7) + xpi(5)*xpi(6)*
270
+ xpi(8) - xpi(5)*xpi(6)*xpi(9) - xpi(5)*xpi(7)*xpi(7) + xpi(5)*
271
+ xpi(7)*xpi(8) + xpi(5)*xpi(7)*xpi(9) + xpi(5)*xpi(7)*xpi(10) -
272
+ xpi(5)*xpi(8)*xpi(10) + xpi(5)*xpi(9)*xpi(10) - xpi(6)*xpi(6)*
273
+ xpi(8) + xpi(6)*xpi(7)*xpi(8) - xpi(6)*xpi(7)*xpi(10) - xpi(6)*
274
+ xpi(8)*xpi(8) + xpi(6)*xpi(8)*xpi(9) + xpi(6)*xpi(8)*xpi(10) +
275
+ xpi(6)*xpi(9)*xpi(10) - xpi(7)*xpi(8)*xpi(9) + xpi(7)*xpi(9)*
276
+ xpi(10) + xpi(8)*xpi(9)*xpi(10) - xpi(9)*xpi(9)*xpi(10) -
277
+ xpi(9)*xpi(10)*xpi(10)
279
xmax = max(abs(xpi(5)),abs(xpi(6)),abs(xpi(7)),abs(xpi(8)),
280
+ abs(xpi(9)),abs(xpi(10)))**3
281
if ( abs(del3p-fdel3).gt.1d-12*xmax ) then
282
print *,'ffxdxp: fdel3 wrong: ',fdel3,del3p,fdel3-del3p,
287
* inverse kinematical matrix xi4 (3X3)
298
* #] kinematical quantities for 4pv-red :
299
* #[ level 1 : D11,D12,D13,C0(I)
300
* need 4 diff C0(I)-functions,I=1,2,3
310
call ffxd1a(cdxi(2),mdxi(2),cdxi(1),mdxi(1),cc0i,mc0i,
311
+ xpi,fpij4,fdel3,fdel2i,ier1)
313
print *,'GEERT JANs-scheme: id,nevent ',id,nevent
314
print *,'D11=',cdxi(2),mdxi(2),ier1
315
print *,'D12=',cdxi(3),mdxi(3),ier1
316
print *,'D13=',cdxi(4),mdxi(4),ier1
319
if ( lwarn .and. atest ) then
321
R20 = ( f1*cdxi(1)+cc0i(2)-cc0i(1) )/2
322
R21 = ( f2*cdxi(1)+cc0i(3)-cc0i(2) )/2
323
R22 = ( f3*cdxi(1)+cc0i(4)-cc0i(3) )/2
324
Rm(20) = ( max(abs(f1)*mdxi(1),mc0i(2),mc0i(1)) )/2
325
Rm(21) = ( max(abs(f2)*mdxi(1),mc0i(3),mc0i(2)) )/2
326
Rm(22) = ( max(abs(f3)*mdxi(1),mc0i(4),mc0i(3)) )/2
327
cd1i(1)=xi4(1)*R20+xi4(4)*R21+xi4(5)*R22
328
cd1i(2)=xi4(4)*R20+xi4(2)*R21+xi4(6)*R22
329
cd1i(3)=xi4(5)*R20+xi4(6)*R21+xi4(3)*R22
330
md1i(1)=abs(xi4(1))*Rm(20)+abs(xi4(4))*Rm(21)+
332
md1i(2)=abs(xi4(4))*Rm(20)+abs(xi4(2))*Rm(21)+
334
md1i(3)=abs(xi4(5))*Rm(20)+abs(xi4(6))*Rm(21)+
337
if ( xloss**2*absc(cdxi(i+1)-cd1i(i)).gt.precc*max(
338
+ mdxi(i+1),md1i(i)) ) print *,'ffxdx: error: FF D1',
339
+ i,' disagrees with PV:',cdxi(i+1),cd1i(i),
340
+ cdxi(i+1)-cd1i(i),max(mdxi(i+1),md1i(i))
344
print *,'ffxdx : level 1: id,nevent ',id,nevent
345
print *,'D11=',cd1i(1)
346
print *,'D12=',cd1i(2)
347
print *,'D13=',cd1i(3)
351
if ( level.eq.1 ) then
355
if ( absc(cdxi(i)).ne.0 ) then
356
xmax = max(xmax,mdxi(i)/absc(cdxi(i)))
357
elseif ( mdxi(i).ne.0 ) then
358
xmax = max(xmax,1/precc)
361
ier1 = int(log10(xmax))
362
if ( awrite ) print *,'ier = ',ier1
370
* #[ level 2 : D21,D22,D23,D24,D25,D26,D27,C11(I),C12(I)
371
* need 4 diff C1-functions
381
cdxi(11)=-( f1*cdxi(2)+f2*cdxi(3)+f3*cdxi(4)-cc0i(1) )/2
384
*** d11max = max(absc(f1*cdxi(2)),absc(f2*cdxi(3)),
385
*** + absc(f3*cdxi(4)),absc(cc0i(1)),2*absc(xpi(1)*cdxi(1)))/2
386
*** if ( absc(cdxi(11)).lt.xloss*d11max ) then
388
*** call ffwarn(283,ier0,absc(cdxi(11)),d11max)
389
*** ier1 = max(ier1,ier0)
391
mdxi(11) = max(abs(f1)*mdxi(2),abs(f2)*mdxi(3),
392
+ abs(f3)*mdxi(4),mc0i(1),2*xpi(1)*mdxi(1))/2
394
R30=( f1*cdxi(2) + cc11i(2) + cc0i(1) )/2 - cdxi(11)
395
R31=( f2*cdxi(2) + cc11i(3) - cc11i(2) )/2
396
R32=( f3*cdxi(2) + cc11i(4) - cc11i(3) )/2
397
R33=( f1*cdxi(3) + cc11i(2) - cc11i(1) )/2
398
R34=( f2*cdxi(3) + cc12i(3) - cc11i(2) )/2 - cdxi(11)
399
R35=( f3*cdxi(3) + cc12i(4) - cc12i(3) )/2
400
R36=( f1*cdxi(4) + cc12i(2) - cc12i(1) )/2
401
R37=( f2*cdxi(4) + cc12i(3) - cc12i(2) )/2
402
R38=( f3*cdxi(4) - cc12i(3) )/2 - cdxi(11)
403
cdxi(5) = xi4(1)*R30+xi4(4)*R31+xi4(5)*R32
404
cdxi(6) = xi4(4)*R33+xi4(2)*R34+xi4(6)*R35
405
cdxi(7) = xi4(5)*R36+xi4(6)*R37+xi4(3)*R38
406
cdxi(8) = xi4(4)*R30+xi4(2)*R31+xi4(6)*R32
407
cdxi(9) = xi4(5)*R30+xi4(6)*R31+xi4(3)*R32
408
cdxi(10)= xi4(5)*R33+xi4(6)*R34+xi4(3)*R35
410
*** Rm(30)=max(absc(f1*cdxi(2)),absc(cc11i(2)),absc(cc0i(1)),
412
*** Rm(31)=max(absc(f2*cdxi(2)),absc(cc11i(3)),absc(cc11i(2)))/2
413
*** Rm(32)=max(absc(f3*cdxi(2)),absc(cc11i(4)),absc(cc11i(3)))/2
414
*** Rm(33)=max(absc(f1*cdxi(3)),absc(cc11i(2)),absc(cc11i(1)))/2
415
*** Rm(34)=max(absc(f2*cdxi(3)),absc(cc12i(3)),absc(cc11i(2)),
417
*** Rm(35)=max(absc(f3*cdxi(3)),absc(cc12i(4)),absc(cc12i(3)))/2
418
*** Rm(36)=max(absc(f1*cdxi(4)),absc(cc12i(2)),absc(cc12i(1)))/2
419
*** Rm(37)=max(absc(f2*cdxi(4)),absc(cc12i(3)),absc(cc12i(2)))/2
420
*** Rm(38)=max(absc(f3*cdxi(4)),absc(cc12i(3)),2*d11max)/2
421
*** xmax = max(abs(xi4(1))*Rm(30),abs(xi4(4))*Rm(31),abs(xi4(5))
423
*** if ( absc(cdxi(5)).lt.xloss*xmax ) then
425
*** call ffwarn(282,ier0,absc(cdxi(5)),xmax)
426
*** ier1 = max(ier1,ier0)
428
*** xmax = max(abs(xi4(4))*Rm(33),abs(xi4(2))*Rm(34),abs(xi4(6))
430
*** if ( absc(cdxi(6)).lt.xloss*xmax ) then
432
*** call ffwarn(281,ier0,absc(cdxi(6)),xmax)
433
*** ier1 = max(ier1,ier0)
435
*** xmax = max(abs(xi4(5))*Rm(36),abs(xi4(6))*Rm(37),abs(xi4(3))
437
*** if ( absc(cdxi(7)).lt.xloss*xmax ) then
439
*** call ffwarn(280,ier0,absc(cdxi(7)),xmax)
440
*** ier1 = max(ier1,ier0)
442
*** xmax = max(abs(xi4(4))*Rm(30),abs(xi4(2))*Rm(31),abs(xi4(6))
444
*** if ( absc(cdxi(8)).lt.xloss*xmax ) then
446
*** call ffwarn(279,ier0,absc(cdxi(8)),xmax)
447
*** ier1 = max(ier1,ier0)
449
*** xmax = max(abs(xi4(5))*Rm(30),abs(xi4(6))*Rm(31),abs(xi4(3))
451
*** if ( absc(cdxi(9)).lt.xloss*xmax ) then
453
*** call ffwarn(278,ier0,absc(cdxi(9)),xmax)
454
*** ier1 = max(ier1,ier0)
456
*** xmax = max(abs(xi4(5))*Rm(33),abs(xi4(6))*Rm(34),abs(xi4(3))
458
*** if ( absc(cdxi(10)).lt.xloss*xmax ) then
460
*** call ffwarn(277,ier0,absc(cdxi(10)),xmax)
461
*** ier1 = max(ier1,ier0)
464
* the maximum values of the whole value (not only in this step)
466
Rm(30) = max(abs(f1)*mdxi(2),mc11i(2),mc0i(1),2*mdxi(11))/2
467
Rm(31) = max(abs(f2)*mdxi(2),mc11i(3),mc11i(2))/2
468
Rm(32) = max(abs(f3)*mdxi(2),mc11i(4),mc11i(3))/2
469
Rm(33) = max(abs(f1)*mdxi(3),mc11i(2),mc11i(1))/2
470
Rm(34) = max(abs(f2)*mdxi(3),mc12i(3),mc11i(2),2*mdxi(11))/2
471
Rm(35) = max(abs(f3)*mdxi(3),mc12i(4),mc12i(3))/2
472
Rm(36) = max(abs(f1)*mdxi(4),mc12i(2),mc12i(1))/2
473
Rm(37) = max(abs(f2)*mdxi(4),mc12i(3),mc12i(2))/2
474
Rm(38) = max(abs(f3)*mdxi(4),mc12i(3),2*mdxi(11))/2
475
mdxi(5) = max(abs(xi4(1))*Rm(30),abs(xi4(4))*Rm(31),
476
+ abs(xi4(5))*Rm(32))
477
mdxi(6) = max(abs(xi4(4))*Rm(33),abs(xi4(2))*Rm(34),
478
+ abs(xi4(6))*Rm(35))
479
mdxi(7) = max(abs(xi4(5))*Rm(36),abs(xi4(6))*Rm(37),
480
+ abs(xi4(3))*Rm(38))
481
mdxi(8) = max(abs(xi4(4))*Rm(30),abs(xi4(2))*Rm(31),
482
+ abs(xi4(6))*Rm(32))
483
mdxi(9) = max(abs(xi4(5))*Rm(30),abs(xi4(6))*Rm(31),
484
+ abs(xi4(3))*Rm(32))
485
mdxi(10)= max(abs(xi4(5))*Rm(33),abs(xi4(6))*Rm(34),
486
+ abs(xi4(3))*Rm(35))
489
if ( lwarn .and. atest ) then
490
cxy(1) = xi4(1)*R33+xi4(4)*R34+xi4(5)*R35
491
cxy(2) = xi4(1)*R36+xi4(4)*R37+xi4(5)*R38
492
cxy(3) = xi4(4)*R36+xi4(2)*R37+xi4(6)*R38
493
mxy(1) = abs(xi4(1))*Rm(33)+abs(xi4(4))*Rm(34)+abs(xi4(5))*
495
mxy(2) = abs(xi4(1))*Rm(36)+abs(xi4(4))*Rm(37)+abs(xi4(5))*
497
mxy(3) = abs(xi4(4))*Rm(36)+abs(xi4(2))*Rm(37)+abs(xi4(6))*
499
if ( xloss*absc(cxy(1)-cdxi(8)) .gt.precc*max(mxy(1),
501
+ .or. xloss*absc(cxy(2)-cdxi(9)) .gt.precc*max(mxy(2),
503
+ .or. xloss*absc(cxy(3)-cdxi(10)).gt.precc*max(mxy(3),
505
print *,'ffxdx: error: id/nevent ',id,'/',nevent
506
print *,'redundancy check at level 2 failed: '
507
print *,cxy(1),cdxi(8),absc(cxy(1)-cdxi(8)),
508
+ max(mxy(1),mdxi(8))
509
print *,cxy(2),cdxi(9),absc(cxy(2)-cdxi(9)),
510
+ max(mxy(2),mdxi(9))
511
print *,cxy(3),cdxi(10),absc(cxy(3)-cdxi(20)),
512
+ max(mxy(3),mdxi(10))
517
print *,'ffxdx : level 2: id,nevent ',id,nevent
518
print *,'D21=',cdxi(5),mdxi(5),ier1
519
print *,'D22=',cdxi(6),mdxi(6),ier1
520
print *,'D23=',cdxi(7),mdxi(7),ier1
521
print *,'D24=',cdxi(8),mdxi(8),ier1
522
print *,' ',cxy(1),mxy(1)
523
print *,'D25=',cdxi(9),mdxi(9),ier1
524
print *,' ',cxy(2),mxy(2)
525
print *,'D26=',cdxi(10),mdxi(10),ier1
526
print *,' ',cxy(3),mxy(3)
527
print *,'D27=',cdxi(11),mdxi(11),ier1
529
* this goes wrong in the case of complex masses - no way out yet...
530
if ( awrite .and. .FALSE. ) then
533
if ( awrite ) print *,'calling ffxdi with ier = ',ier
534
* the order of the B0s can be deduced from the C0 -> B0 chain
535
cb0ij(1,2) = cbxj(33)
536
cb0ij(1,3) = cbxj(21)
537
cb0ij(1,4) = cbxj(17)
538
cb0ij(2,1) = cbxj(33)
539
cb0ij(2,3) = cbxj( 9)
540
cb0ij(2,4) = cbxj( 5)
541
cb0ij(3,1) = cbxj(21)
542
cb0ij(3,2) = cbxj( 9)
543
cb0ij(3,4) = cbxj( 1)
544
cb0ij(4,1) = cbxj(17)
545
cb0ij(4,2) = cbxj( 5)
546
cb0ij(4,3) = cbxj( 1)
547
* the A0s are not used for the moment
548
call ffxdi(cd4pppp,cd4ppdel,cd4deldel, cd3ppp,cd3pdel,
549
+ cd2pp,cd2del, cd1i, dl2pij, cdxi(1),cc0i,cb0ij,ca0i,
550
+ fdel4s,fdel3,fdel2i, xpi,fpij4, d0,xmm, 2, ier)
551
* #[ convert to PV conventions:
554
cd2(1) = cd2pp(1,1) - DBLE(fdel2i(1))*cd2del
555
if ( lwarn .and. absc(cd2(1)).lt.xloss*absc(cd2pp(1,1)) ) then
556
call ffwarn(229,ier1,absc(cd2(1)),absc(cd2pp(1,1)))
558
cd2(2) = cd2pp(1,2) + DBLE(dl2pij(2,4))*cd2del
559
if ( lwarn .and. absc(cd2(2)).lt.xloss*absc(cd2pp(1,2)) ) then
561
call ffwarn(229,ier0,absc(cd2(2)),absc(cd2pp(1,2)))
562
ier1 = max(ier1,ier0)
564
cd2(3) = cd2pp(1,3) - DBLE(dl2pij(1,4))*cd2del
565
if ( lwarn .and. absc(cd2(3)).lt.xloss*absc(cd2pp(1,3)) ) then
567
call ffwarn(229,ier0,absc(cd2(3)),absc(cd2pp(1,3)))
568
ier1 = max(ier1,ier0)
570
cd2(4) = cd2pp(2,2) - DBLE(xpi(5)*xpi(7)-fpij4(5,7)**2)*cd2del
571
if ( lwarn .and. absc(cd2(4)).lt.xloss*absc(cd2pp(2,2)) ) then
573
call ffwarn(229,ier0,absc(cd2(4)),absc(cd2pp(2,2)))
574
ier1 = max(ier1,ier0)
576
cd2(5) = cd2pp(2,3) + DBLE(dl2pij(1,2))*cd2del
577
if ( lwarn .and. absc(cd2(5)).lt.xloss*absc(cd2pp(2,3)) ) then
579
call ffwarn(229,ier0,absc(cd2(5)),absc(cd2pp(2,3)))
580
ier1 = max(ier1,ier0)
582
cd2(6) = cd2pp(3,3) - DBLE(fdel2i(4))*cd2del
583
if ( lwarn .and. absc(cd2(6)).lt.xloss*absc(cd2pp(3,3)) ) then
585
call ffwarn(229,ier0,absc(cd2(6)),absc(cd2pp(3,3)))
586
ier1 = max(ier1,ier0)
588
cd2(7) = DBLE(fdel3)*cd2del
590
* #] convert to PV conventions:
592
print *,'ffxdi gives'
593
print *,'D11 = ',cd1i(1),ier1
594
print *,'D12 = ',cd1i(2),ier1
595
print *,'D13 = ',cd1i(3),ier1
596
print *,'D21 = ',cd2(1),ier1
597
print *,'D22 = ',cd2(4),ier1
598
print *,'D23 = ',cd2(6),ier1
599
print *,'D24 = ',cd2(2),ier1
600
print *,'D25 = ',cd2(3),ier1
601
print *,'D26 = ',cd2(5),ier1
602
print *,'D27 = ',cd2(7),ier1
606
if ( level.eq.2 ) then
610
if ( absc(cdxi(i)).ne.0 ) then
611
xmax = max(xmax,mdxi(i)/absc(cdxi(i)))
612
elseif ( mdxi(i).ne.0 ) then
613
xmax = max(xmax,1/precc)
616
ier1 = int(log10(xmax))
617
if ( awrite ) print *,'ier = ',ier1
625
* #[ level 3 : D31,D32,D33,D34,D35,D36,D37,D38,D39,D310,D311,D312,D313
626
* C21(I),C22(I),C23(I),C11(I),C12(I)
627
* need 4 diff C2-functions
640
R53=( f1*cdxi(11) + cc24i(2) - cc24i(1) )/2
641
R54=( f2*cdxi(11) + cc24i(3) - cc24i(2) )/2
642
R55=( f3*cdxi(11) + cc24i(4) - cc24i(3) )/2
643
cdxi(22) = xi4(1)*R53+xi4(4)*R54+xi4(5)*R55
644
cdxi(23) = xi4(4)*R53+xi4(2)*R54+xi4(6)*R55
645
cdxi(24) = xi4(5)*R53+xi4(6)*R54+xi4(3)*R55
647
*** Rm(53)=max(abs(f1)*d11max,absc(cc24i(2)),absc(cc24i(1)))/2
648
*** Rm(54)=max(abs(f2)*d11max,absc(cc24i(3)),absc(cc24i(2)))/2
649
*** Rm(55)=max(abs(f3)*d11max,absc(cc24i(4)),absc(cc24i(3)))/2
650
*** d22max = max(abs(xi4(1))*Rm(53),abs(xi4(4))*Rm(54),
651
*** + abs(xi4(5))*Rm(55))
652
*** if ( absc(cdxi(22)).lt.xloss*d22max ) then
654
*** call ffwarn(276,ier0,absc(cdxi(22)),d22max)
655
*** ier1 = max(ier1,ier0)
657
*** d23max = max(abs(xi4(4))*Rm(53),abs(xi4(2))*Rm(54),
658
*** + abs(xi4(6))*Rm(55))
659
*** if ( absc(cdxi(23)).lt.xloss*d23max ) then
661
*** call ffwarn(275,ier0,absc(cdxi(23)),d23max)
662
*** ier1 = max(ier1,ier0)
664
*** d24max = max(abs(xi4(5))*Rm(53),abs(xi4(6))*Rm(54),
665
*** + abs(xi4(3))*Rm(55))
666
*** if ( absc(cdxi(24)).lt.xloss*xmax ) then
668
*** call ffwarn(274,ier0,absc(cdxi(24)),d24max)
669
*** ier1 = max(ier1,ier0)
672
* and again for the whole thing
674
Rm(53)=max(abs(f1)*mdxi(11),mc24i(2),mc24i(1))/2
675
Rm(54)=max(abs(f2)*mdxi(11),mc24i(3),mc24i(2))/2
676
Rm(55)=max(abs(f3)*mdxi(11),mc24i(4),mc24i(3))/2
677
mdxi(22) = max(abs(xi4(1))*Rm(53),abs(xi4(4))*Rm(54),
678
+ abs(xi4(5))*Rm(55))
679
mdxi(23) = max(abs(xi4(4))*Rm(53),abs(xi4(2))*Rm(54),
680
+ abs(xi4(6))*Rm(55))
681
mdxi(24) = max(abs(xi4(5))*Rm(53),abs(xi4(6))*Rm(54),
682
+ abs(xi4(3))*Rm(55))
685
R41=( f1*cdxi(5) + cc21i(2) - cc0i(1) )/2-2*cdxi(22)
686
R42=( f2*cdxi(5) + cc21i(3) - cc21i(2) )/2
687
R43=( f3*cdxi(5) + cc21i(4) - cc21i(3) )/2
688
R44=( f1*cdxi(6) + cc21i(2) - cc21i(1) )/2
689
R45=( f2*cdxi(6) + cc22i(3) - cc21i(2) )/2-2*cdxi(23)
690
R46=( f3*cdxi(6) + cc22i(4) - cc22i(3) )/2
691
R47=( f1*cdxi(7) + cc22i(2) - cc22i(1) )/2
692
R48=( f2*cdxi(7) + cc22i(3) - cc22i(2) )/2
693
R49=( f3*cdxi(7) - cc22i(3) )/2-2*cdxi(24)
694
R50=( f1*cdxi(8) + cc21i(2) + cc11i(1) )/2-cdxi(23)
695
R51=( f2*cdxi(8) + cc23i(3) - cc21i(2) )/2-cdxi(22)
696
R52=( f3*cdxi(8) + cc23i(4) - cc23i(3) )/2
697
cdxi(12) = xi4(1)*R41+xi4(4)*R42+xi4(5)*R43
698
cdxi(13) = xi4(4)*R44+xi4(2)*R45+xi4(6)*R46
699
cdxi(14) = xi4(5)*R47+xi4(6)*R48+xi4(3)*R49
700
cdxi(15) = xi4(4)*R41+xi4(2)*R42+xi4(6)*R43
701
cdxi(16) = xi4(5)*R41+xi4(6)*R42+xi4(3)*R43
702
cdxi(17) = xi4(1)*R44+xi4(4)*R45+xi4(5)*R46
703
cdxi(18) = xi4(1)*R47+xi4(4)*R48+xi4(5)*R49
704
cdxi(19) = xi4(5)*R44+xi4(6)*R45+xi4(3)*R46
705
cdxi(20) = xi4(4)*R47+xi4(2)*R48+xi4(6)*R49
706
cdxi(21) = xi4(5)*R50+xi4(6)*R51+xi4(3)*R52
708
*** Rm(41)=max(absc(f1*cdxi(5)),absc(cc21i(2)),absc(cc0i(1)),
710
*** Rm(42)=max(absc(f2*cdxi(5)),absc(cc21i(3)),absc(cc21i(2)))/2
711
*** Rm(43)=max(absc(f3*cdxi(5)),absc(cc21i(4)),absc(cc21i(3)))/2
712
*** Rm(44)=max(absc(f1*cdxi(6)),absc(cc21i(2)),absc(cc21i(1)))/2
713
*** Rm(45)=max(absc(f2*cdxi(6)),absc(cc22i(3)),absc(cc21i(2)),
715
*** Rm(46)=max(absc(f3*cdxi(6)),absc(cc22i(4)),absc(cc22i(3)))/2
716
*** Rm(47)=max(absc(f1*cdxi(7)),absc(cc22i(2)),absc(cc22i(1)))/2
717
*** Rm(48)=max(absc(f2*cdxi(7)),absc(cc22i(3)),absc(cc22i(2)))/2
718
*** Rm(49)=max(absc(f3*cdxi(7)),absc(cc22i(3)),4*d24max)/2
719
*** Rm(50)=max(absc(f1*cdxi(8)),absc(cc21i(2)),absc(cc11i(1)),
721
*** Rm(51)=max(absc(f2*cdxi(8)),absc(cc23i(3)),absc(cc21i(2)),
723
*** Rm(52)=max(absc(f3*cdxi(8)),absc(cc23i(4)),absc(cc23i(3)))/2
724
*** xmax=max(abs(xi4(1))*Rm(41),abs(xi4(4))*Rm(42),
725
*** + abs(xi4(5))*Rm(43))
726
*** if ( absc(cdxi(12)).lt.xloss*xmax ) then
728
*** call ffwarn(273,ier0,absc(cdxi(12)),xmax)
729
*** ier1 = max(ier1,ier0)
731
*** xmax=max(abs(xi4(4))*Rm(44),abs(xi4(2))*Rm(45),
732
*** + abs(xi4(6))*Rm(46))
733
*** if ( absc(cdxi(13)).lt.xloss*xmax ) then
735
*** call ffwarn(272,ier0,absc(cdxi(13)),xmax)
736
*** ier1 = max(ier1,ier0)
738
*** xmax=max(abs(xi4(5))*Rm(47),abs(xi4(6))*Rm(48),
739
*** + abs(xi4(3))*Rm(49))
740
*** if ( absc(cdxi(14)).lt.xloss*xmax ) then
742
*** call ffwarn(271,ier0,absc(cdxi(14)),xmax)
743
*** if ( awrite ) then
744
*** print *,'xi4(5)*R47,xi4(6)*R48,xi4(3)*R49,cdxi(14) = '
745
*** print *,xi4(5)*R47,xi4(6)*R48,xi4(3)*R49,cdxi(14)
746
*** print *,xi4(5)*Rm(47),xi4(6)*Rm(48),xi4(3)*Rm(49),xmax
748
*** ier1 = max(ier1,ier0)
750
*** xmax=max(abs(xi4(4))*Rm(41),abs(xi4(2))*Rm(42),
751
*** + abs(xi4(6))*Rm(43))
752
*** if ( absc(cdxi(15)).lt.xloss*xmax ) then
754
*** call ffwarn(270,ier0,absc(cdxi(15)),xmax)
755
*** ier1 = max(ier1,ier0)
757
*** xmax=max(abs(xi4(5))*Rm(41),abs(xi4(6))*Rm(42),
758
*** + abs(xi4(3))*Rm(43))
759
*** if ( absc(cdxi(16)).lt.xloss*xmax ) then
761
*** call ffwarn(269,ier0,absc(cdxi(16)),xmax)
762
*** ier1 = max(ier1,ier0)
764
*** xmax=max(abs(xi4(1))*Rm(44),abs(xi4(4))*Rm(45),
765
*** + abs(xi4(5))*Rm(46))
766
*** if ( absc(cdxi(17)).lt.xloss*xmax ) then
768
*** call ffwarn(268,ier0,absc(cdxi(17)),xmax)
769
*** ier1 = max(ier1,ier0)
771
*** xmax=max(abs(xi4(1))*Rm(47),abs(xi4(4))*Rm(48),
772
*** + abs(xi4(5))*Rm(49))
773
*** if ( absc(cdxi(18)).lt.xloss*xmax ) then
775
*** call ffwarn(267,ier0,absc(cdxi(18)),xmax)
776
*** ier1 = max(ier1,ier0)
778
*** xmax=max(abs(xi4(5))*Rm(44),abs(xi4(6))*Rm(45),
779
*** + abs(xi4(3))*Rm(46))
780
*** if ( absc(cdxi(19)).lt.xloss*xmax ) then
782
*** call ffwarn(266,ier0,absc(cdxi(19)),xmax)
783
*** ier1 = max(ier1,ier0)
785
*** xmax=max(abs(xi4(4))*Rm(47),abs(xi4(2))*Rm(48),
786
*** + abs(xi4(6))*Rm(49))
787
*** if ( absc(cdxi(20)).lt.xloss*xmax ) then
789
*** call ffwarn(265,ier0,absc(cdxi(20)),xmax)
790
*** if ( awrite ) then
791
*** print *,'xi4(4)*R47,xi4(2)*R48,xi4(6)*R49,cdxi(20) = '
792
*** print *,xi4(4)*R47,xi4(2)*R48,xi4(6)*R49,cdxi(20)
793
*** print *,xi4(4)*Rm(47),xi4(2)*Rm(48),xi4(6)*Rm(49),xmax
795
*** ier1 = max(ier1,ier0)
797
*** xmax=max(abs(xi4(5))*Rm(50),abs(xi4(6))*Rm(51),
798
*** + abs(xi4(3))*Rm(52))
799
*** if ( absc(cdxi(21)).lt.xloss*xmax ) then
801
*** call ffwarn(264,ier0,absc(cdxi(21)),xmax)
802
*** ier1 = max(ier1,ier0)
805
* again the whole thing, not just this step
807
Rm(41) = max(abs(f1)*mdxi(5),mc21i(2),mc0i(1),4*mdxi(22))/2
808
Rm(42) = max(abs(f2)*mdxi(5),mc21i(3),mc21i(2))/2
809
Rm(43) = max(abs(f3)*mdxi(5),mc21i(4),mc21i(3))/2
810
Rm(44) = max(abs(f1)*mdxi(6),mc21i(2),mc21i(1))/2
811
Rm(45) = max(abs(f2)*mdxi(6),mc22i(3),mc21i(2),4*mdxi(23))/2
812
Rm(46) = max(abs(f3)*mdxi(6),mc22i(4),mc22i(3))/2
813
Rm(47) = max(abs(f1)*mdxi(7),mc22i(2),mc22i(1))/2
814
Rm(48) = max(abs(f2)*mdxi(7),mc22i(3),mc22i(2))/2
815
Rm(49) = max(abs(f3)*mdxi(7),mc22i(3),4*mdxi(24))/2
816
Rm(50) = max(abs(f1)*mdxi(8),mc21i(2),mc11i(1),2*mdxi(23))/2
817
Rm(51) = max(abs(f2)*mdxi(8),mc23i(3),mc21i(2),2*mdxi(22))/2
818
Rm(52) = max(abs(f3)*mdxi(8),mc23i(4),mc23i(3))/2
819
mdxi(12) = max(abs(xi4(1))*Rm(41),abs(xi4(4))*Rm(42),
820
+ abs(xi4(5))*Rm(43))
821
mdxi(13) = max(abs(xi4(4))*Rm(44),abs(xi4(2))*Rm(45),
822
+ abs(xi4(6))*Rm(46))
823
mdxi(14) = max(abs(xi4(5))*Rm(47),abs(xi4(6))*Rm(48),
824
+ abs(xi4(3))*Rm(49))
825
mdxi(15) = max(abs(xi4(4))*Rm(41),abs(xi4(2))*Rm(42),
826
+ abs(xi4(6))*Rm(43))
827
mdxi(16) = max(abs(xi4(5))*Rm(41),abs(xi4(6))*Rm(42),
828
+ abs(xi4(3))*Rm(43))
829
mdxi(17) = max(abs(xi4(1))*Rm(44),abs(xi4(4))*Rm(45),
830
+ abs(xi4(5))*Rm(46))
831
mdxi(18) = max(abs(xi4(1))*Rm(47),abs(xi4(4))*Rm(48),
832
+ abs(xi4(5))*Rm(49))
833
mdxi(19) = max(abs(xi4(5))*Rm(44),abs(xi4(6))*Rm(45),
834
+ abs(xi4(3))*Rm(46))
835
mdxi(20) = max(abs(xi4(4))*Rm(47),abs(xi4(2))*Rm(48),
836
+ abs(xi4(6))*Rm(49))
837
mdxi(21) = max(abs(xi4(5))*Rm(50),abs(xi4(6))*Rm(51),
838
+ abs(xi4(3))*Rm(52))
841
if ( lwarn .and. atest ) then
842
cxy(1) = xi4(1)*R50+xi4(4)*R51+xi4(5)*R52
843
cxy(2) = xi4(4)*R50+xi4(2)*R51+xi4(6)*R52
844
mxy(1) = abs(xi4(1))*Rm(50)+abs(xi4(4))*Rm(51)+ abs(xi4(5))*
846
mxy(2) = abs(xi4(4))*Rm(50)+abs(xi4(2))*Rm(51)+ abs(xi4(6))*
848
if ( xloss*absc(cxy(1)-cdxi(15)).gt.precc*max(mxy(1),
850
+ .or. xloss*absc(cxy(2)-cdxi(17)).gt.precc*max(mxy(2),
852
print *,'ffxdx: error: id/nevent ',id,'/',nevent
853
print *,'redundancy check at level 3 failed: '
854
print *,cxy(1),cdxi(15),absc(cxy(1)-cdxi(15)),
855
+ max(mxy(1),mdxi(15))
856
print *,cxy(2),cdxi(17),absc(cxy(2)-cdxi(17)),
857
+ max(mxy(2),mdxi(17))
862
print *,'ffxdx : level 3: id,nevent ',id,nevent
863
print *,'D31 =',cdxi(12),mdxi(12),ier1
864
print *,'D32 =',cdxi(13),mdxi(13),ier1
865
print *,'D33 =',cdxi(14),mdxi(14),ier1
866
print *,'D34 =',cdxi(15),mdxi(15),ier1
867
print *,' ',cxy(1) ,mxy(1)
868
print *,'D35 =',cdxi(16),mdxi(16),ier1
869
print *,'D36 =',cdxi(17),mdxi(17),ier1
870
print *,' ',cxy(2) ,mxy(2)
871
print *,'D37 =',cdxi(18),mdxi(18),ier1
872
print *,'D38 =',cdxi(19),mdxi(19),ier1
873
print *,'D39 =',cdxi(20),mdxi(20),ier1
874
print *,'D310=',cdxi(21),mdxi(21),ier1
875
print *,'D311=',cdxi(22),mdxi(22),ier1
876
print *,'D312=',cdxi(23),mdxi(23),ier1
877
print *,'D313=',cdxi(24),mdxi(24),ier1
880
if ( level.eq.3 ) then
884
if ( absc(cdxi(i)).ne.0 ) then
885
xmax = max(xmax,mdxi(i)/absc(cdxi(i)))
886
elseif ( mdxi(i).ne.0 ) then
887
xmax = max(xmax,1/precc)
890
ier1 = int(log10(xmax))
891
if ( awrite ) print *,'ier = ',ier1
900
print *,'ffxdx: level ',level,' not supported.'
908
subroutine ffdji(ccxi,mcxi,cbxi,mbxi,caxi,maxi,
909
+ ccxj,mcxj,cbxj,mbxj,caxj,maxj,level)
910
***#[*comment:***********************************************************
912
* Renumber the [mc][abc]xj arrays into the [mc][abc]xi arrays. *
913
* Note: the A's are not yet used and not yet renumbered! *
915
***#]*comment:***********************************************************
922
DOUBLE PRECISION mcxi(28),mbxi(12),maxi(4),
923
+ mcxj(52),mbxj(48),maxj(12)
924
DOUBLE COMPLEX ccxi(28),cbxi(12),caxi(4),
925
+ ccxj(52),cbxj(48),caxj(12)
929
integer i,j,k,bij(12),beq(6,2)
939
data bij /1,2,5,6,9,10,17,18,21,22,33,34/
940
data beq / 0, 4, 8,16,20,32,
946
* 1)C-output: reduce the array ccxj(4*13) to ccxi(4*7)
947
* c's are calculated only to (level-1)
950
ccxi(i+(j-1)*7) = ccxj(i+(j-1)*13)
951
mcxi(i+(j-1)*7) = mcxj(i+(j-1)*13)
954
* 2)B-output: reduce the array cbxj(12*4) to cbxi(6*2)
955
* b's are calculated only to (level-2)
957
cbxi(i) = cbxj(bij(i))
958
mbxi(i) = mbxj(bij(i))
960
* check the symmetry in B0(i,j)
964
if ( xloss*abs(cbxj(i+beq(j,1))-cbxj(i+beq(j,2)))
965
+ .gt. precc*abs(cbxj(i+beq(j,1))) ) then
966
print *,'ffxdji: cbxj(',i+beq(j,1),') != cbxj(',
967
+ i+beq(j,2),'): ',cbxj(i+beq(j,1)),
968
+ cbxj(i+beq(j,2)),cbxj(i+beq(j,1))-