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
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+nghostcells-nghostcells*kr(idims,^d);
186 ixcmin^d=hxomin^d-nghostcells+nghostcells*kr(idims,^d);
189 ixcmax^d=ixomax^d; ixcmin^d=hxomin^d;
193 {ixcrmin^d = max(ixcmin^d - phys_wider_stencil,ixglo^d)\}
194 {ixcrmax^d = min(ixcmax^d + phys_wider_stencil,ixghi^d)\}
197 call reconstruct_lr(ixi^l,ixcr^l,ixcr^l,idims,wprim,wlc,wrc,wlp,wrp,x,dxs(idims))
200 call phys_modify_wlr(ixi^l,ixcr^l,qt,wlc,wrc,wlp,wrp,sct,idims)
203 call phys_get_flux(wlc,wlp,x,ixi^l,ixc^l,idims,flc)
204 call phys_get_flux(wrc,wrp,x,ixi^l,ixc^l,idims,frc)
205 if(h_correction)
then
206 call phys_get_h_speed(wprim,x,ixi^l,ixo^l,idims,hspeed)
209 if(method==fs_tvdlf.or.method==fs_tvdmu)
then
210 call phys_get_cbounds(wlc,wrc,wlp,wrp,x,ixi^l,ixc^l,idims,hspeed,cmaxc)
212 if(stagger_grid)
call phys_get_ct_velocity(vcts,wlp,wrp,ixi^l,ixc^l,idims,cmaxc(ixi^s,index_v_mag))
214 call phys_get_cbounds(wlc,wrc,wlp,wrp,x,ixi^l,ixc^l,idims,hspeed,cmaxc,cminc)
215 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))
221 do ii=1,number_species
222 call get_riemann_flux_hll(start_indices(ii),stop_indices(ii))
224 case(fs_hllc,fs_hllcd)
225 do ii=1,number_species
226 call get_riemann_flux_hllc(start_indices(ii),stop_indices(ii))
229 do ii=1,number_species
230 if(ii==index_v_mag)
then
231 call get_riemann_flux_hlld(start_indices(ii),stop_indices(ii))
233 call get_riemann_flux_hll(start_indices(ii),stop_indices(ii))
237 do ii=1,number_species
238 call get_riemann_flux_tvdlf(start_indices(ii),stop_indices(ii))
243 call mpistop(
'unkown Riemann flux in finite volume')
248 if(stagger_grid)
call phys_update_faces(ixi^l,ixo^l,qt,qdt,wprim,fc,fe,sct,snew,vcts)
249 if(slab_uniform)
then
250 if(local_timestep)
then
251 dxinv(1:ndim)=-dtfactor/dxs(1:ndim)
254 hxomin^d=ixomin^d-hx^d\
256 {
do ix^db=hxomin^db,ixomax^db\}
257 fc(ix^d,iw,idims)=block%dt(ix^d)*dxinv(idims)*fc(ix^d,iw,idims)
259 {
do ix^db=ixomin^db,ixomax^db\}
260 wnew(ix^d,iw)=wnew(ix^d,iw)+fc(ix^d,iw,idims)-fc(ix^d-hx^d,iw,idims)
264 if(method==fs_tvdmu) &
265 call tvdlimit2(method,qdt,ixi^l,ixc^l,ixo^l,idims,wlc,wrc,wnew,x,fc,dxs)
268 dxinv(1:ndim)=-qdt/dxs(1:ndim)
271 hxomin^d=ixomin^d-hx^d\
273 {
do ix^db=hxomin^db,ixomax^db\}
274 fc(ix^d,iw,idims)=dxinv(idims)*fc(ix^d,iw,idims)
276 {
do ix^db=ixomin^db,ixomax^db\}
277 wnew(ix^d,iw)=wnew(ix^d,iw)+fc(ix^d,iw,idims)-fc(ix^d-hx^d,iw,idims)
281 if(method==fs_tvdmu) &
282 call tvdlimit2(method,qdt,ixi^l,ixc^l,ixo^l,idims,wlc,wrc,wnew,x,fc,dxs)
286 inv_volume(ixo^s) = 1.d0/block%dvolume(ixo^s)
287 if(local_timestep)
then
290 hxomin^d=ixomin^d-hx^d\
292 {
do ix^db=hxomin^db,ixomax^db\}
293 fc(ix^d,iw,idims)=-block%dt(ix^d)*dtfactor*fc(ix^d,iw,idims)*block%surfaceC(ix^d,idims)
295 {
do ix^db=ixomin^db,ixomax^db\}
296 wnew(ix^d,iw)=wnew(ix^d,iw)+(fc(ix^d,iw,idims)-fc(ix^d-hx^d,iw,idims))*inv_volume(ix^d)
300 if (method==fs_tvdmu) &
301 call tvdlimit2(method,qdt,ixi^l,ixc^l,ixo^l,idims,wlc,wrc,wnew,x,fc,dxs)
306 hxomin^d=ixomin^d-hx^d\
308 {
do ix^db=hxomin^db,ixomax^db\}
309 fc(ix^d,iw,idims)=-qdt*fc(ix^d,iw,idims)*block%surfaceC(ix^d,idims)
311 {
do ix^db=ixomin^db,ixomax^db\}
312 wnew(ix^d,iw)=wnew(ix^d,iw)+(fc(ix^d,iw,idims)-fc(ix^d-hx^d,iw,idims))*inv_volume(ix^d)
319 if (.not.slab.and.idimsmin==1) &
320 call phys_add_source_geom(qdt,dtfactor,ixi^l,ixo^l,wct,wprim,wnew,x)
322 if(stagger_grid)
call phys_face_to_center(ixo^l,snew)
325 if(fix_small_values)
then
326 call phys_handle_small_values(.false.,wnew,x,ixi^l,ixo^l,
'multi-D finite_volume')
330 if(stagger_grid) snew%ws=sct%ws
334 call addsource2(qdt*dble(idimsmax-idimsmin+1)/dble(ndim),&
335 dtfactor*dble(idimsmax-idimsmin+1)/dble(ndim),&
336 ixi^l,ixo^l,1,nw,qtc,wct,wprim,qt,wnew,x,.false.,active)
343 fc(ixc^s,iw,idims)=half*(flc(ixc^s,iw)+frc(ixc^s,iw))
347 subroutine get_riemann_flux_tvdlf(iws,iwe)
348 integer,
intent(in) :: iws,iwe
351 double precision :: fac(ixC^S),phi
353 fac(ixc^s) = -0.5d0*tvdlfeps*cmaxc(ixc^s,ii)
355 fc(ixc^s,iw,idims)=0.5d0*(flc(ixc^s, iw)+frc(ixc^s, iw))
357 if(flux_type(idims, iw) /= flux_no_dissipation)
then
358 if(flux_adaptive_diffusion)
then
359 {
do ix^db=ixcmin^db,ixcmax^db\}
360 jx^d=ix^d+kr(idims,^d)\
363 if(((wrc(ix^d,iw)-wlc(ix^d,iw))*(sct%w(jx^d,iw)-sct%w(ix^d,iw))) .gt. 1.e-18)
then
364 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)
368 fc(ix^d,iw,idims)=fc(ix^d,iw,idims)+fac(ix^d)*(wrc(ix^d,iw)-wlc(ix^d,iw))*phi
371 {
do ix^db=ixcmin^db,ixcmax^db\}
372 fc(ix^d,iw,idims)=fc(ix^d,iw,idims)+fac(ix^d)*(wrc(ix^d,iw)-wlc(ix^d,iw))
378 end subroutine get_riemann_flux_tvdlf
380 subroutine get_riemann_flux_hll(iws,iwe)
381 integer,
intent(in) :: iws,iwe
383 double precision :: phi
385 if(flux_adaptive_diffusion)
then
387 if(flux_type(idims, iw) == flux_tvdlf)
then
388 if(stagger_grid)
then
390 fc(ixc^s,iw,idims)=0.d0
392 fc(ixc^s,iw,idims)=-tvdlfeps*half*max(cmaxc(ixc^s,ii),dabs(cminc(ixc^s,ii)))*&
393 (wrc(ixc^s,iw)-wlc(ixc^s,iw))
396 {
do ix^db=ixcmin^db,ixcmax^db\}
397 if(cminc(ix^d,ii) >= zero)
then
398 fc(ix^d,iw,idims)=flc(ix^d,iw)
399 else if(cmaxc(ix^d,ii) <= zero)
then
400 fc(ix^d,iw,idims)=frc(ix^d,iw)
403 phi=max(abs(cmaxc(ix^d,ii)),abs(cminc(ix^d,ii)))/(cmaxc(ix^d,ii)-cminc(ix^d,ii))
404 fc(ix^d,iw,idims)=(cmaxc(ix^d,ii)*flc(ix^d, iw)-cminc(ix^d,ii)*frc(ix^d,iw)&
405 +phi*cminc(ix^d,ii)*cmaxc(ix^d,ii)*(wrc(ix^d,iw)-wlc(ix^d,iw)))&
406 /(cmaxc(ix^d,ii)-cminc(ix^d,ii))
413 if(flux_type(idims, iw) == flux_tvdlf)
then
414 if(stagger_grid)
then
416 fc(ixc^s,iw,idims)=0.d0
418 fc(ixc^s,iw,idims)=-tvdlfeps*half*max(cmaxc(ixc^s,ii),dabs(cminc(ixc^s,ii)))*&
419 (wrc(ixc^s,iw)-wlc(ixc^s,iw))
422 {
do ix^db=ixcmin^db,ixcmax^db\}
423 if(cminc(ix^d,ii) >= zero)
then
424 fc(ix^d,iw,idims)=flc(ix^d,iw)
425 else if(cmaxc(ix^d,ii) <= zero)
then
426 fc(ix^d,iw,idims)=frc(ix^d,iw)
428 fc(ix^d,iw,idims)=(cmaxc(ix^d,ii)*flc(ix^d, iw)-cminc(ix^d,ii)*frc(ix^d,iw)&
429 +cminc(ix^d,ii)*cmaxc(ix^d,ii)*(wrc(ix^d,iw)-wlc(ix^d,iw)))&
430 /(cmaxc(ix^d,ii)-cminc(ix^d,ii))
436 end subroutine get_riemann_flux_hll
438 subroutine get_riemann_flux_hllc(iws,iwe)
439 integer,
intent(in) :: iws, iwe
440 double precision,
dimension(ixI^S,1:nwflux) :: whll, Fhll, fCD
441 double precision,
dimension(ixI^S) :: lambdaCD
443 integer,
dimension(ixI^S) :: patchf
444 integer :: rho_, p_, e_, mom(1:ndir)
447 if (
allocated(iw_mom)) mom(:) = iw_mom(:)
450 if(
associated(phys_hllc_init_species))
then
451 call phys_hllc_init_species(ii, rho_, mom(:), e_)
457 where(cminc(ixc^s,1) >= zero)
459 elsewhere(cmaxc(ixc^s,1) <= zero)
463 if(method==fs_hllcd) &
464 call phys_diffuse_hllcd(ixi^l,ixc^l,idims,wlc,wrc,flc,frc,patchf)
467 if(any(patchf(ixc^s)==1)) &
468 call phys_get_lcd(wlc,wrc,flc,frc,cminc(ixi^s,ii),cmaxc(ixi^s,ii),idims,ixi^l,ixc^l, &
469 whll,fhll,lambdacd,patchf)
472 if(any(abs(patchf(ixc^s))== 1))
then
474 call phys_get_wcd(wlc,wrc,whll,frc,flc,fhll,patchf,lambdacd,&
475 cminc(ixi^s,ii),cmaxc(ixi^s,ii),ixi^l,ixc^l,idims,fcd)
479 if (flux_type(idims, iw) == flux_tvdlf)
then
480 flc(ixc^s,iw)=-tvdlfeps*half*max(cmaxc(ixc^s,ii),abs(cminc(ixc^s,ii))) * &
481 (wrc(ixc^s,iw) - wlc(ixc^s,iw))
483 where(patchf(ixc^s)==-2)
484 flc(ixc^s,iw)=flc(ixc^s,iw)
485 elsewhere(abs(patchf(ixc^s))==1)
486 flc(ixc^s,iw)=fcd(ixc^s,iw)
487 elsewhere(patchf(ixc^s)==2)
488 flc(ixc^s,iw)=frc(ixc^s,iw)
489 elsewhere(patchf(ixc^s)==3)
491 flc(ixc^s,iw)=fhll(ixc^s,iw)
492 elsewhere(patchf(ixc^s)==4)
494 flc(ixc^s,iw) = half*((flc(ixc^s,iw)+frc(ixc^s,iw)) &
495 -tvdlfeps * max(cmaxc(ixc^s,ii), dabs(cminc(ixc^s,ii))) * &
496 (wrc(ixc^s,iw)-wlc(ixc^s,iw)))
500 fc(ixc^s,iw,idims)=flc(ixc^s,iw)
503 end subroutine get_riemann_flux_hllc
506 subroutine get_riemann_flux_hlld(iws,iwe)
507 integer,
intent(in) :: iws, iwe
508 double precision,
dimension(ixI^S,1:nwflux) :: w1R,w1L,w2R,w2L
509 double precision,
dimension(ixI^S) :: sm,s1R,s1L,suR,suL,Bx
510 double precision,
dimension(ixI^S) :: pts,ptR,ptL,signBx,r1L,r1R,tmp
512 double precision,
dimension(ixI^S,ndir) :: BR, BL
513 integer :: ip1,ip2,ip3,idir,ix^D,^C&b^C_,^C&m^C_
514 integer :: rho_, p_, e_, mom(1:ndir), mag(1:ndir)
516 associate(sr=>cmaxc,sl=>cminc)
519 ^c&mom(^c)=iw_mom(^c)\
521 ^c&mag(^c)=iw_mag(^c)\
529 br(ixc^s,:)=wrc(ixc^s,mag(:))+block%B0(ixc^s,:,ip1)
530 bl(ixc^s,:)=wlc(ixc^s,mag(:))+block%B0(ixc^s,:,ip1)
532 br(ixc^s,:)=wrc(ixc^s,mag(:))
533 bl(ixc^s,:)=wlc(ixc^s,mag(:))
535 if(stagger_grid)
then
536 bx(ixc^s)=block%ws(ixc^s,ip1)
540 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))
543 do ix^db=ixcmin^db,ixcmax^db\}
544 ptr(ix^d)=wrp(ix^d,p_)+0.5d0*(^c&br(ix^d,^c)**2+)
545 ptl(ix^d)=wlp(ix^d,p_)+0.5d0*(^c&bl(ix^d,^c)**2+)
546 if(iw_equi_rho>0)
then
547 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))
548 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))
550 sur(ix^d)=(sr(ix^d,ii)-wrp(ix^d,mom(ip1)))*wrc(ix^d,rho_)
551 sul(ix^d)=(sl(ix^d,ii)-wlp(ix^d,mom(ip1)))*wlc(ix^d,rho_)
554 sm(ix^d)=(sur(ix^d)*wrp(ix^d,mom(ip1))-sul(ix^d)*wlp(ix^d,mom(ip1))-&
555 ptr(ix^d)+ptl(ix^d))/(sur(ix^d)-sul(ix^d))
557 w1r(ix^d,mom(ip1))=sm(ix^d)
558 w1l(ix^d,mom(ip1))=sm(ix^d)
559 w2r(ix^d,mom(ip1))=sm(ix^d)
560 w2l(ix^d,mom(ip1))=sm(ix^d)
562 w1r(ix^d,mag(ip1))=bx(ix^d)
563 w1l(ix^d,mag(ip1))=bx(ix^d)
565 ptr(ix^d)=wrp(ix^d,p_)+0.5d0*(^c&wrc(ix^d,b^c_)**2+)
566 ptl(ix^d)=wlp(ix^d,p_)+0.5d0*(^c&wlc(ix^d,b^c_)**2+)
569 w1r(ix^d,rho_)=sur(ix^d)/(sr(ix^d,ii)-sm(ix^d))
570 w1l(ix^d,rho_)=sul(ix^d)/(sl(ix^d,ii)-sm(ix^d))
573 r1r(ix^d)=sur(ix^d)*(sr(ix^d,ii)-sm(ix^d))-bx(ix^d)**2
574 if(r1r(ix^d)/=0.d0) r1r(ix^d)=1.d0/r1r(ix^d)
575 r1l(ix^d)=sul(ix^d)*(sl(ix^d,ii)-sm(ix^d))-bx(ix^d)**2
576 if(r1l(ix^d)/=0.d0) r1l(ix^d)=1.d0/r1l(ix^d)
578 w1r(ix^d,mom(ip2))=wrp(ix^d,mom(ip2))-bx(ix^d)*br(ix^d,ip2)*&
579 (sm(ix^d)-wrp(ix^d,mom(ip1)))*r1r(ix^d)
580 w1l(ix^d,mom(ip2))=wlp(ix^d,mom(ip2))-bx(ix^d)*bl(ix^d,ip2)*&
581 (sm(ix^d)-wlp(ix^d,mom(ip1)))*r1l(ix^d)
583 w1r(ix^d,mag(ip2))=(sur(ix^d)*(sr(ix^d,ii)-wrp(ix^d,mom(ip1)))-bx(ix^d)**2)*r1r(ix^d)
584 w1l(ix^d,mag(ip2))=(sul(ix^d)*(sl(ix^d,ii)-wlp(ix^d,mom(ip1)))-bx(ix^d)**2)*r1l(ix^d)
589 w1r(ix^d,mom(ip3))=wrp(ix^d,mom(ip3))-bx(ix^d)*br(ix^d,ip3)*&
590 (sm(ix^d)-wrp(ix^d,mom(ip1)))*r1r(ix^d)
591 w1l(ix^d,mom(ip3))=wlp(ix^d,mom(ip3))-bx(ix^d)*bl(ix^d,ip3)*&
592 (sm(ix^d)-wlp(ix^d,mom(ip1)))*r1l(ix^d)
594 w1r(ix^d,mag(ip3))=br(ix^d,ip3)*w1r(ix^d,mag(ip2))
595 w1l(ix^d,mag(ip3))=bl(ix^d,ip3)*w1l(ix^d,mag(ip2))
598 w1r(ix^d,mag(ip2))=br(ix^d,ip2)*w1r(ix^d,mag(ip2))
599 w1l(ix^d,mag(ip2))=bl(ix^d,ip2)*w1l(ix^d,mag(ip2))
602 ^c&w1r(ix^d,b^c_)=w1r(ix^d,b^c_)-block%B0(ix^d,^c,ip1)\
603 ^c&w1l(ix^d,b^c_)=w1l(ix^d,b^c_)-block%B0(ix^d,^c,ip1)\
608 w1r(ix^d,p_)=sur(ix^d)*(sm(ix^d)-wrp(ix^d,mom(ip1)))+ptr(ix^d)
609 w1l(ix^d,p_)=w1r(ix^d,p_)
612 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_))+)
613 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_))+)
616 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))+&
617 w1r(ix^d,p_)*sm(ix^d)+bx(ix^d)*((^c&wrp(ix^d,m^c_)*wrc(ix^d,b^c_)+)-&
618 (^c&w1r(ix^d,m^c_)*w1r(ix^d,b^c_)+)))/(sr(ix^d,ii)-sm(ix^d))
619 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))+&
620 w1l(ix^d,p_)*sm(ix^d)+bx(ix^d)*((^c&wlp(ix^d,m^c_)*wlc(ix^d,b^c_)+)-&
621 (^c&w1l(ix^d,m^c_)*w1l(ix^d,b^c_)+)))/(sl(ix^d,ii)-sm(ix^d))
624 w1r(ix^d,e_)=w1r(ix^d,e_)+((^c&w1r(ix^d,b^c_)*block%B0(ix^d,^c,ip1)+)*sm(ix^d)-&
625 (^c&wrc(ix^d,b^c_)*block%B0(ix^d,^c,ip1)+)*wrp(ix^d,mom(ip1)))/(sr(ix^d,ii)-sm(ix^d))
626 w1l(ix^d,e_)=w1l(ix^d,e_)+((^c&w1l(ix^d,b^c_)*block%B0(ix^d,^c,ip1)+)*sm(ix^d)-&
627 (^c&wlc(ix^d,b^c_)*block%B0(ix^d,^c,ip1)+)*wlp(ix^d,mom(ip1)))/(sl(ix^d,ii)-sm(ix^d))
630 w1r(ix^d,e_)=w1r(ix^d,e_)+1d0/(phys_gamma-1)*block%equi_vars(ix^d,iw_equi_p,ip1)*&
631 (sm(ix^d)-wrp(ix^d,mom(ip1)))/(sr(ix^d,ii)-sm(ix^d))
632 w1l(ix^d,e_)=w1l(ix^d,e_)+1d0/(phys_gamma-1)*block%equi_vars(ix^d,iw_equi_p,ip1)*&
633 (sm(ix^d)-wlp(ix^d,mom(ip1)))/(sl(ix^d,ii)-sm(ix^d))
638 w2r(ix^d,rho_)=w1r(ix^d,rho_)
639 w2l(ix^d,rho_)=w1l(ix^d,rho_)
640 w2r(ix^d,mag(ip1))=w1r(ix^d,mag(ip1))
641 w2l(ix^d,mag(ip1))=w1l(ix^d,mag(ip1))
642 r1r(ix^d)=sqrt(w1r(ix^d,rho_))
643 r1l(ix^d)=sqrt(w1l(ix^d,rho_))
644 tmp(ix^d)=1.d0/(r1r(ix^d)+r1l(ix^d))
645 signbx(ix^d)=sign(1.d0,bx(ix^d))
647 s1r(ix^d)=sm(ix^d)+abs(bx(ix^d))/r1r(ix^d)
648 s1l(ix^d)=sm(ix^d)-abs(bx(ix^d))/r1l(ix^d)
650 w2r(ix^d,mom(ip2))=(r1l(ix^d)*w1l(ix^d,mom(ip2))+r1r(ix^d)*w1r(ix^d,mom(ip2))+&
651 (w1r(ix^d,mag(ip2))-w1l(ix^d,mag(ip2)))*signbx(ix^d))*tmp(ix^d)
652 w2l(ix^d,mom(ip2))=w2r(ix^d,mom(ip2))
654 w2r(ix^d,mag(ip2))=(r1l(ix^d)*w1r(ix^d,mag(ip2))+r1r(ix^d)*w1l(ix^d,mag(ip2))+&
655 r1l(ix^d)*r1r(ix^d)*(w1r(ix^d,mom(ip2))-w1l(ix^d,mom(ip2)))*signbx(ix^d))*tmp(ix^d)
656 w2l(ix^d,mag(ip2))=w2r(ix^d,mag(ip2))
659 w2r(ix^d,mom(ip3))=(r1l(ix^d)*w1l(ix^d,mom(ip3))+r1r(ix^d)*w1r(ix^d,mom(ip3))+&
660 (w1r(ix^d,mag(ip3))-w1l(ix^d,mag(ip3)))*signbx(ix^d))*tmp(ix^d)
661 w2l(ix^d,mom(ip3))=w2r(ix^d,mom(ip3))
663 w2r(ix^d,mag(ip3))=(r1l(ix^d)*w1r(ix^d,mag(ip3))+r1r(ix^d)*w1l(ix^d,mag(ip3))+&
664 r1l(ix^d)*r1r(ix^d)*(w1r(ix^d,mom(ip3))-w1l(ix^d,mom(ip3)))*signbx(ix^d))*tmp(ix^d)
665 w2l(ix^d,mag(ip3))=w2r(ix^d,mag(ip3))
669 w2r(ix^d,e_)=w1r(ix^d,e_)+r1r(ix^d)*((^c&w1r(ix^d,m^c_)*w1r(ix^d,b^c_)+)-&
670 (^c&w2r(ix^d,m^c_)*w2r(ix^d,b^c_)+))*signbx(ix^d)
671 w2l(ix^d,e_)=w1l(ix^d,e_)-r1l(ix^d)*((^c&w1l(ix^d,m^c_)*w1l(ix^d,b^c_)+)-&
672 (^c&w2l(ix^d,m^c_)*w2l(ix^d,b^c_)+))*signbx(ix^d)
676 ^c&w1r(ix^d,m^c_)=w1r(ix^d,m^c_)*w1r(ix^d,rho_)\
677 ^c&w1l(ix^d,m^c_)=w1l(ix^d,m^c_)*w1l(ix^d,rho_)\
678 ^c&w2r(ix^d,m^c_)=w2r(ix^d,m^c_)*w2r(ix^d,rho_)\
679 ^c&w2l(ix^d,m^c_)=w2l(ix^d,m^c_)*w2l(ix^d,rho_)\
680 if(iw_equi_rho>0)
then
681 w1r(ix^d,rho_)=w1r(ix^d,rho_)-block%equi_vars(ix^d,iw_equi_rho,ip1)
682 w1l(ix^d,rho_)=w1l(ix^d,rho_)-block%equi_vars(ix^d,iw_equi_rho,ip1)
683 w2r(ix^d,rho_)=w2r(ix^d,rho_)-block%equi_vars(ix^d,iw_equi_rho,ip1)
684 w2l(ix^d,rho_)=w2l(ix^d,rho_)-block%equi_vars(ix^d,iw_equi_rho,ip1)
689 if(flux_type(idims, iw)==flux_special)
then
692 do ix^db=ixcmin^db,ixcmax^db\}
693 fc(ix^d,iw,ip1)=flc(ix^d,iw)
695 else if(flux_type(idims, iw)==flux_hll)
then
698 do ix^db=ixcmin^db,ixcmax^db\}
699 fc(ix^d,iw,ip1)=(sr(ix^d,ii)*flc(ix^d,iw)-sl(ix^d,ii)*frc(ix^d,iw) &
700 +sr(ix^d,ii)*sl(ix^d,ii)*(wrc(ix^d,iw)-wlc(ix^d,iw)))/(sr(ix^d,ii)-sl(ix^d,ii))
707 do ix^db=ixcmin^db,ixcmax^db\}
708 if(sl(ix^d,ii)>0.d0)
then
709 fc(ix^d,iw,ip1)=flc(ix^d,iw)
710 else if(s1l(ix^d)>=0.d0)
then
711 fc(ix^d,iw,ip1)=flc(ix^d,iw)+sl(ix^d,ii)*(w1l(ix^d,iw)-wlc(ix^d,iw))
712 else if(sm(ix^d)>=0.d0)
then
713 fc(ix^d,iw,ip1)=flc(ix^d,iw)+sl(ix^d,ii)*(w1l(ix^d,iw)-wlc(ix^d,iw))+&
714 s1l(ix^d)*(w2l(ix^d,iw)-w1l(ix^d,iw))
715 else if(s1r(ix^d)>=0.d0)
then
716 fc(ix^d,iw,ip1)=frc(ix^d,iw)+sr(ix^d,ii)*(w1r(ix^d,iw)-wrc(ix^d,iw))+&
717 s1r(ix^d)*(w2r(ix^d,iw)-w1r(ix^d,iw))
718 else if(sr(ix^d,ii)>=0.d0)
then
719 fc(ix^d,iw,ip1)=frc(ix^d,iw)+sr(ix^d,ii)*(w1r(ix^d,iw)-wrc(ix^d,iw))
720 else if(sr(ix^d,ii)<0.d0)
then
721 fc(ix^d,iw,ip1)=frc(ix^d,iw)
728 end subroutine get_riemann_flux_hlld
732 subroutine get_riemann_flux_hlld_mag2(iws,iwe)
734 integer,
intent(in) :: iws, iwe
736 double precision,
dimension(ixI^S,1:nwflux) :: w1R,w1L,f1R,f1L,f2R,f2L
737 double precision,
dimension(ixI^S,1:nwflux) :: w2R,w2L
738 double precision,
dimension(ixI^S) :: sm,s1R,s1L,suR,suL,Bx
739 double precision,
dimension(ixI^S) :: pts,ptR,ptL,signBx,r1L,r1R,tmp
741 double precision,
dimension(ixI^S,ndir) :: vRC, vLC
743 double precision,
dimension(ixI^S,ndir) :: BR, BL
744 integer :: ip1,ip2,ip3,idir,ix^D
745 double precision :: phiPres, thetaSM, du, dv, dw
746 integer :: ixV^L, ixVb^L, ixVc^L, ixVd^L, ixVe^L, ixVf^L
747 integer :: rho_, p_, e_, mom(1:ndir), mag(1:ndir)
748 double precision,
parameter :: aParam = 4d0
756 associate(sr=>cmaxc,sl=>cminc)
763 vrc(ixc^s,:)=wrp(ixc^s,mom(:))
764 vlc(ixc^s,:)=wlp(ixc^s,mom(:))
767 call get_hlld2_modif_c(wlp,x,ixi^l,ixo^l,s1l)
768 call get_hlld2_modif_c(wrp,x,ixi^l,ixo^l,s1r)
770 phipres = min(1d0, maxval(max(s1l(ixo^s),s1r(ixo^s)))/maxval(cmaxc(ixo^s,1)))
771 phipres = phipres*(2d0 - phipres)
778 du = minval(wprim(ixv^s,mom(1))-wprim(ixo^s,mom(1)))
814 dv = minval(min(wprim(ixo^s,mom(2))-wprim(ixv^s,mom(2)),&
815 wprim(ixvb^s,mom(2))-wprim(ixo^s,mom(2)),&
816 wprim(ixvc^s,mom(2))-wprim(ixvd^s,mom(2)),&
817 wprim(ixve^s,mom(2))-wprim(ixvc^s,mom(2))&
851 dw = minval(min(wprim(ixo^s,mom(3))-wprim(ixv^s,mom(3)),&
852 wprim(ixvb^s,mom(3))-wprim(ixo^s,mom(3)),&
853 wprim(ixvc^s,mom(3))-wprim(ixvd^s,mom(3)),&
854 wprim(ixve^s,mom(3))-wprim(ixvc^s,mom(3))&
857 thetasm = maxval(cmaxc(ixo^s,1))
859 thetasm = (min(1d0, (thetasm-du)/(thetasm-min(dv,dw))))**aparam
862 br(ixc^s,:)=wrc(ixc^s,mag(:))+block%B0(ixc^s,:,ip1)
863 bl(ixc^s,:)=wlc(ixc^s,mag(:))+block%B0(ixc^s,:,ip1)
865 br(ixc^s,:)=wrc(ixc^s,mag(:))
866 bl(ixc^s,:)=wlc(ixc^s,mag(:))
869 bx(ixc^s)=(sr(ixc^s,index_v_mag)*br(ixc^s,ip1)-sl(ixc^s,index_v_mag)*bl(ixc^s,ip1)-&
870 flc(ixc^s,mag(ip1))-frc(ixc^s,mag(ip1)))/(sr(ixc^s,index_v_mag)-sl(ixc^s,index_v_mag))
871 ptr(ixc^s)=wrp(ixc^s,p_)+0.5d0*sum(br(ixc^s,:)**2,dim=ndim+1)
872 ptl(ixc^s)=wlp(ixc^s,p_)+0.5d0*sum(bl(ixc^s,:)**2,dim=ndim+1)
873 sur(ixc^s)=(sr(ixc^s,index_v_mag)-vrc(ixc^s,ip1))*wrc(ixc^s,rho_)
874 sul(ixc^s)=(sl(ixc^s,index_v_mag)-vlc(ixc^s,ip1))*wlc(ixc^s,rho_)
876 sm(ixc^s)=(sur(ixc^s)*vrc(ixc^s,ip1)-sul(ixc^s)*vlc(ixc^s,ip1)-&
877 thetasm*(ptr(ixc^s)-ptl(ixc^s)) )/(sur(ixc^s)-sul(ixc^s))
879 w1r(ixc^s,mom(ip1))=sm(ixc^s)
880 w1l(ixc^s,mom(ip1))=sm(ixc^s)
881 w2r(ixc^s,mom(ip1))=sm(ixc^s)
882 w2l(ixc^s,mom(ip1))=sm(ixc^s)
884 w1r(ixc^s,mag(ip1))=bx(ixc^s)
885 w1l(ixc^s,mag(ip1))=bx(ixc^s)
887 ptr(ixc^s)=wrp(ixc^s,p_)+0.5d0*sum(wrc(ixc^s,mag(:))**2,dim=ndim+1)
888 ptl(ixc^s)=wlp(ixc^s,p_)+0.5d0*sum(wlc(ixc^s,mag(:))**2,dim=ndim+1)
892 w1r(ixc^s,rho_)=sur(ixc^s)/(sr(ixc^s,index_v_mag)-sm(ixc^s))
893 w1l(ixc^s,rho_)=sul(ixc^s)/(sl(ixc^s,index_v_mag)-sm(ixc^s))
897 r1r(ixc^s)=sur(ixc^s)*(sr(ixc^s,index_v_mag)-sm(ixc^s))-bx(ixc^s)**2
898 where(r1r(ixc^s)/=0.d0)
899 r1r(ixc^s)=1.d0/r1r(ixc^s)
901 r1l(ixc^s)=sul(ixc^s)*(sl(ixc^s,index_v_mag)-sm(ixc^s))-bx(ixc^s)**2
902 where(r1l(ixc^s)/=0.d0)
903 r1l(ixc^s)=1.d0/r1l(ixc^s)
906 w1r(ixc^s,mom(ip2))=vrc(ixc^s,ip2)-bx(ixc^s)*br(ixc^s,ip2)*&
907 (sm(ixc^s)-vrc(ixc^s,ip1))*r1r(ixc^s)
908 w1l(ixc^s,mom(ip2))=vlc(ixc^s,ip2)-bx(ixc^s)*bl(ixc^s,ip2)*&
909 (sm(ixc^s)-vlc(ixc^s,ip1))*r1l(ixc^s)
911 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)
912 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)
917 w1r(ixc^s,mom(ip3))=vrc(ixc^s,ip3)-bx(ixc^s)*br(ixc^s,ip3)*&
918 (sm(ixc^s)-vrc(ixc^s,ip1))*r1r(ixc^s)
919 w1l(ixc^s,mom(ip3))=vlc(ixc^s,ip3)-bx(ixc^s)*bl(ixc^s,ip3)*&
920 (sm(ixc^s)-vlc(ixc^s,ip1))*r1l(ixc^s)
922 w1r(ixc^s,mag(ip3))=br(ixc^s,ip3)*w1r(ixc^s,mag(ip2))
923 w1l(ixc^s,mag(ip3))=bl(ixc^s,ip3)*w1l(ixc^s,mag(ip2))
926 w1r(ixc^s,mag(ip2))=br(ixc^s,ip2)*w1r(ixc^s,mag(ip2))
927 w1l(ixc^s,mag(ip2))=bl(ixc^s,ip2)*w1l(ixc^s,mag(ip2))
930 w1r(ixc^s,mag(:))=w1r(ixc^s,mag(:))-block%B0(ixc^s,:,ip1)
931 w1l(ixc^s,mag(:))=w1l(ixc^s,mag(:))-block%B0(ixc^s,:,ip1)
936 w1r(ixc^s,p_)=(sur(ixc^s)*ptl(ixc^s) - sul(ixc^s)*ptr(ixc^s) +&
937 phipres * sur(ixc^s)*sul(ixc^s)*(vrc(ixc^s,ip1)-vlc(ixc^s,ip1)))/&
938 (sur(ixc^s)-sul(ixc^s))
939 w1l(ixc^s,p_)=w1r(ixc^s,p_)
942 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)
943 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)
946 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)+&
947 w1r(ixc^s,p_)*sm(ixc^s)+bx(ixc^s)*(sum(vrc(ixc^s,:)*wrc(ixc^s,mag(:)),dim=ndim+1)-&
948 sum(w1r(ixc^s,mom(:))*w1r(ixc^s,mag(:)),dim=ndim+1)))/(sr(ixc^s,index_v_mag)-sm(ixc^s))
949 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)+&
950 w1l(ixc^s,p_)*sm(ixc^s)+bx(ixc^s)*(sum(vlc(ixc^s,:)*wlc(ixc^s,mag(:)),dim=ndim+1)-&
951 sum(w1l(ixc^s,mom(:))*w1l(ixc^s,mag(:)),dim=ndim+1)))/(sl(ixc^s,index_v_mag)-sm(ixc^s))
954 w1r(ixc^s,e_)=w1r(ixc^s,e_)+(sum(w1r(ixc^s,mag(:))*block%B0(ixc^s,:,ip1),dim=ndim+1)*sm(ixc^s)-&
955 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))
956 w1l(ixc^s,e_)=w1l(ixc^s,e_)+(sum(w1l(ixc^s,mag(:))*block%B0(ixc^s,:,ip1),dim=ndim+1)*sm(ixc^s)-&
957 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))
962 w2r(ixc^s,rho_)=w1r(ixc^s,rho_)
963 w2l(ixc^s,rho_)=w1l(ixc^s,rho_)
964 w2r(ixc^s,mag(ip1))=w1r(ixc^s,mag(ip1))
965 w2l(ixc^s,mag(ip1))=w1l(ixc^s,mag(ip1))
967 r1r(ixc^s)=sqrt(w1r(ixc^s,rho_))
968 r1l(ixc^s)=sqrt(w1l(ixc^s,rho_))
969 tmp(ixc^s)=1.d0/(r1r(ixc^s)+r1l(ixc^s))
970 signbx(ixc^s)=sign(1.d0,bx(ixc^s))
972 s1r(ixc^s)=sm(ixc^s)+abs(bx(ixc^s))/r1r(ixc^s)
973 s1l(ixc^s)=sm(ixc^s)-abs(bx(ixc^s))/r1l(ixc^s)
975 w2r(ixc^s,mom(ip2))=(r1l(ixc^s)*w1l(ixc^s,mom(ip2))+r1r(ixc^s)*w1r(ixc^s,mom(ip2))+&
976 (w1r(ixc^s,mag(ip2))-w1l(ixc^s,mag(ip2)))*signbx(ixc^s))*tmp(ixc^s)
977 w2l(ixc^s,mom(ip2))=w2r(ixc^s,mom(ip2))
979 w2r(ixc^s,mag(ip2))=(r1l(ixc^s)*w1r(ixc^s,mag(ip2))+r1r(ixc^s)*w1l(ixc^s,mag(ip2))+&
980 r1l(ixc^s)*r1r(ixc^s)*(w1r(ixc^s,mom(ip2))-w1l(ixc^s,mom(ip2)))*signbx(ixc^s))*tmp(ixc^s)
981 w2l(ixc^s,mag(ip2))=w2r(ixc^s,mag(ip2))
984 w2r(ixc^s,mom(ip3))=(r1l(ixc^s)*w1l(ixc^s,mom(ip3))+r1r(ixc^s)*w1r(ixc^s,mom(ip3))+&
985 (w1r(ixc^s,mag(ip3))-w1l(ixc^s,mag(ip3)))*signbx(ixc^s))*tmp(ixc^s)
986 w2l(ixc^s,mom(ip3))=w2r(ixc^s,mom(ip3))
988 w2r(ixc^s,mag(ip3))=(r1l(ixc^s)*w1r(ixc^s,mag(ip3))+r1r(ixc^s)*w1l(ixc^s,mag(ip3))+&
989 r1l(ixc^s)*r1r(ixc^s)*(w1r(ixc^s,mom(ip3))-w1l(ixc^s,mom(ip3)))*signbx(ixc^s))*tmp(ixc^s)
990 w2l(ixc^s,mag(ip3))=w2r(ixc^s,mag(ip3))
994 w2r(ixc^s,e_)=w1r(ixc^s,e_)+r1r(ixc^s)*(sum(w1r(ixc^s,mom(:))*w1r(ixc^s,mag(:)),dim=ndim+1)-&
995 sum(w2r(ixc^s,mom(:))*w2r(ixc^s,mag(:)),dim=ndim+1))*signbx(ixc^s)
996 w2l(ixc^s,e_)=w1l(ixc^s,e_)-r1l(ixc^s)*(sum(w1l(ixc^s,mom(:))*w1l(ixc^s,mag(:)),dim=ndim+1)-&
997 sum(w2l(ixc^s,mom(:))*w2l(ixc^s,mag(:)),dim=ndim+1))*signbx(ixc^s)
1002 w1r(ixc^s,mom(idir))=w1r(ixc^s,mom(idir))*w1r(ixc^s,rho_)
1003 w1l(ixc^s,mom(idir))=w1l(ixc^s,mom(idir))*w1l(ixc^s,rho_)
1004 w2r(ixc^s,mom(idir))=w2r(ixc^s,mom(idir))*w2r(ixc^s,rho_)
1005 w2l(ixc^s,mom(idir))=w2l(ixc^s,mom(idir))*w2l(ixc^s,rho_)
1011 if(stagger_grid .and. flux_type(idims, iw) == flux_tvdlf) cycle
1012 if(flux_type(idims, iw) == flux_special)
then
1014 f1l(ixc^s,iw)=flc(ixc^s,iw)
1015 f1r(ixc^s,iw)=f1l(ixc^s,iw)
1016 f2l(ixc^s,iw)=f1l(ixc^s,iw)
1017 f2r(ixc^s,iw)=f1l(ixc^s,iw)
1018 else if(flux_type(idims, iw) == flux_hll)
then
1020 f1l(ixc^s,iw)=(sr(ixc^s,index_v_mag)*flc(ixc^s, iw)-sl(ixc^s,index_v_mag)*frc(ixc^s, iw) &
1021 +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))
1022 f1r(ixc^s,iw)=f1l(ixc^s,iw)
1023 f2l(ixc^s,iw)=f1l(ixc^s,iw)
1024 f2r(ixc^s,iw)=f1l(ixc^s,iw)
1026 f1l(ixc^s,iw)=flc(ixc^s,iw)+sl(ixc^s,index_v_mag)*(w1l(ixc^s,iw)-wlc(ixc^s,iw))
1027 f1r(ixc^s,iw)=frc(ixc^s,iw)+sr(ixc^s,index_v_mag)*(w1r(ixc^s,iw)-wrc(ixc^s,iw))
1028 f2l(ixc^s,iw)=f1l(ixc^s,iw)+s1l(ixc^s)*(w2l(ixc^s,iw)-w1l(ixc^s,iw))
1029 f2r(ixc^s,iw)=f1r(ixc^s,iw)+s1r(ixc^s)*(w2r(ixc^s,iw)-w1r(ixc^s,iw))
1034 {
do ix^db=ixcmin^db,ixcmax^db\}
1035 if(sl(ix^d,index_v_mag)>0.d0)
then
1036 fc(ix^d,iws:iwe,ip1)=flc(ix^d,iws:iwe)
1037 else if(s1l(ix^d)>=0.d0)
then
1038 fc(ix^d,iws:iwe,ip1)=f1l(ix^d,iws:iwe)
1039 else if(sm(ix^d)>=0.d0)
then
1040 fc(ix^d,iws:iwe,ip1)=f2l(ix^d,iws:iwe)
1041 else if(s1r(ix^d)>=0.d0)
then
1042 fc(ix^d,iws:iwe,ip1)=f2r(ix^d,iws:iwe)
1043 else if(sr(ix^d,index_v_mag)>=0.d0)
then
1044 fc(ix^d,iws:iwe,ip1)=f1r(ix^d,iws:iwe)
1045 else if(sr(ix^d,index_v_mag)<0.d0)
then
1046 fc(ix^d,iws:iwe,ip1)=frc(ix^d,iws:iwe)
1051 end subroutine get_riemann_flux_hlld_mag2
1054 subroutine get_hlld2_modif_c(w,x,ixI^L,ixO^L,csound)
1057 integer,
intent(in) :: ixI^L, ixO^L
1058 double precision,
intent(in) :: w(ixI^S, nw), x(ixI^S,1:ndim)
1059 double precision,
intent(out):: csound(ixI^S)
1060 double precision :: cfast2(ixI^S), AvMinCs2(ixI^S), b2(ixI^S), kmax
1061 double precision :: inv_rho(ixO^S), gamma_A2(ixO^S)
1062 integer :: rho_, p_, e_, mom(1:ndir), mag(1:ndir)
1070 inv_rho=1.d0/w(ixo^s,rho_)
1075 b2(ixo^s) = sum((w(ixo^s, mag(:))+
block%B0(ixo^s,:,
b0i))**2, dim=ndim+1)
1077 b2(ixo^s) = sum(w(ixo^s, mag(:))**2, dim=ndim+1)
1082 avmincs2= w(ixo^s, mag(idims))+
block%B0(ixo^s,idims,
b0i)
1084 avmincs2= w(ixo^s, mag(idims))
1088 csound(ixo^s) = sum(w(ixo^s, mom(:))**2, dim=ndim+1)
1090 cfast2(ixo^s) = b2(ixo^s) * inv_rho+csound(ixo^s)
1091 avmincs2(ixo^s) = cfast2(ixo^s)**2-4.0d0*csound(ixo^s) &
1092 * avmincs2(ixo^s)**2 &
1095 where(avmincs2(ixo^s)<zero)
1096 avmincs2(ixo^s)=zero
1099 avmincs2(ixo^s)=sqrt(avmincs2(ixo^s))
1101 csound(ixo^s) = sqrt(half*(cfast2(ixo^s)+avmincs2(ixo^s)))
1103 end subroutine get_hlld2_modif_c