29 1 (iflag,nel ,pm ,off ,eint ,mu ,
30 2 espe ,dvol ,vnew ,mat ,psh ,
59#include "implicit_f.inc"
68#include "vect01_c.inc"
73 INTEGER MAT(NEL), IFLAG, NEL
75 . off(nel) ,eint(nel) ,mu(nel) ,
76 . espe(nel) ,dvol(nel) ,
77 . vnew(nel) ,pnew(nel) ,dpdm(nel),
79 my_real,
INTENT(INOUT) :: psh(nel)
84 my_real :: p0,gamma,e0,aa,bb,pp,pstar, pc,v0
85 my_real :: q,q_,cv,rho0,num,denom,unpmu,b,rho
95 psh(1:nel) = pm(88 ,mx)
104 denom = (one-rho0*b*unpmu)
105 num = (espe(i)-rho0*q)
106 pp = (gamma-one)*unpmu*num/denom - gamma*pstar
107 dpde(i) = (gamma-one)*unpmu / denom
108 dpdm(i) = (gamma-one)*num/denom/denom + dpde(i)*(pp+psh(i))/unpmu/unpmu
109 pnew(i) =
max(pp,-gamma*pstar)*off(i)
112 ELSEIF(iflag == 1)
THEN
117 psh(1:nel) = pm(88 ,mx)
125 eint(i) = eint(i) - half*dvol(i)*(pnew(i)+psh(i))
128 v0 = vnew(i)*rho/rho0
129 denom = (vnew(i)/v0-rho0*b)
130 aa = (gamma-one)*(-rho0*q/denom)-gamma*pstar
131 bb = (gamma-one)/ denom
133 pnew(i) = (aa+bb*eint(i)/v0)/(one+bb*dvol(i)/two/v0)
134 pnew(i) =
max(pnew(i),-gamma*pstar)*off(i)
137 ELSEIF(iflag == 2)
THEN
142 psh(1:nel) = pm(88 ,mx)
151 IF (vnew(i) > zero)
THEN
153 denom = (one-rho0*b*unpmu)
154 num = (espe(i)-rho0*q)
155 pnew(i) = -psh(i) + (gamma-one)*unpmu*num/denom - gamma*pstar
156 pnew(i) =
max(pnew(i),
max(pc, -gamma*pstar))*off(i)
157 dpde(i) = (gamma-one)*unpmu / denom
158 dpdm(i) = (gamma-one)*num/denom/denom + dpde(i)*(pnew(i)+psh(i))/unpmu/unpmu
subroutine nasg(iflag, nel, pm, off, eint, mu, espe, dvol, vnew, mat, psh, pnew, dpdm, dpde)