117 qtC,sCT,qt,snew,fC,fE,dxs,x)
126 integer,
intent(in) :: method
127 double precision,
intent(in) :: qdt, dtfactor, qtc, qt, dxs(
ndim)
128 integer,
intent(in) :: ixi^
l, ixo^
l, idims^lim
129 double precision,
dimension(ixI^S,1:ndim),
intent(in) :: x
130 double precision,
dimension(ixI^S,1:nwflux,1:ndim) :: fc
131 double precision,
dimension(ixI^S,sdim:3) :: fe
132 type(state) :: sct, snew
135 double precision,
dimension(ixI^S,1:nw) :: wprim
137 double precision,
dimension(ixI^S,1:nw) :: wlc, wrc
139 double precision,
dimension(ixI^S,1:nw) :: wlp, wrp
140 double precision,
dimension(ixI^S,1:nwflux) :: flc, frc
141 double precision,
dimension(ixI^S,1:number_species) :: cmaxc
142 double precision,
dimension(ixI^S,1:number_species) :: cminc
143 double precision,
dimension(ixI^S) :: hspeed
144 double precision,
dimension(ixO^S) :: inv_volume
145 double precision,
dimension(1:ndim) :: dxinv
146 integer :: idims, iw, ix^
d, hx^
d, ix^
l, hxo^
l, ixc^
l, ixcr^
l, kxc^
l, kxr^
l, ii
147 logical :: active=.false.
148 type(ct_velocity) :: vcts
150 associate(wct=>sct%w, wnew=>snew%w)
156 ix^
l=ix^
l^ladd2*
kr(idims,^
d);
158 if (ixi^
l^ltix^
l|.or.|.or.) &
159 call mpistop(
"Error in fv : Nonconforming input limits")
167 kxcmin^
d=iximin^
d; kxcmax^
d=iximax^
d-
kr(idims,^
d);
168 kxr^
l=kxc^
l+
kr(idims,^
d);
174 {
do ix^db=iximin^db,iximax^db\}
176 wrp(ix^
d,iw)=wprim(ix^
d,iw)
177 wlp(ix^
d,iw)=wprim(ix^
d,iw)
179 wrp(kxc^s,iw)=wprim(kxr^s,iw)
182 hxo^l=ixo^l-kr(idims,^d);
183 if(stagger_grid)
then
185 ixcmax^d=ixomax^d+transverse_ghost_cells-transverse_ghost_cells*kr(idims,^d);
186 ixcmin^d=hxomin^d-transverse_ghost_cells+transverse_ghost_cells*kr(idims,^d);
189 ixcmax^d=ixomax^d; ixcmin^d=hxomin^d;
194 {ixcrmin^d = max(ixcmin^d - phys_wider_stencil,ixglo^d)\}
195 {ixcrmax^d = min(ixcmax^d + phys_wider_stencil,ixghi^d)\}
198 call reconstruct_lr(ixi^l,ixcr^l,ixcr^l,idims,wprim,wlc,wrc,wlp,wrp,x,dxs(idims))
201 call phys_modify_wlr(ixi^l,ixcr^l,qt,wlc,wrc,wlp,wrp,sct,idims)
204 call phys_get_flux(wlc,wlp,x,ixi^l,ixc^l,idims,flc)
205 call phys_get_flux(wrc,wrp,x,ixi^l,ixc^l,idims,frc)
206 if(h_correction)
then
207 call phys_get_h_speed(wprim,x,ixi^l,ixo^l,idims,hspeed)
210 if(method==fs_tvdlf.or.method==fs_tvdmu)
then
211 call phys_get_cbounds(wlc,wrc,wlp,wrp,x,ixi^l,ixc^l,idims,hspeed,cmaxc)
213 if(stagger_grid)
call phys_get_ct_velocity(vcts,wlp,wrp,ixi^l,ixc^l,idims,cmaxc(ixi^s,index_v_mag))
215 call phys_get_cbounds(wlc,wrc,wlp,wrp,x,ixi^l,ixc^l,idims,hspeed,cmaxc,cminc)
216 if(stagger_grid)
call phys_get_ct_velocity(vcts,wlp,wrp,ixi^l,ixc^l,idims,cmaxc(ixi^s,index_v_mag),cminc(ixi^s,index_v_mag))
222 do ii=1,number_species
223 call get_riemann_flux_hll(start_indices(ii),stop_indices(ii))
225 case(fs_hllc,fs_hllcd)
226 do ii=1,number_species
227 call get_riemann_flux_hllc(start_indices(ii),stop_indices(ii))
230 do ii=1,number_species
231 if(ii==index_v_mag)
then
232 call get_riemann_flux_hlld(start_indices(ii),stop_indices(ii))
234 call get_riemann_flux_hll(start_indices(ii),stop_indices(ii))
238 do ii=1,number_species
239 call get_riemann_flux_tvdlf(start_indices(ii),stop_indices(ii))
244 call mpistop(
'unkown Riemann flux in finite volume')
249 if(stagger_grid)
call phys_update_faces(ixi^l,ixo^l,qt,qdt,wprim,fc,fe,sct,snew,vcts)
250 if(slab_uniform)
then
251 if(local_timestep)
then
252 dxinv(1:ndim)=-dtfactor/dxs(1:ndim)
255 hxomin^d=ixomin^d-hx^d\
257 {
do ix^db=hxomin^db,ixomax^db\}
258 fc(ix^d,iw,idims)=block%dt(ix^d)*dxinv(idims)*fc(ix^d,iw,idims)
260 {
do ix^db=ixomin^db,ixomax^db\}
261 wnew(ix^d,iw)=wnew(ix^d,iw)+fc(ix^d,iw,idims)-fc(ix^d-hx^d,iw,idims)
265 if(method==fs_tvdmu) &
266 call tvdlimit2(method,qdt,ixi^l,ixc^l,ixo^l,idims,wlc,wrc,wnew,x,fc,dxs)
269 dxinv(1:ndim)=-qdt/dxs(1:ndim)
272 hxomin^d=ixomin^d-hx^d\
274 {
do ix^db=hxomin^db,ixomax^db\}
275 fc(ix^d,iw,idims)=dxinv(idims)*fc(ix^d,iw,idims)
277 {
do ix^db=ixomin^db,ixomax^db\}
278 wnew(ix^d,iw)=wnew(ix^d,iw)+fc(ix^d,iw,idims)-fc(ix^d-hx^d,iw,idims)
282 if(method==fs_tvdmu) &
283 call tvdlimit2(method,qdt,ixi^l,ixc^l,ixo^l,idims,wlc,wrc,wnew,x,fc,dxs)
287 inv_volume(ixo^s) = 1.d0/block%dvolume(ixo^s)
288 if(local_timestep)
then
291 hxomin^d=ixomin^d-hx^d\
293 {
do ix^db=hxomin^db,ixomax^db\}
294 fc(ix^d,iw,idims)=-block%dt(ix^d)*dtfactor*fc(ix^d,iw,idims)*block%surfaceC(ix^d,idims)
296 {
do ix^db=ixomin^db,ixomax^db\}
297 wnew(ix^d,iw)=wnew(ix^d,iw)+(fc(ix^d,iw,idims)-fc(ix^d-hx^d,iw,idims))*inv_volume(ix^d)
301 if (method==fs_tvdmu) &
302 call tvdlimit2(method,qdt,ixi^l,ixc^l,ixo^l,idims,wlc,wrc,wnew,x,fc,dxs)
307 hxomin^d=ixomin^d-hx^d\
309 {
do ix^db=hxomin^db,ixomax^db\}
310 fc(ix^d,iw,idims)=-qdt*fc(ix^d,iw,idims)*block%surfaceC(ix^d,idims)
312 {
do ix^db=ixomin^db,ixomax^db\}
313 wnew(ix^d,iw)=wnew(ix^d,iw)+(fc(ix^d,iw,idims)-fc(ix^d-hx^d,iw,idims))*inv_volume(ix^d)
320 if (.not.slab.and.idimsmin==1) &
321 call phys_add_source_geom(qdt,dtfactor,ixi^l,ixo^l,wct,wprim,wnew,x)
323 if(stagger_grid)
call phys_face_to_center(ixo^l,snew)
326 if(fix_small_values)
then
327 call phys_handle_small_values(.false.,wnew,x,ixi^l,ixo^l,
'multi-D finite_volume')
331 if(stagger_grid) snew%ws=sct%ws
335 call addsource2(qdt*dble(idimsmax-idimsmin+1)/dble(ndim),&
336 dtfactor*dble(idimsmax-idimsmin+1)/dble(ndim),&
337 ixi^l,ixo^l,1,nw,qtc,wct,wprim,qt,wnew,x,.false.,active)
344 fc(ixc^s,iw,idims)=half*(flc(ixc^s,iw)+frc(ixc^s,iw))
348 subroutine get_riemann_flux_tvdlf(iws,iwe)
349 integer,
intent(in) :: iws,iwe
352 double precision :: fac(ixC^S),phi
354 fac(ixc^s) = -0.5d0*tvdlfeps*cmaxc(ixc^s,ii)
356 if(flux_energy_only .and. iw /= iw_e)
then
357 fc(ixc^s,iw,idims)=zero
359 fc(ixc^s,iw,idims)=0.5d0*(flc(ixc^s, iw)+frc(ixc^s, iw))
361 if(flux_type(idims, iw) /= flux_no_dissipation)
then
362 if(flux_adaptive_diffusion)
then
363 {
do ix^db=ixcmin^db,ixcmax^db\}
364 jx^d=ix^d+kr(idims,^d)\
372 phi = flux_adaptive_diffusion_min
373 if(((wrc(ix^d,iw)-wlc(ix^d,iw))*(sct%w(jx^d,iw)-sct%w(ix^d,iw))) .gt. 1.d-18)
then
374 phi = max(flux_adaptive_diffusion_min, &
375 min(flux_adaptive_diffusion_scale * &
376 (wrc(ix^d,iw)-wlc(ix^d,iw))**2 / &
377 ((sct%w(jx^d,iw)-sct%w(ix^d,iw))**2 + 1.d-18), one))
381 fc(ix^d,iw,idims)=fc(ix^d,iw,idims)+fac(ix^d)*(wrc(ix^d,iw)-wlc(ix^d,iw))*phi
384 {
do ix^db=ixcmin^db,ixcmax^db\}
385 fc(ix^d,iw,idims)=fc(ix^d,iw,idims)+fac(ix^d)*(wrc(ix^d,iw)-wlc(ix^d,iw))
391 end subroutine get_riemann_flux_tvdlf
393 subroutine get_riemann_flux_hll(iws,iwe)
394 integer,
intent(in) :: iws,iwe
396 double precision :: phi
398 if(flux_adaptive_diffusion)
then
400 if(flux_type(idims, iw) == flux_tvdlf)
then
401 if(stagger_grid)
then
403 fc(ixc^s,iw,idims)=0.d0
405 fc(ixc^s,iw,idims)=-tvdlfeps*half*max(cmaxc(ixc^s,ii),dabs(cminc(ixc^s,ii)))*&
406 (wrc(ixc^s,iw)-wlc(ixc^s,iw))
409 {
do ix^db=ixcmin^db,ixcmax^db\}
410 if(cminc(ix^d,ii) >= zero)
then
411 fc(ix^d,iw,idims)=flc(ix^d,iw)
412 else if(cmaxc(ix^d,ii) <= zero)
then
413 fc(ix^d,iw,idims)=frc(ix^d,iw)
416 phi=max(abs(cmaxc(ix^d,ii)),abs(cminc(ix^d,ii)))/(cmaxc(ix^d,ii)-cminc(ix^d,ii))
417 fc(ix^d,iw,idims)=(cmaxc(ix^d,ii)*flc(ix^d, iw)-cminc(ix^d,ii)*frc(ix^d,iw)&
418 +phi*cminc(ix^d,ii)*cmaxc(ix^d,ii)*(wrc(ix^d,iw)-wlc(ix^d,iw)))&
419 /(cmaxc(ix^d,ii)-cminc(ix^d,ii))
426 if(flux_type(idims, iw) == flux_tvdlf)
then
427 if(stagger_grid)
then
429 fc(ixc^s,iw,idims)=0.d0
431 fc(ixc^s,iw,idims)=-tvdlfeps*half*max(cmaxc(ixc^s,ii),dabs(cminc(ixc^s,ii)))*&
432 (wrc(ixc^s,iw)-wlc(ixc^s,iw))
435 {
do ix^db=ixcmin^db,ixcmax^db\}
436 if(cminc(ix^d,ii) >= zero)
then
437 fc(ix^d,iw,idims)=flc(ix^d,iw)
438 else if(cmaxc(ix^d,ii) <= zero)
then
439 fc(ix^d,iw,idims)=frc(ix^d,iw)
441 fc(ix^d,iw,idims)=(cmaxc(ix^d,ii)*flc(ix^d, iw)-cminc(ix^d,ii)*frc(ix^d,iw)&
442 +cminc(ix^d,ii)*cmaxc(ix^d,ii)*(wrc(ix^d,iw)-wlc(ix^d,iw)))&
443 /(cmaxc(ix^d,ii)-cminc(ix^d,ii))
449 end subroutine get_riemann_flux_hll
451 subroutine get_riemann_flux_hllc(iws,iwe)
452 integer,
intent(in) :: iws, iwe
453 double precision,
dimension(ixI^S,1:nwflux) :: whll, Fhll, fCD
454 double precision,
dimension(ixI^S) :: lambdaCD
456 integer,
dimension(ixI^S) :: patchf
457 integer :: rho_, p_, e_, mom(1:ndir)
460 if (
allocated(iw_mom)) mom(:) = iw_mom(:)
463 if(
associated(phys_hllc_init_species))
then
464 call phys_hllc_init_species(ii, rho_, mom(:), e_)
470 where(cminc(ixc^s,1) >= zero)
472 elsewhere(cmaxc(ixc^s,1) <= zero)
476 if(method==fs_hllcd) &
477 call phys_diffuse_hllcd(ixi^l,ixc^l,idims,wlc,wrc,flc,frc,patchf)
480 if(any(patchf(ixc^s)==1)) &
481 call phys_get_lcd(wlc,wrc,flc,frc,cminc(ixi^s,ii),cmaxc(ixi^s,ii),idims,ixi^l,ixc^l, &
482 whll,fhll,lambdacd,patchf)
485 if(any(abs(patchf(ixc^s))== 1))
then
487 call phys_get_wcd(wlc,wrc,whll,frc,flc,fhll,patchf,lambdacd,&
488 cminc(ixi^s,ii),cmaxc(ixi^s,ii),ixi^l,ixc^l,idims,fcd)
492 if (flux_type(idims, iw) == flux_tvdlf)
then
493 flc(ixc^s,iw)=-tvdlfeps*half*max(cmaxc(ixc^s,ii),abs(cminc(ixc^s,ii))) * &
494 (wrc(ixc^s,iw) - wlc(ixc^s,iw))
496 where(patchf(ixc^s)==-2)
497 flc(ixc^s,iw)=flc(ixc^s,iw)
498 elsewhere(abs(patchf(ixc^s))==1)
499 flc(ixc^s,iw)=fcd(ixc^s,iw)
500 elsewhere(patchf(ixc^s)==2)
501 flc(ixc^s,iw)=frc(ixc^s,iw)
502 elsewhere(patchf(ixc^s)==3)
504 flc(ixc^s,iw)=fhll(ixc^s,iw)
505 elsewhere(patchf(ixc^s)==4)
507 flc(ixc^s,iw) = half*((flc(ixc^s,iw)+frc(ixc^s,iw)) &
508 -tvdlfeps * max(cmaxc(ixc^s,ii), dabs(cminc(ixc^s,ii))) * &
509 (wrc(ixc^s,iw)-wlc(ixc^s,iw)))
513 fc(ixc^s,iw,idims)=flc(ixc^s,iw)
516 end subroutine get_riemann_flux_hllc
519 subroutine get_riemann_flux_hlld(iws,iwe)
520 integer,
intent(in) :: iws, iwe
521 double precision,
dimension(ixI^S,1:nwflux) :: w1R,w1L,w2R,w2L
522 double precision,
dimension(ixI^S) :: sm,s1R,s1L,suR,suL,Bx
523 double precision,
dimension(ixI^S) :: pts,ptR,ptL,signBx,r1L,r1R,tmp
525 double precision,
dimension(ixI^S,ndir) :: BR, BL
526 integer :: ip1,ip2,ip3,idir,ix^D,^C&b^C_,^C&m^C_
527 integer :: rho_, p_, e_, mom(1:ndir), mag(1:ndir)
529 associate(sr=>cmaxc,sl=>cminc)
532 ^c&mom(^c)=iw_mom(^c)\
534 ^c&mag(^c)=iw_mag(^c)\
542 br(ixc^s,:)=wrc(ixc^s,mag(:))+block%B0(ixc^s,:,ip1)
543 bl(ixc^s,:)=wlc(ixc^s,mag(:))+block%B0(ixc^s,:,ip1)
545 br(ixc^s,:)=wrc(ixc^s,mag(:))
546 bl(ixc^s,:)=wlc(ixc^s,mag(:))
548 if(stagger_grid)
then
549 bx(ixc^s)=block%ws(ixc^s,ip1)
553 bx(ixc^s)=(sr(ixc^s,ii)*br(ixc^s,ip1)-sl(ixc^s,ii)*bl(ixc^s,ip1))/(sr(ixc^s,ii)-sl(ixc^s,ii))
556 do ix^db=ixcmin^db,ixcmax^db\}
557 ptr(ix^d)=wrp(ix^d,p_)+0.5d0*(^c&br(ix^d,^c)**2+)
558 ptl(ix^d)=wlp(ix^d,p_)+0.5d0*(^c&bl(ix^d,^c)**2+)
559 if(iw_equi_rho>0)
then
560 sur(ix^d)=(sr(ix^d,ii)-wrp(ix^d,mom(ip1)))*(wrc(ix^d,rho_)+block%equi_vars(ix^d,iw_equi_rho,ip1))
561 sul(ix^d)=(sl(ix^d,ii)-wlp(ix^d,mom(ip1)))*(wlc(ix^d,rho_)+block%equi_vars(ix^d,iw_equi_rho,ip1))
563 sur(ix^d)=(sr(ix^d,ii)-wrp(ix^d,mom(ip1)))*wrc(ix^d,rho_)
564 sul(ix^d)=(sl(ix^d,ii)-wlp(ix^d,mom(ip1)))*wlc(ix^d,rho_)
567 sm(ix^d)=(sur(ix^d)*wrp(ix^d,mom(ip1))-sul(ix^d)*wlp(ix^d,mom(ip1))-&
568 ptr(ix^d)+ptl(ix^d))/(sur(ix^d)-sul(ix^d))
570 w1r(ix^d,mom(ip1))=sm(ix^d)
571 w1l(ix^d,mom(ip1))=sm(ix^d)
572 w2r(ix^d,mom(ip1))=sm(ix^d)
573 w2l(ix^d,mom(ip1))=sm(ix^d)
575 w1r(ix^d,mag(ip1))=bx(ix^d)
576 w1l(ix^d,mag(ip1))=bx(ix^d)
578 ptr(ix^d)=wrp(ix^d,p_)+0.5d0*(^c&wrc(ix^d,b^c_)**2+)
579 ptl(ix^d)=wlp(ix^d,p_)+0.5d0*(^c&wlc(ix^d,b^c_)**2+)
582 w1r(ix^d,rho_)=sur(ix^d)/(sr(ix^d,ii)-sm(ix^d))
583 w1l(ix^d,rho_)=sul(ix^d)/(sl(ix^d,ii)-sm(ix^d))
586 r1r(ix^d)=sur(ix^d)*(sr(ix^d,ii)-sm(ix^d))-bx(ix^d)**2
587 if(r1r(ix^d)/=0.d0) r1r(ix^d)=1.d0/r1r(ix^d)
588 r1l(ix^d)=sul(ix^d)*(sl(ix^d,ii)-sm(ix^d))-bx(ix^d)**2
589 if(r1l(ix^d)/=0.d0) r1l(ix^d)=1.d0/r1l(ix^d)
591 w1r(ix^d,mom(ip2))=wrp(ix^d,mom(ip2))-bx(ix^d)*br(ix^d,ip2)*&
592 (sm(ix^d)-wrp(ix^d,mom(ip1)))*r1r(ix^d)
593 w1l(ix^d,mom(ip2))=wlp(ix^d,mom(ip2))-bx(ix^d)*bl(ix^d,ip2)*&
594 (sm(ix^d)-wlp(ix^d,mom(ip1)))*r1l(ix^d)
596 w1r(ix^d,mag(ip2))=(sur(ix^d)*(sr(ix^d,ii)-wrp(ix^d,mom(ip1)))-bx(ix^d)**2)*r1r(ix^d)
597 w1l(ix^d,mag(ip2))=(sul(ix^d)*(sl(ix^d,ii)-wlp(ix^d,mom(ip1)))-bx(ix^d)**2)*r1l(ix^d)
602 w1r(ix^d,mom(ip3))=wrp(ix^d,mom(ip3))-bx(ix^d)*br(ix^d,ip3)*&
603 (sm(ix^d)-wrp(ix^d,mom(ip1)))*r1r(ix^d)
604 w1l(ix^d,mom(ip3))=wlp(ix^d,mom(ip3))-bx(ix^d)*bl(ix^d,ip3)*&
605 (sm(ix^d)-wlp(ix^d,mom(ip1)))*r1l(ix^d)
607 w1r(ix^d,mag(ip3))=br(ix^d,ip3)*w1r(ix^d,mag(ip2))
608 w1l(ix^d,mag(ip3))=bl(ix^d,ip3)*w1l(ix^d,mag(ip2))
611 w1r(ix^d,mag(ip2))=br(ix^d,ip2)*w1r(ix^d,mag(ip2))
612 w1l(ix^d,mag(ip2))=bl(ix^d,ip2)*w1l(ix^d,mag(ip2))
615 ^c&w1r(ix^d,b^c_)=w1r(ix^d,b^c_)-block%B0(ix^d,^c,ip1)\
616 ^c&w1l(ix^d,b^c_)=w1l(ix^d,b^c_)-block%B0(ix^d,^c,ip1)\
621 w1r(ix^d,p_)=sur(ix^d)*(sm(ix^d)-wrp(ix^d,mom(ip1)))+ptr(ix^d)
622 w1l(ix^d,p_)=w1r(ix^d,p_)
625 w1r(ix^d,p_)=w1r(ix^d,p_)+(^c&block%B0(ix^d,^c,ip1)*(wrc(ix^d,b^c_)-w1r(ix^d,b^c_))+)
626 w1l(ix^d,p_)=w1l(ix^d,p_)+(^c&block%B0(ix^d,^c,ip1)*(wlc(ix^d,b^c_)-w1l(ix^d,b^c_))+)
629 w1r(ix^d,e_)=((sr(ix^d,ii)-wrp(ix^d,mom(ip1)))*wrc(ix^d,e_)-ptr(ix^d)*wrp(ix^d,mom(ip1))+&
630 w1r(ix^d,p_)*sm(ix^d)+bx(ix^d)*((^c&wrp(ix^d,m^c_)*wrc(ix^d,b^c_)+)-&
631 (^c&w1r(ix^d,m^c_)*w1r(ix^d,b^c_)+)))/(sr(ix^d,ii)-sm(ix^d))
632 w1l(ix^d,e_)=((sl(ix^d,ii)-wlp(ix^d,mom(ip1)))*wlc(ix^d,e_)-ptl(ix^d)*wlp(ix^d,mom(ip1))+&
633 w1l(ix^d,p_)*sm(ix^d)+bx(ix^d)*((^c&wlp(ix^d,m^c_)*wlc(ix^d,b^c_)+)-&
634 (^c&w1l(ix^d,m^c_)*w1l(ix^d,b^c_)+)))/(sl(ix^d,ii)-sm(ix^d))
637 w1r(ix^d,e_)=w1r(ix^d,e_)+((^c&w1r(ix^d,b^c_)*block%B0(ix^d,^c,ip1)+)*sm(ix^d)-&
638 (^c&wrc(ix^d,b^c_)*block%B0(ix^d,^c,ip1)+)*wrp(ix^d,mom(ip1)))/(sr(ix^d,ii)-sm(ix^d))
639 w1l(ix^d,e_)=w1l(ix^d,e_)+((^c&w1l(ix^d,b^c_)*block%B0(ix^d,^c,ip1)+)*sm(ix^d)-&
640 (^c&wlc(ix^d,b^c_)*block%B0(ix^d,^c,ip1)+)*wlp(ix^d,mom(ip1)))/(sl(ix^d,ii)-sm(ix^d))
643 w1r(ix^d,e_)=w1r(ix^d,e_)+1d0/(phys_gamma-1)*block%equi_vars(ix^d,iw_equi_p,ip1)*&
644 (sm(ix^d)-wrp(ix^d,mom(ip1)))/(sr(ix^d,ii)-sm(ix^d))
645 w1l(ix^d,e_)=w1l(ix^d,e_)+1d0/(phys_gamma-1)*block%equi_vars(ix^d,iw_equi_p,ip1)*&
646 (sm(ix^d)-wlp(ix^d,mom(ip1)))/(sl(ix^d,ii)-sm(ix^d))
651 w2r(ix^d,rho_)=w1r(ix^d,rho_)
652 w2l(ix^d,rho_)=w1l(ix^d,rho_)
653 w2r(ix^d,mag(ip1))=w1r(ix^d,mag(ip1))
654 w2l(ix^d,mag(ip1))=w1l(ix^d,mag(ip1))
655 r1r(ix^d)=sqrt(w1r(ix^d,rho_))
656 r1l(ix^d)=sqrt(w1l(ix^d,rho_))
657 tmp(ix^d)=1.d0/(r1r(ix^d)+r1l(ix^d))
658 signbx(ix^d)=sign(1.d0,bx(ix^d))
660 s1r(ix^d)=sm(ix^d)+abs(bx(ix^d))/r1r(ix^d)
661 s1l(ix^d)=sm(ix^d)-abs(bx(ix^d))/r1l(ix^d)
663 w2r(ix^d,mom(ip2))=(r1l(ix^d)*w1l(ix^d,mom(ip2))+r1r(ix^d)*w1r(ix^d,mom(ip2))+&
664 (w1r(ix^d,mag(ip2))-w1l(ix^d,mag(ip2)))*signbx(ix^d))*tmp(ix^d)
665 w2l(ix^d,mom(ip2))=w2r(ix^d,mom(ip2))
667 w2r(ix^d,mag(ip2))=(r1l(ix^d)*w1r(ix^d,mag(ip2))+r1r(ix^d)*w1l(ix^d,mag(ip2))+&
668 r1l(ix^d)*r1r(ix^d)*(w1r(ix^d,mom(ip2))-w1l(ix^d,mom(ip2)))*signbx(ix^d))*tmp(ix^d)
669 w2l(ix^d,mag(ip2))=w2r(ix^d,mag(ip2))
672 w2r(ix^d,mom(ip3))=(r1l(ix^d)*w1l(ix^d,mom(ip3))+r1r(ix^d)*w1r(ix^d,mom(ip3))+&
673 (w1r(ix^d,mag(ip3))-w1l(ix^d,mag(ip3)))*signbx(ix^d))*tmp(ix^d)
674 w2l(ix^d,mom(ip3))=w2r(ix^d,mom(ip3))
676 w2r(ix^d,mag(ip3))=(r1l(ix^d)*w1r(ix^d,mag(ip3))+r1r(ix^d)*w1l(ix^d,mag(ip3))+&
677 r1l(ix^d)*r1r(ix^d)*(w1r(ix^d,mom(ip3))-w1l(ix^d,mom(ip3)))*signbx(ix^d))*tmp(ix^d)
678 w2l(ix^d,mag(ip3))=w2r(ix^d,mag(ip3))
682 w2r(ix^d,e_)=w1r(ix^d,e_)+r1r(ix^d)*((^c&w1r(ix^d,m^c_)*w1r(ix^d,b^c_)+)-&
683 (^c&w2r(ix^d,m^c_)*w2r(ix^d,b^c_)+))*signbx(ix^d)
684 w2l(ix^d,e_)=w1l(ix^d,e_)-r1l(ix^d)*((^c&w1l(ix^d,m^c_)*w1l(ix^d,b^c_)+)-&
685 (^c&w2l(ix^d,m^c_)*w2l(ix^d,b^c_)+))*signbx(ix^d)
689 ^c&w1r(ix^d,m^c_)=w1r(ix^d,m^c_)*w1r(ix^d,rho_)\
690 ^c&w1l(ix^d,m^c_)=w1l(ix^d,m^c_)*w1l(ix^d,rho_)\
691 ^c&w2r(ix^d,m^c_)=w2r(ix^d,m^c_)*w2r(ix^d,rho_)\
692 ^c&w2l(ix^d,m^c_)=w2l(ix^d,m^c_)*w2l(ix^d,rho_)\
693 if(iw_equi_rho>0)
then
694 w1r(ix^d,rho_)=w1r(ix^d,rho_)-block%equi_vars(ix^d,iw_equi_rho,ip1)
695 w1l(ix^d,rho_)=w1l(ix^d,rho_)-block%equi_vars(ix^d,iw_equi_rho,ip1)
696 w2r(ix^d,rho_)=w2r(ix^d,rho_)-block%equi_vars(ix^d,iw_equi_rho,ip1)
697 w2l(ix^d,rho_)=w2l(ix^d,rho_)-block%equi_vars(ix^d,iw_equi_rho,ip1)
702 if(flux_type(idims, iw)==flux_special)
then
705 do ix^db=ixcmin^db,ixcmax^db\}
706 fc(ix^d,iw,ip1)=flc(ix^d,iw)
708 else if(flux_type(idims, iw)==flux_hll)
then
711 do ix^db=ixcmin^db,ixcmax^db\}
712 fc(ix^d,iw,ip1)=(sr(ix^d,ii)*flc(ix^d,iw)-sl(ix^d,ii)*frc(ix^d,iw) &
713 +sr(ix^d,ii)*sl(ix^d,ii)*(wrc(ix^d,iw)-wlc(ix^d,iw)))/(sr(ix^d,ii)-sl(ix^d,ii))
720 do ix^db=ixcmin^db,ixcmax^db\}
721 if(sl(ix^d,ii)>0.d0)
then
722 fc(ix^d,iw,ip1)=flc(ix^d,iw)
723 else if(s1l(ix^d)>=0.d0)
then
724 fc(ix^d,iw,ip1)=flc(ix^d,iw)+sl(ix^d,ii)*(w1l(ix^d,iw)-wlc(ix^d,iw))
725 else if(sm(ix^d)>=0.d0)
then
726 fc(ix^d,iw,ip1)=flc(ix^d,iw)+sl(ix^d,ii)*(w1l(ix^d,iw)-wlc(ix^d,iw))+&
727 s1l(ix^d)*(w2l(ix^d,iw)-w1l(ix^d,iw))
728 else if(s1r(ix^d)>=0.d0)
then
729 fc(ix^d,iw,ip1)=frc(ix^d,iw)+sr(ix^d,ii)*(w1r(ix^d,iw)-wrc(ix^d,iw))+&
730 s1r(ix^d)*(w2r(ix^d,iw)-w1r(ix^d,iw))
731 else if(sr(ix^d,ii)>=0.d0)
then
732 fc(ix^d,iw,ip1)=frc(ix^d,iw)+sr(ix^d,ii)*(w1r(ix^d,iw)-wrc(ix^d,iw))
733 else if(sr(ix^d,ii)<0.d0)
then
734 fc(ix^d,iw,ip1)=frc(ix^d,iw)
741 end subroutine get_riemann_flux_hlld
745 subroutine get_riemann_flux_hlld_mag2(iws,iwe)
747 integer,
intent(in) :: iws, iwe
749 double precision,
dimension(ixI^S,1:nwflux) :: w1R,w1L,f1R,f1L,f2R,f2L
750 double precision,
dimension(ixI^S,1:nwflux) :: w2R,w2L
751 double precision,
dimension(ixI^S) :: sm,s1R,s1L,suR,suL,Bx
752 double precision,
dimension(ixI^S) :: pts,ptR,ptL,signBx,r1L,r1R,tmp
754 double precision,
dimension(ixI^S,ndir) :: vRC, vLC
756 double precision,
dimension(ixI^S,ndir) :: BR, BL
757 integer :: ip1,ip2,ip3,idir,ix^D
758 double precision :: phiPres, thetaSM, du, dv, dw
759 integer :: ixV^L, ixVb^L, ixVc^L, ixVd^L, ixVe^L, ixVf^L
760 integer :: rho_, p_, e_, mom(1:ndir), mag(1:ndir)
761 double precision,
parameter :: aParam = 4d0
769 associate(sr=>cmaxc,sl=>cminc)
776 vrc(ixc^s,:)=wrp(ixc^s,mom(:))
777 vlc(ixc^s,:)=wlp(ixc^s,mom(:))
780 call get_hlld2_modif_c(wlp,x,ixi^l,ixo^l,s1l)
781 call get_hlld2_modif_c(wrp,x,ixi^l,ixo^l,s1r)
783 phipres = min(1d0, maxval(max(s1l(ixo^s),s1r(ixo^s)))/maxval(cmaxc(ixo^s,1)))
784 phipres = phipres*(2d0 - phipres)
791 du = minval(wprim(ixv^s,mom(1))-wprim(ixo^s,mom(1)))
827 dv = minval(min(wprim(ixo^s,mom(2))-wprim(ixv^s,mom(2)),&
828 wprim(ixvb^s,mom(2))-wprim(ixo^s,mom(2)),&
829 wprim(ixvc^s,mom(2))-wprim(ixvd^s,mom(2)),&
830 wprim(ixve^s,mom(2))-wprim(ixvc^s,mom(2))&
864 dw = minval(min(wprim(ixo^s,mom(3))-wprim(ixv^s,mom(3)),&
865 wprim(ixvb^s,mom(3))-wprim(ixo^s,mom(3)),&
866 wprim(ixvc^s,mom(3))-wprim(ixvd^s,mom(3)),&
867 wprim(ixve^s,mom(3))-wprim(ixvc^s,mom(3))&
870 thetasm = maxval(cmaxc(ixo^s,1))
872 thetasm = (min(1d0, (thetasm-du)/(thetasm-min(dv,dw))))**aparam
875 br(ixc^s,:)=wrc(ixc^s,mag(:))+block%B0(ixc^s,:,ip1)
876 bl(ixc^s,:)=wlc(ixc^s,mag(:))+block%B0(ixc^s,:,ip1)
878 br(ixc^s,:)=wrc(ixc^s,mag(:))
879 bl(ixc^s,:)=wlc(ixc^s,mag(:))
882 bx(ixc^s)=(sr(ixc^s,index_v_mag)*br(ixc^s,ip1)-sl(ixc^s,index_v_mag)*bl(ixc^s,ip1)-&
883 flc(ixc^s,mag(ip1))-frc(ixc^s,mag(ip1)))/(sr(ixc^s,index_v_mag)-sl(ixc^s,index_v_mag))
884 ptr(ixc^s)=wrp(ixc^s,p_)+0.5d0*sum(br(ixc^s,:)**2,dim=ndim+1)
885 ptl(ixc^s)=wlp(ixc^s,p_)+0.5d0*sum(bl(ixc^s,:)**2,dim=ndim+1)
886 sur(ixc^s)=(sr(ixc^s,index_v_mag)-vrc(ixc^s,ip1))*wrc(ixc^s,rho_)
887 sul(ixc^s)=(sl(ixc^s,index_v_mag)-vlc(ixc^s,ip1))*wlc(ixc^s,rho_)
889 sm(ixc^s)=(sur(ixc^s)*vrc(ixc^s,ip1)-sul(ixc^s)*vlc(ixc^s,ip1)-&
890 thetasm*(ptr(ixc^s)-ptl(ixc^s)) )/(sur(ixc^s)-sul(ixc^s))
892 w1r(ixc^s,mom(ip1))=sm(ixc^s)
893 w1l(ixc^s,mom(ip1))=sm(ixc^s)
894 w2r(ixc^s,mom(ip1))=sm(ixc^s)
895 w2l(ixc^s,mom(ip1))=sm(ixc^s)
897 w1r(ixc^s,mag(ip1))=bx(ixc^s)
898 w1l(ixc^s,mag(ip1))=bx(ixc^s)
900 ptr(ixc^s)=wrp(ixc^s,p_)+0.5d0*sum(wrc(ixc^s,mag(:))**2,dim=ndim+1)
901 ptl(ixc^s)=wlp(ixc^s,p_)+0.5d0*sum(wlc(ixc^s,mag(:))**2,dim=ndim+1)
905 w1r(ixc^s,rho_)=sur(ixc^s)/(sr(ixc^s,index_v_mag)-sm(ixc^s))
906 w1l(ixc^s,rho_)=sul(ixc^s)/(sl(ixc^s,index_v_mag)-sm(ixc^s))
910 r1r(ixc^s)=sur(ixc^s)*(sr(ixc^s,index_v_mag)-sm(ixc^s))-bx(ixc^s)**2
911 where(r1r(ixc^s)/=0.d0)
912 r1r(ixc^s)=1.d0/r1r(ixc^s)
914 r1l(ixc^s)=sul(ixc^s)*(sl(ixc^s,index_v_mag)-sm(ixc^s))-bx(ixc^s)**2
915 where(r1l(ixc^s)/=0.d0)
916 r1l(ixc^s)=1.d0/r1l(ixc^s)
919 w1r(ixc^s,mom(ip2))=vrc(ixc^s,ip2)-bx(ixc^s)*br(ixc^s,ip2)*&
920 (sm(ixc^s)-vrc(ixc^s,ip1))*r1r(ixc^s)
921 w1l(ixc^s,mom(ip2))=vlc(ixc^s,ip2)-bx(ixc^s)*bl(ixc^s,ip2)*&
922 (sm(ixc^s)-vlc(ixc^s,ip1))*r1l(ixc^s)
924 w1r(ixc^s,mag(ip2))=(sur(ixc^s)*(sr(ixc^s,index_v_mag)-vrc(ixc^s,ip1))-bx(ixc^s)**2)*r1r(ixc^s)
925 w1l(ixc^s,mag(ip2))=(sul(ixc^s)*(sl(ixc^s,index_v_mag)-vlc(ixc^s,ip1))-bx(ixc^s)**2)*r1l(ixc^s)
930 w1r(ixc^s,mom(ip3))=vrc(ixc^s,ip3)-bx(ixc^s)*br(ixc^s,ip3)*&
931 (sm(ixc^s)-vrc(ixc^s,ip1))*r1r(ixc^s)
932 w1l(ixc^s,mom(ip3))=vlc(ixc^s,ip3)-bx(ixc^s)*bl(ixc^s,ip3)*&
933 (sm(ixc^s)-vlc(ixc^s,ip1))*r1l(ixc^s)
935 w1r(ixc^s,mag(ip3))=br(ixc^s,ip3)*w1r(ixc^s,mag(ip2))
936 w1l(ixc^s,mag(ip3))=bl(ixc^s,ip3)*w1l(ixc^s,mag(ip2))
939 w1r(ixc^s,mag(ip2))=br(ixc^s,ip2)*w1r(ixc^s,mag(ip2))
940 w1l(ixc^s,mag(ip2))=bl(ixc^s,ip2)*w1l(ixc^s,mag(ip2))
943 w1r(ixc^s,mag(:))=w1r(ixc^s,mag(:))-block%B0(ixc^s,:,ip1)
944 w1l(ixc^s,mag(:))=w1l(ixc^s,mag(:))-block%B0(ixc^s,:,ip1)
949 w1r(ixc^s,p_)=(sur(ixc^s)*ptl(ixc^s) - sul(ixc^s)*ptr(ixc^s) +&
950 phipres * sur(ixc^s)*sul(ixc^s)*(vrc(ixc^s,ip1)-vlc(ixc^s,ip1)))/&
951 (sur(ixc^s)-sul(ixc^s))
952 w1l(ixc^s,p_)=w1r(ixc^s,p_)
955 w1r(ixc^s,p_)=w1r(ixc^s,p_)+sum(block%B0(ixc^s,:,ip1)*(wrc(ixc^s,mag(:))-w1r(ixc^s,mag(:))),dim=ndim+1)
956 w1l(ixc^s,p_)=w1l(ixc^s,p_)+sum(block%B0(ixc^s,:,ip1)*(wlc(ixc^s,mag(:))-w1l(ixc^s,mag(:))),dim=ndim+1)
959 w1r(ixc^s,e_)=((sr(ixc^s,index_v_mag)-vrc(ixc^s,ip1))*wrc(ixc^s,e_)-ptr(ixc^s)*vrc(ixc^s,ip1)+&
960 w1r(ixc^s,p_)*sm(ixc^s)+bx(ixc^s)*(sum(vrc(ixc^s,:)*wrc(ixc^s,mag(:)),dim=ndim+1)-&
961 sum(w1r(ixc^s,mom(:))*w1r(ixc^s,mag(:)),dim=ndim+1)))/(sr(ixc^s,index_v_mag)-sm(ixc^s))
962 w1l(ixc^s,e_)=((sl(ixc^s,index_v_mag)-vlc(ixc^s,ip1))*wlc(ixc^s,e_)-ptl(ixc^s)*vlc(ixc^s,ip1)+&
963 w1l(ixc^s,p_)*sm(ixc^s)+bx(ixc^s)*(sum(vlc(ixc^s,:)*wlc(ixc^s,mag(:)),dim=ndim+1)-&
964 sum(w1l(ixc^s,mom(:))*w1l(ixc^s,mag(:)),dim=ndim+1)))/(sl(ixc^s,index_v_mag)-sm(ixc^s))
967 w1r(ixc^s,e_)=w1r(ixc^s,e_)+(sum(w1r(ixc^s,mag(:))*block%B0(ixc^s,:,ip1),dim=ndim+1)*sm(ixc^s)-&
968 sum(wrc(ixc^s,mag(:))*block%B0(ixc^s,:,ip1),dim=ndim+1)*vrc(ixc^s,ip1))/(sr(ixc^s,index_v_mag)-sm(ixc^s))
969 w1l(ixc^s,e_)=w1l(ixc^s,e_)+(sum(w1l(ixc^s,mag(:))*block%B0(ixc^s,:,ip1),dim=ndim+1)*sm(ixc^s)-&
970 sum(wlc(ixc^s,mag(:))*block%B0(ixc^s,:,ip1),dim=ndim+1)*vlc(ixc^s,ip1))/(sl(ixc^s,index_v_mag)-sm(ixc^s))
975 w2r(ixc^s,rho_)=w1r(ixc^s,rho_)
976 w2l(ixc^s,rho_)=w1l(ixc^s,rho_)
977 w2r(ixc^s,mag(ip1))=w1r(ixc^s,mag(ip1))
978 w2l(ixc^s,mag(ip1))=w1l(ixc^s,mag(ip1))
980 r1r(ixc^s)=sqrt(w1r(ixc^s,rho_))
981 r1l(ixc^s)=sqrt(w1l(ixc^s,rho_))
982 tmp(ixc^s)=1.d0/(r1r(ixc^s)+r1l(ixc^s))
983 signbx(ixc^s)=sign(1.d0,bx(ixc^s))
985 s1r(ixc^s)=sm(ixc^s)+abs(bx(ixc^s))/r1r(ixc^s)
986 s1l(ixc^s)=sm(ixc^s)-abs(bx(ixc^s))/r1l(ixc^s)
988 w2r(ixc^s,mom(ip2))=(r1l(ixc^s)*w1l(ixc^s,mom(ip2))+r1r(ixc^s)*w1r(ixc^s,mom(ip2))+&
989 (w1r(ixc^s,mag(ip2))-w1l(ixc^s,mag(ip2)))*signbx(ixc^s))*tmp(ixc^s)
990 w2l(ixc^s,mom(ip2))=w2r(ixc^s,mom(ip2))
992 w2r(ixc^s,mag(ip2))=(r1l(ixc^s)*w1r(ixc^s,mag(ip2))+r1r(ixc^s)*w1l(ixc^s,mag(ip2))+&
993 r1l(ixc^s)*r1r(ixc^s)*(w1r(ixc^s,mom(ip2))-w1l(ixc^s,mom(ip2)))*signbx(ixc^s))*tmp(ixc^s)
994 w2l(ixc^s,mag(ip2))=w2r(ixc^s,mag(ip2))
997 w2r(ixc^s,mom(ip3))=(r1l(ixc^s)*w1l(ixc^s,mom(ip3))+r1r(ixc^s)*w1r(ixc^s,mom(ip3))+&
998 (w1r(ixc^s,mag(ip3))-w1l(ixc^s,mag(ip3)))*signbx(ixc^s))*tmp(ixc^s)
999 w2l(ixc^s,mom(ip3))=w2r(ixc^s,mom(ip3))
1001 w2r(ixc^s,mag(ip3))=(r1l(ixc^s)*w1r(ixc^s,mag(ip3))+r1r(ixc^s)*w1l(ixc^s,mag(ip3))+&
1002 r1l(ixc^s)*r1r(ixc^s)*(w1r(ixc^s,mom(ip3))-w1l(ixc^s,mom(ip3)))*signbx(ixc^s))*tmp(ixc^s)
1003 w2l(ixc^s,mag(ip3))=w2r(ixc^s,mag(ip3))
1006 if(phys_energy)
then
1007 w2r(ixc^s,e_)=w1r(ixc^s,e_)+r1r(ixc^s)*(sum(w1r(ixc^s,mom(:))*w1r(ixc^s,mag(:)),dim=ndim+1)-&
1008 sum(w2r(ixc^s,mom(:))*w2r(ixc^s,mag(:)),dim=ndim+1))*signbx(ixc^s)
1009 w2l(ixc^s,e_)=w1l(ixc^s,e_)-r1l(ixc^s)*(sum(w1l(ixc^s,mom(:))*w1l(ixc^s,mag(:)),dim=ndim+1)-&
1010 sum(w2l(ixc^s,mom(:))*w2l(ixc^s,mag(:)),dim=ndim+1))*signbx(ixc^s)
1015 w1r(ixc^s,mom(idir))=w1r(ixc^s,mom(idir))*w1r(ixc^s,rho_)
1016 w1l(ixc^s,mom(idir))=w1l(ixc^s,mom(idir))*w1l(ixc^s,rho_)
1017 w2r(ixc^s,mom(idir))=w2r(ixc^s,mom(idir))*w2r(ixc^s,rho_)
1018 w2l(ixc^s,mom(idir))=w2l(ixc^s,mom(idir))*w2l(ixc^s,rho_)
1024 if(stagger_grid .and. flux_type(idims, iw) == flux_tvdlf) cycle
1025 if(flux_type(idims, iw) == flux_special)
then
1027 f1l(ixc^s,iw)=flc(ixc^s,iw)
1028 f1r(ixc^s,iw)=f1l(ixc^s,iw)
1029 f2l(ixc^s,iw)=f1l(ixc^s,iw)
1030 f2r(ixc^s,iw)=f1l(ixc^s,iw)
1031 else if(flux_type(idims, iw) == flux_hll)
then
1033 f1l(ixc^s,iw)=(sr(ixc^s,index_v_mag)*flc(ixc^s, iw)-sl(ixc^s,index_v_mag)*frc(ixc^s, iw) &
1034 +sr(ixc^s,index_v_mag)*sl(ixc^s,index_v_mag)*(wrc(ixc^s,iw)-wlc(ixc^s,iw)))/(sr(ixc^s,index_v_mag)-sl(ixc^s,index_v_mag))
1035 f1r(ixc^s,iw)=f1l(ixc^s,iw)
1036 f2l(ixc^s,iw)=f1l(ixc^s,iw)
1037 f2r(ixc^s,iw)=f1l(ixc^s,iw)
1039 f1l(ixc^s,iw)=flc(ixc^s,iw)+sl(ixc^s,index_v_mag)*(w1l(ixc^s,iw)-wlc(ixc^s,iw))
1040 f1r(ixc^s,iw)=frc(ixc^s,iw)+sr(ixc^s,index_v_mag)*(w1r(ixc^s,iw)-wrc(ixc^s,iw))
1041 f2l(ixc^s,iw)=f1l(ixc^s,iw)+s1l(ixc^s)*(w2l(ixc^s,iw)-w1l(ixc^s,iw))
1042 f2r(ixc^s,iw)=f1r(ixc^s,iw)+s1r(ixc^s)*(w2r(ixc^s,iw)-w1r(ixc^s,iw))
1047 {
do ix^db=ixcmin^db,ixcmax^db\}
1048 if(sl(ix^d,index_v_mag)>0.d0)
then
1049 fc(ix^d,iws:iwe,ip1)=flc(ix^d,iws:iwe)
1050 else if(s1l(ix^d)>=0.d0)
then
1051 fc(ix^d,iws:iwe,ip1)=f1l(ix^d,iws:iwe)
1052 else if(sm(ix^d)>=0.d0)
then
1053 fc(ix^d,iws:iwe,ip1)=f2l(ix^d,iws:iwe)
1054 else if(s1r(ix^d)>=0.d0)
then
1055 fc(ix^d,iws:iwe,ip1)=f2r(ix^d,iws:iwe)
1056 else if(sr(ix^d,index_v_mag)>=0.d0)
then
1057 fc(ix^d,iws:iwe,ip1)=f1r(ix^d,iws:iwe)
1058 else if(sr(ix^d,index_v_mag)<0.d0)
then
1059 fc(ix^d,iws:iwe,ip1)=frc(ix^d,iws:iwe)
1064 end subroutine get_riemann_flux_hlld_mag2
1067 subroutine get_hlld2_modif_c(w,x,ixI^L,ixO^L,csound)
1070 integer,
intent(in) :: ixI^L, ixO^L
1071 double precision,
intent(in) :: w(ixI^S, nw), x(ixI^S,1:ndim)
1072 double precision,
intent(out):: csound(ixI^S)
1073 double precision :: cfast2(ixI^S), AvMinCs2(ixI^S), b2(ixI^S), kmax
1074 double precision :: inv_rho(ixO^S), gamma_A2(ixO^S)
1075 integer :: rho_, p_, e_, mom(1:ndir), mag(1:ndir)
1083 inv_rho=1.d0/w(ixo^s,rho_)
1088 b2(ixo^s) = sum((w(ixo^s, mag(:))+
block%B0(ixo^s,:,
b0i))**2, dim=ndim+1)
1090 b2(ixo^s) = sum(w(ixo^s, mag(:))**2, dim=ndim+1)
1095 avmincs2= w(ixo^s, mag(idims))+
block%B0(ixo^s,idims,
b0i)
1097 avmincs2= w(ixo^s, mag(idims))
1101 csound(ixo^s) = sum(w(ixo^s, mom(:))**2, dim=ndim+1)
1103 cfast2(ixo^s) = b2(ixo^s) * inv_rho+csound(ixo^s)
1104 avmincs2(ixo^s) = cfast2(ixo^s)**2-4.0d0*csound(ixo^s) &
1105 * avmincs2(ixo^s)**2 &
1108 where(avmincs2(ixo^s)<zero)
1109 avmincs2(ixo^s)=zero
1112 avmincs2(ixo^s)=sqrt(avmincs2(ixo^s))
1114 csound(ixo^s) = sqrt(half*(cfast2(ixo^s)+avmincs2(ixo^s)))
1116 end subroutine get_hlld2_modif_c