37 1 NEL ,NUPARAM,NUVAR ,
38 2 TIME ,TIMESTEP,UPARAM ,RHO0 ,RHO ,
40 7 SIGOXX ,SIGOYY ,SIGOZZ ,
41 8 SIGNXX ,SIGNYY ,SIGNZZ ,SIGNXY ,SIGNYZ ,SIGNZX ,
42 9 SIGVXX ,SIGVYY ,SIGVZZ ,SIGVXY ,SIGVYZ ,SIGVZX ,
43 A SOUNDSP,VISCMAX,UVAR ,DELTVOL ,BFRAC ,TEMP )
47 USE root_finding_algo_mod
48 USE output_mod,
ONLY : output_
86#include "implicit_f.inc"
134 TYPE(output_),
INTENT(INOUT) :: OUTPUT
135 INTEGER NEL, NUPARAM, NUVAR
137 my_real,
INTENT(IN) ::
138 . TIME,TIMESTEP,UPARAM(NUPARAM),
139 . RHO(NEL),RHO0(NEL),VOLUME(NEL),
140 . SIGOXX(NEL),SIGOYY(NEL),SIGOZZ(NEL),
143 my_real,
INTENT(INOUT) ::
144 . signxx(nel),signyy(nel),signzz(nel),
145 . signxy(nel),signyz(nel),signzx(nel),
146 . sigvxx(nel),sigvyy(nel),sigvzz(nel),
147 . sigvxy(nel),sigvyz(nel),sigvzx(nel),
148 . soundsp(nel),viscmax(nel),eint(nel),bfrac(nel),temp(nel)
150 my_real,
INTENT(INOUT) :: uvar(nel,nuvar)
154 my_real ar,br,r1r,r2r,r3r,cvr,etar,
155 . ap,bp,r1p,r2p,r3p,cvp,etap,
157 . i_,b_,x_,g1,d_,y_,g2,
158 . z_,g_,c_,e_,figmax,fg1max,fg2min,
159 . cappa,chi,ccrit,tol,cv,dedv,
160 . artvisc,dt,pres,fc,cburn,enq,shear,vol_rel,dvol_rel
161 my_real oldfc,tem1,tem2,chydro,chydro2,dpdmu,dpde,heat
162 my_real mt,pold,er,wfextt,wr,wp_coef
163 integer itrmax,i_reac,i
165 my_real,
dimension(25) :: funct_parameter
171 if (time == zero)
then
174 uvar(i,2) = uparam(39)
175 uvar(i,3) = uparam(14)
183 i_reac = int(uparam(1))
184 itrmax = int(uparam(18))
224 funct_parameter(1:25) = zero
225 funct_parameter(1) = ar
226 funct_parameter(2) = br
227 funct_parameter(3) = r1r
228 funct_parameter(4) = r2r
229 funct_parameter(5) = r3r
230 funct_parameter(6) = cvr
238 funct_parameter(13) = ap
239 funct_parameter(14) = bp
240 funct_parameter(15) = r1p
241 funct_parameter(16) = r2p
242 funct_parameter(17) = r3p
243 funct_parameter(18) = cvp
254 vol_rel = rho0(i) / rho(i)
255 pres = -(sigoxx(i)+sigoyy(i)+sigozz(i)) * third
259 IF (time > zero .AND. iale + ieuler > 0)
THEN
260 uvar(i, 1) = uvar(i, 1) / mt
261 uvar(i, 1) =
max(zero,
min(uvar(i, 1), one))
266 if(time > zero .AND. mt > em20) tmp = eint(i)/(mt*cv)
267 dvol_rel = vol_rel - uvar(i,4)
278 tem1 = (pres+dedv+artvisc) / cv
279 tmp = tmp - tem1*dvol_rel
284 . ap ,bp ,r1p ,r2p ,r3p ,cvp ,etap,
285 . dpdmu,dpde,ftol,enq,
286 . tmp,heat,vol_rel ,fc,cv,dedv,pres, beta,funct_parameter)
289 tem2 = (pres+dedv+artvisc) / cv
290 tmp = tmp - half*(tem2-tem1)*dvol_rel
292 . ap ,bp ,r1p ,r2p ,r3p ,cvp ,etap,
293 . dpdmu,dpde,ftol,enq,
294 . tmp,heat,vol_rel ,fc,cv,dedv,pres, beta,funct_parameter)
298 if (i_reac == 1)
CALL burn_fraction_ireac1(i_,b_,x_,g1,d_,y_,cappa,artvisc,dt,pres,etar,fc,cburn,oldfc)
300 if (i_reac == 2)
CALL burn_fraction_ireac2(i_,b_,x_,g1,d_,y_,g2,z_,g_,c_,e_,figmax,fg1max,fg2min,
301 . cappa,chi,ccrit,tol,artvisc,dt,pres,etar,fc,cburn,oldfc)
302 tmp = tmp + (fc - oldfc) * heat/cv
304 chydro2 = dpdmu + abs(pres)*(vol_rel*vol_rel)*dpde + onep33*shear
305 chydro2=
max(chydro2,
max(wr+one,wp_coef+one)*abs(pres)/
max(em30,rho(i)))
306 chydro = sqrt(chydro2)
310 soundsp(i) =
max(chydro,cburn)
336 uvar(i,8) = one - beta
338 er=mt*cv*tmp + half*(pres+pold)*deltvol(i)
339 wfextt=wfextt+er-eint(i)
340 eint(i)=mt*cv*tmp + half*(pres+pold)*deltvol(i)
346 output%TH%WFEXT=output%TH%WFEXT+wfextt
421 SUBROUTINE burn_fraction_ireac2(I_,B_,X_,G1,D_,Y_,G2,Z_,G_,C_,E_,Figmax,FG1max,FG2min,cappa,chi,ccrit,tol,
422 . artvisc,dt,pres,etar,fc,cburn,oldfc)
443#include "implicit_f.inc"
447 my_real i_,b_,x_,g1,d_,y_,g2,z_,g_,c_,e_,
448 . figmax,fg1max,fg2min,cappa,chi,ccrit,tol,
449 . artvisc,dt,pres,etar,fc,cburn,oldfc
453 my_real ratei,rateg,rateg1,rateg2,dfci,dfcg
458 if (pres <= zero)
return
459 if (fc == one)
return
460 if (artvisc >= (cappa*pres))
return
461 if (fc <= figmax)
then
466 ratei = i_ * (one-fc+tol)**b_ * abs(etar-one-ccrit)**x_
467 if ((etar- one -ccrit)<=zero) ratei = zero
469 fc = oldfc +
max(dfci,zero)
470 if (fc > figmax) fc = figmax
474 rateg1 = g1 * (one -fc+tol)**c_ * (fc+tol)**d_ * pres**y_
475 if (fc > fg1max) rateg1 = zero
477 rateg2 = g2 * (one -fc+tol)**e_ * (fc+tol)**g_ * pres**z_
478 if (fc < fg2min) rateg2 = zero
480 rateg = rateg1 + rateg2
482 fc = fc +
max(dfcg,zero)
483 if ((fc-oldfc)>chi) fc = oldfc + chi
484 if (fc >= one) fc = one
503 . ar ,br ,r1r ,r2r ,r3r ,cvr ,etar,
504 . ap ,bp ,r1p ,r2p ,r3p ,cvp ,etap,
505 . dpdmu,dpde ,ftol,enq ,
506 . tmp ,heat ,vol_rel,fc,cv,dedv ,pres, beta,funct_parameter)
507 USE root_finding_algo_mod
508 USE jwl_eos_mod,
ONLY: jwl_eos_delta, jwl_eos_state
524#include "implicit_f.inc"
528 my_real ar ,br ,r1r ,r2r ,r3r ,cvr ,etar,
529 . ap ,bp ,r1p ,r2p ,r3p ,cvp ,etap,
531 . vol_rel ,fc,cv,dedv,pres, beta
532 my_real,
dimension(25),
intent(inout) :: funct_parameter
537 my_real delta,fc1,etac,guess,pmax,
538 . trans,transr,transp,trans1,trans2,dbdeta,detar,detap,
539 . dedr,dedp,,dbdt,detrdt,detpdt,dpdt,dbdf,detrdf,
540 . detpdf,cvr0,cvp0,slope,tl,tu,a,b,c,
541 . bthp,dedvp,preac,pprod,dpdtp,dpdtr,bthr,dedvr,
543 my_real :: lower_bound,upper_bound
553 CALL jwl_eos_state(ar,br,r1r,r2r,r3r,cvr,etar,tmp,dedvr,pres,bthr,dpdtr,enr)
558 dpdmu = bthr + dpdtr*dedv / (cv*etac**2)
560 CALL jwl_eos_state(ap,bp,r1p,r2p,r3p,cvp,etap,tmp,dedvp,pprod,bthp,dpdtp,enp)
564 elseif (fc > (one -ftol))
then
567 CALL jwl_eos_state(ap,bp,r1p,r2p,r3p,cvp,etap,tmp,dedvp,pres,bthp,dpdtp,enp )
573 dpdmu = bthp + dpdtp*dedv / (cv*etac**2)
579 funct_parameter(7) = tmp
580 funct_parameter(24) = etac
581 funct_parameter(25) = fc
583 funct_parameter(8) = zero
584 funct_parameter(9) = zero
585 funct_parameter(10) = zero
586 funct_parameter(11) = zero
587 funct_parameter(12) = zero
589 funct_parameter(19) = zero
590 funct_parameter(20) = zero
591 funct_parameter(21) = zero
592 funct_parameter(22) = zero !dpdtp
593 funct_parameter(23) = zero
597 guess = fc1 * etap/(fc1*etap+fc*etar)
599 if (beta == one) beta = fc1
600 lower_bound = epsilon(beta)
601 upper_bound = one - epsilon(beta)
602 beta = brent_algo(lower_bound,upper_bound,100*epsilon(one),jwl_eos_delta,25,funct_parameter)
604 etar = fc1 * etac/beta
605 CALL jwl_eos_state(ar,br,r1r,r2r,r3r,cvr,etar,tmp,dedvr,preac,bthr,dpdtr,enr)
606 etap = fc*etac/(one-beta)
607 CALL jwl_eos_state(ap,bp,r1p,r2p,r3p,cvp,etap,tmp,dedvp,pprod,bthp,dpdtp,enp)
609 pres = (preac+pprod)*half
613 transp = bthp / (one - beta)
614 trans = transr*etar + transp*etap
616 dbdeta = (transr*fc1 - transp*fc) / trans
618 detar = (fc1 - etar*dbdeta) / beta
619 detap = (fc + etap*dbdeta) / (one - beta)
621 dedr = -dedvr / etar**2
622 dedp = -dedvp / etap**2
624 bth = (bthr*detar + bthp*detap)*half
626 dbdt = (dpdtr-dpdtp) / trans
627 detrdt = -etar*dbdt/beta
628 detpdt = etap*dbdt/(one-beta)
629 dpdt = (dpdtr+dpdtp+dbdt*(transp*etap-transr*etar))*half
631 dbdf = -(transr+transp)*etac/trans
633 detrdf = -(etac+etar*dbdf) / beta
634 detpdf = (etac+etap*dbdf) / (one-beta)
638 dedv = -etac**2 * (fc1*dedr*detar+fc*dedp*detap)
640 cvr0 = cvr + dedr*detrdt
641 cvp0 = cvp + dedp*detpdt
642 cv = fc1*cvr0 + fc*cvp0
644 heat = enq-enp+enr - fc*dedp*detpdf-fc1*dedr*detrdf
648 dpdmu = bth + dpdt*dedv/cv/etac**2
subroutine sigeps41(output, nel, nuparam, nuvar, time, timestep, uparam, rho0, rho, volume, eint, sigoxx, sigoyy, sigozz, signxx, signyy, signzz, signxy, signyz, signzx, sigvxx, sigvyy, sigvzz, sigvxy, sigvyz, sigvzx, soundsp, viscmax, uvar, deltvol, bfrac, temp)