42 1 IFLAG , NEL ,PMIN ,OFF ,EINT ,MU ,
43 2 ESPE , DVOL ,DF ,VNEW ,RHO0 ,PSH ,
44 3 PNEW , DPDM ,DPDE ,EOS_STRUCT)
48 USE eos_param_mod ,
ONLY : eos_param_
77 INTEGER,
INTENT(IN) :: IFLAG, NEL
78 my_real,
INTENT(IN) :: OFF(NEL) ,MU(NEL) ,DVOL(NEL) ,DF(NEL) ,VNEW(NEL), RHO0(NEL), PMIN
79 my_real,
INTENT(INOUT) :: PNEW(NEL), DPDM(NEL), DPDE(NEL),PSH(NEL),EINT(NEL),ESPE(NEL)
80 TYPE(eos_param_),
INTENT(IN):: EOS_STRUCT
85 my_real :: P0,E0,DVV,PP,dPdMU
86 my_real :: A1,A2,B0,B1,B2,C0,C1,D0, A2_
92 psh(1:nel) = eos_struct%PSH
94 a1 = eos_struct%UPARAM(1)
95 a2 = eos_struct%UPARAM(2)
96 b0 = eos_struct%UPARAM(3)
97 b1 = eos_struct%UPARAM(4)
98 b2 = eos_struct%UPARAM(5)
99 c0 = eos_struct%UPARAM(6)
100 c1 = eos_struct%UPARAM(7)
101 d0 = eos_struct%UPARAM(8)
102 p0 = eos_struct%UPARAM(9)
107 IF(mu(i)<zero)a2_=-a2
109 pp = (a1*mu(i)+a2_*mu(i)*mu(i)+(b0+b1*mu(i)+b2*mu(i)*mu(i))*espe(i)+(c1*mu(i)+c0)*espe(i)*espe(i))/denom
110 pp =
max(pp,pmin) * off(i)
111 dpdmu = (a1+2*a2_*mu(i)+(two*b2*mu(i)+b1)*espe(i)+c1*espe(i)*espe(i))/denom
112 dpde(i) = (((b2*mu(i)+b1)*mu(i)+b0)+(two*(c1*mu(i)+c0))*espe(i) - pp/denom)/denom
113 dpdm(i) = dpdmu + dpde(i)*df(i)*df(i)*(pp)
115 pnew(i) = pnew(i) - psh(i)
118 ELSEIF(iflag == 1)
THEN
121 IF(mu(i)<zero)a2_=-a2
122 dvv = dvol(i)*df(i) /
max(em15,vnew(i))
125 pp = (a1*mu(i)+a2_*mu(i)*mu(i)+(b0+b1*mu(i)+b2*mu(i)*mu(i))*espe(i)+(c1*mu(i)+c0)*espe(i)*espe(i))/denom
126 pp =
max(pp,pmin) * off(i)
127 espe(i) = espe(i) - (pp)*dvv
129 pp = (a1*mu(i)+a2_*mu(i)*mu(i)+(b0+b1*mu(i)+b2*mu(i)*mu(i))*espe(i)+(c1*mu(i)+c0)*espe(i)*espe(i))/denom
130 pp =
max(pp,pmin) * off(i)
131 espe(i) = espe(i) - (pp)*dvv
133 eint(i) = eint(i) - half*dvol(i)*(pnew(i))
134 pnew(i) = pnew(i) - psh(i)
135 dpde(i) = (((b2*mu(i)+b1)*mu(i)+b0)+(two*(c1*mu(i)+c0))*espe(i) - pp/denom)/denom
138 ELSEIF(iflag == 2)
THEN
140 IF (vnew(i) > zero)
THEN
142 IF(mu(i)<zero)a2_=-a2
144 pp = (a1*mu(i)+a2_*mu(i)*mu(i)+(b0+b1*mu(i)+b2*mu(i)*mu(i))*espe(i)+(c1*mu(i)+c0)*espe(i)*espe(i))/denom
145 pp =
max(pp,pmin)*off(i)
146 dpdmu = (a1+2*a2_*mu(i)+(two*b2*mu(i)+b1)*espe(i)+c1*espe(i)*espe(i))/denom
147 dpde(i) = (((b2*mu(i)+b1)*mu(i)+b0)+(two*(c1*mu(i)+c0))*espe(i) - pp/denom)/denom
148 dpdm(i) = dpdmu + dpde(i)*df(i)*df(i)*(pp)
150 pnew(i) = pnew(i) - psh(i)
subroutine osborne(iflag, nel, pmin, off, eint, mu, espe, dvol, df, vnew, rho0, psh, pnew, dpdm, dpde, eos_struct)