35 . IPM ,DETONATORS ,PM ,TB ,
36 . NUVAR ,UVAR ,UPARAM ,X ,
37 . MAT ,IPARG ,IFORM ,IX ,NIX ,
38 . ALE_CONNECTIVITY ,BUFMAT ,RHO0 ,
39 . GBUF ,NEL ,SIG ,MAT_PARAM , NPF, TF )
46 USE multimat_param_mod ,
ONLY : m51_n0phas, m51_nvphas
47 USE matparam_def_mod ,
ONLY : matparam_struct_
52#include "implicit_f.inc"
62 INTEGER :: IPM(NPROPMI,NUMMAT),MAT(NEL), IPARG(NPARG),IFORM,NIX,IX(NIX,*)
63 my_real :: PM(NPROPM,NUMMAT),UPARAM(*), X(3,NUMNOD), BUFMAT(*), RHO0
64 my_real ,
TARGET :: UVAR(NEL,NUVAR)
65 INTEGER,
INTENT(IN) :: NEL
66 my_real,
INTENT(INOUT) :: SIG(NEL,6)
67 TYPE(g_bufel_),
INTENT(INOUT),
TARGET :: GBUF
70 TYPE (MATPARAM_STRUCT_),
DIMENSION(NUMMAT),
INTENT(INOUT) :: MAT_PARAM
71 INTEGER,
INTENT(IN) :: NPF(*)
72 my_real,
INTENT(IN) :: tf(*)
76 INTEGER :: I,NUVAR, ISFLUID
77 INTEGER :: NPH,IFLG,NV46
80 INTEGER :: IDX_YIELD(4)
81 INTEGER :: EOSTYPE, MATLAW
83 my_real :: gg1, gg2, gg3, gg4
84 my_real :: vold,p0_(4),t0_(4),pmin_(4),e0_(4),rho0_(4),vf(4),pext,pres_0,ssp_(4),gg_(4),dpdm_(4)
85 my_real :: c0_(4),c1_(4),c2_(4),c3_(4),c4_(4),c5_(4)
86 my_real,
intent(inout) :: tb(nel)
87 my_real,
DIMENSION(1) :: off, eint, rho, rho_0, mu, mu2, espe, muold, burnfrac
88 my_real,
DIMENSION(1) :: dvol, df, vol, pres, ssp, dpde, dpdm, theta, psh
89 INTEGER :: MAT_(1), ISUB
90 my_real :: sph1, sph2, sph3, sph4
91 my_real :: v1, v2, v3, v4, k_mix, ssp_mix, rho0_mix, e0_mix
92 my_real,
DIMENSION(NEL,6) :: sigold
93 my_real :: pmin, denom
95 integer,
parameter :: nvartmp = 3
96 integer,
parameter :: nvareos = 6
97 my_real,
DIMENSION(1,nvareos) :: vareos
98 integer :: vartmp(1, nvartmp)
101 iflg = nint(uparam(55))
102 iform = nint(uparam(31))
108 idx_yield(1:4) = (/100,150,200,250/)
112 IF( nint(uparam(76)) == 12) is_iform12 = .true.
125 gg_(1:4) = (/gg1,gg2,gg3,gg4/)
127 IF (gg1 == zero .AND. gg2 == zero .AND. gg3 == zero) isfluid
138 IF(iform == 2 .OR. iform == 3 .OR. iform == 4 .OR. iform==5 .OR. iform == 6)
THEN
146 ! compute burning time
148 IF(iflg == 1 .AND. iparg(64) == 0)
THEN
151 CALL m5in3 (pm,mat,0,detonators,tb,iparg,x,ix,nix)
153 CALL m5in2 (pm,mat,0,detonators,tb,x,ix,nix)
160 c0_(1:4) = (/uparam(35:37),uparam(49)/)
161 c1_(1:4) = (/uparam(12:14),uparam(50)/)
162 c2_(1:4) = (/uparam(15:17),zero/)
163 c3_(1:4) = (/uparam(18),uparam(20:21),zero/)
164 c4_(1:4) = (/uparam(22:24),zero/)
165 c5_(1:4) = (/uparam(25:27),zero/)
166 e0_(1:4) = (/uparam(32:34),uparam(48)/)
167 t0_(1:4) = (/uparam(113),uparam(163),uparam(213),uparam(263)/)
168 rho0_(1:4) = (/uparam(09:11),uparam(47)/)
169 vf(1:4) = (/uparam(04:06),uparam(46)/)
171 p0_(1:4) = (/uparam(57:60)/)
172 pmin_(1:4) = (/uparam(39),uparam(40),uparam(41),uparam(56)/)
173 t0_(1:4) = (/uparam(idx_yield(1)+13),uparam(idx_yield(1)+13),uparam(idx_yield(1)+13),uparam(idx_yield(1)+13)/)
177 IF(.NOT. is_iform12)
THEN
180 p0_(1) = c0_(1)+c4_(1)*e0_(1)
181 p0_(2) = c0_(2)+c4_(2)*e0_(2)
182 p0_(3) = c0_(3)+c4_(3)*e0_(3)
184 dpdm_(1) = c1_(1)+c5_(1)*e0_(1)+p0_(1)*c4_(1)
185 dpdm_(2) = c1_(2)+c5_(2)*e0_(2)+p0_(2)*c4_(2)
186 dpdm_(3) = c1_(3)+c5_(3)*e0_(3)+p0_(3)*c4_(3)
187 dpdm_(4) = c1_(4)+c5_(4)*e0_(4)+p0_(4)*c4_(4)
189 IF(rho0_(1) > zero)ssp_(1) = sqrt( (abs(dpdm_(1))+two*two_third*gg1)/rho0_(1) )
190 IF(rho0_(2) > zero)ssp_(2) = sqrt( (abs(dpdm_(2))+two*two_third*gg2)/rho0_(2) )
191 IF(rho0_(3) > zero)ssp_(3) = sqrt( (abs(dpdm_(3))+two*two_third*gg3)/rho0_(3) )
192 IF(rho0_(4) > zero)ssp_(4) = sqrt( (abs(dpdm_(4))+two*two_third*gg4)/rho0_(4) )
196 nbmat = mat_param(mat(1))%MULTIMAT%NB
200 mid = mat_param(mat(1))%MULTIMAT%MID(imat)
201 isub = nint(uparam(276+imat))
207 rho_0(1) = rho0_(isub)
219 sigold(1,1:3) = - mat_param(mat(1))%MULTIMAT%pEOS(imat)%EOS%P0
223 psh(1) = mat_param(mat(1))%MULTIMAT%pEOS(imat)%EOS%PSH
226 eostype = mat_param(mat(1))%MULTIMAT%pEOS(imat)%EOS%EOSTYPE
227 if(matlaw == 5) eostype = 15
228 vartmp(1,1:nvartmp) = 1
229 CALL eosmain(2 , 1 , eostype , pm , off , eint,
230 . rho , rho_0 , mu , mu2 , espe ,
231 . dvol , df , vol , mat_ , psh ,
232 . pres , dpdm , dpde , theta ,
233 . bufmat , sigold , muold , matlaw ,
235 . burnfrac, nvartmp , vartmp)
236 IF(matlaw ==5) dpdm(1) =
max(pm(44,mid) , dpdm(1))
238 IF(rho0_(isub) > zero)ssp_(isub) = sqrt( abs(dpdm(1))+two*two_third*gg_(isub)/rho0_(isub
239 kk = m51_n0phas + (isub-1)*m51_nvphas
241 uvar(i,kk+24:kk-1+nvareos) = vareos(1, 1:6)
255 vold = gbuf%VOL(i)*vf(imat)
256 kk = m51_n0phas + (imat-1)*m51_nvphas
257 uvar(i,1+kk) = vf(imat)
264 uvar(i,8+kk) = e0_(imat)
265 uvar(i,9+kk) = rho0_(imat)
268 uvar(i,12+kk) = rho0_(imat)
269 uvar(i,14+kk) = ssp_(imat)
271 uvar(i,16+kk) = t0_(imat)
273 uvar(i,18+kk) = p0_(imat)
275 uvar(i,20+kk) = rho0_(imat)
276 uvar(i,21+kk) = e0_(imat)
278 uvar(i,23+kk) = vf(imat)
284 kk = m51_n0phas+(imat-1)*m51_nvphas
285 uvar(1:nel,15+kk) = uvar(1:nel,1)
288 pres_0 = vf(1)*p0_(1)+vf(2)*p0_(2)+vf(3)*p0_(3)+vf(4)*p0_(4)
290 pm(31,mat(i)) = pres_0
291 pm(104,mat(i)) = pres_0
299 rho0_mix = vf(1)*rho0_(1)+vf(2)*rho0_(2)+vf(3)*rho0_(3)+vf(4)*rho0_(4)
300 e0_mix = vf(1)*e0_(1)+vf(2)*e0_(2)+vf(3)*e0_(3)+vf(4)*e0_(4)
303 if (rho0_(1) > zero .and. ssp_(1) > zero) k_mix = k_mix + vf(1) / ( rho0_(1) * ssp_(1)**2 )
304 if (rho0_(2) > zero .and. ssp_(2) > zero) k_mix = k_mix + vf(2) / ( rho0_(2) * ssp_(2)**2 )
305 if (rho0_(3) > zero .and. ssp_(3) > zero) k_mix = k_mix + vf(3) / ( rho0_(3) * ssp_(3)**2 )
306 if (rho0_(4) > zero .and. ssp_(4) > zero) k_mix = k_mix + vf(4) / ( rho0_(4) * ssp_(4)**2 )
307 If(k_mix > zero)k_mix=one/k_mix
309 if(gbuf%rho(i) > zero) ssp_mix = sqrt(k_mix / rho0_mix)
310 pm(27,mat(1)) = ssp_mix
313 gbuf%RHO(i) = rho0_mix
314 gbuf%EINT(i) = e0_mix
320 denom = (sph1*v1+sph2*v2+sph3*v3+sph4*v4)
321 IF(denom /= zero)
THEN
322 gbuf%TEMP(i) = (sph1*v1*t0_(1)+sph2*v2*t0_(2)+sph3*v3*t0_(3)+sph4*v4*t0_(4)) / denom
339 . ipm , pm , x , nix , ix,
340 . ale_connectivity , bufmat, uparam, rho0 ,
341 . uvar , nuvar , nel , gbuf%RHO, numel
subroutine eosmain(iflag, nel, eostyp, pm, off, eint, rho, rho0, mu, mu2, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde, theta, bufmat, sig, mu_bak, mlw, npf, tf, vareos, nvareos, mat_param, bfrac, nvartmp, vartmp)