[Commits] [svn:einsteintoolkit] GRHydro/trunk/src/ (Rev. 599)
rhaas at tapir.caltech.edu
rhaas at tapir.caltech.edu
Tue Apr 15 14:48:06 CDT 2014
User: rhaas
Date: 2014/04/15 02:48 PM
Modified:
/trunk/src/
GRHydro_HLLEM.F90
Log:
GRHydro: rewrite HLLEM without if(flux_direction) in inner loop
this comes at the cost of turning these into array indices, so we trade
if statements in the inner loop for array indices that are unknown at
compile time.
File Changes:
Directory: /trunk/src/
======================
File [modified]: GRHydro_HLLEM.F90
Delta lines: +139 -296
===================================================================
--- trunk/src/GRHydro_HLLEM.F90 2014-01-14 04:04:28 UTC (rev 598)
+++ trunk/src/GRHydro_HLLEM.F90 2014-04-15 19:48:05 UTC (rev 599)
@@ -45,13 +45,15 @@
CCTK_REAL, dimension(10) :: prim_p, prim_m
CCTK_REAL, dimension(5) :: lamminus,lamplus
CCTK_REAL :: charmin, charmax, charpm,chartop,avg_alp,avg_det, sdet
- CCTK_REAL :: gxxh, gxyh, gxzh, gyyh, gyzh, gzzh, uxxh, uxyh, &
- uxzh, uyyh, uyzh, uzzh, avg_beta, usendh
- CCTK_REAL :: rhoenth_p, rhoenth_m, avg_betax, avg_betay, avg_betaz
- CCTK_REAL :: vxtp,vytp,vztp,vxtm,vytm,vztm,ab0p,ab0m,b2p,b2m,bdotvp,bdotvm
- CCTK_REAL :: wp,wm,v2p,v2m,bxlowp,bxlowm,bylowp,bylowm,bzlowp,bzlowm,vA2m,vA2p
- CCTK_REAL :: Bvecxlowp,Bvecxlowm,Bvecylowp,Bvecylowm,Bveczlowp,Bveczlowm
- CCTK_REAL :: pressstarp,pressstarm,velxlowp,velxlowm,velylowp,velylowm,velzlowp,velzlowm
+ CCTK_REAL, dimension(3,3) :: gh, uh
+ CCTK_REAL :: usendh
+ CCTK_REAL :: rhoenth_p, rhoenth_m
+ CCTK_REAL, dimension(3) :: avg_beta
+ CCTK_REAL, dimension(3) :: vtp,vtm,blowp,blowm,Bveclowp,Bveclowm
+ CCTK_REAL, dimension(3) :: vellowp,vellowm
+ CCTK_REAL :: ab0p,ab0m,b2p,b2m,bdotvp,bdotvm
+ CCTK_REAL :: wp,wm,v2p,v2m,vA2m,vA2p
+ CCTK_REAL :: pressstarp,pressstarm
CCTK_REAL :: entropyconsp,entropyconsm,entropyp,entropym,entropyf,entropydiff,entropyfp,entropyfm
@@ -61,6 +63,8 @@
CCTK_INT :: type_bits, trivial
CCTK_REAL :: xtemp
+ integer :: ix,iy,iz
+
! save memory when MP is not used
CCTK_INT :: GRHydro_UseGeneralCoordinates
CCTK_REAL, DIMENSION(cctk_ash1,cctk_ash2,cctk_ash3) :: g11, g12, g13, g22, g23, g33
@@ -105,14 +109,17 @@
call SpaceMask_GetTypeBits(type_bits, "Hydro_RiemannProblemX")
call SpaceMask_GetStateBits(trivial, "Hydro_RiemannProblemX", &
&"trivial")
+ ix = 1 ; iy = 2 ; iz = 3
else if (flux_direction == 2) then
call SpaceMask_GetTypeBits(type_bits, "Hydro_RiemannProblemY")
call SpaceMask_GetStateBits(trivial, "Hydro_RiemannProblemY", &
&"trivial")
+ ix = 2 ; iy = 3 ; iz = 1
else if (flux_direction == 3) then
call SpaceMask_GetTypeBits(type_bits, "Hydro_RiemannProblemZ")
call SpaceMask_GetStateBits(trivial, "Hydro_RiemannProblemZ", &
&"trivial")
+ ix = 3 ; iy = 1 ; iz = 2
else
call CCTK_ERROR("Flux direction not x,y,z")
end if
@@ -120,19 +127,29 @@
! constraint transport needs to be able to average fluxes in the directions
! other that flux_direction
- !$OMP PARALLEL DO PRIVATE(k,j,i,f1,lamminus,lamplus,cons_p,cons_m,fplus,fminus,qdiff,psidcf,psidcp,psidcm,prim_p,prim_m,&
- !$OMP avg_betax,avg_betay,avg_betaz,avg_beta,avg_alp,&
- !$OMP gxxh,gxyh,gxzh,gyyh,gyzh,gzzh,avg_det,sdet,uxxh,uxyh,uxzh,uyyh,uyzh,uzzh,&
- !$OMP vxtp,vxtm,vytp,vytm,vztp,vztm,&
- !$OMP velxlowp,velxlowm,Bvecxlowp,Bvecxlowm,&
- !$OMP velylowp,velylowm,Bvecylowp,Bvecylowm,&
- !$OMP velzlowp,velzlowm,Bveczlowp,Bveczlowm,&
+ !$OMP PARALLEL PRIVATE(k,j,i,f1,lamminus,lamplus,cons_p,cons_m,fplus,fminus,qdiff,psidcf,psidcp,psidcm,prim_p,prim_m,&
+ !$OMP avg_beta,avg_alp,&
+ !$OMP gh,avg_det,sdet,uh,&
+ !$OMP vtp,vtm,vellowp,vellowm,Bveclowp,Bveclowm,&
!$OMP bdotvp,bdotvm,b2p,b2m,v2p,v2m,wp,wm,&
- !$OMP bxlowp,bxlowm,bylowp,bylowm,bzlowp,bzlowm,&
+ !$OMP blowp,blowm,&
!$OMP rhoenth_p,rhoenth_m,ab0p,ab0m,vA2p,vA2m,pressstarp,pressstarm,&
!$OMP usendh,psidcdiff,psidcfp,psidcfm,charmin,charmax,chartop,charpm,&
!$OMP charmin_dc,charmax_dc,charpm_dc,m,xtemp,&
!$OMP entropyconsp,entropyconsm,entropyp,entropym,entropyf,entropydiff,entropyfp,entropyfm)
+ ! avoid compiler warnings
+ psidcf = 0d0
+ psidcp = 0.d0
+ psidcm = 0d0
+ psidcfp = 0d0
+ psidcfm = 0d0
+
+ entropyf = 0d0
+ entropyfp = 0d0
+ entropyfm = 0d0
+ entropyconsm = 0d0
+ entropyconsp = 0d0
+ !$OMP DO
do k = GRHydro_stencil, cctk_lsh(3) - GRHydro_stencil + transport_constraints*(1-zoffset)
do j = GRHydro_stencil, cctk_lsh(2) - GRHydro_stencil + transport_constraints*(1-yoffset)
do i = GRHydro_stencil, cctk_lsh(1) - GRHydro_stencil + transport_constraints*(1-xoffset)
@@ -146,11 +163,6 @@
fminus = 0.d0
qdiff = 0.d0
- if(clean_divergence.ne.0) then
- psidcp = 0.d0
- psidcm = 0.d0
- endif
-
!!$ Set the left (p for plus) and right (m_i for minus, i+1) states
cons_p(1) = densplus(i,j,k)
@@ -211,54 +223,47 @@
!!$
!!$ In MHD, we need all three shift components regardless of the flux direction
- avg_betax = 0.5d0 * (beta1(i+xoffset,j+yoffset,k+zoffset) + &
+ avg_beta(1) = 0.5d0 * (beta1(i+xoffset,j+yoffset,k+zoffset) + &
beta1(i,j,k))
- avg_betay = 0.5d0 * (beta2(i+xoffset,j+yoffset,k+zoffset) + &
+ avg_beta(2) = 0.5d0 * (beta2(i+xoffset,j+yoffset,k+zoffset) + &
beta2(i,j,k))
- avg_betaz = 0.5d0 * (beta3(i+xoffset,j+yoffset,k+zoffset) + &
+ avg_beta(3) = 0.5d0 * (beta3(i+xoffset,j+yoffset,k+zoffset) + &
beta3(i,j,k))
- if (flux_direction == 1) then
- avg_beta=avg_betax
- else if (flux_direction == 2) then
- avg_beta=avg_betay
- else if (flux_direction == 3) then
- avg_beta=avg_betaz
- else
- call CCTK_ERROR("Flux direction not x,y,z")
- end if
avg_alp = 0.5 * (alp(i,j,k) + alp(i+xoffset,j+yoffset,k+zoffset))
- gxxh = 0.5d0 * (g11(i+xoffset,j+yoffset,k+zoffset) + g11(i,j,k))
- gxyh = 0.5d0 * (g12(i+xoffset,j+yoffset,k+zoffset) + g12(i,j,k))
- gxzh = 0.5d0 * (g13(i+xoffset,j+yoffset,k+zoffset) + g13(i,j,k))
- gyyh = 0.5d0 * (g22(i+xoffset,j+yoffset,k+zoffset) + g22(i,j,k))
- gyzh = 0.5d0 * (g23(i+xoffset,j+yoffset,k+zoffset) + g23(i,j,k))
- gzzh = 0.5d0 * (g33(i+xoffset,j+yoffset,k+zoffset) + g33(i,j,k))
+ gh(1,1) = 0.5d0 * (g11(i+xoffset,j+yoffset,k+zoffset) + g11(i,j,k))
+ gh(1,2) = 0.5d0 * (g12(i+xoffset,j+yoffset,k+zoffset) + g12(i,j,k))
+ gh(1,3) = 0.5d0 * (g13(i+xoffset,j+yoffset,k+zoffset) + g13(i,j,k))
+ gh(2,2) = 0.5d0 * (g22(i+xoffset,j+yoffset,k+zoffset) + g22(i,j,k))
+ gh(2,3) = 0.5d0 * (g23(i+xoffset,j+yoffset,k+zoffset) + g23(i,j,k))
+ gh(3,3) = 0.5d0 * (g33(i+xoffset,j+yoffset,k+zoffset) + g33(i,j,k))
+ gh(2,1) = gh(1,2) ; gh(3,1) = gh(1,3) ; gh(3,2) = gh(2,3)
- avg_det = SPATIAL_DETERMINANT(gxxh,gxyh,gxzh,gyyh,gyzh,gzzh)
+ avg_det = SPATIAL_DETERMINANT(gh(1,1),gh(1,2),gh(1,3),gh(2,2),gh(2,3),gh(3,3))
sdet = sqrt(avg_det)
- call UpperMetric(uxxh, uxyh, uxzh, uyyh, uyzh, uzzh, &
- avg_det,gxxh, gxyh, gxzh, &
- gyyh, gyzh, gzzh)
+ call UpperMetric(uh(1,1), uh(1,2), uh(1,3), uh(2,2), uh(2,3), uh(3,3), &
+ avg_det,gh(1,1), gh(1,2), gh(1,3), &
+ gh(2,2), gh(2,3), gh(3,3))
+ uh(2,1) = uh(1,2) ; uh(3,1) = uh(1,3) ; uh(3,2) = uh(2,3)
- vxtp = prim_p(2)-avg_betax/avg_alp
- vytp = prim_p(3)-avg_betay/avg_alp
- vztp = prim_p(4)-avg_betaz/avg_alp
- vxtm = prim_m(2)-avg_betax/avg_alp
- vytm = prim_m(3)-avg_betay/avg_alp
- vztm = prim_m(4)-avg_betaz/avg_alp
+ vtp(1) = prim_p(2)-avg_beta(1)/avg_alp
+ vtp(2) = prim_p(3)-avg_beta(2)/avg_alp
+ vtp(3) = prim_p(4)-avg_beta(3)/avg_alp
+ vtm(1) = prim_m(2)-avg_beta(1)/avg_alp
+ vtm(2) = prim_m(3)-avg_beta(2)/avg_alp
+ vtm(3) = prim_m(4)-avg_beta(3)/avg_alp
- call calc_vlow_blow(gxxh,gxyh,gxzh,gyyh,gyzh,gzzh, &
+ call calc_vlow_blow(gh(1,1),gh(1,2),gh(1,3),gh(2,2),gh(2,3),gh(3,3), &
prim_p(2),prim_p(3),prim_p(4),prim_p(8),prim_p(9),prim_p(10), &
- velxlowp,velylowp,velzlowp,Bvecxlowp,Bvecylowp,Bveczlowp, &
- bdotvp,b2p,v2p,wp,bxlowp,bylowp,bzlowp)
- call calc_vlow_blow(gxxh,gxyh,gxzh,gyyh,gyzh,gzzh, &
+ vellowp(1),vellowp(2),vellowp(3),Bveclowp(1),Bveclowp(2),Bveclowp(3), &
+ bdotvp,b2p,v2p,wp,blowp(1),blowp(2),blowp(3))
+ call calc_vlow_blow(gh(1,1),gh(1,2),gh(1,3),gh(2,2),gh(2,3),gh(3,3), &
prim_m(2),prim_m(3),prim_m(4),prim_m(8),prim_m(9),prim_m(10), &
- velxlowm,velylowm,velzlowm,Bvecxlowm,Bvecylowm,Bveczlowm, &
- bdotvm,b2m,v2m,wm,bxlowm,bylowm,bzlowm)
+ vellowm(1),vellowm(2),vellowm(3),Bveclowm(1),Bveclowm(2),Bveclowm(3), &
+ bdotvm,b2m,v2m,wm,blowm(1),blowm(2),blowm(3))
rhoenth_p = prim_p(1)*(1.d0+prim_p(5))+prim_p(6)
rhoenth_m = prim_m(1)*(1.d0+prim_m(5))+prim_m(6)
@@ -283,80 +288,30 @@
!!$ pressstar instead of P, b_i, alp b^0, w, metric determinant,
!!$ alp, and beta in the flux dir
- if (flux_direction == 1) then
- call num_x_fluxM(cons_p(1),cons_p(2),cons_p(3),cons_p(4),cons_p(5),&
- cons_p(6),cons_p(7),cons_p(8),&
- f1(1),f1(2),f1(3),f1(4),f1(5),f1(6),f1(7),f1(8),&
- vxtp,vytp,vztp,pressstarp,bxlowp,bylowp,bzlowp,ab0p,wp, &
- avg_det,avg_alp,avg_beta)
- if(clean_divergence.ne.0) then
- f1(6)=f1(6) + 1.0d0*sdet*uxxh*psidcp - cons_p(6)*avg_betax/avg_alp
- f1(7)=f1(7) + 1.0d0*sdet*uxyh*psidcp - cons_p(6)*avg_betay/avg_alp
- f1(8)=f1(8) + 1.0d0*sdet*uxzh*psidcp - cons_p(6)*avg_betaz/avg_alp
- psidcf = cons_p(6)/sdet-psidcp*avg_betax/avg_alp
- endif
- if(evolve_entropy.ne.0) then
- entropyf = entropyconsp*vxtp
- endif
-
- else if (flux_direction == 2) then
- call num_x_fluxM(cons_p(1),cons_p(3),cons_p(4),cons_p(2),cons_p(5),&
- cons_p(7),cons_p(8),cons_p(6),&
- f1(1),f1(3),f1(4),f1(2),f1(5),f1(7),f1(8),f1(6),&
- vytp,vztp,vxtp,pressstarp,bylowp,bzlowp,bxlowp,ab0p,wp, &
- avg_det,avg_alp,avg_beta)
- if(clean_divergence.ne.0) then
- f1(6)=f1(6) + 1.0d0*sdet*uxyh*psidcp - cons_p(7)*avg_betax/avg_alp
- f1(7)=f1(7) + 1.0d0*sdet*uyyh*psidcp - cons_p(7)*avg_betay/avg_alp
- f1(8)=f1(8) + 1.0d0*sdet*uyzh*psidcp - cons_p(7)*avg_betaz/avg_alp
- psidcf = cons_p(7)/sdet-psidcp*avg_betay/avg_alp
- endif
- if(evolve_entropy.ne.0) then
- entropyf = entropyconsp*vytp
- endif
-
- else if (flux_direction == 3) then
- call num_x_fluxM(cons_p(1),cons_p(4),cons_p(2),cons_p(3),cons_p(5),&
- cons_p(8),cons_p(6),cons_p(7),&
- f1(1),f1(4),f1(2),f1(3),f1(5),f1(8),f1(6),f1(7), &
- vztp,vxtp,vytp,pressstarp,bzlowp,bxlowp,bylowp,ab0p,wp, &
- avg_det,avg_alp,avg_beta)
- if(clean_divergence.ne.0) then
- f1(6)=f1(6) + 1.0d0*sdet*uxzh*psidcp - cons_p(8)*avg_betax/avg_alp
- f1(7)=f1(7) + 1.0d0*sdet*uyzh*psidcp - cons_p(8)*avg_betay/avg_alp
- f1(8)=f1(8) + 1.0d0*sdet*uzzh*psidcp - cons_p(8)*avg_betaz/avg_alp
- psidcf = cons_p(8)/sdet-psidcp*avg_betaz/avg_alp
- endif
- if(evolve_entropy.ne.0) then
- entropyf = entropyconsp*vztp
- endif
-
- else
- call CCTK_ERROR("Flux direction not x,y,z")
- end if
+ call num_x_fluxM(cons_p(1),cons_p(1+ix),cons_p(1+iy),cons_p(1+iz),&
+ cons_p(5),cons_p(5+ix),cons_p(5+iy),cons_p(5+iz),&
+ f1(1),f1(1+ix),f1(1+iy),f1(1+iz),f1(5),f1(5+ix),f1(5+iy),&
+ f1(5+iz),&
+ vtp(ix),vtp(iy),vtp(iz),pressstarp,blowp(ix),blowp(iy),&
+ blowp(iz),ab0p,wp, &
+ avg_det,avg_alp,avg_beta(flux_direction))
+ if(clean_divergence.ne.0) then
+ f1(6)=f1(6) + 1.0d0*sdet*uh(flux_direction,1)*psidcp - cons_p(5+flux_direction)*avg_beta(1)/avg_alp
+ f1(7)=f1(7) + 1.0d0*sdet*uh(flux_direction,2)*psidcp - cons_p(5+flux_direction)*avg_beta(2)/avg_alp
+ f1(8)=f1(8) + 1.0d0*sdet*uh(flux_direction,3)*psidcp - cons_p(5+flux_direction)*avg_beta(3)/avg_alp
+ psidcf = cons_p(5+flux_direction)/sdet-psidcp*avg_beta(flux_direction)/avg_alp
+ endif
+ if(evolve_entropy.ne.0) then
+ entropyf = entropyconsp*vtp(flux_direction)
+ endif
else !!! The end of this branch is right at the bottom of the routine
- if (flux_direction == 1) then
- usendh = uxxh
- else if (flux_direction == 2) then
- usendh = uyyh
- else if (flux_direction == 3) then
- usendh = uzzh
- else
- call CCTK_ERROR("Flux direction not x,y,z")
- end if
+ usendh = uh(flux_direction,flux_direction)
!!$ Calculate the jumps in the conserved variables
- qdiff(1) = cons_m(1) - cons_p(1)
- qdiff(2) = cons_m(2) - cons_p(2)
- qdiff(3) = cons_m(3) - cons_p(3)
- qdiff(4) = cons_m(4) - cons_p(4)
- qdiff(5) = cons_m(5) - cons_p(5)
- qdiff(6) = cons_m(6) - cons_p(6)
- qdiff(7) = cons_m(7) - cons_p(7)
- qdiff(8) = cons_m(8) - cons_p(8)
+ qdiff = cons_m - cons_p
if (clean_divergence.ne.0) then
psidcdiff = psidcm - psidcp
@@ -365,181 +320,68 @@
entropydiff = entropyconsm - entropyconsp
endif
-!!$ Eigenvalues and fluxes either side of the cell interface
+!!$ Eigenvalues and fluxes either side of the cell interface
- if (flux_direction == 1) then
- if(evolve_temper.ne.1) then
- call eigenvaluesM(GRHydro_eos_handle,&
- prim_m(1),prim_m(2),prim_m(3),prim_m(4),prim_m(5),prim_m(6),prim_m(7), &
- prim_m(8),prim_m(9),prim_m(10),&
- lamminus,gxxh,gxyh,gxzh,gyyh,gyzh,gzzh,&
- usendh,avg_alp,avg_beta)
- call eigenvaluesM(GRHydro_eos_handle, &
- prim_p(1),prim_p(2),prim_p(3),prim_p(4),prim_p(5),prim_p(6),prim_p(7), &
- prim_p(8),prim_p(9),prim_p(10),&
- lamplus,gxxh,gxyh,gxzh,gyyh,gyzh,gzzh,&
- usendh,avg_alp,avg_beta)
- else
- xtemp = temperature(i,j,k)
- call eigenvaluesM_hot(GRHydro_eos_handle,i,j,k,&
- prim_m(1),prim_m(2),prim_m(3),prim_m(4),prim_m(5),prim_m(6),prim_m(7), &
- prim_m(8),prim_m(9),prim_m(10),&
- xtemp,y_e_minus(i+xoffset,j+yoffset,k+zoffset),&
- lamminus,gxxh,gxyh,gxzh,gyyh,gyzh,gzzh,&
- usendh,avg_alp,avg_beta)
- xtemp = temperature(i,j,k)
- call eigenvaluesM_hot(GRHydro_eos_handle,i,j,k,&
- prim_p(1),prim_p(2),prim_p(3),prim_p(4),prim_p(5),prim_p(6),prim_p(7), &
- prim_p(8),prim_p(9),prim_p(10),&
- xtemp,y_e_plus(i,j,k),&
- lamplus,gxxh,gxyh,gxzh,gyyh,gyzh,gzzh,&
- usendh,avg_alp,avg_beta)
- endif
+ if(evolve_temper.ne.1) then
+ call eigenvaluesM(GRHydro_eos_handle,&
+ prim_m(1),prim_m(1+ix),prim_m(1+iy),prim_m(1+iz),prim_m(5),prim_m(6),prim_m(7), &
+ prim_m(7+ix),prim_m(7+iy),prim_m(7+iz),&
+ lamminus,gh(1,1),gh(1,2),gh(1,3),gh(2,2),gh(2,3),gh(3,3),&
+ usendh,avg_alp,avg_beta(flux_direction))
+ call eigenvaluesM(GRHydro_eos_handle,&
+ prim_p(1),prim_p(1+ix),prim_p(1+iy),prim_p(1+iz),prim_p(5),prim_p(6),prim_p(7), &
+ prim_p(7+ix),prim_p(7+iy),prim_p(7+iz),&
+ lamplus,gh(1,1),gh(1,2),gh(1,3),gh(2,2),gh(2,3),gh(3,3),&
+ usendh,avg_alp,avg_beta(flux_direction))
+ else
+ xtemp = temperature(i,j,k)
+ call eigenvaluesM_hot(GRHydro_eos_handle,i,j,k,&
+ prim_m(1),prim_m(1+ix),prim_m(1+iy),prim_m(1+iz),prim_m(5),prim_m(6),prim_m(7), &
+ prim_m(7+ix),prim_m(7+iy),prim_m(7+iz),&
+ xtemp,y_e_minus(i+xoffset,j+yoffset,k+zoffset),&
+ lamminus,gh(1,1),gh(1,2),gh(1,3),gh(2,2),gh(2,3),gh(3,3),&
+ usendh,avg_alp,avg_beta(flux_direction))
+ xtemp = temperature(i,j,k)
+ call eigenvaluesM_hot(GRHydro_eos_handle,i,j,k,&
+ prim_p(1),prim_p(1+ix),prim_p(1+iy),prim_p(1+iz),prim_p(5),prim_p(6),prim_p(7), &
+ prim_p(7+ix),prim_p(7+iy),prim_p(7+iz),&
+ xtemp,y_e_plus(i,j,k),&
+ lamplus,gh(1,1),gh(1,2),gh(1,3),gh(2,2),gh(2,3),gh(3,3),&
+ usendh,avg_alp,avg_beta(flux_direction))
+ endif
- call num_x_fluxM(cons_p(1),cons_p(2),cons_p(3),cons_p(4),cons_p(5),&
- cons_p(6),cons_p(7),cons_p(8),&
- fplus(1),fplus(2),fplus(3),fplus(4),fplus(5),fplus(6),fplus(7),fplus(8),&
- vxtp,vytp,vztp,pressstarp,bxlowp,bylowp,bzlowp,ab0p,wp, &
- avg_det,avg_alp,avg_beta)
- call num_x_fluxM(cons_m(1),cons_m(2),cons_m(3),cons_m(4),cons_m(5),&
- cons_m(6),cons_m(7),cons_m(8),&
- fminus(1),fminus(2),fminus(3),fminus(4),fminus(5),&
- fminus(6),fminus(7),fminus(8),&
- vxtm,vytm,vztm,pressstarm,bxlowm,bylowm,bzlowm,ab0m,wm, &
- avg_det,avg_alp,avg_beta)
+ call num_x_fluxM(cons_p(1),cons_p(1+ix),cons_p(1+iy),cons_p(1+iz),&
+ cons_p(5),&
+ cons_p(5+ix),cons_p(5+iy),cons_p(5+iz),&
+ fplus(1),fplus(1+ix),fplus(1+iy),fplus(1+iz),fplus(5),&
+ fplus(5+ix),fplus(5+iy),fplus(5+iz),&
+ vtp(ix),vtp(iy),vtp(iz),pressstarp,blowp(ix),blowp(iy),&
+ blowp(iz),ab0p,wp, &
+ avg_det,avg_alp,avg_beta(flux_direction))
+ call num_x_fluxM(cons_m(1),cons_m(1+ix),cons_m(1+iy),cons_m(1+iz),&
+ cons_m(5),&
+ cons_m(5+ix),cons_m(5+iy),cons_m(5+iz),&
+ fminus(1),fminus(1+ix),fminus(1+iy),fminus(1+iz),fminus(5),&
+ fminus(5+ix),fminus(5+iy),fminus(5+iz),&
+ vtm(ix),vtm(iy),vtm(iz),pressstarm,blowm(ix),blowm(iy),&
+ blowm(iz),ab0m,wm, &
+ avg_det,avg_alp,avg_beta(flux_direction))
- if(clean_divergence.ne.0) then
- fminus(6)=fminus(6) + 1.0d0*sdet*uxxh*psidcm - cons_m(6)*avg_betax/avg_alp
- fminus(7)=fminus(7) + 1.0d0*sdet*uxyh*psidcm - cons_m(6)*avg_betay/avg_alp
- fminus(8)=fminus(8) + 1.0d0*sdet*uxzh*psidcm - cons_m(6)*avg_betaz/avg_alp
- fplus(6)=fplus(6) + 1.0d0*sdet*uxxh*psidcp - cons_p(6)*avg_betax/avg_alp
- fplus(7)=fplus(7) + 1.0d0*sdet*uxyh*psidcp - cons_p(6)*avg_betay/avg_alp
- fplus(8)=fplus(8) + 1.0d0*sdet*uxzh*psidcp - cons_p(6)*avg_betaz/avg_alp
- psidcfp = cons_p(6)/sdet-avg_betax*psidcp/avg_alp
- psidcfm = cons_m(6)/sdet-avg_betax*psidcm/avg_alp
- endif
- if(evolve_entropy.ne.0) then
- entropyfp = entropyconsp*vxtp
- entropyfm = entropyconsm*vxtm
- endif
+ if(clean_divergence.ne.0) then
+ fminus(6)=fminus(6) + 1.0d0*sdet*uh(flux_direction,1)*psidcm - cons_m(5+flux_direction)*avg_beta(1)/avg_alp
+ fminus(7)=fminus(7) + 1.0d0*sdet*uh(flux_direction,2)*psidcm - cons_m(5+flux_direction)*avg_beta(2)/avg_alp
+ fminus(8)=fminus(8) + 1.0d0*sdet*uh(flux_direction,3)*psidcm - cons_m(5+flux_direction)*avg_beta(3)/avg_alp
+ fplus(6)=fplus(6) + 1.0d0*sdet*uh(flux_direction,1)*psidcp - cons_p(5+flux_direction)*avg_beta(1)/avg_alp
+ fplus(7)=fplus(7) + 1.0d0*sdet*uh(flux_direction,2)*psidcp - cons_p(5+flux_direction)*avg_beta(2)/avg_alp
+ fplus(8)=fplus(8) + 1.0d0*sdet*uh(flux_direction,3)*psidcp - cons_p(5+flux_direction)*avg_beta(3)/avg_alp
+ psidcfp = cons_p(5+flux_direction)/sdet-avg_beta(flux_direction)*psidcp/avg_alp
+ psidcfm = cons_m(5+flux_direction)/sdet-avg_beta(flux_direction)*psidcm/avg_alp
+ endif
+ if(evolve_entropy.ne.0) then
+ entropyfp = entropyconsp*vtp(flux_direction)
+ entropyfm = entropyconsm*vtm(flux_direction)
+ endif
- else if (flux_direction == 2) then
- if(evolve_temper.ne.1) then
- call eigenvaluesM(GRHydro_eos_handle,&
- prim_m(1),prim_m(3),prim_m(4),prim_m(2),prim_m(5),prim_m(6),prim_m(7), &
- prim_m(9),prim_m(10),prim_m(8),&
- lamminus,gyyh,gyzh,gxyh,gzzh,gxzh,gxxh,&
- usendh,avg_alp,avg_beta)
- call eigenvaluesM(GRHydro_eos_handle, &
- prim_p(1),prim_p(3),prim_p(4),prim_p(2),prim_p(5),prim_p(6),prim_p(7), &
- prim_p(9),prim_p(10),prim_p(8),&
- lamplus,gyyh,gyzh,gxyh,gzzh,gxzh,gxxh,&
- usendh,avg_alp,avg_beta)
- else
- xtemp = temperature(i,j,k)
- call eigenvaluesM_hot(GRHydro_eos_handle,i,j,k,&
- prim_m(1),prim_m(3),prim_m(4),prim_m(2),prim_m(5),prim_m(6),prim_m(7), &
- prim_m(9),prim_m(10),prim_m(8),&
- xtemp,y_e_minus(i+xoffset,j+yoffset,k+zoffset),&
- lamminus,gyyh,gyzh,gxyh,gzzh,gxzh,gxxh,&
- usendh,avg_alp,avg_beta)
- xtemp = temperature(i,j,k)
- call eigenvaluesM_hot(GRHydro_eos_handle,i,j,k,&
- prim_p(1),prim_p(3),prim_p(4),prim_p(2),prim_p(5),prim_p(6),prim_p(7), &
- prim_p(9),prim_p(10),prim_p(8),&
- xtemp,y_e_plus(i,j,k),&
- lamplus,gyyh,gyzh,gxyh,gzzh,gxzh,gxxh,&
- usendh,avg_alp,avg_beta)
- endif
-
- call num_x_fluxM(cons_p(1),cons_p(3),cons_p(4),cons_p(2),cons_p(5),&
- cons_p(7),cons_p(8),cons_p(6),&
- fplus(1),fplus(3),fplus(4),fplus(2),fplus(5),fplus(7),fplus(8),fplus(6),&
- vytp,vztp,vxtp,pressstarp,bylowp,bzlowp,bxlowp,ab0p,wp, &
- avg_det,avg_alp,avg_beta)
- call num_x_fluxM(cons_m(1),cons_m(3),cons_m(4),cons_m(2),cons_m(5),&
- cons_m(7),cons_m(8),cons_m(6),&
- fminus(1),fminus(3),fminus(4),fminus(2),fminus(5),&
- fminus(7),fminus(8),fminus(6),&
- vytm,vztm,vxtm,pressstarm,bylowm,bzlowm,bxlowm,ab0m,wm, &
- avg_det,avg_alp,avg_beta)
-
- if(clean_divergence.ne.0) then
- fminus(6)=fminus(6) + 1.0d0*sdet*uxyh*psidcm - cons_m(7)*avg_betax/avg_alp
- fminus(7)=fminus(7) + 1.0d0*sdet*uyyh*psidcm - cons_m(7)*avg_betay/avg_alp
- fminus(8)=fminus(8) + 1.0d0*sdet*uyzh*psidcm - cons_m(7)*avg_betaz/avg_alp
- fplus(6)=fplus(6) + 1.0d0*sdet*uxyh*psidcp - cons_p(7)*avg_betax/avg_alp
- fplus(7)=fplus(7) + 1.0d0*sdet*uyyh*psidcp - cons_p(7)*avg_betay/avg_alp
- fplus(8)=fplus(8) + 1.0d0*sdet*uyzh*psidcp - cons_p(7)*avg_betaz/avg_alp
- psidcfp = cons_p(7)/sdet-avg_betay*psidcp/avg_alp
- psidcfm = cons_m(7)/sdet-avg_betay*psidcm/avg_alp
- endif
- if(evolve_entropy.ne.0) then
- entropyfp = entropyconsp*vytp
- entropyfm = entropyconsm*vytm
- endif
-
- else if (flux_direction == 3) then
- if(evolve_temper.ne.1) then
- call eigenvaluesM(GRHydro_eos_handle,&
- prim_m(1),prim_m(4),prim_m(2),prim_m(3),prim_m(5),prim_m(6),prim_m(7), &
- prim_m(10),prim_m(8),prim_m(9),&
- lamminus,gzzh,gxzh,gyzh,gxxh,gxyh,gyyh,&
- usendh,avg_alp,avg_beta)
- call eigenvaluesM(GRHydro_eos_handle, &
- prim_p(1),prim_p(4),prim_p(2),prim_p(3),prim_p(5),prim_p(6),prim_p(7), &
- prim_p(10),prim_p(8),prim_p(9),&
- lamplus,gzzh,gxzh,gyzh,gxxh,gxyh,gyyh,&
- usendh,avg_alp,avg_beta)
- else
- xtemp = temperature(i,j,k)
- call eigenvaluesM_hot(GRHydro_eos_handle,i,j,k,&
- prim_m(1),prim_m(4),prim_m(2),prim_m(3),prim_m(5),prim_m(6),prim_m(7), &
- prim_m(10),prim_m(8),prim_m(9),&
- xtemp,y_e_minus(i+xoffset,j+yoffset,k+zoffset),&
- lamminus,gzzh,gxzh,gyzh,gxxh,gxyh,gyyh,&
- usendh,avg_alp,avg_beta)
- xtemp = temperature(i,j,k)
- call eigenvaluesM_hot(GRHydro_eos_handle,i,j,k,&
- prim_p(1),prim_p(4),prim_p(2),prim_p(3),prim_p(5),prim_p(6),prim_p(7), &
- prim_p(10),prim_p(8),prim_p(9),&
- xtemp,y_e_plus(i,j,k),&
- lamplus,gzzh,gxzh,gyzh,gxxh,gxyh,gyyh,&
- usendh,avg_alp,avg_beta)
- endif
-
- call num_x_fluxM(cons_p(1),cons_p(4),cons_p(2),cons_p(3),cons_p(5),&
- cons_p(8),cons_p(6),cons_p(7),&
- fplus(1),fplus(4),fplus(2),fplus(3),fplus(5),fplus(8),fplus(6),fplus(7), &
- vztp,vxtp,vytp,pressstarp,bzlowp,bxlowp,bylowp,ab0p,wp, &
- avg_det,avg_alp,avg_beta)
- call num_x_fluxM(cons_m(1),cons_m(4),cons_m(2),cons_m(3),cons_m(5),&
- cons_m(8),cons_m(6),cons_m(7),&
- fminus(1),fminus(4),fminus(2),fminus(3),fminus(5), &
- fminus(8),fminus(6),fminus(7), &
- vztm,vxtm,vytm,pressstarm,bzlowm,bxlowm,bylowm,ab0m,wm, &
- avg_det,avg_alp,avg_beta)
-
- if(clean_divergence.ne.0) then
- fminus(6)=fminus(6) + 1.0d0*sdet*uxzh*psidcm - cons_m(8)*avg_betax/avg_alp
- fminus(7)=fminus(7) + 1.0d0*sdet*uyzh*psidcm - cons_m(8)*avg_betay/avg_alp
- fminus(8)=fminus(8) + 1.0d0*sdet*uzzh*psidcm - cons_m(8)*avg_betaz/avg_alp
- fplus(6)=fplus(6) + 1.0d0*sdet*uxzh*psidcp - cons_p(8)*avg_betax/avg_alp
- fplus(7)=fplus(7) + 1.0d0*sdet*uyzh*psidcp - cons_p(8)*avg_betay/avg_alp
- fplus(8)=fplus(8) + 1.0d0*sdet*uzzh*psidcp - cons_p(8)*avg_betaz/avg_alp
- psidcfp = cons_p(8)/sdet-avg_betaz*psidcp/avg_alp
- psidcfm = cons_m(8)/sdet-avg_betaz*psidcm/avg_alp
- endif
- if(evolve_entropy.ne.0) then
- entropyfp = entropyconsp*vztp
- entropyfm = entropyconsm*vztm
- endif
-
- else
- call CCTK_ERROR("Flux direction not x,y,z")
- end if
-
-
!!$ Find minimum and maximum wavespeeds
charmin = min(0.d0, lamplus(1), lamplus(2), lamplus(3), &
@@ -589,8 +431,8 @@
!!$ that the normal vector to the characteristic hypersurface
!!$ be spacelike (Eq. 60 of Anton et al.)
- charmax_dc = sqrt(usendh) - avg_beta/avg_alp
- charmin_dc = -1.d0*sqrt(usendh) - avg_beta/avg_alp
+ charmax_dc = sqrt(usendh) - avg_beta(flux_direction)/avg_alp
+ charmin_dc = -1.d0*sqrt(usendh) - avg_beta(flux_direction)/avg_alp
charpm_dc = charmax_dc - charmin_dc
psidcf = (charmax_dc * psidcfp - charmin_dc * psidcfm + &
@@ -664,7 +506,8 @@
end do
end do
end do
- !$OMP END PARALLEL DO
+ !$OMP END DO
+ !$OMP END PARALLEL
#undef faulty_gxx
#undef faulty_gxy
#undef faulty_gxz
More information about the Commits
mailing list