11 IMPLICIT DOUBLE PRECISION(a-
h, o-
z)
16 common/
pydat1/mstu(200),paru(200),mstj(200),parj(200)
17 common/
pydat2/kchg(500,4),pmas(500,4),parf(2000),vckm(4,4)
22 dimension kflch(2),kflsp(2),chi(2),pms(0:6),is(2),isn(2),robo(5),
23 &psys(0:2,5),pmin(0:2),qold(4),qnew(4),dbe(3),psum(4)
28 IF(
mint(50).EQ.0.OR.mod(
mstp(81),10).LE.0)
THEN
46 IF(
mint(47).EQ.1)
THEN
50 ELSEIF(isub.EQ.95)
THEN
57 120
IF(
mint(40+jt).EQ.2.AND.
mint(10+jt).NE.22)
THEN
58 IF(
mstp(91).LE.0)
THEN
60 ELSEIF(
mstp(91).EQ.1)
THEN
67 IF(
pt.GT.
parp(93)) goto 120
68 ELSEIF(
mint(106+jt).EQ.3)
THEN
69 pta=sqrt(
vint(282+jt))
71 IF(
mstp(66).EQ.5.AND.
mstp(93).EQ.1)
THEN
73 ELSEIF(
mstp(66).EQ.5.AND.
mstp(93).EQ.2)
THEN
78 IF(ptb.GT.
parp(100)) goto 120
79 pt=sqrt(pta**2+ptb**2+2d0*pta*ptb*cos(paru(2)*
pyr(0)))
82 ELSEIF(iabs(
mint(14+jt)).LE.8.OR.
mint(14+jt).EQ.21)
THEN
83 IF(
mstp(93).LE.0)
THEN
85 ELSEIF(
mstp(93).EQ.1)
THEN
87 ELSEIF(
mstp(93).EQ.2)
THEN
91 ELSEIF(
mstp(93).EQ.3)
THEN
94 pt=sqrt(
max(0d0,ha*(ha+hb)/(ha+hb-
pyr(0)*hb)-ha))
99 pt=sqrt(
max(0d0,ha*((ha+hb)/ha)**
pyr(0)-ha))
101 IF(
pt.GT.
parp(100)) goto 120
109 pms(jt)=
p(
i,5)**2+
p(
i,1)**2+
p(
i,2)**2
112 IF(
mint(47).EQ.1)
RETURN
123 shr=sqrt(
max(0d0,shs))
124 IF((shs-pms(1)-pms(2))**2-4d0*pms(1)*pms(2).LE.0d0) goto 100
125 p(
i1,4)=0.5d0*(shr+(pms(1)-pms(2))/shr)
131 robo(3)=(
p(
i1,1)+
p(
i2,1))/shr
132 robo(4)=(
p(
i1,2)+
p(
i2,2))/shr
133 CALL
pyrobo(
i1,
i2,0d0,0d0,-robo(3),-robo(4),0d0)
139 CALL
pyrobo(
i1,
mint(52),robo(1),robo(2),robo(3),robo(4),0d0)
146 IF((
mint(43).EQ.2.OR.
mint(43).EQ.3).AND.((isub.EQ.10.AND.
147 &
mstp(23).GE.1).OR.(isub.EQ.83.AND.
mstp(23).GE.2))) idisxq=1
152 IF(
mint(42).EQ.1) lesd=2
156 leout=
mint(84)+2+lesd
157 lqout=
mint(84)+5-lesd
158 IF(
k(lein,3).GT.lein) lein=
k(lein,3)
159 IF(
k(lqin,3).GT.lqin) lqin=
k(lqin,3)
162 IF(
k(
i,2).EQ.94)
THEN
169 IF(lesd.EQ.1) lqbg=ipu2
174 hpk=2d0*(
p(lpin,4)*
p(lein,4)-
p(lpin,1)*
p(lein,1)-
175 &
p(lpin,2)*
p(lein,2)-
p(lpin,3)*
p(lein,3))*
176 & (
p(
mint(83)+lesd,4)*
vint(40+lesd)/
p(lein,4))
177 hpt2=
max(0d0,q2nom*(1d0-q2nom/(xnom*hpk)))
178 fac=sqrt(hpt2/(
p(leout,1)**2+
p(leout,2)**2))
179 p(
n+1,1)=fac*
p(leout,1)
180 p(
n+1,2)=fac*
p(leout,2)
181 p(
n+1,3)=0.25d0*((hpk-q2nom/xnom)/
p(lpin,4)-
182 & q2nom/(
p(
mint(83)+lesd,4)*
vint(40+lesd)))*(-1)**(lesd+1)
183 p(
n+1,4)=sqrt(
p(leout,5)**2+
p(
n+1,1)**2+
p(
n+1,2)**2+
186 qold(
j)=
p(lein,
j)-
p(leout,
j)
187 qnew(
j)=
p(lein,
j)-
p(
n+1,
j)
197 p(
n+2,
j)=(
p(
n+1,
j)-
p(leout,
j))/(
p(
n+1,4)+
p(leout,4))
199 pinv=2d0/(1d0+
p(
n+2,1)**2+
p(
n+2,2)**2+
p(
n+2,3)**2)
206 IF(iorig.GT.leout) goto 190
207 IF(
i.EQ.leout.OR.iorig.EQ.leout)
208 & CALL
pyrobo(
i,
i,0d0,0d0,dbe(1),dbe(2),dbe(3))
220 IF(
k(
i,1).GT.10) goto 240
221 IF(
i.EQ.lqbg.OR.
i.EQ.lqout)
THEN
226 IF(iorig.EQ.lqbg.OR.iorig.EQ.lqout)
THEN
228 ELSEIF(iorig.GT.
mint(84).AND.iorig.LE.
n)
THEN
245 plcsum=plcsum+(
p(
i,4)+slc*
p(
i,3))
248 v(
i,1)=(
p(
i,4)+slc*
p(
i,3))/plcsum
256 p(
i,4)=sqrt(
p(
i,5)**2+
p(
i,1)**2+
p(
i,2)**2+
p(
i,3)**2)
262 peex=-
p(
n+1,4)-qnew(4)
263 pemv=-
p(
n+1,3)/
p(
n+1,4)
266 pemv=pemv+
v(
i,1)*
p(
i,3)/
p(
i,4)
268 IF(abs(pemv).LT.1d-10)
THEN
274 p(
n+1,3)=
p(
n+1,3)+pzch
275 p(
n+1,4)=sqrt(
p(
n+1,5)**2+
p(
n+1,1)**2+
p(
n+1,2)**2+
p(
n+1,3)**2)
278 p(
i,4)=sqrt(
p(
i,5)**2+
p(
i,1)**2+
p(
i,2)**2+
p(
i,3)**2)
280 IF(
iter.LT.10.AND.abs(peex).GT.1d-6*
p(
n+1,4)) goto 290
283 hbe=2d0*(
p(
n+1,4)+
p(lqbg,4))*(
p(
n+1,3)-
p(lqbg,3))/
284 & ((
p(
n+1,4)+
p(lqbg,4))**2+(
p(
n+1,3)-
p(lqbg,3))**2)
285 IF(abs(hbe).GE.1d0)
THEN
291 CALL
pyrobo(
i,
i,0d0,0d0,0d0,0d0,hbe)
303 pms(0)=
max(0d0,psys(0,4)**2-psys(0,3)**2)
306 psys(jt,4)=0.5d0*
vint(1)*
vint(142+jt)
307 psys(jt,3)=psys(jt,4)*(-1)**(jt-1)
309 IF(
mint(44+jt).EQ.1) goto 340
313 IF(
mint(51).NE.0)
THEN
317 IF(kflch(jt).NE.0) pmin(jt)=pmin(jt)+
pymass(kflch(jt))
318 IF(kflsp(jt).NE.0) pmin(jt)=pmin(jt)+
pymass(kflsp(jt))
319 IF(kflch(jt)*kflsp(jt).NE.0) pmin(jt)=pmin(jt)+0.5d0*
parp(111)
320 pmin(jt)=sqrt(pmin(jt)**2+
p(
mint(83)+jt+2,1)**2+
321 &
p(
mint(83)+jt+2,2)**2)
323 IF(pmin(0)+pmin(1)+pmin(2).GT.
vint(1).OR.(
mint(45).GE.2.AND.
324 &pmin(1).GT.psys(1,4)).OR.(
mint(46).GE.2.AND.pmin(2).GT.
335 IF(
mint(44+jt).EQ.1) goto 410
354 kcol=kchg(
pycomp(kflsp(jt)),2)
357 k(
i,4)=mstu(5)*ipu+ipu
358 k(
i,5)=mstu(5)*ipu+ipu
359 k(ipu,4)=mod(
k(ipu,4),mstu(5))+mstu(5)*
i
360 k(ipu,5)=mod(
k(ipu,5),mstu(5))+mstu(5)*
i
361 ELSEIF(kcol.NE.0)
THEN
363 kfls=(3-kcol*isign(1,kflsp(jt)))/2
365 k(ipu,6-kfls)=mod(
k(ipu,6-kfls),mstu(5))+mstu(5)*
i
367 IF(kflch(jt).EQ.0)
THEN
370 pms(jt)=
p(
i,5)**2+
p(
i,1)**2+
p(
i,2)**2
371 psys(jt,3)=sqrt(
max(0d0,psys(jt,4)**2-pms(jt)))*(-1)**(jt-1)
390 kcol=kchg(
pycomp(kflch(jt)),2)
393 k(
i,4)=mstu(5)*ipu+ipu
394 k(
i,5)=mstu(5)*ipu+ipu
395 k(ipu,4)=mod(
k(ipu,4),mstu(5))+mstu(5)*
i
396 k(ipu,5)=mod(
k(ipu,5),mstu(5))+mstu(5)*
i
397 ELSEIF(kcol.NE.0)
THEN
399 kfls=(3-kcol*isign(1,kflch(jt)))/2
401 k(ipu,6-kfls)=mod(
k(ipu,6-kfls),mstu(5))+mstu(5)*
i
408 IF(iabs(
mint(10+jt)).LT.20)
THEN
412 p(
i-1,1)=
p(
i-1,1)-0.5d0*
p(
mint(83)+jt+2,1)
413 p(
i-1,2)=
p(
i-1,2)-0.5d0*
p(
mint(83)+jt+2,2)
415 pms(jt+2)=
p(
i-1,5)**2+
p(
i-1,1)**2+
p(
i-1,2)**2
418 pms(jt+4)=
p(
i,5)**2+
p(
i,1)**2+
p(
i,2)**2
422 IF(mod(
mint(10+jt)/1000,10).NE.0) imb=2
425 IF(iabs(
mint(10+jt)).LT.20.AND.
mint(14+jt).EQ.-
mint(10+jt))
430 ELSEIF(iabs(
mint(10+jt)).LT.20)
THEN
433 chi(jt)=(xe-xhrd)/(1d0-xhrd)
436 ELSEIF(iabs(kflch(jt)).LE.10.OR.kflch(jt).EQ.21)
THEN
438 IF(
mstp(92).LE.1)
THEN
439 IF(imb.EQ.1) chi(jt)=
pyr(0)
440 IF(imb.EQ.2) chi(jt)=1d0-sqrt(
pyr(0))
441 ELSEIF(
mstp(92).EQ.2)
THEN
442 chi(jt)=1d0-
pyr(0)**(1d0/(1d0+chik))
443 ELSEIF(
mstp(92).EQ.3)
THEN
444 cut=2d0*0.3d0/
vint(1)
445 380 chi(jt)=
pyr(0)**2
446 IF((chi(jt)**2/(chi(jt)**2+cut**2))**0.25d0*
447 & (1d0-chi(jt))**chik.LT.
pyr(0)) goto 380
448 ELSEIF(
mstp(92).EQ.4)
THEN
449 cut=2d0*0.3d0/
vint(1)
450 cutr=(1d0+sqrt(1d0+cut**2))/cut
451 390 chir=cut*cutr**
pyr(0)
452 chi(jt)=(chir**2-cut**2)/(2d0*chir)
453 IF((1d0-chi(jt))**chik.LT.
pyr(0)) goto 390
455 cut=2d0*0.3d0/
vint(1)
456 cuta=cut**(1d0-
parp(98))
457 cutb=(1d0+cut)**(1d0-
parp(98))
458 400 chi(jt)=(cuta+
pyr(0)*(cutb-cuta))**(1d0/(1d0-
parp(98)))
459 IF(((chi(jt)+cut)**2/(2d0*(chi(jt)**2+cut**2)))**
460 & (0.5d0*
parp(98))*(1d0-chi(jt))**chik.LT.
pyr(0)) goto 400
465 IF(
mstp(94).LE.1)
THEN
466 IF(imb.EQ.1) chi(jt)=
pyr(0)
467 IF(imb.EQ.2) chi(jt)=1d0-sqrt(
pyr(0))
468 IF(mod(kflch(jt)/1000,10).NE.0) chi(jt)=1d0-chi(jt)
469 ELSEIF(
mstp(94).EQ.2)
THEN
470 chi(jt)=1d0-
pyr(0)**(1d0/(1d0+
parp(93+2*imb)))
471 IF(mod(kflch(jt)/1000,10).NE.0) chi(jt)=1d0-chi(jt)
472 ELSEIF(
mstp(94).EQ.3)
THEN
473 CALL
pyzdis(1,0,pms(jt+4),zz)
476 CALL
pyzdis(1000,0,pms(jt+4),zz)
482 chi(jt)=
max(1d-8,min(1d0-1d-8,chi(jt)))
483 pms(jt)=pms(jt+4)/chi(jt)+pms(jt+2)/(1d0-chi(jt))
484 IF(pms(jt).GT.psys(jt,4)**2)
THEN
493 psys(jt,3)=sqrt(
max(0d0,psys(jt,4)**2-pms(jt)))*(-1)**(jt-1)
497 pw1=chi(jt)*(psys(jt,4)+abs(psys(jt,3)))
498 p(is(jt)+1,4)=0.5d0*(pw1+pms(jt+4)/pw1)
499 p(is(jt)+1,3)=0.5d0*(pw1-pms(jt+4)/pw1)*(-1)**(jt-1)
500 p(is(jt),4)=psys(jt,4)-
p(is(jt)+1,4)
501 p(is(jt),3)=psys(jt,3)-
p(is(jt)+1,3)
507 pdev=abs(psys(0,4)+psys(1,4)+psys(2,4)-
vint(1))+
508 &abs(psys(0,3)+psys(1,3)+psys(2,3))
509 IF(pdev.LE.1d-6*
vint(1))
RETURN
513 ELSEIF(isn(2).EQ.0)
THEN
516 ELSEIF(
vint(143).GT.0.2d0.AND.
vint(144).GT.0.2d0)
THEN
519 ELSEIF(
vint(143).GT.0.2d0)
THEN
522 ELSEIF(
vint(144).GT.0.2d0)
THEN
525 ELSEIF(pms(1)/psys(1,4)**2.GT.pms(2)/psys(2,4)**2)
THEN
535 IF((ig.EQ.1.AND.isn(1).EQ.0).OR.(ig.EQ.2.AND.isn(2).EQ.0))
THEN
539 ppb=
vint(1)-(psys(ig,4)+psys(ig,3))
540 pnb=
vint(1)-(psys(ig,4)-psys(ig,3))
544 IF(idisxq.EQ.1.AND.ig.NE.0)
THEN
545 ppb=ppb-(psys(0,4)+psys(0,3))
546 pnb=pnb-(psys(0,4)-psys(0,3))
550 DO 450
i=
mint(84)+1,ns
551 IF(
k(
i,1).GT.10) goto 450
554 430
IF(iorig.EQ.lqout.OR.iorig.EQ.lpin+2) incl=1
556 IF(iorig.GT.lpin) goto 430
557 IF(incl.EQ.0) goto 450
559 psys(0,
j)=psys(0,
j)+
p(
i,
j)
562 pms(0)=
max(0d0,psys(0,4)**2-psys(0,3)**2)
563 ppb=ppb+(psys(0,4)+psys(0,3))
564 pnb=pnb+(psys(0,4)-psys(0,3))
571 dsqlam=sqrt(
max(0d0,(dpmtb-dpmtr-dpmtl)**2-4d0*dpmtr*dpmtl))
572 IF(dsqlam.LE.1d-6*dpmtb)
THEN
577 dsqsgn=
sign(1d0,psys(ir,3)*psys(il,4)-psys(il,3)*psys(ir,4))
578 drkr=(dpmtb+dpmtr-dpmtl+dsqlam*dsqsgn)/
579 &(2d0*(psys(ir,4)+psys(ir,3))*pnb)
580 drkl=(dpmtb+dpmtl-dpmtr+dsqlam*dsqsgn)/
581 &(2d0*(psys(il,4)-psys(il,3))*ppb)
582 dber=(drkr**2-1d0)/(drkr**2+1d0)
583 dbel=-(drkl**2-1d0)/(drkl**2+1d0)
586 IF(ir.EQ.1.AND.isn(1).EQ.1.AND.dber.LE.-0.99999999d0)
THEN
588 p(is(1),4)=sqrt(
p(is(1),5)**2+
p(is(1),1)**2+
p(is(1),2)**2)
590 CALL
pyrobo(is(1),is(1)+isn(1)-1,0d0,0d0,0d0,0d0,dber)
591 ELSEIF(idisxq.EQ.1)
THEN
595 460
IF(iorig.EQ.lqout.OR.iorig.EQ.lpin+2) incl=1
597 IF(iorig.GT.lpin) goto 460
598 IF(incl.EQ.1) CALL
pyrobo(
i,
i,0d0,0d0,0d0,0d0,dber)
601 CALL
pyrobo(
i1,ns,0d0,0d0,0d0,0d0,dber)
603 IF(il.EQ.2.AND.isn(2).EQ.1.AND.dbel.GE.0.99999999d0)
THEN
605 p(is(2),4)=sqrt(
p(is(2),5)**2+
p(is(2),1)**2+
p(is(2),2)**2)
607 CALL
pyrobo(is(2),is(2)+isn(2)-1,0d0,0d0,0d0,0d0,dbel)
608 ELSEIF(idisxq.EQ.1)
THEN
612 480
IF(iorig.EQ.lqout.OR.iorig.EQ.lpin+2) incl=1
614 IF(iorig.GT.lpin) goto 480
615 IF(incl.EQ.1) CALL
pyrobo(
i,
i,0d0,0d0,0d0,0d0,dbel)
618 CALL
pyrobo(
i1,ns,0d0,0d0,0d0,0d0,dbel)
625 IF(
k(
i,1).GT.10) goto 500
629 pdev=abs(pesum-
vint(1))+abs(pzsum)
630 IF(pdev.GT.1d-4*
vint(1))
THEN
639 IF(
mint(82).EQ.1.AND.(
mint(43).EQ.2.OR.
mint(43).EQ.3))
THEN
642 IF(
mint(42).EQ.1) lesd=2
650 IF(
k(
i,1).LE.0.OR.
k(
i,1).GT.10) goto 530
651 IF(iabs(
k(
i,2)).GE.11.AND.iabs(
k(
i,2)).LE.20) goto 530
652 IF(
k(
i,2).EQ.22) goto 530
654 psum(
j)=psum(
j)+
p(
i,
j)
657 vint(223)=-psum(1)/psum(4)
658 vint(224)=-psum(2)/psum(4)
659 vint(225)=-psum(3)/psum(4)