File indexing completed on 2025-08-05 08:15:44
0001
0002
0003
0004 SUBROUTINE PYHIKMAP(IVAR,MVAR,VVAR)
0005
0006
0007
0008
0009 COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
0010 SAVE /LUDAT2/
0011 COMMON/PYHIINT1/MINT(400),VINT(400)
0012 SAVE /PYHIINT1/
0013 COMMON/PYHIINT2/ISET(200),KFPR(200,2),COEF(200,20),ICOL(40,4,2)
0014 SAVE /PYHIINT2/
0015
0016
0017 ISUB=MINT(1)
0018 IF(IVAR.EQ.1) THEN
0019 TAUMIN=VINT(11)
0020 TAUMAX=VINT(31)
0021 IF(MVAR.EQ.3.OR.MVAR.EQ.4) THEN
0022 TAURE=VINT(73)
0023 GAMRE=VINT(74)
0024 ELSEIF(MVAR.EQ.5.OR.MVAR.EQ.6) THEN
0025 TAURE=VINT(75)
0026 GAMRE=VINT(76)
0027 ENDIF
0028 IF(MINT(43).EQ.1.AND.(ISET(ISUB).EQ.1.OR.ISET(ISUB).EQ.2)) THEN
0029 TAU=1.
0030 ELSEIF(MVAR.EQ.1) THEN
0031 TAU=TAUMIN*(TAUMAX/TAUMIN)**VVAR
0032 ELSEIF(MVAR.EQ.2) THEN
0033 TAU=TAUMAX*TAUMIN/(TAUMIN+(TAUMAX-TAUMIN)*VVAR)
0034 ELSEIF(MVAR.EQ.3.OR.MVAR.EQ.5) THEN
0035 RATGEN=(TAURE+TAUMAX)/(TAURE+TAUMIN)*TAUMIN/TAUMAX
0036 TAU=TAURE*TAUMIN/((TAURE+TAUMIN)*RATGEN**VVAR-TAUMIN)
0037 ELSE
0038 AUPP=ATAN((TAUMAX-TAURE)/GAMRE)
0039 ALOW=ATAN((TAUMIN-TAURE)/GAMRE)
0040 TAU=TAURE+GAMRE*TAN(ALOW+(AUPP-ALOW)*VVAR)
0041 ENDIF
0042 VINT(21)=MIN(TAUMAX,MAX(TAUMIN,TAU))
0043
0044
0045 ELSEIF(IVAR.EQ.2) THEN
0046 YSTMIN=VINT(12)
0047 YSTMAX=VINT(32)
0048 IF(MINT(43).EQ.1) THEN
0049 YST=0.
0050 ELSEIF(MINT(43).EQ.2) THEN
0051 IF(ISET(ISUB).LE.2) YST=-0.5*LOG(VINT(21))
0052 IF(ISET(ISUB).GE.3) YST=-0.5*LOG(VINT(26))
0053 ELSEIF(MINT(43).EQ.3) THEN
0054 IF(ISET(ISUB).LE.2) YST=0.5*LOG(VINT(21))
0055 IF(ISET(ISUB).GE.3) YST=0.5*LOG(VINT(26))
0056 ELSEIF(MVAR.EQ.1) THEN
0057 YST=YSTMIN+(YSTMAX-YSTMIN)*SQRT(VVAR)
0058 ELSEIF(MVAR.EQ.2) THEN
0059 YST=YSTMAX-(YSTMAX-YSTMIN)*SQRT(1.-VVAR)
0060 ELSE
0061 AUPP=ATAN(EXP(YSTMAX))
0062 ALOW=ATAN(EXP(YSTMIN))
0063 YST=LOG(TAN(ALOW+(AUPP-ALOW)*VVAR))
0064 ENDIF
0065 VINT(22)=MIN(YSTMAX,MAX(YSTMIN,YST))
0066
0067
0068 ELSEIF(IVAR.EQ.3) THEN
0069 RM34=2.*VINT(63)*VINT(64)/(VINT(21)*VINT(2))**2
0070 RSQM=1.+RM34
0071 IF(2.*VINT(71)**2/(VINT(21)*VINT(2)).LT.0.0001) RM34=MAX(RM34,
0072 & 2.*VINT(71)**2/(VINT(21)*VINT(2)))
0073 CTNMIN=VINT(13)
0074 CTNMAX=VINT(33)
0075 CTPMIN=VINT(14)
0076 CTPMAX=VINT(34)
0077 IF(MVAR.EQ.1) THEN
0078 ANEG=CTNMAX-CTNMIN
0079 APOS=CTPMAX-CTPMIN
0080 IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
0081 VCTN=VVAR*(ANEG+APOS)/ANEG
0082 CTH=CTNMIN+(CTNMAX-CTNMIN)*VCTN
0083 ELSE
0084 VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
0085 CTH=CTPMIN+(CTPMAX-CTPMIN)*VCTP
0086 ENDIF
0087 ELSEIF(MVAR.EQ.2) THEN
0088 RMNMIN=MAX(RM34,RSQM-CTNMIN)
0089 RMNMAX=MAX(RM34,RSQM-CTNMAX)
0090 RMPMIN=MAX(RM34,RSQM-CTPMIN)
0091 RMPMAX=MAX(RM34,RSQM-CTPMAX)
0092 ANEG=LOG(RMNMIN/RMNMAX)
0093 APOS=LOG(RMPMIN/RMPMAX)
0094 IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
0095 VCTN=VVAR*(ANEG+APOS)/ANEG
0096 CTH=RSQM-RMNMIN*(RMNMAX/RMNMIN)**VCTN
0097 ELSE
0098 VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
0099 CTH=RSQM-RMPMIN*(RMPMAX/RMPMIN)**VCTP
0100 ENDIF
0101 ELSEIF(MVAR.EQ.3) THEN
0102 RMNMIN=MAX(RM34,RSQM+CTNMIN)
0103 RMNMAX=MAX(RM34,RSQM+CTNMAX)
0104 RMPMIN=MAX(RM34,RSQM+CTPMIN)
0105 RMPMAX=MAX(RM34,RSQM+CTPMAX)
0106 ANEG=LOG(RMNMAX/RMNMIN)
0107 APOS=LOG(RMPMAX/RMPMIN)
0108 IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
0109 VCTN=VVAR*(ANEG+APOS)/ANEG
0110 CTH=RMNMIN*(RMNMAX/RMNMIN)**VCTN-RSQM
0111 ELSE
0112 VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
0113 CTH=RMPMIN*(RMPMAX/RMPMIN)**VCTP-RSQM
0114 ENDIF
0115 ELSEIF(MVAR.EQ.4) THEN
0116 RMNMIN=MAX(RM34,RSQM-CTNMIN)
0117 RMNMAX=MAX(RM34,RSQM-CTNMAX)
0118 RMPMIN=MAX(RM34,RSQM-CTPMIN)
0119 RMPMAX=MAX(RM34,RSQM-CTPMAX)
0120 ANEG=1./RMNMAX-1./RMNMIN
0121 APOS=1./RMPMAX-1./RMPMIN
0122 IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
0123 VCTN=VVAR*(ANEG+APOS)/ANEG
0124 CTH=RSQM-1./(1./RMNMIN+ANEG*VCTN)
0125 ELSE
0126 VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
0127 CTH=RSQM-1./(1./RMPMIN+APOS*VCTP)
0128 ENDIF
0129 ELSEIF(MVAR.EQ.5) THEN
0130 RMNMIN=MAX(RM34,RSQM+CTNMIN)
0131 RMNMAX=MAX(RM34,RSQM+CTNMAX)
0132 RMPMIN=MAX(RM34,RSQM+CTPMIN)
0133 RMPMAX=MAX(RM34,RSQM+CTPMAX)
0134 ANEG=1./RMNMIN-1./RMNMAX
0135 APOS=1./RMPMIN-1./RMPMAX
0136 IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
0137 VCTN=VVAR*(ANEG+APOS)/ANEG
0138 CTH=1./(1./RMNMIN-ANEG*VCTN)-RSQM
0139 ELSE
0140 VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
0141 CTH=1./(1./RMPMIN-APOS*VCTP)-RSQM
0142 ENDIF
0143 ENDIF
0144 IF(CTH.LT.0.) CTH=MIN(CTNMAX,MAX(CTNMIN,CTH))
0145 IF(CTH.GT.0.) CTH=MIN(CTPMAX,MAX(CTPMIN,CTH))
0146 VINT(23)=CTH
0147
0148
0149 ELSEIF(IVAR.EQ.4) THEN
0150 TAU=VINT(11)
0151 TAUPMN=VINT(16)
0152 TAUPMX=VINT(36)
0153 IF(MINT(43).EQ.1) THEN
0154 TAUP=1.
0155 ELSEIF(MVAR.EQ.1) THEN
0156 TAUP=TAUPMN*(TAUPMX/TAUPMN)**VVAR
0157 ELSE
0158 AUPP=(1.-TAU/TAUPMX)**4
0159 ALOW=(1.-TAU/TAUPMN)**4
0160 TAUP=TAU/(1.-(ALOW+(AUPP-ALOW)*VVAR)**0.25)
0161 ENDIF
0162 VINT(26)=MIN(TAUPMX,MAX(TAUPMN,TAUP))
0163 ENDIF
0164
0165 RETURN
0166 END