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 fc(ixc^s,iw,idims)=0.5d0*(flc(ixc^s, iw)+frc(ixc^s, iw))
358 if(flux_type(idims, iw) /= flux_no_dissipation)
then
359 if(flux_adaptive_diffusion)
then
360 {
do ix^db=ixcmin^db,ixcmax^db\}
361 jx^d=ix^d+kr(idims,^d)\
364 if(((wrc(ix^d,iw)-wlc(ix^d,iw))*(sct%w(jx^d,iw)-sct%w(ix^d,iw))) .gt. 1.e-18)
then
365 phi=min((wrc(ix^d,iw)-wlc(ix^d,iw))**2/((sct%w(jx^d,iw)-sct%w(ix^d,iw))**2+1.e-18),one)
369 fc(ix^d,iw,idims)=fc(ix^d,iw,idims)+fac(ix^d)*(wrc(ix^d,iw)-wlc(ix^d,iw))*phi
372 {
do ix^db=ixcmin^db,ixcmax^db\}
373 fc(ix^d,iw,idims)=fc(ix^d,iw,idims)+fac(ix^d)*(wrc(ix^d,iw)-wlc(ix^d,iw))
379 end subroutine get_riemann_flux_tvdlf
381 subroutine get_riemann_flux_hll(iws,iwe)
382 integer,
intent(in) :: iws,iwe
384 double precision :: phi
386 if(flux_adaptive_diffusion)
then
388 if(flux_type(idims, iw) == flux_tvdlf)
then
389 if(stagger_grid)
then
391 fc(ixc^s,iw,idims)=0.d0
393 fc(ixc^s,iw,idims)=-tvdlfeps*half*max(cmaxc(ixc^s,ii),dabs(cminc(ixc^s,ii)))*&
394 (wrc(ixc^s,iw)-wlc(ixc^s,iw))
397 {
do ix^db=ixcmin^db,ixcmax^db\}
398 if(cminc(ix^d,ii) >= zero)
then
399 fc(ix^d,iw,idims)=flc(ix^d,iw)
400 else if(cmaxc(ix^d,ii) <= zero)
then
401 fc(ix^d,iw,idims)=frc(ix^d,iw)
404 phi=max(abs(cmaxc(ix^d,ii)),abs(cminc(ix^d,ii)))/(cmaxc(ix^d,ii)-cminc(ix^d,ii))
405 fc(ix^d,iw,idims)=(cmaxc(ix^d,ii)*flc(ix^d, iw)-cminc(ix^d,ii)*frc(ix^d,iw)&
406 +phi*cminc(ix^d,ii)*cmaxc(ix^d,ii)*(wrc(ix^d,iw)-wlc(ix^d,iw)))&
407 /(cmaxc(ix^d,ii)-cminc(ix^d,ii))
414 if(flux_type(idims, iw) == flux_tvdlf)
then
415 if(stagger_grid)
then
417 fc(ixc^s,iw,idims)=0.d0
419 fc(ixc^s,iw,idims)=-tvdlfeps*half*max(cmaxc(ixc^s,ii),dabs(cminc(ixc^s,ii)))*&
420 (wrc(ixc^s,iw)-wlc(ixc^s,iw))
423 {
do ix^db=ixcmin^db,ixcmax^db\}
424 if(cminc(ix^d,ii) >= zero)
then
425 fc(ix^d,iw,idims)=flc(ix^d,iw)
426 else if(cmaxc(ix^d,ii) <= zero)
then
427 fc(ix^d,iw,idims)=frc(ix^d,iw)
429 fc(ix^d,iw,idims)=(cmaxc(ix^d,ii)*flc(ix^d, iw)-cminc(ix^d,ii)*frc(ix^d,iw)&
430 +cminc(ix^d,ii)*cmaxc(ix^d,ii)*(wrc(ix^d,iw)-wlc(ix^d,iw)))&
431 /(cmaxc(ix^d,ii)-cminc(ix^d,ii))
437 end subroutine get_riemann_flux_hll
439 subroutine get_riemann_flux_hllc(iws,iwe)
440 integer,
intent(in) :: iws, iwe
441 double precision,
dimension(ixI^S,1:nwflux) :: whll, Fhll, fCD
442 double precision,
dimension(ixI^S) :: lambdaCD
444 integer,
dimension(ixI^S) :: patchf
445 integer :: rho_, p_, e_, mom(1:ndir)
448 if (
allocated(iw_mom)) mom(:) = iw_mom(:)
451 if(
associated(phys_hllc_init_species))
then
452 call phys_hllc_init_species(ii, rho_, mom(:), e_)
458 where(cminc(ixc^s,1) >= zero)
460 elsewhere(cmaxc(ixc^s,1) <= zero)
464 if(method==fs_hllcd) &
465 call phys_diffuse_hllcd(ixi^l,ixc^l,idims,wlc,wrc,flc,frc,patchf)
468 if(any(patchf(ixc^s)==1)) &
469 call phys_get_lcd(wlc,wrc,flc,frc,cminc(ixi^s,ii),cmaxc(ixi^s,ii),idims,ixi^l,ixc^l, &
470 whll,fhll,lambdacd,patchf)
473 if(any(abs(patchf(ixc^s))== 1))
then
475 call phys_get_wcd(wlc,wrc,whll,frc,flc,fhll,patchf,lambdacd,&
476 cminc(ixi^s,ii),cmaxc(ixi^s,ii),ixi^l,ixc^l,idims,fcd)
480 if (flux_type(idims, iw) == flux_tvdlf)
then
481 flc(ixc^s,iw)=-tvdlfeps*half*max(cmaxc(ixc^s,ii),abs(cminc(ixc^s,ii))) * &
482 (wrc(ixc^s,iw) - wlc(ixc^s,iw))
484 where(patchf(ixc^s)==-2)
485 flc(ixc^s,iw)=flc(ixc^s,iw)
486 elsewhere(abs(patchf(ixc^s))==1)
487 flc(ixc^s,iw)=fcd(ixc^s,iw)
488 elsewhere(patchf(ixc^s)==2)
489 flc(ixc^s,iw)=frc(ixc^s,iw)
490 elsewhere(patchf(ixc^s)==3)
492 flc(ixc^s,iw)=fhll(ixc^s,iw)
493 elsewhere(patchf(ixc^s)==4)
495 flc(ixc^s,iw) = half*((flc(ixc^s,iw)+frc(ixc^s,iw)) &
496 -tvdlfeps * max(cmaxc(ixc^s,ii), dabs(cminc(ixc^s,ii))) * &
497 (wrc(ixc^s,iw)-wlc(ixc^s,iw)))
501 fc(ixc^s,iw,idims)=flc(ixc^s,iw)
504 end subroutine get_riemann_flux_hllc
507 subroutine get_riemann_flux_hlld(iws,iwe)
508 integer,
intent(in) :: iws, iwe
509 double precision,
dimension(ixI^S,1:nwflux) :: w1R,w1L,w2R,w2L
510 double precision,
dimension(ixI^S) :: sm,s1R,s1L,suR,suL,Bx
511 double precision,
dimension(ixI^S) :: pts,ptR,ptL,signBx,r1L,r1R,tmp
513 double precision,
dimension(ixI^S,ndir) :: BR, BL
514 integer :: ip1,ip2,ip3,idir,ix^D,^C&b^C_,^C&m^C_
515 integer :: rho_, p_, e_, mom(1:ndir), mag(1:ndir)
517 associate(sr=>cmaxc,sl=>cminc)
520 ^c&mom(^c)=iw_mom(^c)\
522 ^c&mag(^c)=iw_mag(^c)\
530 br(ixc^s,:)=wrc(ixc^s,mag(:))+block%B0(ixc^s,:,ip1)
531 bl(ixc^s,:)=wlc(ixc^s,mag(:))+block%B0(ixc^s,:,ip1)
533 br(ixc^s,:)=wrc(ixc^s,mag(:))
534 bl(ixc^s,:)=wlc(ixc^s,mag(:))
536 if(stagger_grid)
then
537 bx(ixc^s)=block%ws(ixc^s,ip1)
541 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))
544 do ix^db=ixcmin^db,ixcmax^db\}
545 ptr(ix^d)=wrp(ix^d,p_)+0.5d0*(^c&br(ix^d,^c)**2+)
546 ptl(ix^d)=wlp(ix^d,p_)+0.5d0*(^c&bl(ix^d,^c)**2+)
547 if(iw_equi_rho>0)
then
548 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))
549 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))
551 sur(ix^d)=(sr(ix^d,ii)-wrp(ix^d,mom(ip1)))*wrc(ix^d,rho_)
552 sul(ix^d)=(sl(ix^d,ii)-wlp(ix^d,mom(ip1)))*wlc(ix^d,rho_)
555 sm(ix^d)=(sur(ix^d)*wrp(ix^d,mom(ip1))-sul(ix^d)*wlp(ix^d,mom(ip1))-&
556 ptr(ix^d)+ptl(ix^d))/(sur(ix^d)-sul(ix^d))
558 w1r(ix^d,mom(ip1))=sm(ix^d)
559 w1l(ix^d,mom(ip1))=sm(ix^d)
560 w2r(ix^d,mom(ip1))=sm(ix^d)
561 w2l(ix^d,mom(ip1))=sm(ix^d)
563 w1r(ix^d,mag(ip1))=bx(ix^d)
564 w1l(ix^d,mag(ip1))=bx(ix^d)
566 ptr(ix^d)=wrp(ix^d,p_)+0.5d0*(^c&wrc(ix^d,b^c_)**2+)
567 ptl(ix^d)=wlp(ix^d,p_)+0.5d0*(^c&wlc(ix^d,b^c_)**2+)
570 w1r(ix^d,rho_)=sur(ix^d)/(sr(ix^d,ii)-sm(ix^d))
571 w1l(ix^d,rho_)=sul(ix^d)/(sl(ix^d,ii)-sm(ix^d))
574 r1r(ix^d)=sur(ix^d)*(sr(ix^d,ii)-sm(ix^d))-bx(ix^d)**2
575 if(r1r(ix^d)/=0.d0) r1r(ix^d)=1.d0/r1r(ix^d)
576 r1l(ix^d)=sul(ix^d)*(sl(ix^d,ii)-sm(ix^d))-bx(ix^d)**2
577 if(r1l(ix^d)/=0.d0) r1l(ix^d)=1.d0/r1l(ix^d)
579 w1r(ix^d,mom(ip2))=wrp(ix^d,mom(ip2))-bx(ix^d)*br(ix^d,ip2)*&
580 (sm(ix^d)-wrp(ix^d,mom(ip1)))*r1r(ix^d)
581 w1l(ix^d,mom(ip2))=wlp(ix^d,mom(ip2))-bx(ix^d)*bl(ix^d,ip2)*&
582 (sm(ix^d)-wlp(ix^d,mom(ip1)))*r1l(ix^d)
584 w1r(ix^d,mag(ip2))=(sur(ix^d)*(sr(ix^d,ii)-wrp(ix^d,mom(ip1)))-bx(ix^d)**2)*r1r(ix^d)
585 w1l(ix^d,mag(ip2))=(sul(ix^d)*(sl(ix^d,ii)-wlp(ix^d,mom(ip1)))-bx(ix^d)**2)*r1l(ix^d)
590 w1r(ix^d,mom(ip3))=wrp(ix^d,mom(ip3))-bx(ix^d)*br(ix^d,ip3)*&
591 (sm(ix^d)-wrp(ix^d,mom(ip1)))*r1r(ix^d)
592 w1l(ix^d,mom(ip3))=wlp(ix^d,mom(ip3))-bx(ix^d)*bl(ix^d,ip3)*&
593 (sm(ix^d)-wlp(ix^d,mom(ip1)))*r1l(ix^d)
595 w1r(ix^d,mag(ip3))=br(ix^d,ip3)*w1r(ix^d,mag(ip2))
596 w1l(ix^d,mag(ip3))=bl(ix^d,ip3)*w1l(ix^d,mag(ip2))
599 w1r(ix^d,mag(ip2))=br(ix^d,ip2)*w1r(ix^d,mag(ip2))
600 w1l(ix^d,mag(ip2))=bl(ix^d,ip2)*w1l(ix^d,mag(ip2))
603 ^c&w1r(ix^d,b^c_)=w1r(ix^d,b^c_)-block%B0(ix^d,^c,ip1)\
604 ^c&w1l(ix^d,b^c_)=w1l(ix^d,b^c_)-block%B0(ix^d,^c,ip1)\
609 w1r(ix^d,p_)=sur(ix^d)*(sm(ix^d)-wrp(ix^d,mom(ip1)))+ptr(ix^d)
610 w1l(ix^d,p_)=w1r(ix^d,p_)
613 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_))+)
614 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_))+)
617 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))+&
618 w1r(ix^d,p_)*sm(ix^d)+bx(ix^d)*((^c&wrp(ix^d,m^c_)*wrc(ix^d,b^c_)+)-&
619 (^c&w1r(ix^d,m^c_)*w1r(ix^d,b^c_)+)))/(sr(ix^d,ii)-sm(ix^d))
620 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))+&
621 w1l(ix^d,p_)*sm(ix^d)+bx(ix^d)*((^c&wlp(ix^d,m^c_)*wlc(ix^d,b^c_)+)-&
622 (^c&w1l(ix^d,m^c_)*w1l(ix^d,b^c_)+)))/(sl(ix^d,ii)-sm(ix^d))
625 w1r(ix^d,e_)=w1r(ix^d,e_)+((^c&w1r(ix^d,b^c_)*block%B0(ix^d,^c,ip1)+)*sm(ix^d)-&
626 (^c&wrc(ix^d,b^c_)*block%B0(ix^d,^c,ip1)+)*wrp(ix^d,mom(ip1)))/(sr(ix^d,ii)-sm(ix^d))
627 w1l(ix^d,e_)=w1l(ix^d,e_)+((^c&w1l(ix^d,b^c_)*block%B0(ix^d,^c,ip1)+)*sm(ix^d)-&
628 (^c&wlc(ix^d,b^c_)*block%B0(ix^d,^c,ip1)+)*wlp(ix^d,mom(ip1)))/(sl(ix^d,ii)-sm(ix^d))
631 w1r(ix^d,e_)=w1r(ix^d,e_)+1d0/(phys_gamma-1)*block%equi_vars(ix^d,iw_equi_p,ip1)*&
632 (sm(ix^d)-wrp(ix^d,mom(ip1)))/(sr(ix^d,ii)-sm(ix^d))
633 w1l(ix^d,e_)=w1l(ix^d,e_)+1d0/(phys_gamma-1)*block%equi_vars(ix^d,iw_equi_p,ip1)*&
634 (sm(ix^d)-wlp(ix^d,mom(ip1)))/(sl(ix^d,ii)-sm(ix^d))
639 w2r(ix^d,rho_)=w1r(ix^d,rho_)
640 w2l(ix^d,rho_)=w1l(ix^d,rho_)
641 w2r(ix^d,mag(ip1))=w1r(ix^d,mag(ip1))
642 w2l(ix^d,mag(ip1))=w1l(ix^d,mag(ip1))
643 r1r(ix^d)=sqrt(w1r(ix^d,rho_))
644 r1l(ix^d)=sqrt(w1l(ix^d,rho_))
645 tmp(ix^d)=1.d0/(r1r(ix^d)+r1l(ix^d))
646 signbx(ix^d)=sign(1.d0,bx(ix^d))
648 s1r(ix^d)=sm(ix^d)+abs(bx(ix^d))/r1r(ix^d)
649 s1l(ix^d)=sm(ix^d)-abs(bx(ix^d))/r1l(ix^d)
651 w2r(ix^d,mom(ip2))=(r1l(ix^d)*w1l(ix^d,mom(ip2))+r1r(ix^d)*w1r(ix^d,mom(ip2))+&
652 (w1r(ix^d,mag(ip2))-w1l(ix^d,mag(ip2)))*signbx(ix^d))*tmp(ix^d)
653 w2l(ix^d,mom(ip2))=w2r(ix^d,mom(ip2))
655 w2r(ix^d,mag(ip2))=(r1l(ix^d)*w1r(ix^d,mag(ip2))+r1r(ix^d)*w1l(ix^d,mag(ip2))+&
656 r1l(ix^d)*r1r(ix^d)*(w1r(ix^d,mom(ip2))-w1l(ix^d,mom(ip2)))*signbx(ix^d))*tmp(ix^d)
657 w2l(ix^d,mag(ip2))=w2r(ix^d,mag(ip2))
660 w2r(ix^d,mom(ip3))=(r1l(ix^d)*w1l(ix^d,mom(ip3))+r1r(ix^d)*w1r(ix^d,mom(ip3))+&
661 (w1r(ix^d,mag(ip3))-w1l(ix^d,mag(ip3)))*signbx(ix^d))*tmp(ix^d)
662 w2l(ix^d,mom(ip3))=w2r(ix^d,mom(ip3))
664 w2r(ix^d,mag(ip3))=(r1l(ix^d)*w1r(ix^d,mag(ip3))+r1r(ix^d)*w1l(ix^d,mag(ip3))+&
665 r1l(ix^d)*r1r(ix^d)*(w1r(ix^d,mom(ip3))-w1l(ix^d,mom(ip3)))*signbx(ix^d))*tmp(ix^d)
666 w2l(ix^d,mag(ip3))=w2r(ix^d,mag(ip3))
670 w2r(ix^d,e_)=w1r(ix^d,e_)+r1r(ix^d)*((^c&w1r(ix^d,m^c_)*w1r(ix^d,b^c_)+)-&
671 (^c&w2r(ix^d,m^c_)*w2r(ix^d,b^c_)+))*signbx(ix^d)
672 w2l(ix^d,e_)=w1l(ix^d,e_)-r1l(ix^d)*((^c&w1l(ix^d,m^c_)*w1l(ix^d,b^c_)+)-&
673 (^c&w2l(ix^d,m^c_)*w2l(ix^d,b^c_)+))*signbx(ix^d)
677 ^c&w1r(ix^d,m^c_)=w1r(ix^d,m^c_)*w1r(ix^d,rho_)\
678 ^c&w1l(ix^d,m^c_)=w1l(ix^d,m^c_)*w1l(ix^d,rho_)\
679 ^c&w2r(ix^d,m^c_)=w2r(ix^d,m^c_)*w2r(ix^d,rho_)\
680 ^c&w2l(ix^d,m^c_)=w2l(ix^d,m^c_)*w2l(ix^d,rho_)\
681 if(iw_equi_rho>0)
then
682 w1r(ix^d,rho_)=w1r(ix^d,rho_)-block%equi_vars(ix^d,iw_equi_rho,ip1)
683 w1l(ix^d,rho_)=w1l(ix^d,rho_)-block%equi_vars(ix^d,iw_equi_rho,ip1)
684 w2r(ix^d,rho_)=w2r(ix^d,rho_)-block%equi_vars(ix^d,iw_equi_rho,ip1)
685 w2l(ix^d,rho_)=w2l(ix^d,rho_)-block%equi_vars(ix^d,iw_equi_rho,ip1)
690 if(flux_type(idims, iw)==flux_special)
then
693 do ix^db=ixcmin^db,ixcmax^db\}
694 fc(ix^d,iw,ip1)=flc(ix^d,iw)
696 else if(flux_type(idims, iw)==flux_hll)
then
699 do ix^db=ixcmin^db,ixcmax^db\}
700 fc(ix^d,iw,ip1)=(sr(ix^d,ii)*flc(ix^d,iw)-sl(ix^d,ii)*frc(ix^d,iw) &
701 +sr(ix^d,ii)*sl(ix^d,ii)*(wrc(ix^d,iw)-wlc(ix^d,iw)))/(sr(ix^d,ii)-sl(ix^d,ii))
708 do ix^db=ixcmin^db,ixcmax^db\}
709 if(sl(ix^d,ii)>0.d0)
then
710 fc(ix^d,iw,ip1)=flc(ix^d,iw)
711 else if(s1l(ix^d)>=0.d0)
then
712 fc(ix^d,iw,ip1)=flc(ix^d,iw)+sl(ix^d,ii)*(w1l(ix^d,iw)-wlc(ix^d,iw))
713 else if(sm(ix^d)>=0.d0)
then
714 fc(ix^d,iw,ip1)=flc(ix^d,iw)+sl(ix^d,ii)*(w1l(ix^d,iw)-wlc(ix^d,iw))+&
715 s1l(ix^d)*(w2l(ix^d,iw)-w1l(ix^d,iw))
716 else if(s1r(ix^d)>=0.d0)
then
717 fc(ix^d,iw,ip1)=frc(ix^d,iw)+sr(ix^d,ii)*(w1r(ix^d,iw)-wrc(ix^d,iw))+&
718 s1r(ix^d)*(w2r(ix^d,iw)-w1r(ix^d,iw))
719 else if(sr(ix^d,ii)>=0.d0)
then
720 fc(ix^d,iw,ip1)=frc(ix^d,iw)+sr(ix^d,ii)*(w1r(ix^d,iw)-wrc(ix^d,iw))
721 else if(sr(ix^d,ii)<0.d0)
then
722 fc(ix^d,iw,ip1)=frc(ix^d,iw)
729 end subroutine get_riemann_flux_hlld
733 subroutine get_riemann_flux_hlld_mag2(iws,iwe)
735 integer,
intent(in) :: iws, iwe
737 double precision,
dimension(ixI^S,1:nwflux) :: w1R,w1L,f1R,f1L,f2R,f2L
738 double precision,
dimension(ixI^S,1:nwflux) :: w2R,w2L
739 double precision,
dimension(ixI^S) :: sm,s1R,s1L,suR,suL,Bx
740 double precision,
dimension(ixI^S) :: pts,ptR,ptL,signBx,r1L,r1R,tmp
742 double precision,
dimension(ixI^S,ndir) :: vRC, vLC
744 double precision,
dimension(ixI^S,ndir) :: BR, BL
745 integer :: ip1,ip2,ip3,idir,ix^D
746 double precision :: phiPres, thetaSM, du, dv, dw
747 integer :: ixV^L, ixVb^L, ixVc^L, ixVd^L, ixVe^L, ixVf^L
748 integer :: rho_, p_, e_, mom(1:ndir), mag(1:ndir)
749 double precision,
parameter :: aParam = 4d0
757 associate(sr=>cmaxc,sl=>cminc)
764 vrc(ixc^s,:)=wrp(ixc^s,mom(:))
765 vlc(ixc^s,:)=wlp(ixc^s,mom(:))
768 call get_hlld2_modif_c(wlp,x,ixi^l,ixo^l,s1l)
769 call get_hlld2_modif_c(wrp,x,ixi^l,ixo^l,s1r)
771 phipres = min(1d0, maxval(max(s1l(ixo^s),s1r(ixo^s)))/maxval(cmaxc(ixo^s,1)))
772 phipres = phipres*(2d0 - phipres)
779 du = minval(wprim(ixv^s,mom(1))-wprim(ixo^s,mom(1)))
815 dv = minval(min(wprim(ixo^s,mom(2))-wprim(ixv^s,mom(2)),&
816 wprim(ixvb^s,mom(2))-wprim(ixo^s,mom(2)),&
817 wprim(ixvc^s,mom(2))-wprim(ixvd^s,mom(2)),&
818 wprim(ixve^s,mom(2))-wprim(ixvc^s,mom(2))&
852 dw = minval(min(wprim(ixo^s,mom(3))-wprim(ixv^s,mom(3)),&
853 wprim(ixvb^s,mom(3))-wprim(ixo^s,mom(3)),&
854 wprim(ixvc^s,mom(3))-wprim(ixvd^s,mom(3)),&
855 wprim(ixve^s,mom(3))-wprim(ixvc^s,mom(3))&
858 thetasm = maxval(cmaxc(ixo^s,1))
860 thetasm = (min(1d0, (thetasm-du)/(thetasm-min(dv,dw))))**aparam
863 br(ixc^s,:)=wrc(ixc^s,mag(:))+block%B0(ixc^s,:,ip1)
864 bl(ixc^s,:)=wlc(ixc^s,mag(:))+block%B0(ixc^s,:,ip1)
866 br(ixc^s,:)=wrc(ixc^s,mag(:))
867 bl(ixc^s,:)=wlc(ixc^s,mag(:))
870 bx(ixc^s)=(sr(ixc^s,index_v_mag)*br(ixc^s,ip1)-sl(ixc^s,index_v_mag)*bl(ixc^s,ip1)-&
871 flc(ixc^s,mag(ip1))-frc(ixc^s,mag(ip1)))/(sr(ixc^s,index_v_mag)-sl(ixc^s,index_v_mag))
872 ptr(ixc^s)=wrp(ixc^s,p_)+0.5d0*sum(br(ixc^s,:)**2,dim=ndim+1)
873 ptl(ixc^s)=wlp(ixc^s,p_)+0.5d0*sum(bl(ixc^s,:)**2,dim=ndim+1)
874 sur(ixc^s)=(sr(ixc^s,index_v_mag)-vrc(ixc^s,ip1))*wrc(ixc^s,rho_)
875 sul(ixc^s)=(sl(ixc^s,index_v_mag)-vlc(ixc^s,ip1))*wlc(ixc^s,rho_)
877 sm(ixc^s)=(sur(ixc^s)*vrc(ixc^s,ip1)-sul(ixc^s)*vlc(ixc^s,ip1)-&
878 thetasm*(ptr(ixc^s)-ptl(ixc^s)) )/(sur(ixc^s)-sul(ixc^s))
880 w1r(ixc^s,mom(ip1))=sm(ixc^s)
881 w1l(ixc^s,mom(ip1))=sm(ixc^s)
882 w2r(ixc^s,mom(ip1))=sm(ixc^s)
883 w2l(ixc^s,mom(ip1))=sm(ixc^s)
885 w1r(ixc^s,mag(ip1))=bx(ixc^s)
886 w1l(ixc^s,mag(ip1))=bx(ixc^s)
888 ptr(ixc^s)=wrp(ixc^s,p_)+0.5d0*sum(wrc(ixc^s,mag(:))**2,dim=ndim+1)
889 ptl(ixc^s)=wlp(ixc^s,p_)+0.5d0*sum(wlc(ixc^s,mag(:))**2,dim=ndim+1)
893 w1r(ixc^s,rho_)=sur(ixc^s)/(sr(ixc^s,index_v_mag)-sm(ixc^s))
894 w1l(ixc^s,rho_)=sul(ixc^s)/(sl(ixc^s,index_v_mag)-sm(ixc^s))
898 r1r(ixc^s)=sur(ixc^s)*(sr(ixc^s,index_v_mag)-sm(ixc^s))-bx(ixc^s)**2
899 where(r1r(ixc^s)/=0.d0)
900 r1r(ixc^s)=1.d0/r1r(ixc^s)
902 r1l(ixc^s)=sul(ixc^s)*(sl(ixc^s,index_v_mag)-sm(ixc^s))-bx(ixc^s)**2
903 where(r1l(ixc^s)/=0.d0)
904 r1l(ixc^s)=1.d0/r1l(ixc^s)
907 w1r(ixc^s,mom(ip2))=vrc(ixc^s,ip2)-bx(ixc^s)*br(ixc^s,ip2)*&
908 (sm(ixc^s)-vrc(ixc^s,ip1))*r1r(ixc^s)
909 w1l(ixc^s,mom(ip2))=vlc(ixc^s,ip2)-bx(ixc^s)*bl(ixc^s,ip2)*&
910 (sm(ixc^s)-vlc(ixc^s,ip1))*r1l(ixc^s)
912 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)
913 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)
918 w1r(ixc^s,mom(ip3))=vrc(ixc^s,ip3)-bx(ixc^s)*br(ixc^s,ip3)*&
919 (sm(ixc^s)-vrc(ixc^s,ip1))*r1r(ixc^s)
920 w1l(ixc^s,mom(ip3))=vlc(ixc^s,ip3)-bx(ixc^s)*bl(ixc^s,ip3)*&
921 (sm(ixc^s)-vlc(ixc^s,ip1))*r1l(ixc^s)
923 w1r(ixc^s,mag(ip3))=br(ixc^s,ip3)*w1r(ixc^s,mag(ip2))
924 w1l(ixc^s,mag(ip3))=bl(ixc^s,ip3)*w1l(ixc^s,mag(ip2))
927 w1r(ixc^s,mag(ip2))=br(ixc^s,ip2)*w1r(ixc^s,mag(ip2))
928 w1l(ixc^s,mag(ip2))=bl(ixc^s,ip2)*w1l(ixc^s,mag(ip2))
931 w1r(ixc^s,mag(:))=w1r(ixc^s,mag(:))-block%B0(ixc^s,:,ip1)
932 w1l(ixc^s,mag(:))=w1l(ixc^s,mag(:))-block%B0(ixc^s,:,ip1)
937 w1r(ixc^s,p_)=(sur(ixc^s)*ptl(ixc^s) - sul(ixc^s)*ptr(ixc^s) +&
938 phipres * sur(ixc^s)*sul(ixc^s)*(vrc(ixc^s,ip1)-vlc(ixc^s,ip1)))/&
939 (sur(ixc^s)-sul(ixc^s))
940 w1l(ixc^s,p_)=w1r(ixc^s,p_)
943 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)
944 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)
947 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)+&
948 w1r(ixc^s,p_)*sm(ixc^s)+bx(ixc^s)*(sum(vrc(ixc^s,:)*wrc(ixc^s,mag(:)),dim=ndim+1)-&
949 sum(w1r(ixc^s,mom(:))*w1r(ixc^s,mag(:)),dim=ndim+1)))/(sr(ixc^s,index_v_mag)-sm(ixc^s))
950 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)+&
951 w1l(ixc^s,p_)*sm(ixc^s)+bx(ixc^s)*(sum(vlc(ixc^s,:)*wlc(ixc^s,mag(:)),dim=ndim+1)-&
952 sum(w1l(ixc^s,mom(:))*w1l(ixc^s,mag(:)),dim=ndim+1)))/(sl(ixc^s,index_v_mag)-sm(ixc^s))
955 w1r(ixc^s,e_)=w1r(ixc^s,e_)+(sum(w1r(ixc^s,mag(:))*block%B0(ixc^s,:,ip1),dim=ndim+1)*sm(ixc^s)-&
956 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))
957 w1l(ixc^s,e_)=w1l(ixc^s,e_)+(sum(w1l(ixc^s,mag(:))*block%B0(ixc^s,:,ip1),dim=ndim+1)*sm(ixc^s)-&
958 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))
963 w2r(ixc^s,rho_)=w1r(ixc^s,rho_)
964 w2l(ixc^s,rho_)=w1l(ixc^s,rho_)
965 w2r(ixc^s,mag(ip1))=w1r(ixc^s,mag(ip1))
966 w2l(ixc^s,mag(ip1))=w1l(ixc^s,mag(ip1))
968 r1r(ixc^s)=sqrt(w1r(ixc^s,rho_))
969 r1l(ixc^s)=sqrt(w1l(ixc^s,rho_))
970 tmp(ixc^s)=1.d0/(r1r(ixc^s)+r1l(ixc^s))
971 signbx(ixc^s)=sign(1.d0,bx(ixc^s))
973 s1r(ixc^s)=sm(ixc^s)+abs(bx(ixc^s))/r1r(ixc^s)
974 s1l(ixc^s)=sm(ixc^s)-abs(bx(ixc^s))/r1l(ixc^s)
976 w2r(ixc^s,mom(ip2))=(r1l(ixc^s)*w1l(ixc^s,mom(ip2))+r1r(ixc^s)*w1r(ixc^s,mom(ip2))+&
977 (w1r(ixc^s,mag(ip2))-w1l(ixc^s,mag(ip2)))*signbx(ixc^s))*tmp(ixc^s)
978 w2l(ixc^s,mom(ip2))=w2r(ixc^s,mom(ip2))
980 w2r(ixc^s,mag(ip2))=(r1l(ixc^s)*w1r(ixc^s,mag(ip2))+r1r(ixc^s)*w1l(ixc^s,mag(ip2))+&
981 r1l(ixc^s)*r1r(ixc^s)*(w1r(ixc^s,mom(ip2))-w1l(ixc^s,mom(ip2)))*signbx(ixc^s))*tmp(ixc^s)
982 w2l(ixc^s,mag(ip2))=w2r(ixc^s,mag(ip2))
985 w2r(ixc^s,mom(ip3))=(r1l(ixc^s)*w1l(ixc^s,mom(ip3))+r1r(ixc^s)*w1r(ixc^s,mom(ip3))+&
986 (w1r(ixc^s,mag(ip3))-w1l(ixc^s,mag(ip3)))*signbx(ixc^s))*tmp(ixc^s)
987 w2l(ixc^s,mom(ip3))=w2r(ixc^s,mom(ip3))
989 w2r(ixc^s,mag(ip3))=(r1l(ixc^s)*w1r(ixc^s,mag(ip3))+r1r(ixc^s)*w1l(ixc^s,mag(ip3))+&
990 r1l(ixc^s)*r1r(ixc^s)*(w1r(ixc^s,mom(ip3))-w1l(ixc^s,mom(ip3)))*signbx(ixc^s))*tmp(ixc^s)
991 w2l(ixc^s,mag(ip3))=w2r(ixc^s,mag(ip3))
995 w2r(ixc^s,e_)=w1r(ixc^s,e_)+r1r(ixc^s)*(sum(w1r(ixc^s,mom(:))*w1r(ixc^s,mag(:)),dim=ndim+1)-&
996 sum(w2r(ixc^s,mom(:))*w2r(ixc^s,mag(:)),dim=ndim+1))*signbx(ixc^s)
997 w2l(ixc^s,e_)=w1l(ixc^s,e_)-r1l(ixc^s)*(sum(w1l(ixc^s,mom(:))*w1l(ixc^s,mag(:)),dim=ndim+1)-&
998 sum(w2l(ixc^s,mom(:))*w2l(ixc^s,mag(:)),dim=ndim+1))*signbx(ixc^s)
1003 w1r(ixc^s,mom(idir))=w1r(ixc^s,mom(idir))*w1r(ixc^s,rho_)
1004 w1l(ixc^s,mom(idir))=w1l(ixc^s,mom(idir))*w1l(ixc^s,rho_)
1005 w2r(ixc^s,mom(idir))=w2r(ixc^s,mom(idir))*w2r(ixc^s,rho_)
1006 w2l(ixc^s,mom(idir))=w2l(ixc^s,mom(idir))*w2l(ixc^s,rho_)
1012 if(stagger_grid .and. flux_type(idims, iw) == flux_tvdlf) cycle
1013 if(flux_type(idims, iw) == flux_special)
then
1015 f1l(ixc^s,iw)=flc(ixc^s,iw)
1016 f1r(ixc^s,iw)=f1l(ixc^s,iw)
1017 f2l(ixc^s,iw)=f1l(ixc^s,iw)
1018 f2r(ixc^s,iw)=f1l(ixc^s,iw)
1019 else if(flux_type(idims, iw) == flux_hll)
then
1021 f1l(ixc^s,iw)=(sr(ixc^s,index_v_mag)*flc(ixc^s, iw)-sl(ixc^s,index_v_mag)*frc(ixc^s, iw) &
1022 +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))
1023 f1r(ixc^s,iw)=f1l(ixc^s,iw)
1024 f2l(ixc^s,iw)=f1l(ixc^s,iw)
1025 f2r(ixc^s,iw)=f1l(ixc^s,iw)
1027 f1l(ixc^s,iw)=flc(ixc^s,iw)+sl(ixc^s,index_v_mag)*(w1l(ixc^s,iw)-wlc(ixc^s,iw))
1028 f1r(ixc^s,iw)=frc(ixc^s,iw)+sr(ixc^s,index_v_mag)*(w1r(ixc^s,iw)-wrc(ixc^s,iw))
1029 f2l(ixc^s,iw)=f1l(ixc^s,iw)+s1l(ixc^s)*(w2l(ixc^s,iw)-w1l(ixc^s,iw))
1030 f2r(ixc^s,iw)=f1r(ixc^s,iw)+s1r(ixc^s)*(w2r(ixc^s,iw)-w1r(ixc^s,iw))
1035 {
do ix^db=ixcmin^db,ixcmax^db\}
1036 if(sl(ix^d,index_v_mag)>0.d0)
then
1037 fc(ix^d,iws:iwe,ip1)=flc(ix^d,iws:iwe)
1038 else if(s1l(ix^d)>=0.d0)
then
1039 fc(ix^d,iws:iwe,ip1)=f1l(ix^d,iws:iwe)
1040 else if(sm(ix^d)>=0.d0)
then
1041 fc(ix^d,iws:iwe,ip1)=f2l(ix^d,iws:iwe)
1042 else if(s1r(ix^d)>=0.d0)
then
1043 fc(ix^d,iws:iwe,ip1)=f2r(ix^d,iws:iwe)
1044 else if(sr(ix^d,index_v_mag)>=0.d0)
then
1045 fc(ix^d,iws:iwe,ip1)=f1r(ix^d,iws:iwe)
1046 else if(sr(ix^d,index_v_mag)<0.d0)
then
1047 fc(ix^d,iws:iwe,ip1)=frc(ix^d,iws:iwe)
1052 end subroutine get_riemann_flux_hlld_mag2
1055 subroutine get_hlld2_modif_c(w,x,ixI^L,ixO^L,csound)
1058 integer,
intent(in) :: ixI^L, ixO^L
1059 double precision,
intent(in) :: w(ixI^S, nw), x(ixI^S,1:ndim)
1060 double precision,
intent(out):: csound(ixI^S)
1061 double precision :: cfast2(ixI^S), AvMinCs2(ixI^S), b2(ixI^S), kmax
1062 double precision :: inv_rho(ixO^S), gamma_A2(ixO^S)
1063 integer :: rho_, p_, e_, mom(1:ndir), mag(1:ndir)
1071 inv_rho=1.d0/w(ixo^s,rho_)
1076 b2(ixo^s) = sum((w(ixo^s, mag(:))+
block%B0(ixo^s,:,
b0i))**2, dim=ndim+1)
1078 b2(ixo^s) = sum(w(ixo^s, mag(:))**2, dim=ndim+1)
1083 avmincs2= w(ixo^s, mag(idims))+
block%B0(ixo^s,idims,
b0i)
1085 avmincs2= w(ixo^s, mag(idims))
1089 csound(ixo^s) = sum(w(ixo^s, mom(:))**2, dim=ndim+1)
1091 cfast2(ixo^s) = b2(ixo^s) * inv_rho+csound(ixo^s)
1092 avmincs2(ixo^s) = cfast2(ixo^s)**2-4.0d0*csound(ixo^s) &
1093 * avmincs2(ixo^s)**2 &
1096 where(avmincs2(ixo^s)<zero)
1097 avmincs2(ixo^s)=zero
1100 avmincs2(ixo^s)=sqrt(avmincs2(ixo^s))
1102 csound(ixo^s) = sqrt(half*(cfast2(ixo^s)+avmincs2(ixo^s)))
1104 end subroutine get_hlld2_modif_c