[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