42 1 IFLAG ,NEL ,PMIN ,OFF ,EINT ,MU ,MU2,
43 2 ESPE ,DVOL ,DF ,VNEW ,
44 3 PNEW ,DPDM ,DPDE ,EOS_STRUCT)
63!----------------------------------------------------------------------------
67 USE constant_mod ,
ONLY : zero, em15, half, one, three_half, two, three, three100
68 USE eos_param_mod ,
ONLY : eos_param_
81 INTEGER,
INTENT(IN) :: IFLAG, NEL
82 my_real,
INTENT(IN) :: PMIN, OFF(NEL), MU(NEL),DVOL(NEL),MU2(NEL),DF(NEL),VNEW(NEL),ESPE(NEL)
83 my_real,
INTENT(INOUT) :: DPDM(NEL), DPDE(NEL), PNEW(NEL)
84 my_real,
INTENT(INOUT) :: eint(nel)
85 TYPE(eos_param_) ,
INTENT(IN) :: EOS_STRUCT
90 my_real AA, BB, DVV, ETA, XX, GX, PRES, CC, EXPA, EE
91 my_real C1,C2,C3,T1,T2, G0,ESUBL,HH,PSH(NEL)
94 c1 = eos_struct%UPARAM(1)
95 c2 = eos_struct%UPARAM(2)
96 c3 = eos_struct%UPARAM(3)
97 t1 = eos_struct%UPARAM(4)
98 t2 = eos_struct%UPARAM(5)
99 esubl = eos_struct%UPARAM(6)
100 g0 = eos_struct%UPARAM(7)
101 hh = eos_struct%UPARAM(8)
103 psh(1:nel) = eos_struct%PSH
108 xx =mu(i)/(one+mu(i))
109 IF(mu(i) >= zero)
THEN
110 aa=(c1+c3*mu2(i))*mu(i)+c2*mu2(i)
113 pres=
max(aa*gx+bb*espe(i),pmin)*off(i)
114 dpdm(i)=(c1+two*c2*mu(i)+three*c3*mu2(i))*gx+g0*df(i)*df(i)*(pres-half*aa)
115 ELSEIF(espe(i) < esubl)
THEN
116 aa=(t1+t2*mu(i))*mu(i)
119 pres=
max(aa*gx+bb*espe(i),pmin)*off(i)
120 dpdm(i)=(t1+two*t2*mu(i))*gx+g0*df(i)*df(i)*(pres-half*aa)
124 bb=(hh+(g0-hh)*ee)*eta
127 aa= bb*esubl*(expa-one)
128 pres=
max(aa+bb*espe(i),pmin)*off(i)
129 dpdm(i)=bb*df(i)*df(i)*(pres+esubl*expa*cc) +(espe(i)+esubl*(expa-one))*(hh+three_half*ee*(g0-hh))
132 pnew(i) =
max(pres,pmin)*off(i)
135 ELSEIF(iflag == 1)
THEN
137 dvv=half*dvol(i)*df(i) /
max(em15,vnew(i))
138 xx =mu(i)/(one+mu(i))
139 IF(mu(i) >= zero)
THEN
140 aa=(c1+c3*mu2(i))*mu(i)+c2*mu2(i)
141 aa=aa*(one-g0*half*xx)
143 ELSEIF(espe(i) < esubl)
THEN
144 aa=(t1+t2*mu(i))*mu(i)
145 aa=aa*(one-g0*half*xx)
149 bb=(hh+(g0-hh)*sqrt(eta))*eta
152 aa=bb*esubl*(expa-one)
155 pnew(i)=(aa +bb*espe(i))/(one+ bb*dvv)
157 eint(i)=eint(i)-half*dvol(i)*pnew(i)
160 ELSEIF(iflag == 2)
THEN
162 IF (vnew(i) > zero)
THEN
163 xx =mu(i)/(one+mu(i))
164 IF(mu(i) >= zero)
THEN
165 aa=(c1+c3*mu2(i))*mu(i)+c2*mu2(i)
168 pres=
max(aa*gx+bb*espe(i),pmin)*off(i)
169 dpdm(i)=(c1+two*c2*mu(i)+three*c3*mu2(i))*gx+g0*df(i)*df(i)*(pres-half*aa)
170 ELSEIF(espe(i)<esubl)
THEN
171 aa=(t1+t2*mu(i))*mu(i)
174 pres=
max(aa*gx+bb*espe(i),pmin)*off(i)
175 dpdm(i)=(t1+two*t2*mu(i))*gx+g0*df(i)*df(i)*(pres-half*aa)
179 bb=(hh+(g0-hh)*ee)*eta
182 aa= bb*esubl*(expa-one)
183 pres=
max(aa+bb*espe(i),pmin)*off(i)
184 dpdm(i)=bb*df(i)*df(i)*(pres+esubl*expa*cc) + (espe(i)+esubl*(expa-one))*(hh+three_half
subroutine puff(iflag, nel, pmin, off, eint, mu, mu2, espe, dvol, df, vnew, pnew, dpdm, dpde, eos_struct)