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 integer :: jdims, jxc^
l, hpc^
l, hmc^
l
149 double precision,
dimension(ixI^S) :: divvc
150 logical :: active=.false.
151 type(ct_velocity) :: vcts
153 associate(wct=>sct%w, wnew=>snew%w)
159 ix^
l=ix^
l^ladd2*
kr(idims,^
d);
161 if (ixi^
l^ltix^
l|.or.|.or.) &
162 call mpistop(
"Error in fv : Nonconforming input limits")
170 kxcmin^
d=iximin^
d; kxcmax^
d=iximax^
d-
kr(idims,^
d);
171 kxr^
l=kxc^
l+
kr(idims,^
d);
177 {
do ix^db=iximin^db,iximax^db\}
179 wrp(ix^
d,iw)=wprim(ix^
d,iw)
180 wlp(ix^
d,iw)=wprim(ix^
d,iw)
182 wrp(kxc^s,iw)=wprim(kxr^s,iw)
185 hxo^l=ixo^l-kr(idims,^d);
186 if(stagger_grid)
then
188 ixcmax^d=ixomax^d+transverse_ghost_cells-transverse_ghost_cells*kr(idims,^d);
189 ixcmin^d=hxomin^d-transverse_ghost_cells+transverse_ghost_cells*kr(idims,^d);
192 ixcmax^d=ixomax^d; ixcmin^d=hxomin^d;
197 {ixcrmin^d = max(ixcmin^d - phys_wider_stencil,ixglo^d)\}
198 {ixcrmax^d = min(ixcmax^d + phys_wider_stencil,ixghi^d)\}
201 call reconstruct_lr(ixi^l,ixcr^l,ixcr^l,idims,wprim,wlc,wrc,wlp,wrp,x,dxs(idims))
204 call phys_modify_wlr(ixi^l,ixcr^l,qt,wlc,wrc,wlp,wrp,sct,idims)
207 call phys_get_flux(wlc,wlp,x,ixi^l,ixc^l,idims,flc)
208 call phys_get_flux(wrc,wrp,x,ixi^l,ixc^l,idims,frc)
209 if(h_correction)
then
210 call phys_get_h_speed(wprim,x,ixi^l,ixo^l,idims,hspeed)
213 if(method==fs_tvdlf.or.method==fs_tvdmu)
then
214 call phys_get_cbounds(wlc,wrc,wlp,wrp,x,ixi^l,ixc^l,idims,hspeed,cmaxc)
216 if(stagger_grid)
call phys_get_ct_velocity(vcts,wlp,wrp,ixi^l,ixc^l,idims,cmaxc(ixi^s,index_v_mag))
218 call phys_get_cbounds(wlc,wrc,wlp,wrp,x,ixi^l,ixc^l,idims,hspeed,cmaxc,cminc)
219 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))
225 do ii=1,number_species
226 call get_riemann_flux_hll(start_indices(ii),stop_indices(ii))
228 case(fs_hllc,fs_hllcd)
229 do ii=1,number_species
230 call get_riemann_flux_hllc(start_indices(ii),stop_indices(ii))
233 do ii=1,number_species
234 if(ii==index_v_mag)
then
235 call get_riemann_flux_hlld(start_indices(ii),stop_indices(ii))
237 call get_riemann_flux_hll(start_indices(ii),stop_indices(ii))
241 do ii=1,number_species
242 call get_riemann_flux_tvdlf(start_indices(ii),stop_indices(ii))
247 call mpistop(
'unkown Riemann flux in finite volume')
266 if (ppm_avisc > zero)
then
267 jxc^l=ixc^l+kr(idims,^d);
268 divvc(ixc^s)=wprim(jxc^s,iw_mom(idims))-wprim(ixc^s,iw_mom(idims))
270 if (jdims==idims) cycle
271 hpc^l=ixc^l+kr(jdims,^d); hmc^l=ixc^l-kr(jdims,^d);
272 divvc(ixc^s)=divvc(ixc^s) &
273 +0.25d0*(wprim(hpc^s,iw_mom(jdims))-wprim(hmc^s,iw_mom(jdims)))
274 hpc^l=hpc^l+kr(idims,^d); hmc^l=hmc^l+kr(idims,^d);
275 divvc(ixc^s)=divvc(ixc^s) &
276 +0.25d0*(wprim(hpc^s,iw_mom(jdims))-wprim(hmc^s,iw_mom(jdims)))
278 divvc(ixc^s)=ppm_avisc*max(-divvc(ixc^s),zero)
280 fc(ixc^s,iw,idims)=fc(ixc^s,iw,idims) &
281 +divvc(ixc^s)*(wct(ixc^s,iw)-wct(jxc^s,iw))
287 if(stagger_grid)
call phys_update_faces(ixi^l,ixo^l,qt,qdt,wprim,fc,fe,sct,snew,vcts)
288 if(slab_uniform)
then
289 if(local_timestep)
then
290 dxinv(1:ndim)=-dtfactor/dxs(1:ndim)
293 hxomin^d=ixomin^d-hx^d\
295 {
do ix^db=hxomin^db,ixomax^db\}
296 fc(ix^d,iw,idims)=block%dt(ix^d)*dxinv(idims)*fc(ix^d,iw,idims)
298 {
do ix^db=ixomin^db,ixomax^db\}
299 wnew(ix^d,iw)=wnew(ix^d,iw)+fc(ix^d,iw,idims)-fc(ix^d-hx^d,iw,idims)
303 if(method==fs_tvdmu) &
304 call tvdlimit2(method,qdt,ixi^l,ixc^l,ixo^l,idims,wlc,wrc,wnew,x,fc,dxs)
307 dxinv(1:ndim)=-qdt/dxs(1:ndim)
310 hxomin^d=ixomin^d-hx^d\
312 {
do ix^db=hxomin^db,ixomax^db\}
313 fc(ix^d,iw,idims)=dxinv(idims)*fc(ix^d,iw,idims)
315 {
do ix^db=ixomin^db,ixomax^db\}
316 wnew(ix^d,iw)=wnew(ix^d,iw)+fc(ix^d,iw,idims)-fc(ix^d-hx^d,iw,idims)
320 if(method==fs_tvdmu) &
321 call tvdlimit2(method,qdt,ixi^l,ixc^l,ixo^l,idims,wlc,wrc,wnew,x,fc,dxs)
325 inv_volume(ixo^s) = 1.d0/block%dvolume(ixo^s)
326 if(local_timestep)
then
329 hxomin^d=ixomin^d-hx^d\
331 {
do ix^db=hxomin^db,ixomax^db\}
332 fc(ix^d,iw,idims)=-block%dt(ix^d)*dtfactor*fc(ix^d,iw,idims)*block%surfaceC(ix^d,idims)
334 {
do ix^db=ixomin^db,ixomax^db\}
335 wnew(ix^d,iw)=wnew(ix^d,iw)+(fc(ix^d,iw,idims)-fc(ix^d-hx^d,iw,idims))*inv_volume(ix^d)
339 if (method==fs_tvdmu) &
340 call tvdlimit2(method,qdt,ixi^l,ixc^l,ixo^l,idims,wlc,wrc,wnew,x,fc,dxs)
345 hxomin^d=ixomin^d-hx^d\
347 {
do ix^db=hxomin^db,ixomax^db\}
348 fc(ix^d,iw,idims)=-qdt*fc(ix^d,iw,idims)*block%surfaceC(ix^d,idims)
350 {
do ix^db=ixomin^db,ixomax^db\}
351 wnew(ix^d,iw)=wnew(ix^d,iw)+(fc(ix^d,iw,idims)-fc(ix^d-hx^d,iw,idims))*inv_volume(ix^d)
358 if (.not.slab.and.idimsmin==1) &
359 call phys_add_source_geom(qdt,dtfactor,ixi^l,ixo^l,wct,wprim,wnew,x)
361 if(stagger_grid)
call phys_face_to_center(ixo^l,snew)
364 if(fix_small_values)
then
365 call phys_handle_small_values(.false.,wnew,x,ixi^l,ixo^l,
'multi-D finite_volume')
369 if(stagger_grid) snew%ws=sct%ws
373 call addsource2(qdt*dble(idimsmax-idimsmin+1)/dble(ndim),&
374 dtfactor*dble(idimsmax-idimsmin+1)/dble(ndim),&
375 ixi^l,ixo^l,1,nw,qtc,wct,wprim,qt,wnew,x,.false.,active)
382 fc(ixc^s,iw,idims)=half*(flc(ixc^s,iw)+frc(ixc^s,iw))
386 subroutine get_riemann_flux_tvdlf(iws,iwe)
387 integer,
intent(in) :: iws,iwe
390 double precision :: fac(ixC^S),phi
392 fac(ixc^s) = -0.5d0*tvdlfeps*cmaxc(ixc^s,ii)
394 if(flux_energy_only .and. iw /= iw_e)
then
395 fc(ixc^s,iw,idims)=zero
397 fc(ixc^s,iw,idims)=0.5d0*(flc(ixc^s, iw)+frc(ixc^s, iw))
399 if(flux_type(idims, iw) /= flux_no_dissipation)
then
400 if(flux_adaptive_diffusion)
then
401 {
do ix^db=ixcmin^db,ixcmax^db\}
402 jx^d=ix^d+kr(idims,^d)\
410 phi = flux_adaptive_diffusion_min
411 if(((wrc(ix^d,iw)-wlc(ix^d,iw))*(sct%w(jx^d,iw)-sct%w(ix^d,iw))) .gt. 1.d-18)
then
412 phi = max(flux_adaptive_diffusion_min, &
413 min(flux_adaptive_diffusion_scale * &
414 (wrc(ix^d,iw)-wlc(ix^d,iw))**2 / &
415 ((sct%w(jx^d,iw)-sct%w(ix^d,iw))**2 + 1.d-18), one))
419 fc(ix^d,iw,idims)=fc(ix^d,iw,idims)+fac(ix^d)*(wrc(ix^d,iw)-wlc(ix^d,iw))*phi
422 {
do ix^db=ixcmin^db,ixcmax^db\}
423 fc(ix^d,iw,idims)=fc(ix^d,iw,idims)+fac(ix^d)*(wrc(ix^d,iw)-wlc(ix^d,iw))
429 end subroutine get_riemann_flux_tvdlf
431 subroutine get_riemann_flux_hll(iws,iwe)
432 integer,
intent(in) :: iws,iwe
434 double precision :: phi
436 if(flux_adaptive_diffusion)
then
438 if(flux_type(idims, iw) == flux_tvdlf)
then
439 if(stagger_grid)
then
441 fc(ixc^s,iw,idims)=0.d0
443 fc(ixc^s,iw,idims)=-tvdlfeps*half*max(cmaxc(ixc^s,ii),dabs(cminc(ixc^s,ii)))*&
444 (wrc(ixc^s,iw)-wlc(ixc^s,iw))
447 {
do ix^db=ixcmin^db,ixcmax^db\}
448 if(cminc(ix^d,ii) >= zero)
then
449 fc(ix^d,iw,idims)=flc(ix^d,iw)
450 else if(cmaxc(ix^d,ii) <= zero)
then
451 fc(ix^d,iw,idims)=frc(ix^d,iw)
454 phi=max(abs(cmaxc(ix^d,ii)),abs(cminc(ix^d,ii)))/(cmaxc(ix^d,ii)-cminc(ix^d,ii))
455 fc(ix^d,iw,idims)=(cmaxc(ix^d,ii)*flc(ix^d, iw)-cminc(ix^d,ii)*frc(ix^d,iw)&
456 +phi*cminc(ix^d,ii)*cmaxc(ix^d,ii)*(wrc(ix^d,iw)-wlc(ix^d,iw)))&
457 /(cmaxc(ix^d,ii)-cminc(ix^d,ii))
464 if(flux_type(idims, iw) == flux_tvdlf)
then
465 if(stagger_grid)
then
467 fc(ixc^s,iw,idims)=0.d0
469 fc(ixc^s,iw,idims)=-tvdlfeps*half*max(cmaxc(ixc^s,ii),dabs(cminc(ixc^s,ii)))*&
470 (wrc(ixc^s,iw)-wlc(ixc^s,iw))
473 {
do ix^db=ixcmin^db,ixcmax^db\}
474 if(cminc(ix^d,ii) >= zero)
then
475 fc(ix^d,iw,idims)=flc(ix^d,iw)
476 else if(cmaxc(ix^d,ii) <= zero)
then
477 fc(ix^d,iw,idims)=frc(ix^d,iw)
479 fc(ix^d,iw,idims)=(cmaxc(ix^d,ii)*flc(ix^d, iw)-cminc(ix^d,ii)*frc(ix^d,iw)&
480 +cminc(ix^d,ii)*cmaxc(ix^d,ii)*(wrc(ix^d,iw)-wlc(ix^d,iw)))&
481 /(cmaxc(ix^d,ii)-cminc(ix^d,ii))
487 end subroutine get_riemann_flux_hll
489 subroutine get_riemann_flux_hllc(iws,iwe)
490 integer,
intent(in) :: iws, iwe
491 double precision,
dimension(ixI^S,1:nwflux) :: whll, Fhll, fCD
492 double precision,
dimension(ixI^S) :: lambdaCD
494 integer,
dimension(ixI^S) :: patchf
495 integer :: rho_, p_, e_, mom(1:ndir)
498 if (
allocated(iw_mom)) mom(:) = iw_mom(:)
501 if(
associated(phys_hllc_init_species))
then
502 call phys_hllc_init_species(ii, rho_, mom(:), e_)
508 where(cminc(ixc^s,1) >= zero)
510 elsewhere(cmaxc(ixc^s,1) <= zero)
514 if(method==fs_hllcd) &
515 call phys_diffuse_hllcd(ixi^l,ixc^l,idims,wlc,wrc,flc,frc,patchf)
518 if(any(patchf(ixc^s)==1)) &
519 call phys_get_lcd(wlc,wrc,flc,frc,cminc(ixi^s,ii),cmaxc(ixi^s,ii),idims,ixi^l,ixc^l, &
520 whll,fhll,lambdacd,patchf)
523 if(any(abs(patchf(ixc^s))== 1))
then
525 call phys_get_wcd(wlc,wrc,whll,frc,flc,fhll,patchf,lambdacd,&
526 cminc(ixi^s,ii),cmaxc(ixi^s,ii),ixi^l,ixc^l,idims,fcd)
530 if (flux_type(idims, iw) == flux_tvdlf)
then
531 flc(ixc^s,iw)=-tvdlfeps*half*max(cmaxc(ixc^s,ii),abs(cminc(ixc^s,ii))) * &
532 (wrc(ixc^s,iw) - wlc(ixc^s,iw))
534 where(patchf(ixc^s)==-2)
535 flc(ixc^s,iw)=flc(ixc^s,iw)
536 elsewhere(abs(patchf(ixc^s))==1)
537 flc(ixc^s,iw)=fcd(ixc^s,iw)
538 elsewhere(patchf(ixc^s)==2)
539 flc(ixc^s,iw)=frc(ixc^s,iw)
540 elsewhere(patchf(ixc^s)==3)
542 flc(ixc^s,iw)=fhll(ixc^s,iw)
543 elsewhere(patchf(ixc^s)==4)
545 flc(ixc^s,iw) = half*((flc(ixc^s,iw)+frc(ixc^s,iw)) &
546 -tvdlfeps * max(cmaxc(ixc^s,ii), dabs(cminc(ixc^s,ii))) * &
547 (wrc(ixc^s,iw)-wlc(ixc^s,iw)))
551 fc(ixc^s,iw,idims)=flc(ixc^s,iw)
554 end subroutine get_riemann_flux_hllc
557 subroutine get_riemann_flux_hlld(iws,iwe)
558 integer,
intent(in) :: iws, iwe
559 double precision,
dimension(ixI^S,1:nwflux) :: w1R,w1L,w2R,w2L
560 double precision,
dimension(ixI^S) :: sm,s1R,s1L,suR,suL,Bx
561 double precision,
dimension(ixI^S) :: pts,ptR,ptL,signBx,r1L,r1R,tmp
563 double precision,
dimension(ixI^S,ndir) :: BR, BL
564 integer :: ip1,ip2,ip3,idir,ix^D,^C&b^C_,^C&m^C_
565 integer :: rho_, p_, e_, mom(1:ndir), mag(1:ndir)
567 associate(sr=>cmaxc,sl=>cminc)
570 ^c&mom(^c)=iw_mom(^c)\
572 ^c&mag(^c)=iw_mag(^c)\
580 br(ixc^s,:)=wrc(ixc^s,mag(:))+block%B0(ixc^s,:,ip1)
581 bl(ixc^s,:)=wlc(ixc^s,mag(:))+block%B0(ixc^s,:,ip1)
583 br(ixc^s,:)=wrc(ixc^s,mag(:))
584 bl(ixc^s,:)=wlc(ixc^s,mag(:))
586 if(stagger_grid)
then
587 bx(ixc^s)=block%ws(ixc^s,ip1)
591 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))
594 do ix^db=ixcmin^db,ixcmax^db\}
595 ptr(ix^d)=wrp(ix^d,p_)+0.5d0*(^c&br(ix^d,^c)**2+)
596 ptl(ix^d)=wlp(ix^d,p_)+0.5d0*(^c&bl(ix^d,^c)**2+)
597 if(iw_equi_rho>0)
then
598 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))
599 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))
601 sur(ix^d)=(sr(ix^d,ii)-wrp(ix^d,mom(ip1)))*wrc(ix^d,rho_)
602 sul(ix^d)=(sl(ix^d,ii)-wlp(ix^d,mom(ip1)))*wlc(ix^d,rho_)
605 sm(ix^d)=(sur(ix^d)*wrp(ix^d,mom(ip1))-sul(ix^d)*wlp(ix^d,mom(ip1))-&
606 ptr(ix^d)+ptl(ix^d))/(sur(ix^d)-sul(ix^d))
608 w1r(ix^d,mom(ip1))=sm(ix^d)
609 w1l(ix^d,mom(ip1))=sm(ix^d)
610 w2r(ix^d,mom(ip1))=sm(ix^d)
611 w2l(ix^d,mom(ip1))=sm(ix^d)
613 w1r(ix^d,mag(ip1))=bx(ix^d)
614 w1l(ix^d,mag(ip1))=bx(ix^d)
616 ptr(ix^d)=wrp(ix^d,p_)+0.5d0*(^c&wrc(ix^d,b^c_)**2+)
617 ptl(ix^d)=wlp(ix^d,p_)+0.5d0*(^c&wlc(ix^d,b^c_)**2+)
620 w1r(ix^d,rho_)=sur(ix^d)/(sr(ix^d,ii)-sm(ix^d))
621 w1l(ix^d,rho_)=sul(ix^d)/(sl(ix^d,ii)-sm(ix^d))
624 r1r(ix^d)=sur(ix^d)*(sr(ix^d,ii)-sm(ix^d))-bx(ix^d)**2
625 if(r1r(ix^d)/=0.d0) r1r(ix^d)=1.d0/r1r(ix^d)
626 r1l(ix^d)=sul(ix^d)*(sl(ix^d,ii)-sm(ix^d))-bx(ix^d)**2
627 if(r1l(ix^d)/=0.d0) r1l(ix^d)=1.d0/r1l(ix^d)
629 w1r(ix^d,mom(ip2))=wrp(ix^d,mom(ip2))-bx(ix^d)*br(ix^d,ip2)*&
630 (sm(ix^d)-wrp(ix^d,mom(ip1)))*r1r(ix^d)
631 w1l(ix^d,mom(ip2))=wlp(ix^d,mom(ip2))-bx(ix^d)*bl(ix^d,ip2)*&
632 (sm(ix^d)-wlp(ix^d,mom(ip1)))*r1l(ix^d)
634 w1r(ix^d,mag(ip2))=(sur(ix^d)*(sr(ix^d,ii)-wrp(ix^d,mom(ip1)))-bx(ix^d)**2)*r1r(ix^d)
635 w1l(ix^d,mag(ip2))=(sul(ix^d)*(sl(ix^d,ii)-wlp(ix^d,mom(ip1)))-bx(ix^d)**2)*r1l(ix^d)
640 w1r(ix^d,mom(ip3))=wrp(ix^d,mom(ip3))-bx(ix^d)*br(ix^d,ip3)*&
641 (sm(ix^d)-wrp(ix^d,mom(ip1)))*r1r(ix^d)
642 w1l(ix^d,mom(ip3))=wlp(ix^d,mom(ip3))-bx(ix^d)*bl(ix^d,ip3)*&
643 (sm(ix^d)-wlp(ix^d,mom(ip1)))*r1l(ix^d)
645 w1r(ix^d,mag(ip3))=br(ix^d,ip3)*w1r(ix^d,mag(ip2))
646 w1l(ix^d,mag(ip3))=bl(ix^d,ip3)*w1l(ix^d,mag(ip2))
649 w1r(ix^d,mag(ip2))=br(ix^d,ip2)*w1r(ix^d,mag(ip2))
650 w1l(ix^d,mag(ip2))=bl(ix^d,ip2)*w1l(ix^d,mag(ip2))
653 ^c&w1r(ix^d,b^c_)=w1r(ix^d,b^c_)-block%B0(ix^d,^c,ip1)\
654 ^c&w1l(ix^d,b^c_)=w1l(ix^d,b^c_)-block%B0(ix^d,^c,ip1)\
659 w1r(ix^d,p_)=sur(ix^d)*(sm(ix^d)-wrp(ix^d,mom(ip1)))+ptr(ix^d)
660 w1l(ix^d,p_)=w1r(ix^d,p_)
663 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_))+)
664 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_))+)
667 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))+&
668 w1r(ix^d,p_)*sm(ix^d)+bx(ix^d)*((^c&wrp(ix^d,m^c_)*wrc(ix^d,b^c_)+)-&
669 (^c&w1r(ix^d,m^c_)*w1r(ix^d,b^c_)+)))/(sr(ix^d,ii)-sm(ix^d))
670 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))+&
671 w1l(ix^d,p_)*sm(ix^d)+bx(ix^d)*((^c&wlp(ix^d,m^c_)*wlc(ix^d,b^c_)+)-&
672 (^c&w1l(ix^d,m^c_)*w1l(ix^d,b^c_)+)))/(sl(ix^d,ii)-sm(ix^d))
675 w1r(ix^d,e_)=w1r(ix^d,e_)+((^c&w1r(ix^d,b^c_)*block%B0(ix^d,^c,ip1)+)*sm(ix^d)-&
676 (^c&wrc(ix^d,b^c_)*block%B0(ix^d,^c,ip1)+)*wrp(ix^d,mom(ip1)))/(sr(ix^d,ii)-sm(ix^d))
677 w1l(ix^d,e_)=w1l(ix^d,e_)+((^c&w1l(ix^d,b^c_)*block%B0(ix^d,^c,ip1)+)*sm(ix^d)-&
678 (^c&wlc(ix^d,b^c_)*block%B0(ix^d,^c,ip1)+)*wlp(ix^d,mom(ip1)))/(sl(ix^d,ii)-sm(ix^d))
681 w1r(ix^d,e_)=w1r(ix^d,e_)+1d0/(phys_gamma-1)*block%equi_vars(ix^d,iw_equi_p,ip1)*&
682 (sm(ix^d)-wrp(ix^d,mom(ip1)))/(sr(ix^d,ii)-sm(ix^d))
683 w1l(ix^d,e_)=w1l(ix^d,e_)+1d0/(phys_gamma-1)*block%equi_vars(ix^d,iw_equi_p,ip1)*&
684 (sm(ix^d)-wlp(ix^d,mom(ip1)))/(sl(ix^d,ii)-sm(ix^d))
689 w2r(ix^d,rho_)=w1r(ix^d,rho_)
690 w2l(ix^d,rho_)=w1l(ix^d,rho_)
691 w2r(ix^d,mag(ip1))=w1r(ix^d,mag(ip1))
692 w2l(ix^d,mag(ip1))=w1l(ix^d,mag(ip1))
693 r1r(ix^d)=sqrt(w1r(ix^d,rho_))
694 r1l(ix^d)=sqrt(w1l(ix^d,rho_))
695 tmp(ix^d)=1.d0/(r1r(ix^d)+r1l(ix^d))
696 signbx(ix^d)=sign(1.d0,bx(ix^d))
698 s1r(ix^d)=sm(ix^d)+abs(bx(ix^d))/r1r(ix^d)
699 s1l(ix^d)=sm(ix^d)-abs(bx(ix^d))/r1l(ix^d)
701 w2r(ix^d,mom(ip2))=(r1l(ix^d)*w1l(ix^d,mom(ip2))+r1r(ix^d)*w1r(ix^d,mom(ip2))+&
702 (w1r(ix^d,mag(ip2))-w1l(ix^d,mag(ip2)))*signbx(ix^d))*tmp(ix^d)
703 w2l(ix^d,mom(ip2))=w2r(ix^d,mom(ip2))
705 w2r(ix^d,mag(ip2))=(r1l(ix^d)*w1r(ix^d,mag(ip2))+r1r(ix^d)*w1l(ix^d,mag(ip2))+&
706 r1l(ix^d)*r1r(ix^d)*(w1r(ix^d,mom(ip2))-w1l(ix^d,mom(ip2)))*signbx(ix^d))*tmp(ix^d)
707 w2l(ix^d,mag(ip2))=w2r(ix^d,mag(ip2))
710 w2r(ix^d,mom(ip3))=(r1l(ix^d)*w1l(ix^d,mom(ip3))+r1r(ix^d)*w1r(ix^d,mom(ip3))+&
711 (w1r(ix^d,mag(ip3))-w1l(ix^d,mag(ip3)))*signbx(ix^d))*tmp(ix^d)
712 w2l(ix^d,mom(ip3))=w2r(ix^d,mom(ip3))
714 w2r(ix^d,mag(ip3))=(r1l(ix^d)*w1r(ix^d,mag(ip3))+r1r(ix^d)*w1l(ix^d,mag(ip3))+&
715 r1l(ix^d)*r1r(ix^d)*(w1r(ix^d,mom(ip3))-w1l(ix^d,mom(ip3)))*signbx(ix^d))*tmp(ix^d)
716 w2l(ix^d,mag(ip3))=w2r(ix^d,mag(ip3))
720 w2r(ix^d,e_)=w1r(ix^d,e_)+r1r(ix^d)*((^c&w1r(ix^d,m^c_)*w1r(ix^d,b^c_)+)-&
721 (^c&w2r(ix^d,m^c_)*w2r(ix^d,b^c_)+))*signbx(ix^d)
722 w2l(ix^d,e_)=w1l(ix^d,e_)-r1l(ix^d)*((^c&w1l(ix^d,m^c_)*w1l(ix^d,b^c_)+)-&
723 (^c&w2l(ix^d,m^c_)*w2l(ix^d,b^c_)+))*signbx(ix^d)
727 ^c&w1r(ix^d,m^c_)=w1r(ix^d,m^c_)*w1r(ix^d,rho_)\
728 ^c&w1l(ix^d,m^c_)=w1l(ix^d,m^c_)*w1l(ix^d,rho_)\
729 ^c&w2r(ix^d,m^c_)=w2r(ix^d,m^c_)*w2r(ix^d,rho_)\
730 ^c&w2l(ix^d,m^c_)=w2l(ix^d,m^c_)*w2l(ix^d,rho_)\
731 if(iw_equi_rho>0)
then
732 w1r(ix^d,rho_)=w1r(ix^d,rho_)-block%equi_vars(ix^d,iw_equi_rho,ip1)
733 w1l(ix^d,rho_)=w1l(ix^d,rho_)-block%equi_vars(ix^d,iw_equi_rho,ip1)
734 w2r(ix^d,rho_)=w2r(ix^d,rho_)-block%equi_vars(ix^d,iw_equi_rho,ip1)
735 w2l(ix^d,rho_)=w2l(ix^d,rho_)-block%equi_vars(ix^d,iw_equi_rho,ip1)
740 if(flux_type(idims, iw)==flux_special)
then
743 do ix^db=ixcmin^db,ixcmax^db\}
744 fc(ix^d,iw,ip1)=flc(ix^d,iw)
746 else if(flux_type(idims, iw)==flux_hll)
then
749 do ix^db=ixcmin^db,ixcmax^db\}
750 fc(ix^d,iw,ip1)=(sr(ix^d,ii)*flc(ix^d,iw)-sl(ix^d,ii)*frc(ix^d,iw) &
751 +sr(ix^d,ii)*sl(ix^d,ii)*(wrc(ix^d,iw)-wlc(ix^d,iw)))/(sr(ix^d,ii)-sl(ix^d,ii))
758 do ix^db=ixcmin^db,ixcmax^db\}
759 if(sl(ix^d,ii)>0.d0)
then
760 fc(ix^d,iw,ip1)=flc(ix^d,iw)
761 else if(s1l(ix^d)>=0.d0)
then
762 fc(ix^d,iw,ip1)=flc(ix^d,iw)+sl(ix^d,ii)*(w1l(ix^d,iw)-wlc(ix^d,iw))
763 else if(sm(ix^d)>=0.d0)
then
764 fc(ix^d,iw,ip1)=flc(ix^d,iw)+sl(ix^d,ii)*(w1l(ix^d,iw)-wlc(ix^d,iw))+&
765 s1l(ix^d)*(w2l(ix^d,iw)-w1l(ix^d,iw))
766 else if(s1r(ix^d)>=0.d0)
then
767 fc(ix^d,iw,ip1)=frc(ix^d,iw)+sr(ix^d,ii)*(w1r(ix^d,iw)-wrc(ix^d,iw))+&
768 s1r(ix^d)*(w2r(ix^d,iw)-w1r(ix^d,iw))
769 else if(sr(ix^d,ii)>=0.d0)
then
770 fc(ix^d,iw,ip1)=frc(ix^d,iw)+sr(ix^d,ii)*(w1r(ix^d,iw)-wrc(ix^d,iw))
771 else if(sr(ix^d,ii)<0.d0)
then
772 fc(ix^d,iw,ip1)=frc(ix^d,iw)
779 end subroutine get_riemann_flux_hlld
783 subroutine get_riemann_flux_hlld_mag2(iws,iwe)
785 integer,
intent(in) :: iws, iwe
787 double precision,
dimension(ixI^S,1:nwflux) :: w1R,w1L,f1R,f1L,f2R,f2L
788 double precision,
dimension(ixI^S,1:nwflux) :: w2R,w2L
789 double precision,
dimension(ixI^S) :: sm,s1R,s1L,suR,suL,Bx
790 double precision,
dimension(ixI^S) :: pts,ptR,ptL,signBx,r1L,r1R,tmp
792 double precision,
dimension(ixI^S,ndir) :: vRC, vLC
794 double precision,
dimension(ixI^S,ndir) :: BR, BL
795 integer :: ip1,ip2,ip3,idir,ix^D
796 double precision :: phiPres, thetaSM, du, dv, dw
797 integer :: ixV^L, ixVb^L, ixVc^L, ixVd^L, ixVe^L, ixVf^L
798 integer :: rho_, p_, e_, mom(1:ndir), mag(1:ndir)
799 double precision,
parameter :: aParam = 4d0
807 associate(sr=>cmaxc,sl=>cminc)
814 vrc(ixc^s,:)=wrp(ixc^s,mom(:))
815 vlc(ixc^s,:)=wlp(ixc^s,mom(:))
818 call get_hlld2_modif_c(wlp,x,ixi^l,ixo^l,s1l)
819 call get_hlld2_modif_c(wrp,x,ixi^l,ixo^l,s1r)
821 phipres = min(1d0, maxval(max(s1l(ixo^s),s1r(ixo^s)))/maxval(cmaxc(ixo^s,1)))
822 phipres = phipres*(2d0 - phipres)
829 du = minval(wprim(ixv^s,mom(1))-wprim(ixo^s,mom(1)))
865 dv = minval(min(wprim(ixo^s,mom(2))-wprim(ixv^s,mom(2)),&
866 wprim(ixvb^s,mom(2))-wprim(ixo^s,mom(2)),&
867 wprim(ixvc^s,mom(2))-wprim(ixvd^s,mom(2)),&
868 wprim(ixve^s,mom(2))-wprim(ixvc^s,mom(2))&
902 dw = minval(min(wprim(ixo^s,mom(3))-wprim(ixv^s,mom(3)),&
903 wprim(ixvb^s,mom(3))-wprim(ixo^s,mom(3)),&
904 wprim(ixvc^s,mom(3))-wprim(ixvd^s,mom(3)),&
905 wprim(ixve^s,mom(3))-wprim(ixvc^s,mom(3))&
908 thetasm = maxval(cmaxc(ixo^s,1))
910 thetasm = (min(1d0, (thetasm-du)/(thetasm-min(dv,dw))))**aparam
913 br(ixc^s,:)=wrc(ixc^s,mag(:))+block%B0(ixc^s,:,ip1)
914 bl(ixc^s,:)=wlc(ixc^s,mag(:))+block%B0(ixc^s,:,ip1)
916 br(ixc^s,:)=wrc(ixc^s,mag(:))
917 bl(ixc^s,:)=wlc(ixc^s,mag(:))
920 bx(ixc^s)=(sr(ixc^s,index_v_mag)*br(ixc^s,ip1)-sl(ixc^s,index_v_mag)*bl(ixc^s,ip1)-&
921 flc(ixc^s,mag(ip1))-frc(ixc^s,mag(ip1)))/(sr(ixc^s,index_v_mag)-sl(ixc^s,index_v_mag))
922 ptr(ixc^s)=wrp(ixc^s,p_)+0.5d0*sum(br(ixc^s,:)**2,dim=ndim+1)
923 ptl(ixc^s)=wlp(ixc^s,p_)+0.5d0*sum(bl(ixc^s,:)**2,dim=ndim+1)
924 sur(ixc^s)=(sr(ixc^s,index_v_mag)-vrc(ixc^s,ip1))*wrc(ixc^s,rho_)
925 sul(ixc^s)=(sl(ixc^s,index_v_mag)-vlc(ixc^s,ip1))*wlc(ixc^s,rho_)
927 sm(ixc^s)=(sur(ixc^s)*vrc(ixc^s,ip1)-sul(ixc^s)*vlc(ixc^s,ip1)-&
928 thetasm*(ptr(ixc^s)-ptl(ixc^s)) )/(sur(ixc^s)-sul(ixc^s))
930 w1r(ixc^s,mom(ip1))=sm(ixc^s)
931 w1l(ixc^s,mom(ip1))=sm(ixc^s)
932 w2r(ixc^s,mom(ip1))=sm(ixc^s)
933 w2l(ixc^s,mom(ip1))=sm(ixc^s)
935 w1r(ixc^s,mag(ip1))=bx(ixc^s)
936 w1l(ixc^s,mag(ip1))=bx(ixc^s)
938 ptr(ixc^s)=wrp(ixc^s,p_)+0.5d0*sum(wrc(ixc^s,mag(:))**2,dim=ndim+1)
939 ptl(ixc^s)=wlp(ixc^s,p_)+0.5d0*sum(wlc(ixc^s,mag(:))**2,dim=ndim+1)
943 w1r(ixc^s,rho_)=sur(ixc^s)/(sr(ixc^s,index_v_mag)-sm(ixc^s))
944 w1l(ixc^s,rho_)=sul(ixc^s)/(sl(ixc^s,index_v_mag)-sm(ixc^s))
948 r1r(ixc^s)=sur(ixc^s)*(sr(ixc^s,index_v_mag)-sm(ixc^s))-bx(ixc^s)**2
949 where(r1r(ixc^s)/=0.d0)
950 r1r(ixc^s)=1.d0/r1r(ixc^s)
952 r1l(ixc^s)=sul(ixc^s)*(sl(ixc^s,index_v_mag)-sm(ixc^s))-bx(ixc^s)**2
953 where(r1l(ixc^s)/=0.d0)
954 r1l(ixc^s)=1.d0/r1l(ixc^s)
957 w1r(ixc^s,mom(ip2))=vrc(ixc^s,ip2)-bx(ixc^s)*br(ixc^s,ip2)*&
958 (sm(ixc^s)-vrc(ixc^s,ip1))*r1r(ixc^s)
959 w1l(ixc^s,mom(ip2))=vlc(ixc^s,ip2)-bx(ixc^s)*bl(ixc^s,ip2)*&
960 (sm(ixc^s)-vlc(ixc^s,ip1))*r1l(ixc^s)
962 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)
963 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)
968 w1r(ixc^s,mom(ip3))=vrc(ixc^s,ip3)-bx(ixc^s)*br(ixc^s,ip3)*&
969 (sm(ixc^s)-vrc(ixc^s,ip1))*r1r(ixc^s)
970 w1l(ixc^s,mom(ip3))=vlc(ixc^s,ip3)-bx(ixc^s)*bl(ixc^s,ip3)*&
971 (sm(ixc^s)-vlc(ixc^s,ip1))*r1l(ixc^s)
973 w1r(ixc^s,mag(ip3))=br(ixc^s,ip3)*w1r(ixc^s,mag(ip2))
974 w1l(ixc^s,mag(ip3))=bl(ixc^s,ip3)*w1l(ixc^s,mag(ip2))
977 w1r(ixc^s,mag(ip2))=br(ixc^s,ip2)*w1r(ixc^s,mag(ip2))
978 w1l(ixc^s,mag(ip2))=bl(ixc^s,ip2)*w1l(ixc^s,mag(ip2))
981 w1r(ixc^s,mag(:))=w1r(ixc^s,mag(:))-block%B0(ixc^s,:,ip1)
982 w1l(ixc^s,mag(:))=w1l(ixc^s,mag(:))-block%B0(ixc^s,:,ip1)
987 w1r(ixc^s,p_)=(sur(ixc^s)*ptl(ixc^s) - sul(ixc^s)*ptr(ixc^s) +&
988 phipres * sur(ixc^s)*sul(ixc^s)*(vrc(ixc^s,ip1)-vlc(ixc^s,ip1)))/&
989 (sur(ixc^s)-sul(ixc^s))
990 w1l(ixc^s,p_)=w1r(ixc^s,p_)
993 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)
994 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)
997 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)+&
998 w1r(ixc^s,p_)*sm(ixc^s)+bx(ixc^s)*(sum(vrc(ixc^s,:)*wrc(ixc^s,mag(:)),dim=ndim+1)-&
999 sum(w1r(ixc^s,mom(:))*w1r(ixc^s,mag(:)),dim=ndim+1)))/(sr(ixc^s,index_v_mag)-sm(ixc^s))
1000 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)+&
1001 w1l(ixc^s,p_)*sm(ixc^s)+bx(ixc^s)*(sum(vlc(ixc^s,:)*wlc(ixc^s,mag(:)),dim=ndim+1)-&
1002 sum(w1l(ixc^s,mom(:))*w1l(ixc^s,mag(:)),dim=ndim+1)))/(sl(ixc^s,index_v_mag)-sm(ixc^s))
1005 w1r(ixc^s,e_)=w1r(ixc^s,e_)+(sum(w1r(ixc^s,mag(:))*block%B0(ixc^s,:,ip1),dim=ndim+1)*sm(ixc^s)-&
1006 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))
1007 w1l(ixc^s,e_)=w1l(ixc^s,e_)+(sum(w1l(ixc^s,mag(:))*block%B0(ixc^s,:,ip1),dim=ndim+1)*sm(ixc^s)-&
1008 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))
1013 w2r(ixc^s,rho_)=w1r(ixc^s,rho_)
1014 w2l(ixc^s,rho_)=w1l(ixc^s,rho_)
1015 w2r(ixc^s,mag(ip1))=w1r(ixc^s,mag(ip1))
1016 w2l(ixc^s,mag(ip1))=w1l(ixc^s,mag(ip1))
1018 r1r(ixc^s)=sqrt(w1r(ixc^s,rho_))
1019 r1l(ixc^s)=sqrt(w1l(ixc^s,rho_))
1020 tmp(ixc^s)=1.d0/(r1r(ixc^s)+r1l(ixc^s))
1021 signbx(ixc^s)=sign(1.d0,bx(ixc^s))
1023 s1r(ixc^s)=sm(ixc^s)+abs(bx(ixc^s))/r1r(ixc^s)
1024 s1l(ixc^s)=sm(ixc^s)-abs(bx(ixc^s))/r1l(ixc^s)
1026 w2r(ixc^s,mom(ip2))=(r1l(ixc^s)*w1l(ixc^s,mom(ip2))+r1r(ixc^s)*w1r(ixc^s,mom(ip2))+&
1027 (w1r(ixc^s,mag(ip2))-w1l(ixc^s,mag(ip2)))*signbx(ixc^s))*tmp(ixc^s)
1028 w2l(ixc^s,mom(ip2))=w2r(ixc^s,mom(ip2))
1030 w2r(ixc^s,mag(ip2))=(r1l(ixc^s)*w1r(ixc^s,mag(ip2))+r1r(ixc^s)*w1l(ixc^s,mag(ip2))+&
1031 r1l(ixc^s)*r1r(ixc^s)*(w1r(ixc^s,mom(ip2))-w1l(ixc^s,mom(ip2)))*signbx(ixc^s))*tmp(ixc^s)
1032 w2l(ixc^s,mag(ip2))=w2r(ixc^s,mag(ip2))
1035 w2r(ixc^s,mom(ip3))=(r1l(ixc^s)*w1l(ixc^s,mom(ip3))+r1r(ixc^s)*w1r(ixc^s,mom(ip3))+&
1036 (w1r(ixc^s,mag(ip3))-w1l(ixc^s,mag(ip3)))*signbx(ixc^s))*tmp(ixc^s)
1037 w2l(ixc^s,mom(ip3))=w2r(ixc^s,mom(ip3))
1039 w2r(ixc^s,mag(ip3))=(r1l(ixc^s)*w1r(ixc^s,mag(ip3))+r1r(ixc^s)*w1l(ixc^s,mag(ip3))+&
1040 r1l(ixc^s)*r1r(ixc^s)*(w1r(ixc^s,mom(ip3))-w1l(ixc^s,mom(ip3)))*signbx(ixc^s))*tmp(ixc^s)
1041 w2l(ixc^s,mag(ip3))=w2r(ixc^s,mag(ip3))
1044 if(phys_energy)
then
1045 w2r(ixc^s,e_)=w1r(ixc^s,e_)+r1r(ixc^s)*(sum(w1r(ixc^s,mom(:))*w1r(ixc^s,mag(:)),dim=ndim+1)-&
1046 sum(w2r(ixc^s,mom(:))*w2r(ixc^s,mag(:)),dim=ndim+1))*signbx(ixc^s)
1047 w2l(ixc^s,e_)=w1l(ixc^s,e_)-r1l(ixc^s)*(sum(w1l(ixc^s,mom(:))*w1l(ixc^s,mag(:)),dim=ndim+1)-&
1048 sum(w2l(ixc^s,mom(:))*w2l(ixc^s,mag(:)),dim=ndim+1))*signbx(ixc^s)
1053 w1r(ixc^s,mom(idir))=w1r(ixc^s,mom(idir))*w1r(ixc^s,rho_)
1054 w1l(ixc^s,mom(idir))=w1l(ixc^s,mom(idir))*w1l(ixc^s,rho_)
1055 w2r(ixc^s,mom(idir))=w2r(ixc^s,mom(idir))*w2r(ixc^s,rho_)
1056 w2l(ixc^s,mom(idir))=w2l(ixc^s,mom(idir))*w2l(ixc^s,rho_)
1062 if(stagger_grid .and. flux_type(idims, iw) == flux_tvdlf) cycle
1063 if(flux_type(idims, iw) == flux_special)
then
1065 f1l(ixc^s,iw)=flc(ixc^s,iw)
1066 f1r(ixc^s,iw)=f1l(ixc^s,iw)
1067 f2l(ixc^s,iw)=f1l(ixc^s,iw)
1068 f2r(ixc^s,iw)=f1l(ixc^s,iw)
1069 else if(flux_type(idims, iw) == flux_hll)
then
1071 f1l(ixc^s,iw)=(sr(ixc^s,index_v_mag)*flc(ixc^s, iw)-sl(ixc^s,index_v_mag)*frc(ixc^s, iw) &
1072 +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))
1073 f1r(ixc^s,iw)=f1l(ixc^s,iw)
1074 f2l(ixc^s,iw)=f1l(ixc^s,iw)
1075 f2r(ixc^s,iw)=f1l(ixc^s,iw)
1077 f1l(ixc^s,iw)=flc(ixc^s,iw)+sl(ixc^s,index_v_mag)*(w1l(ixc^s,iw)-wlc(ixc^s,iw))
1078 f1r(ixc^s,iw)=frc(ixc^s,iw)+sr(ixc^s,index_v_mag)*(w1r(ixc^s,iw)-wrc(ixc^s,iw))
1079 f2l(ixc^s,iw)=f1l(ixc^s,iw)+s1l(ixc^s)*(w2l(ixc^s,iw)-w1l(ixc^s,iw))
1080 f2r(ixc^s,iw)=f1r(ixc^s,iw)+s1r(ixc^s)*(w2r(ixc^s,iw)-w1r(ixc^s,iw))
1085 {
do ix^db=ixcmin^db,ixcmax^db\}
1086 if(sl(ix^d,index_v_mag)>0.d0)
then
1087 fc(ix^d,iws:iwe,ip1)=flc(ix^d,iws:iwe)
1088 else if(s1l(ix^d)>=0.d0)
then
1089 fc(ix^d,iws:iwe,ip1)=f1l(ix^d,iws:iwe)
1090 else if(sm(ix^d)>=0.d0)
then
1091 fc(ix^d,iws:iwe,ip1)=f2l(ix^d,iws:iwe)
1092 else if(s1r(ix^d)>=0.d0)
then
1093 fc(ix^d,iws:iwe,ip1)=f2r(ix^d,iws:iwe)
1094 else if(sr(ix^d,index_v_mag)>=0.d0)
then
1095 fc(ix^d,iws:iwe,ip1)=f1r(ix^d,iws:iwe)
1096 else if(sr(ix^d,index_v_mag)<0.d0)
then
1097 fc(ix^d,iws:iwe,ip1)=frc(ix^d,iws:iwe)
1102 end subroutine get_riemann_flux_hlld_mag2
1105 subroutine get_hlld2_modif_c(w,x,ixI^L,ixO^L,csound)
1108 integer,
intent(in) :: ixI^L, ixO^L
1109 double precision,
intent(in) :: w(ixI^S, nw), x(ixI^S,1:ndim)
1110 double precision,
intent(out):: csound(ixI^S)
1111 double precision :: cfast2(ixI^S), AvMinCs2(ixI^S), b2(ixI^S), kmax
1112 double precision :: inv_rho(ixO^S), gamma_A2(ixO^S)
1113 integer :: rho_, p_, e_, mom(1:ndir), mag(1:ndir)
1121 inv_rho=1.d0/w(ixo^s,rho_)
1126 b2(ixo^s) = sum((w(ixo^s, mag(:))+
block%B0(ixo^s,:,
b0i))**2, dim=ndim+1)
1128 b2(ixo^s) = sum(w(ixo^s, mag(:))**2, dim=ndim+1)
1133 avmincs2= w(ixo^s, mag(idims))+
block%B0(ixo^s,idims,
b0i)
1135 avmincs2= w(ixo^s, mag(idims))
1139 csound(ixo^s) = sum(w(ixo^s, mom(:))**2, dim=ndim+1)
1141 cfast2(ixo^s) = b2(ixo^s) * inv_rho+csound(ixo^s)
1142 avmincs2(ixo^s) = cfast2(ixo^s)**2-4.0d0*csound(ixo^s) &
1143 * avmincs2(ixo^s)**2 &
1146 where(avmincs2(ixo^s)<zero)
1147 avmincs2(ixo^s)=zero
1150 avmincs2(ixo^s)=sqrt(avmincs2(ixo^s))
1152 csound(ixo^s) = sqrt(half*(cfast2(ixo^s)+avmincs2(ixo^s)))
1154 end subroutine get_hlld2_modif_c