File indexing completed on 2025-08-05 08:21:12
0001
0002
0003
0004
0005
0006
0007
0008
0009 SUBROUTINE PYKMAP(IVAR,MVAR,VVAR)
0010
0011
0012 IMPLICIT DOUBLE PRECISION(A-H, O-Z)
0013 IMPLICIT INTEGER(I-N)
0014 INTEGER PYK,PYCHGE,PYCOMP
0015
0016 COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
0017 COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
0018 COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
0019 COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
0020 COMMON/PYINT1/MINT(400),VINT(400)
0021 COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
0022 SAVE /PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/
0023
0024
0025 ISUB=MINT(1)
0026 ISTSB=ISET(ISUB)
0027 IF(IVAR.EQ.1) THEN
0028 TAUMIN=VINT(11)
0029 TAUMAX=VINT(31)
0030 IF(MVAR.EQ.3.OR.MVAR.EQ.4) THEN
0031 TAURE=VINT(73)
0032 GAMRE=VINT(74)
0033 ELSEIF(MVAR.EQ.5.OR.MVAR.EQ.6) THEN
0034 TAURE=VINT(75)
0035 GAMRE=VINT(76)
0036 ENDIF
0037 IF(MINT(47).EQ.1.AND.(ISTSB.EQ.1.OR.ISTSB.EQ.2)) THEN
0038 TAU=1D0
0039 ELSEIF(MVAR.EQ.1) THEN
0040 TAU=TAUMIN*(TAUMAX/TAUMIN)**VVAR
0041 ELSEIF(MVAR.EQ.2) THEN
0042 TAU=TAUMAX*TAUMIN/(TAUMIN+(TAUMAX-TAUMIN)*VVAR)
0043 ELSEIF(MVAR.EQ.3.OR.MVAR.EQ.5) THEN
0044 RATGEN=(TAURE+TAUMAX)/(TAURE+TAUMIN)*TAUMIN/TAUMAX
0045 TAU=TAURE*TAUMIN/((TAURE+TAUMIN)*RATGEN**VVAR-TAUMIN)
0046 ELSEIF(MVAR.EQ.4.OR.MVAR.EQ.6) THEN
0047 AUPP=ATAN((TAUMAX-TAURE)/GAMRE)
0048 ALOW=ATAN((TAUMIN-TAURE)/GAMRE)
0049 TAU=TAURE+GAMRE*TAN(ALOW+(AUPP-ALOW)*VVAR)
0050 ELSEIF(MINT(47).EQ.5) THEN
0051 AUPP=LOG(MAX(2D-10,1D0-TAUMAX))
0052 ALOW=LOG(MAX(2D-10,1D0-TAUMIN))
0053 TAU=1D0-EXP(AUPP+VVAR*(ALOW-AUPP))
0054 ELSE
0055 AUPP=LOG(MAX(1D-10,1D0-TAUMAX))
0056 ALOW=LOG(MAX(1D-10,1D0-TAUMIN))
0057 TAU=1D0-EXP(AUPP+VVAR*(ALOW-AUPP))
0058 ENDIF
0059 VINT(21)=MIN(TAUMAX,MAX(TAUMIN,TAU))
0060
0061
0062 ELSEIF(IVAR.EQ.2) THEN
0063 YSTMIN=VINT(12)
0064 YSTMAX=VINT(32)
0065 TAUE=VINT(21)
0066 IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=VINT(26)
0067 IF(MINT(47).EQ.1) THEN
0068 YST=0D0
0069 ELSEIF(MINT(47).EQ.2.OR.MINT(47).EQ.6) THEN
0070 YST=-0.5D0*LOG(TAUE)
0071 ELSEIF(MINT(47).EQ.3.OR.MINT(47).EQ.7) THEN
0072 YST=0.5D0*LOG(TAUE)
0073 ELSEIF(MVAR.EQ.1) THEN
0074 YST=YSTMIN+(YSTMAX-YSTMIN)*SQRT(VVAR)
0075 ELSEIF(MVAR.EQ.2) THEN
0076 YST=YSTMAX-(YSTMAX-YSTMIN)*SQRT(1D0-VVAR)
0077 ELSEIF(MVAR.EQ.3) THEN
0078 AUPP=ATAN(EXP(YSTMAX))
0079 ALOW=ATAN(EXP(YSTMIN))
0080 YST=LOG(TAN(ALOW+(AUPP-ALOW)*VVAR))
0081 ELSEIF(MVAR.EQ.4) THEN
0082 YST0=-0.5D0*LOG(TAUE)
0083 AUPP=LOG(MAX(1D-10,EXP(YST0-YSTMIN)-1D0))
0084 ALOW=LOG(MAX(1D-10,EXP(YST0-YSTMAX)-1D0))
0085 YST=YST0-LOG(1D0+EXP(ALOW+VVAR*(AUPP-ALOW)))
0086 ELSE
0087 YST0=-0.5D0*LOG(TAUE)
0088 AUPP=LOG(MAX(1D-10,EXP(YST0+YSTMIN)-1D0))
0089 ALOW=LOG(MAX(1D-10,EXP(YST0+YSTMAX)-1D0))
0090 YST=LOG(1D0+EXP(AUPP+VVAR*(ALOW-AUPP)))-YST0
0091 ENDIF
0092 VINT(22)=MIN(YSTMAX,MAX(YSTMIN,YST))
0093
0094
0095 ELSEIF(IVAR.EQ.3) THEN
0096 RM34=MAX(1D-20,2D0*VINT(63)*VINT(64)/(VINT(21)*VINT(2))**2)
0097 RSQM=1D0+RM34
0098 IF(2D0*VINT(71)**2/(VINT(21)*VINT(2)).LT.0.0001D0)
0099 & RM34=MAX(RM34,2D0*VINT(71)**2/(VINT(21)*VINT(2)))
0100 CTNMIN=VINT(13)
0101 CTNMAX=VINT(33)
0102 CTPMIN=VINT(14)
0103 CTPMAX=VINT(34)
0104 IF(MVAR.EQ.1) THEN
0105 ANEG=CTNMAX-CTNMIN
0106 APOS=CTPMAX-CTPMIN
0107 IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
0108 VCTN=VVAR*(ANEG+APOS)/ANEG
0109 CTH=CTNMIN+(CTNMAX-CTNMIN)*VCTN
0110 ELSE
0111 VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
0112 CTH=CTPMIN+(CTPMAX-CTPMIN)*VCTP
0113 ENDIF
0114 ELSEIF(MVAR.EQ.2) THEN
0115 RMNMIN=MAX(RM34,RSQM-CTNMIN)
0116 RMNMAX=MAX(RM34,RSQM-CTNMAX)
0117 RMPMIN=MAX(RM34,RSQM-CTPMIN)
0118 RMPMAX=MAX(RM34,RSQM-CTPMAX)
0119 ANEG=LOG(RMNMIN/RMNMAX)
0120 APOS=LOG(RMPMIN/RMPMAX)
0121 IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
0122 VCTN=VVAR*(ANEG+APOS)/ANEG
0123 CTH=RSQM-RMNMIN*(RMNMAX/RMNMIN)**VCTN
0124 ELSE
0125 VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
0126 CTH=RSQM-RMPMIN*(RMPMAX/RMPMIN)**VCTP
0127 ENDIF
0128 ELSEIF(MVAR.EQ.3) THEN
0129 RMNMIN=MAX(RM34,RSQM+CTNMIN)
0130 RMNMAX=MAX(RM34,RSQM+CTNMAX)
0131 RMPMIN=MAX(RM34,RSQM+CTPMIN)
0132 RMPMAX=MAX(RM34,RSQM+CTPMAX)
0133 ANEG=LOG(RMNMAX/RMNMIN)
0134 APOS=LOG(RMPMAX/RMPMIN)
0135 IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
0136 VCTN=VVAR*(ANEG+APOS)/ANEG
0137 CTH=RMNMIN*(RMNMAX/RMNMIN)**VCTN-RSQM
0138 ELSE
0139 VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
0140 CTH=RMPMIN*(RMPMAX/RMPMIN)**VCTP-RSQM
0141 ENDIF
0142 ELSEIF(MVAR.EQ.4) THEN
0143 RMNMIN=MAX(RM34,RSQM-CTNMIN)
0144 RMNMAX=MAX(RM34,RSQM-CTNMAX)
0145 RMPMIN=MAX(RM34,RSQM-CTPMIN)
0146 RMPMAX=MAX(RM34,RSQM-CTPMAX)
0147 ANEG=1D0/RMNMAX-1D0/RMNMIN
0148 APOS=1D0/RMPMAX-1D0/RMPMIN
0149 IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
0150 VCTN=VVAR*(ANEG+APOS)/ANEG
0151 CTH=RSQM-1D0/(1D0/RMNMIN+ANEG*VCTN)
0152 ELSE
0153 VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
0154 CTH=RSQM-1D0/(1D0/RMPMIN+APOS*VCTP)
0155 ENDIF
0156 ELSEIF(MVAR.EQ.5) THEN
0157 RMNMIN=MAX(RM34,RSQM+CTNMIN)
0158 RMNMAX=MAX(RM34,RSQM+CTNMAX)
0159 RMPMIN=MAX(RM34,RSQM+CTPMIN)
0160 RMPMAX=MAX(RM34,RSQM+CTPMAX)
0161 ANEG=1D0/RMNMIN-1D0/RMNMAX
0162 APOS=1D0/RMPMIN-1D0/RMPMAX
0163 IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
0164 VCTN=VVAR*(ANEG+APOS)/ANEG
0165 CTH=1D0/(1D0/RMNMIN-ANEG*VCTN)-RSQM
0166 ELSE
0167 VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
0168 CTH=1D0/(1D0/RMPMIN-APOS*VCTP)-RSQM
0169 ENDIF
0170 ENDIF
0171 IF(CTH.LT.0D0) CTH=MIN(CTNMAX,MAX(CTNMIN,CTH))
0172 IF(CTH.GT.0D0) CTH=MIN(CTPMAX,MAX(CTPMIN,CTH))
0173 VINT(23)=CTH
0174
0175
0176 ELSEIF(IVAR.EQ.4) THEN
0177 TAU=VINT(21)
0178 TAUPMN=VINT(16)
0179 TAUPMX=VINT(36)
0180 IF(MINT(47).EQ.1) THEN
0181 TAUP=1D0
0182 ELSEIF(MVAR.EQ.1) THEN
0183 TAUP=TAUPMN*(TAUPMX/TAUPMN)**VVAR
0184 ELSEIF(MVAR.EQ.2) THEN
0185 AUPP=(1D0-TAU/TAUPMX)**4
0186 ALOW=(1D0-TAU/TAUPMN)**4
0187 TAUP=TAU/MAX(1D-10,1D0-(ALOW+(AUPP-ALOW)*VVAR)**0.25D0)
0188 ELSEIF(MINT(47).EQ.5) THEN
0189 AUPP=LOG(MAX(2D-10,1D0-TAUPMX))
0190 ALOW=LOG(MAX(2D-10,1D0-TAUPMN))
0191 TAUP=1D0-EXP(AUPP+VVAR*(ALOW-AUPP))
0192 ELSE
0193 AUPP=LOG(MAX(1D-10,1D0-TAUPMX))
0194 ALOW=LOG(MAX(1D-10,1D0-TAUPMN))
0195 TAUP=1D0-EXP(AUPP+VVAR*(ALOW-AUPP))
0196 ENDIF
0197 VINT(26)=MIN(TAUPMX,MAX(TAUPMN,TAUP))
0198
0199
0200
0201
0202
0203 ELSEIF(IVAR.EQ.5) THEN
0204
0205
0206 MINT(51)=0
0207 MPTPK=1
0208 IF(ISUB.EQ.123.OR.ISUB.EQ.124.OR.ISUB.EQ.173.OR.ISUB.EQ.174
0209 & .OR.ISUB.EQ.178.OR.ISUB.EQ.179.OR.ISUB.EQ.351.OR.ISUB.EQ.352)
0210 & MPTPK=2
0211 SHP=VINT(26)*VINT(2)
0212 SHPR=SQRT(SHP)
0213 PM1=VINT(201)
0214 PM2=VINT(206)
0215 PM3=SQRT(VINT(21))*VINT(1)
0216 IF(PM1+PM2+PM3.GT.0.9999D0*SHPR) THEN
0217 MINT(51)=1
0218 RETURN
0219 ENDIF
0220 PMRS1=VINT(204)**2
0221 PMRS2=VINT(209)**2
0222
0223
0224 IF(MPTPK.EQ.1) THEN
0225 HWT1=0.4D0
0226 HWT2=0.4D0
0227 ELSE
0228 HWT1=0.05D0
0229 HWT2=0.05D0
0230 ENDIF
0231 HWT3=1D0-HWT1-HWT2
0232 PTSMX1=((SHP-PM1**2-(PM2+PM3)**2)**2-(2D0*PM1*(PM2+PM3))**2)/
0233 & (4D0*SHP)
0234 IF(CKIN(52).GT.0D0) PTSMX1=MIN(PTSMX1,CKIN(52)**2)
0235 PTSMN1=CKIN(51)**2
0236 PTSMX2=((SHP-PM2**2-(PM1+PM3)**2)**2-(2D0*PM2*(PM1+PM3))**2)/
0237 & (4D0*SHP)
0238 IF(CKIN(54).GT.0D0) PTSMX2=MIN(PTSMX2,CKIN(54)**2)
0239 PTSMN2=CKIN(53)**2
0240
0241
0242
0243 HMX=PMRS1+PTSMX1
0244 HMN=PMRS1+PTSMN1
0245 IF(HMX.LT.1.0001D0*HMN) THEN
0246 MINT(51)=1
0247 RETURN
0248 ENDIF
0249 HDE=PTSMX1-PTSMN1
0250 RPT=PYR(0)
0251 IF(RPT.LT.HWT1) THEN
0252 PTS1=PTSMN1+PYR(0)*HDE
0253 ELSEIF(RPT.LT.HWT1+HWT2) THEN
0254 PTS1=MAX(PTSMN1,HMN*(HMX/HMN)**PYR(0)-PMRS1)
0255 ELSE
0256 PTS1=MAX(PTSMN1,HMN*HMX/(HMN+PYR(0)*HDE)-PMRS1)
0257 ENDIF
0258 WTPTS1=HDE/(HWT1+HWT2*HDE/(LOG(HMX/HMN)*(PMRS1+PTS1))+
0259 & HWT3*HMN*HMX/(PMRS1+PTS1)**2)
0260 HMX=PMRS2+PTSMX2
0261 HMN=PMRS2+PTSMN2
0262 IF(HMX.LT.1.0001D0*HMN) THEN
0263 MINT(51)=1
0264 RETURN
0265 ENDIF
0266 HDE=PTSMX2-PTSMN2
0267 RPT=PYR(0)
0268 IF(RPT.LT.HWT1) THEN
0269 PTS2=PTSMN2+PYR(0)*HDE
0270 ELSEIF(RPT.LT.HWT1+HWT2) THEN
0271 PTS2=MAX(PTSMN2,HMN*(HMX/HMN)**PYR(0)-PMRS2)
0272 ELSE
0273 PTS2=MAX(PTSMN2,HMN*HMX/(HMN+PYR(0)*HDE)-PMRS2)
0274 ENDIF
0275 WTPTS2=HDE/(HWT1+HWT2*HDE/(LOG(HMX/HMN)*(PMRS2+PTS2))+
0276 & HWT3*HMN*HMX/(PMRS2+PTS2)**2)
0277
0278
0279 PHI1=PARU(2)*PYR(0)
0280 PHI2=PARU(2)*PYR(0)
0281 PHIR=PHI2-PHI1
0282 PTS3=MAX(0D0,PTS1+PTS2+2D0*SQRT(PTS1*PTS2)*COS(PHIR))
0283 IF(PTS3.LT.CKIN(55)**2.OR.(CKIN(56).GT.0D0.AND.PTS3.GT.
0284 & CKIN(56)**2)) THEN
0285 MINT(51)=1
0286 RETURN
0287 ENDIF
0288
0289
0290 PMS1=PM1**2+PTS1
0291 PMS2=PM2**2+PTS2
0292 PMS3=PM3**2+PTS3
0293 PMT1=SQRT(PMS1)
0294 PMT2=SQRT(PMS2)
0295 PMT3=SQRT(PMS3)
0296 PM12=(PMT1+PMT2)**2
0297 IF(PMT1+PMT2+PMT3.GT.0.9999D0*SHPR) THEN
0298 MINT(51)=1
0299 RETURN
0300 ENDIF
0301
0302
0303 Y3MAX=LOG((SHP+PMS3-PM12+SQRT(MAX(0D0,(SHP-PMS3-PM12)**2-
0304 & 4D0*PMS3*PM12)))/(2D0*SHPR*PMT3))
0305 IF(Y3MAX.LT.1D-6) THEN
0306 MINT(51)=1
0307 RETURN
0308 ENDIF
0309 Y3=(2D0*PYR(0)-1D0)*0.999999D0*Y3MAX
0310 PZ3=PMT3*SINH(Y3)
0311 PE3=PMT3*COSH(Y3)
0312
0313
0314 PZ12=-PZ3
0315 PE12=SHPR-PE3
0316 PMS12=PE12**2-PZ12**2
0317 SQL12=SQRT(MAX(0D0,(PMS12-PMS1-PMS2)**2-4D0*PMS1*PMS2))
0318 IF(SQL12.LT.1D-6*SHP) THEN
0319 MINT(51)=1
0320 RETURN
0321 ENDIF
0322 PMM1=PMS12+PMS1-PMS2
0323 PMM2=PMS12+PMS2-PMS1
0324 TFAC=-SHPR/(2D0*PMS12)
0325 T1P=TFAC*(PE12-PZ12)*(PMM1-SQL12)
0326 T1N=TFAC*(PE12-PZ12)*(PMM1+SQL12)
0327 T2P=TFAC*(PE12+PZ12)*(PMM2-SQL12)
0328 T2N=TFAC*(PE12+PZ12)*(PMM2+SQL12)
0329
0330
0331 IF(MPTPK.EQ.1.OR.ISUB.EQ.351.OR.ISUB.EQ.352) THEN
0332 WTPU=1D0
0333 WTNU=1D0
0334 ELSE
0335 WTPU=1D0/((T1P-PMRS1)*(T2P-PMRS2))**2
0336 WTNU=1D0/((T1N-PMRS1)*(T2N-PMRS2))**2
0337 ENDIF
0338 WTP=WTPU/(WTPU+WTNU)
0339 WTN=WTNU/(WTPU+WTNU)
0340 EPS=1D0
0341 IF(WTN.GT.PYR(0)) EPS=-1D0
0342
0343
0344 VINT(202)=PTS1
0345 VINT(207)=PTS2
0346 VINT(203)=PHI1
0347 VINT(208)=PHI2
0348 VINT(205)=WTPTS1
0349 VINT(210)=WTPTS2
0350 VINT(211)=Y3
0351 VINT(212)=Y3MAX
0352 VINT(213)=EPS
0353 IF(EPS.GT.0D0) THEN
0354 VINT(214)=1D0/WTP
0355 VINT(215)=T1P
0356 VINT(216)=T2P
0357 ELSE
0358 VINT(214)=1D0/WTN
0359 VINT(215)=T1N
0360 VINT(216)=T2N
0361 ENDIF
0362 VINT(217)=-0.5D0*TFAC*(PE12-PZ12)*(PMM2+EPS*SQL12)
0363 VINT(218)=-0.5D0*TFAC*(PE12+PZ12)*(PMM1+EPS*SQL12)
0364 VINT(219)=0.5D0*(PMS12-PTS3)
0365 VINT(220)=SQL12
0366 ENDIF
0367
0368 RETURN
0369 END