File indexing completed on 2025-08-05 08:21:20
0001
0002
0003
0004
0005
0006
0007
0008 SUBROUTINE PYUPDA(MUPDA,LFN)
0009
0010
0011 IMPLICIT DOUBLE PRECISION(A-H, O-Z)
0012 IMPLICIT INTEGER(I-N)
0013 INTEGER PYK,PYCHGE,PYCOMP
0014
0015 COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
0016 COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
0017 COMMON/PYDAT3/MDCY(500,3),MDME(8000,2),BRAT(8000),KFDP(8000,5)
0018 COMMON/PYDAT4/CHAF(500,2)
0019 CHARACTER CHAF*16
0020 COMMON/PYINT4/MWID(500),WIDS(500,5)
0021 SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYDAT4/,/PYINT4/
0022
0023 CHARACTER CHINL*120,CHKF*9,CHVAR(22)*9,CHLIN*72,
0024 &CHBLK(20)*72,CHOLD*16,CHTMP*16,CHNEW*16,CHCOM*24
0025 DATA CHVAR/ 'KCHG(I,1)','KCHG(I,2)','KCHG(I,3)','KCHG(I,4)',
0026 &'PMAS(I,1)','PMAS(I,2)','PMAS(I,3)','PMAS(I,4)','MDCY(I,1)',
0027 &'MDCY(I,2)','MDCY(I,3)','MDME(I,1)','MDME(I,2)','BRAT(I) ',
0028 &'KFDP(I,1)','KFDP(I,2)','KFDP(I,3)','KFDP(I,4)','KFDP(I,5)',
0029 &'CHAF(I,1)','CHAF(I,2)','MWID(I) '/
0030
0031
0032 IF(MSTU(12).NE.12345) CALL PYLIST(0)
0033
0034
0035 IF(MUPDA.EQ.1) THEN
0036 DO 110 KC=1,500
0037 WRITE(LFN,5000) KCHG(KC,4),(CHAF(KC,J1),J1=1,2),
0038 & (KCHG(KC,J2),J2=1,3),(PMAS(KC,J3),J3=1,4),
0039 & MWID(KC),MDCY(KC,1)
0040 DO 100 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
0041 WRITE(LFN,5100) MDME(IDC,1),MDME(IDC,2),BRAT(IDC),
0042 & (KFDP(IDC,J),J=1,5)
0043 100 CONTINUE
0044 110 CONTINUE
0045
0046
0047
0048 ELSEIF(MUPDA.EQ.2.OR.MUPDA.EQ.3) THEN
0049
0050
0051 KCC=100
0052 NDC=0
0053 CHKF=' '
0054 IF(MUPDA.EQ.2) THEN
0055 DO 120 I=1,MSTU(6)
0056 KCHG(I,4)=0
0057 120 CONTINUE
0058 ELSE
0059 DO 130 KC=1,MSTU(6)
0060 IF(KC.GT.100.AND.KCHG(KC,4).GT.100) KCC=KC
0061 NDC=MAX(NDC,MDCY(KC,2)+MDCY(KC,3)-1)
0062 130 CONTINUE
0063 ENDIF
0064
0065
0066
0067 140 READ(LFN,5200,END=190) CHINL
0068
0069
0070 IF(CHINL(2:10).NE.' ') THEN
0071 CHKF=CHINL(2:10)
0072 READ(CHKF,5300) KF
0073 IF(MUPDA.EQ.2) THEN
0074 IF(KF.LE.100) THEN
0075 KC=KF
0076 ELSE
0077 KCC=KCC+1
0078 KC=KCC
0079 ENDIF
0080 ELSE
0081 KCREP=0
0082 IF(KF.LE.100) THEN
0083 KCREP=KF
0084 ELSE
0085 DO 150 KCR=101,KCC
0086 IF(KCHG(KCR,4).EQ.KF) KCREP=KCR
0087 150 CONTINUE
0088 ENDIF
0089
0090 IF(KCREP.NE.0.AND.MDCY(KCREP,3).GT.0) THEN
0091 IDCREP=MDCY(KCREP,2)
0092 NDCREP=MDCY(KCREP,3)
0093 DO 160 I=1,KCC
0094 IF(MDCY(I,2).GT.IDCREP) MDCY(I,2)=MDCY(I,2)-NDCREP
0095 160 CONTINUE
0096 DO 180 I=IDCREP,NDC-NDCREP
0097 MDME(I,1)=MDME(I+NDCREP,1)
0098 MDME(I,2)=MDME(I+NDCREP,2)
0099 BRAT(I)=BRAT(I+NDCREP)
0100 DO 170 J=1,5
0101 KFDP(I,J)=KFDP(I+NDCREP,J)
0102 170 CONTINUE
0103 180 CONTINUE
0104 NDC=NDC-NDCREP
0105 KC=KCREP
0106 ELSEIF(KCREP.NE.0) THEN
0107 KC=KCREP
0108 ELSE
0109 KCC=KCC+1
0110 KC=KCC
0111 ENDIF
0112 ENDIF
0113
0114
0115 IF(KC.GT.MSTU(6)) CALL PYERRM(27,
0116 & '(PYUPDA:) Particle arrays full by KF ='//CHKF)
0117 READ(CHINL,5000) KCHG(KC,4),(CHAF(KC,J1),J1=1,2),
0118 & (KCHG(KC,J2),J2=1,3),(PMAS(KC,J3),J3=1,4),
0119 & MWID(KC),MDCY(KC,1)
0120 MDCY(KC,2)=0
0121 MDCY(KC,3)=0
0122
0123
0124 ELSE
0125 NDC=NDC+1
0126 IF(NDC.GT.MSTU(7)) CALL PYERRM(27,
0127 & '(PYUPDA:) Decay data arrays full by KF ='//CHKF)
0128 IF(MDCY(KC,2).EQ.0) MDCY(KC,2)=NDC
0129 MDCY(KC,3)=MDCY(KC,3)+1
0130 READ(CHINL,5100) MDME(NDC,1),MDME(NDC,2),BRAT(NDC),
0131 & (KFDP(NDC,J),J=1,5)
0132 ENDIF
0133
0134
0135 GOTO 140
0136 190 CONTINUE
0137 MSTU(20)=0
0138
0139
0140 DO 220 KC=1,MSTU(6)
0141 KF=KCHG(KC,4)
0142 IF(KF.EQ.0) GOTO 220
0143 WRITE(CHKF,5300) KF
0144 IF(MIN(PMAS(KC,1),PMAS(KC,2),PMAS(KC,3),PMAS(KC,1)-PMAS(KC,3),
0145 & PMAS(KC,4)).LT.0D0.OR.MDCY(KC,3).LT.0) CALL PYERRM(17,
0146 & '(PYUPDA:) Mass/width/life/(# channels) wrong for KF ='//CHKF)
0147 BRSUM=0D0
0148 DO 210 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
0149 IF(MDME(IDC,2).GT.80) GOTO 210
0150 KQ=KCHG(KC,1)
0151 PMS=PMAS(KC,1)-PMAS(KC,3)-PARJ(64)
0152 MERR=0
0153 DO 200 J=1,5
0154 KP=KFDP(IDC,J)
0155 IF(KP.EQ.0.OR.KP.EQ.81.OR.IABS(KP).EQ.82) THEN
0156 IF(KP.EQ.81) KQ=0
0157 ELSEIF(PYCOMP(KP).EQ.0) THEN
0158 MERR=3
0159 ELSE
0160 KQ=KQ-PYCHGE(KP)
0161 KPC=PYCOMP(KP)
0162 PMS=PMS-PMAS(KPC,1)
0163 IF(MSTJ(24).GT.0) PMS=PMS+0.5D0*MIN(PMAS(KPC,2),
0164 & PMAS(KPC,3))
0165 ENDIF
0166 200 CONTINUE
0167 IF(KQ.NE.0) MERR=MAX(2,MERR)
0168 IF(MWID(KC).EQ.0.AND.KF.NE.311.AND.PMS.LT.0D0)
0169 & MERR=MAX(1,MERR)
0170 IF(MERR.EQ.3) CALL PYERRM(17,
0171 & '(PYUPDA:) Unknown particle code in decay of KF ='//CHKF)
0172 IF(MERR.EQ.2) CALL PYERRM(17,
0173 & '(PYUPDA:) Charge not conserved in decay of KF ='//CHKF)
0174 IF(MERR.EQ.1) CALL PYERRM(7,
0175 & '(PYUPDA:) Kinematically unallowed decay of KF ='//CHKF)
0176 BRSUM=BRSUM+BRAT(IDC)
0177 210 CONTINUE
0178 WRITE(CHTMP,5500) BRSUM
0179 IF(ABS(BRSUM).GT.0.0005D0.AND.ABS(BRSUM-1D0).GT.0.0005D0)
0180 & CALL PYERRM(7,'(PYUPDA:) Sum of branching ratios is '//
0181 & CHTMP(9:16)//' for KF ='//CHKF)
0182 220 CONTINUE
0183
0184
0185 ELSEIF(MUPDA.EQ.4) THEN
0186
0187
0188 KCC=0
0189 NDC=0
0190 DO 230 I=1,MSTU(6)
0191 IF(KCHG(I,4).NE.0) THEN
0192 KCC=I
0193 NDC=MAX(NDC,MDCY(I,2)+MDCY(I,3)-1)
0194 ENDIF
0195 230 CONTINUE
0196
0197
0198 DO 300 IVAR=1,22
0199 NDIM=MSTU(6)
0200 IF(IVAR.GE.12.AND.IVAR.LE.19) NDIM=MSTU(7)
0201 NLIN=1
0202 CHLIN=' '
0203 CHLIN(7:35)='DATA ('//CHVAR(IVAR)//',I= 1, )/'
0204 LLIN=35
0205 CHOLD='START'
0206
0207
0208 DO 280 IDIM=1,NDIM
0209 IF(IVAR.EQ.1) WRITE(CHTMP,5400) KCHG(IDIM,1)
0210 IF(IVAR.EQ.2) WRITE(CHTMP,5400) KCHG(IDIM,2)
0211 IF(IVAR.EQ.3) WRITE(CHTMP,5400) KCHG(IDIM,3)
0212 IF(IVAR.EQ.4) WRITE(CHTMP,5400) KCHG(IDIM,4)
0213 IF(IVAR.EQ.5) WRITE(CHTMP,5500) PMAS(IDIM,1)
0214 IF(IVAR.EQ.6) WRITE(CHTMP,5500) PMAS(IDIM,2)
0215 IF(IVAR.EQ.7) WRITE(CHTMP,5500) PMAS(IDIM,3)
0216 IF(IVAR.EQ.8) WRITE(CHTMP,5500) PMAS(IDIM,4)
0217 IF(IVAR.EQ.9) WRITE(CHTMP,5400) MDCY(IDIM,1)
0218 IF(IVAR.EQ.10) WRITE(CHTMP,5400) MDCY(IDIM,2)
0219 IF(IVAR.EQ.11) WRITE(CHTMP,5400) MDCY(IDIM,3)
0220 IF(IVAR.EQ.12) WRITE(CHTMP,5400) MDME(IDIM,1)
0221 IF(IVAR.EQ.13) WRITE(CHTMP,5400) MDME(IDIM,2)
0222 IF(IVAR.EQ.14) WRITE(CHTMP,5600) BRAT(IDIM)
0223 IF(IVAR.EQ.15) WRITE(CHTMP,5400) KFDP(IDIM,1)
0224 IF(IVAR.EQ.16) WRITE(CHTMP,5400) KFDP(IDIM,2)
0225 IF(IVAR.EQ.17) WRITE(CHTMP,5400) KFDP(IDIM,3)
0226 IF(IVAR.EQ.18) WRITE(CHTMP,5400) KFDP(IDIM,4)
0227 IF(IVAR.EQ.19) WRITE(CHTMP,5400) KFDP(IDIM,5)
0228 IF(IVAR.EQ.20) CHTMP=CHAF(IDIM,1)
0229 IF(IVAR.EQ.21) CHTMP=CHAF(IDIM,2)
0230 IF(IVAR.EQ.22) WRITE(CHTMP,5400) MWID(IDIM)
0231
0232
0233 IF(IVAR.LE.4) THEN
0234 IF(IDIM.GT.KCC) CHTMP=' 0'
0235 ELSEIF(IVAR.LE.8) THEN
0236 IF(IDIM.GT.KCC) CHTMP=' 0.0'
0237 ELSEIF(IVAR.LE.11) THEN
0238 IF(IDIM.GT.KCC) CHTMP=' 0'
0239 ELSEIF(IVAR.LE.13) THEN
0240 IF(IDIM.GT.NDC) CHTMP=' 0'
0241 ELSEIF(IVAR.LE.14) THEN
0242 IF(IDIM.GT.NDC) CHTMP=' 0.0'
0243 ELSEIF(IVAR.LE.19) THEN
0244 IF(IDIM.GT.NDC) CHTMP=' 0'
0245 ELSEIF(IVAR.LE.21) THEN
0246 IF(IDIM.GT.KCC) CHTMP=' '
0247 ELSE
0248 IF(IDIM.GT.KCC) CHTMP=' 0'
0249 ENDIF
0250
0251
0252 LLOW=1
0253 LHIG=1
0254 DO 240 LL=1,16
0255 IF(CHTMP(17-LL:17-LL).NE.' ') LLOW=17-LL
0256 IF(CHTMP(LL:LL).NE.' ') LHIG=LL
0257 240 CONTINUE
0258 CHNEW=CHTMP(LLOW:LHIG)//' '
0259 LNEW=1+LHIG-LLOW
0260 IF((IVAR.GE.5.AND.IVAR.LE.8).OR.IVAR.EQ.14) THEN
0261 LNEW=LNEW+1
0262 250 LNEW=LNEW-1
0263 IF(LNEW.GE.2.AND.CHNEW(LNEW:LNEW).EQ.'0') GOTO 250
0264 IF(CHNEW(LNEW:LNEW).EQ.'.') LNEW=LNEW-1
0265 IF(LNEW.EQ.0) THEN
0266 CHNEW(1:3)='0D0'
0267 LNEW=3
0268 ELSE
0269 CHNEW(LNEW+1:LNEW+2)='D0'
0270 LNEW=LNEW+2
0271 ENDIF
0272 ELSEIF(IVAR.EQ.20.OR.IVAR.EQ.21) THEN
0273 DO 260 LL=LNEW,1,-1
0274 IF(CHNEW(LL:LL).EQ.'''') THEN
0275 CHTMP=CHNEW
0276 CHNEW=CHTMP(1:LL)//''''//CHTMP(LL+1:11)
0277 LNEW=LNEW+1
0278 ENDIF
0279 260 CONTINUE
0280 LNEW=MIN(14,LNEW)
0281 CHTMP=CHNEW
0282 CHNEW(1:LNEW+2)=''''//CHTMP(1:LNEW)//''''
0283 LNEW=LNEW+2
0284 ENDIF
0285
0286
0287 IF(CHNEW.NE.CHOLD) THEN
0288 NRPT=1
0289 CHOLD=CHNEW
0290 CHCOM=CHNEW
0291 LCOM=LNEW
0292 ELSE
0293 LRPT=LNEW+1
0294 IF(NRPT.GE.2) LRPT=LNEW+3
0295 IF(NRPT.GE.10) LRPT=LNEW+4
0296 IF(NRPT.GE.100) LRPT=LNEW+5
0297 IF(NRPT.GE.1000) LRPT=LNEW+6
0298 LLIN=LLIN-LRPT
0299 NRPT=NRPT+1
0300 WRITE(CHTMP,5400) NRPT
0301 LRPT=1
0302 IF(NRPT.GE.10) LRPT=2
0303 IF(NRPT.GE.100) LRPT=3
0304 IF(NRPT.GE.1000) LRPT=4
0305 CHCOM(1:LRPT+1+LNEW)=CHTMP(17-LRPT:16)//'*'//CHNEW(1:LNEW)
0306 LCOM=LRPT+1+LNEW
0307 ENDIF
0308
0309
0310
0311 IF(LLIN+LCOM.LE.70) THEN
0312 CHLIN(LLIN+1:LLIN+LCOM+1)=CHCOM(1:LCOM)//','
0313 LLIN=LLIN+LCOM+1
0314 ELSEIF(NLIN.LE.19) THEN
0315 CHLIN(LLIN+1:72)=' '
0316 CHBLK(NLIN)=CHLIN
0317 NLIN=NLIN+1
0318 CHLIN(6:6+LCOM+1)='&'//CHCOM(1:LCOM)//','
0319 LLIN=6+LCOM+1
0320 ELSE
0321 CHLIN(LLIN:72)='/'//' '
0322 CHBLK(NLIN)=CHLIN
0323 WRITE(CHTMP,5400) IDIM-NRPT
0324 CHBLK(1)(30:33)=CHTMP(13:16)
0325 DO 270 ILIN=1,NLIN
0326 WRITE(LFN,5700) CHBLK(ILIN)
0327 270 CONTINUE
0328 NLIN=1
0329 CHLIN=' '
0330 CHLIN(7:35+LCOM+1)='DATA ('//CHVAR(IVAR)//
0331 & ',I= , )/'//CHCOM(1:LCOM)//','
0332 WRITE(CHTMP,5400) IDIM-NRPT+1
0333 CHLIN(25:28)=CHTMP(13:16)
0334 LLIN=35+LCOM+1
0335 ENDIF
0336 280 CONTINUE
0337
0338
0339 CHLIN(LLIN:72)='/'//' '
0340 CHBLK(NLIN)=CHLIN
0341 WRITE(CHTMP,5400) NDIM
0342 CHBLK(1)(30:33)=CHTMP(13:16)
0343 DO 290 ILIN=1,NLIN
0344 WRITE(LFN,5700) CHBLK(ILIN)
0345 290 CONTINUE
0346 300 CONTINUE
0347 ENDIF
0348
0349
0350 5000 FORMAT(1X,I9,2X,A16,2X,A16,3I3,3F12.5,1P,E13.5,2I3)
0351 5100 FORMAT(10X,2I5,F12.6,5I10)
0352 5200 FORMAT(A120)
0353 5300 FORMAT(I9)
0354 5400 FORMAT(I16)
0355 5500 FORMAT(F16.5)
0356 5600 FORMAT(F16.6)
0357 5700 FORMAT(A72)
0358
0359 RETURN
0360 END