43 1 IFLAG,NEL ,PMIN ,OFF ,EINT ,MU , MU2,
44 2 ESPE ,DVOL ,DF ,VNEW ,PSH ,
45 3 PNEW ,DPDM ,DPDE ,VAREOS, NVAREOS, EOS_STRUCT)
50 USE eos_param_mod ,
ONLY : eos_param_
51 use precision_mod ,
only : wp
90 INTEGER,
INTENT(IN) :: IFLAG, NEL, NVAREOS
91 real(kind=WP) :: PMIN,
92 . OFF(NEL) , EINT(NEL), MU(NEL) ,
93 . mu2(nel) , espe(nel), dvol(nel), df(nel),
94 . vnew(nel), pnew(nel), dpdm(nel), dpde(nel)
95 real(kind=wp),
INTENT(INOUT) :: vareos(nel,nvareos)
96 real(kind=wp),
INTENT(INOUT) :: psh(nel)
97 TYPE(eos_param_),
INTENT(IN) :: eos_struct
102 real(kind=WP) :: aa, bb, dvv, eta, enew, omega, xx, expa, expb,
103 . pp, facc1, facc2, facpb,
104 . c1,c2,ptia,ptib,ezero,
105 .
alpha,beta,esubl,vsubl,
108 c1 = eos_struct%UPARAM(1)
109 c2 = eos_struct%UPARAM(2)
110 ptia = eos_struct%UPARAM(3)
111 ptib = eos_struct%UPARAM(4)
112 ezero = eos_struct%UPARAM(5)
113 esubl = eos_struct%UPARAM(6)
114 vsubl = eos_struct%UPARAM(7)
115 alpha = eos_struct%UPARAM(8)
116 beta = eos_struct%UPARAM(9)
117 psh(:) = eos_struct%PSH
125 IF(mu(i) < zero)
THEN
128 IF(df(i) > vsubl .OR. (df(i) <= vsubl .AND. espe(i) >= esubl))
THEN
131 expa=exp(-
alpha*xx*xx)
138 omega= one+espe(i)/(ezero*eta**2)
139 aa=facc1*c1*mu(i)+facc2*c2*mu2(i)
140 bb=ptia+facpb*ptib/omega
141 pp=
max(aa+bb*eta*espe(i),pmin)*off(i)
142 dpdm(i)=facc1*c1+two*facc2*c2*mu(i)+bb*eta*pp*df(i)*df(i)
143 . +espe(i)*( bb+(two*espe(i)/eta-pp*df(i)*df(i))
144 . *ptib*facpb/(ezero*eta*omega**2) )
147 pnew(i) =
max(pp,pmin)*off(i)
150 ELSEIF(iflag == 1)
THEN
153 dvv=half*dvol(i)*df(i) /
max(em15,vnew(i))
155 omega= one+espe(i)/(ezero*eta**2)
160 IF(mu(i) < zero)
THEN
163 IF(df(i) > vsubl .OR. (df(i) <= vsubl .AND. espe(i) >= esubl))
THEN
166 expa=exp(-
alpha*xx*xx)
172 aa=facc1*c1*mu(i)+facc2*c2*mu2(i)
173 bb=(ptia+facpb*ptib/omega)*eta
174 pnew(i)=(aa +bb*espe(i))/(one+ bb*dvv)
175 enew=espe(i) - pnew(i)*dvv
177 omega= one+enew/(ezero*eta**2)
178 bb=(ptia+facpb*ptib/omega)*eta
179 pnew(i)=(aa +bb*espe(i))/(one+ bb*dvv)
180 pnew(i)=
max(pnew(i),pmin)*off(i)
181 eint(i)= eint(i) - half*dvol(i)*pnew(i)
186 ELSEIF(iflag == 2)
THEN
190 IF (vnew(i) > zero)
THEN
198 IF(df(i) > vsubl .OR. (df(i) <= vsubl .AND. espe(i) >= esubl))
THEN
200 xx = mu(i)/(one+mu(i))
201 expa= exp(-
alpha*xx*xx)
208 omega= one+espe(i)/(ezero*eta**2)
209 aa=facc1*c1*mu(i)+facc2*c2*mu2(i)
210 bb=ptia+facpb*ptib/omega
211 pp=
max(aa+bb*eta*espe(i),pmin)*off(i)
212 dpdm(i)=facc1*c1+two*facc2*c2*mu(i)+bb*eta*pp*df(i)*df(i)
213 . +espe(i)*( bb+(two*espe(i)/eta-pp*df(i)*df(i))
214 . *ptib*facpb/(ezero*eta*omega**2) )
subroutine tillotson(iflag, nel, pmin, off, eint, mu, mu2, espe, dvol, df, vnew, psh, pnew, dpdm, dpde, vareos, nvareos, eos_struct)