aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/GRHydro_Con2Prim.F90249
-rw-r--r--src/GRHydro_Eigenproblem.F9092
-rw-r--r--src/GRHydro_Eigenproblem_Marquina.F9049
-rw-r--r--src/GRHydro_EoSChangeGamma.F9093
-rw-r--r--src/GRHydro_Marquina.F908
-rw-r--r--src/GRHydro_Prim2Con.F9049
6 files changed, 506 insertions, 34 deletions
diff --git a/src/GRHydro_Con2Prim.F90 b/src/GRHydro_Con2Prim.F90
index 8e13501..c38d412 100644
--- a/src/GRHydro_Con2Prim.F90
+++ b/src/GRHydro_Con2Prim.F90
@@ -150,6 +150,21 @@ subroutine Conservative2Primitive(CCTK_ARGUMENTS)
CCTK_REAL :: local_min_tracer
+#if USE_EOS_OMNI
+! begin EOS Omni vars
+ integer :: n = 1
+ integer :: poly_eoskey = 0
+ integer :: keytemp = 0
+ integer :: anyerr = 0
+ integer :: keyerr(1) = 0
+ real*8 :: xpress = 0.0d0
+ real*8 :: xeps = 0.0d0
+ real*8 :: xtemp = 0.0d0
+ real*8 :: xye = 0.0d0
+ poly_eoskey = GRHydro_poly_eoskey
+! end EOS Omni vars
+#endif
+
call SpaceMask_GetTypeBits(type_bits, "Hydro_Atmosphere")
call SpaceMask_GetStateBits(atmosphere, "Hydro_Atmosphere", "in_atmosphere")
type2_bits = -1
@@ -163,9 +178,17 @@ subroutine Conservative2Primitive(CCTK_ARGUMENTS)
else
local_min_tracer = 0d0
end if
-
+
+#if USE_EOS_OMNI
+ ! this is a poly call
+ call EOS_Omni_press(poly_eoskey,keytemp,n,&
+ GRHydro_rho_min,xeps,xtemp,xye,pmin,keyerr,anyerr)
+ call EOS_Omni_EpsFromPress(poly_eoskey,keytemp,n,&
+ GRHydro_rho_min,xeps,xtemp,xye,pmin,epsmin,keyerr,anyerr)
+#else
pmin = EOS_Pressure(GRHydro_polytrope_handle, GRHydro_rho_min, 1.0d0)
epsmin = EOS_SpecificIntEnergy(GRHydro_polytrope_handle, GRHydro_rho_min, pmin)
+#endif
!$OMP PARALLEL DO PRIVATE(i,j,itracer,&
!$OMP uxx, uxy, uxz, uyy, uyz, uzz, det, psi4pt, epsnegative)
@@ -221,8 +244,16 @@ subroutine Conservative2Primitive(CCTK_ARGUMENTS)
scon(i,j,k,:) = 0.d0
vel(i,j,k,:) = 0.d0
w_lorentz(i,j,k) = 1.d0
+#if USE_EOS_OMNI
+ call EOS_Omni_press(poly_eoskey,keytemp,n,&
+ rho(i,j,k),eps(i,j,k),xtemp,xye,press(i,j,k),keyerr,anyerr)
+
+ call EOS_Omni_EpsFromPress(poly_eoskey,keytemp,n,&
+ rho(i,j,k),eps(i,j,k),xtemp,xye,press(i,j,k),eps(i,j,k),keyerr,anyerr)
+#else
press(i,j,k) = EOS_Pressure(GRHydro_polytrope_handle, rho(i,j,k), eps(i,j,k))
eps(i,j,k) = EOS_SpecificIntEnergy(GRHydro_polytrope_handle, rho(i,j,k), press(i,j,k))
+#endif
! w_lorentz=1, so the expression for tau reduces to:
tau(i,j,k) = sqrt(det) * (rho(i,j,k)+rho(i,j,k)*eps(i,j,k)) - dens(i,j,k)
@@ -235,8 +266,8 @@ subroutine Conservative2Primitive(CCTK_ARGUMENTS)
scon(i,j,k,3),tau(i,j,k),rho(i,j,k),vel(i,j,k,1),vel(i,j,k,2), &
vel(i,j,k,3),eps(i,j,k),press(i,j,k),w_lorentz(i,j,k), &
uxx,uxy,uxz,uyy,uyz,uzz,det,x(i,j,k),y(i,j,k), &
- z(i,j,k),r(i,j,k),epsnegative,GRHydro_rho_min,pmin, epsmin, GRHydro_reflevel, GRHydro_C2P_failed(i,j,k))
-
+ z(i,j,k),r(i,j,k),epsnegative,GRHydro_rho_min,pmin, epsmin, &
+ GRHydro_reflevel, GRHydro_C2P_failed(i,j,k))
if (epsnegative) then
@@ -267,8 +298,16 @@ subroutine Conservative2Primitive(CCTK_ARGUMENTS)
scon(i,j,k,:) = 0.d0
vel(i,j,k,:) = 0.d0
w_lorentz(i,j,k) = 1.d0
- press(i,j,k) = EOS_Pressure(GRHydro_polytrope_handle, rho(i,j,k), eps(i,j,k))
- eps(i,j,k) = EOS_SpecificIntEnergy(GRHydro_polytrope_handle, rho(i,j,k), press(i,j,k))
+#if USE_EOS_OMNI
+ call EOS_Omni_press(poly_eoskey,keytemp,n,&
+ rho(i,j,k),eps(i,j,k),xtemp,xye,press(i,j,k),keyerr,anyerr)
+
+ call EOS_Omni_EpsFromPress(poly_eoskey,keytemp,n,&
+ rho(i,j,k),eps(i,j,k),xtemp,xye,press(i,j,k),eps(i,j,k),keyerr,anyerr)
+#else
+ press(i,j,k) = EOS_Pressure(GRHydro_polytrope_handle, rho(i,j,k), eps(i,j,k))
+ eps(i,j,k) = EOS_SpecificIntEnergy(GRHydro_polytrope_handle, rho(i,j,k), press(i,j,k))
+#endif
! w_lorentz=1, so the expression for tau reduces to:
tau(i,j,k) = sqrt(det) * (rho(i,j,k)+rho(i,j,k)*eps(i,j,k)) - dens(i,j,k)
@@ -315,12 +354,12 @@ a single point.
subroutine Con2Prim_pt(handle, dens, sx, sy, sz, tau, rho, velx, vely, &
velz, epsilon, press, w_lorentz, uxx, uxy, uxz, uyy, &
- uyz, uzz, det, x, y, z, r, epsnegative, GRHydro_rho_min, pmin, epsmin, GRHydro_reflevel, GRHydro_C2P_failed)
+ uyz, uzz, det, x, y, z, r, epsnegative, GRHydro_rho_min, pmin, epsmin, &
+ GRHydro_reflevel, GRHydro_C2P_failed)
implicit none
DECLARE_CCTK_PARAMETERS
-
CCTK_REAL dens, sx, sy, sz, tau, rho, velx, vely, velz, epsilon, &
press, uxx, uxy, uxz, uyy, uyz, uzz, det, w_lorentz, x, &
y, z, r, GRHydro_rho_min
@@ -336,6 +375,22 @@ subroutine Con2Prim_pt(handle, dens, sx, sy, sz, tau, rho, velx, vely, &
#undef _EOS_BASE_INC_
#endif
#include "EOS_Base.inc"
+
+
+#if USE_EOS_OMNI
+! begin EOS Omni vars
+ integer :: n = 1
+ integer :: eoskey = 0
+ integer :: keytemp = 0
+ integer :: anyerr = 0
+ integer :: keyerr(1) = 0
+ real*8 :: xpress = 0.0d0
+ real*8 :: xtemp = 0.0d0
+ real*8 :: xye = 0.0d0
+ eoskey = GRHydro_eoskey
+! end EOS Omni vars
+#endif
+
!!$ Undensitize the variables
@@ -348,8 +403,14 @@ subroutine Con2Prim_pt(handle, dens, sx, sy, sz, tau, rho, velx, vely, &
2.*usx*usz*uxz + 2.*usy*usz*uyz
!!$ Set initial guess for pressure:
-
+#if USE_EOS_OMNI
+ call EOS_Omni_press(eoskey,keytemp,n,&
+ rho,epsilon,xtemp,xye,xpress,keyerr,anyerr)
+ pold = max(1.d-10,xpress)
+#else
pold = max(1.d-10,EOS_Pressure(handle, rho, epsilon))
+#endif
+
!!$ Check that the variables have a chance of being physical
@@ -386,7 +447,15 @@ subroutine Con2Prim_pt(handle, dens, sx, sy, sz, tau, rho, velx, vely, &
!!$ Calculate the function
+#if USE_EOS_OMNI
+ call EOS_Omni_press(eoskey,keytemp,n,&
+ rho,epsilon,xtemp,xye,xpress,keyerr,anyerr)
+
+ f = pold - xpress
+#else
f = pold - EOS_Pressure(handle, rho, epsilon)
+#endif
+
!!$Find the root
@@ -430,8 +499,18 @@ subroutine Con2Prim_pt(handle, dens, sx, sy, sz, tau, rho, velx, vely, &
goto 51
end if
+#if USE_EOS_OMNI
+ call EOS_Omni_DPressByDRho(eoskey,keytemp,n,&
+ rho,epsilon,xtemp,xye,dpressbydrho,keyerr,anyerr)
+
+ call EOS_Omni_DPressByDEps(eoskey,keytemp,n,&
+ rho,epsilon,xtemp,xye,dpressbydeps,keyerr,anyerr)
+#else
dpressbydrho = EOS_DPressByDRho(handle,rho,epsilon)
dpressbydeps = EOS_DPressByDEps(handle,rho,epsilon)
+#endif
+
+
temp1 = (utau+udens+pnew)**2 - s2
drhobydpress = udens * s2 / (sqrt(temp1)*(udens+utau+pnew)**2)
depsbydpress = pnew * s2 / (rho * (udens + utau + pnew) * temp1)
@@ -449,7 +528,14 @@ subroutine Con2Prim_pt(handle, dens, sx, sy, sz, tau, rho, velx, vely, &
epsilon = (sqrt( (utau + pnew + udens)**2 - s2) - pnew * w_lorentz - &
udens)/udens
+#if USE_EOS_OMNI
+ call EOS_Omni_press(eoskey,keytemp,n,&
+ rho,epsilon,xtemp,xye,xpress,keyerr,anyerr)
+
+ f = pnew - xpress
+#else
f = pnew - EOS_Pressure(handle, rho, epsilon)
+#endif
!check whether rho is NaN
if (rho .ne. rho) then
@@ -466,8 +552,17 @@ subroutine Con2Prim_pt(handle, dens, sx, sy, sz, tau, rho, velx, vely, &
do i=1,GRHydro_polish
+#if USE_EOS_OMNI
+ call EOS_Omni_DPressByDRho(eoskey,keytemp,n,&
+ rho,epsilon,xtemp,xye,dpressbydrho,keyerr,anyerr)
+
+ call EOS_Omni_DPressByDEps(eoskey,keytemp,n,&
+ rho,epsilon,xtemp,xye,dpressbydeps,keyerr,anyerr)
+#else
dpressbydrho = EOS_DPressByDRho(handle,rho,epsilon)
dpressbydeps = EOS_DPressByDEps(handle,rho,epsilon)
+#endif
+
temp1 = (utau+udens+pnew)**2 - s2
drhobydpress = udens * s2 / (sqrt(temp1)*(udens+utau+pnew)**2)
depsbydpress = pnew * s2 / (rho * (udens + utau + pnew) * temp1)
@@ -484,7 +579,15 @@ subroutine Con2Prim_pt(handle, dens, sx, sy, sz, tau, rho, velx, vely, &
epsilon = (sqrt( (utau + pnew + udens)**2 - s2) - pnew * w_lorentz - &
udens)/udens
+#if USE_EOS_OMNI
+ call EOS_Omni_press(eoskey,keytemp,n, &
+ rho,epsilon,xtemp,xye,xpress,keyerr,anyerr)
+
+ f = pold - xpress
+#else
f = pold - EOS_Pressure(handle, rho, epsilon)
+#endif
+
enddo
@@ -575,14 +678,42 @@ subroutine Conservative2PrimitiveBounds(CCTK_ARGUMENTS)
CCTK_INT :: type2_bits
CCTK_REAL :: local_min_tracer
-
+
#ifdef _EOS_BASE_INC_
#undef _EOS_BASE_INC_
#endif
#include "EOS_Base.inc"
+
+#if USE_EOS_OMNI
+! begin EOS omni
+ CCTK_INT :: eoskey = 0
+ CCTK_INT :: poly_eoskey = 0
+ CCTK_INT :: keyerr(1) = 0
+ CCTK_INT :: anyerr = 0
+ CCTK_INT :: keytemp = 0
+ CCTK_INT :: n = 1
+ CCTK_REAL :: xye = 0.0d0
+ CCTK_REAL :: xeps = 0.0d0
+ CCTK_REAL :: xtemp = 0.0d0
+ eoskey = GRHydro_eoskey
+ poly_eoskey = GRHydro_poly_eoskey
+! end EOS omni
+#endif
+
+
+#if USE_EOS_OMNI
+ ! this is a poly call
+ call EOS_Omni_press(poly_eoskey,keytemp,n,&
+ GRHydro_rho_min,1.0d0,xtemp,xye,pmin,keyerr,anyerr)
+
+ call EOS_Omni_EpsFromPress(poly_eoskey,keytemp,n,&
+ GRHydro_rho_min,epsmin,xtemp,xye,pmin,epsmin,keyerr,anyerr)
+#else
pmin=EOS_Pressure(GRHydro_polytrope_handle, GRHydro_rho_min, 1.0d0)
epsmin = EOS_SpecificIntEnergy(GRHydro_polytrope_handle, GRHydro_rho_min, pmin)
+#endif
+
call SpaceMask_GetTypeBits(type_bits, "Hydro_Atmosphere")
call SpaceMask_GetStateBits(atmosphere, "Hydro_Atmosphere", "in_atmosphere")
@@ -807,6 +938,7 @@ subroutine Conservative2PrimitivePolytype(CCTK_ARGUMENTS)
local_min_tracer = 0d0
end if
+
!!$ do k = GRHydro_stencil + 1, nz - GRHydro_stencil
!!$ do j = GRHydro_stencil + 1, ny - GRHydro_stencil
!!$ do i = GRHydro_stencil + 1, nx - GRHydro_stencil
@@ -907,6 +1039,22 @@ subroutine Con2Prim_ptPolytype(handle, dens, sx, sy, sz, tau, rho, &
#endif
#include "EOS_Base.inc"
+
+#if USE_EOS_OMNI
+! begin EOS Omni vars
+ integer :: n = 1
+ integer :: poly_eoskey = 0
+ integer :: keytemp = 0
+ integer :: anyerr = 0
+ integer :: keyerr(1) = 0
+ real*8 :: xpress = 0.0d0
+ real*8 :: xeps = 0.0d0
+ real*8 :: xtemp = 0.0d0
+ real*8 :: xye = 0.0d0
+ poly_eoskey = GRHydro_poly_eoskey
+! end EOS Omni vars
+#endif
+
!!$ Undensitize the variables
sqrtdet = sqrt(det)
@@ -919,10 +1067,21 @@ subroutine Con2Prim_ptPolytype(handle, dens, sx, sy, sz, tau, rho, &
2.d0*usx*usz*uxz + 2.d0*usy*usz*uyz
!!$ Set initial guess for rho:
-
rhoold = max(GRHydro_rho_min,rho)
+
+#if USE_EOS_OMNI
+! call EOS_Omni_press(poly_eoskey,keytemp,n,&
+! rhoold,xeps,xtemp,xye,xpress,keyerr,anyerr)
+
+ call EOS_Omni_EpsFromPress(poly_eoskey,keytemp,n,&
+ rhoold,xeps,xtemp,xye,press,xeps,keyerr,anyerr)
+
+ enthalpy = 1.0d0 + xeps + press / rhoold
+#else
enthalpy = 1.d0 + EOS_SpecificIntEnergy(handle, rhoold, press) + &
EOS_Pressure(handle, rhoold, epsilon) / rhoold
+#endif
+
w_lorentz = sqrt(1.d0 + s2 / ( (udens*enthalpy)**2 ))
!!$ BEGIN: Check for NaN value (1st check)
@@ -934,8 +1093,12 @@ subroutine Con2Prim_ptPolytype(handle, dens, sx, sy, sz, tau, rho, &
endif
!!$ END: Check for NaN value (1st check)
+#if USE_EOS_OMNI
+ call EOS_Omni_press(poly_eoskey,keytemp,n,&
+ rhoold,epsilon,xtemp,xye,press,keyerr,anyerr)
+#else
press = EOS_Pressure(handle, rhoold, epsilon)
-
+#endif
!!$ Calculate the function
f = rhoold * w_lorentz - udens
@@ -968,8 +1131,16 @@ subroutine Con2Prim_ptPolytype(handle, dens, sx, sy, sz, tau, rho, &
rhonew = GRHydro_rho_min
udens = rhonew
dens = sqrtdet * rhonew
+#if USE_EOS_OMNI
+ call EOS_Omni_press(poly_eoskey,keytemp,n,&
+ rhonew,1.0d0,xtemp,xye,press,keyerr,anyerr)
+
+ call EOS_Omni_EpsFromPress(poly_eoskey,keytemp,n,&
+ rhonew,xeps,xtemp,xye,press,epsilon,keyerr,anyerr)
+#else
press = EOS_Pressure(handle, rhonew, 1.d0)
epsilon = EOS_SpecificIntEnergy(handle, rhonew, press)
+#endif
sx = 0.d0
sy = 0.d0
sz = 0.d0
@@ -985,7 +1156,13 @@ subroutine Con2Prim_ptPolytype(handle, dens, sx, sy, sz, tau, rho, &
!!$ Ian has the feeling that this is an error in general. But for the
!!$ 2D_Polytrope it gives the right answers.
+#if USE_EOS_OMNI
+ call EOS_Omni_DPressByDrho(poly_eoskey,keytemp,n,&
+ rhonew,epsilon,xtemp,xye,denthalpy,keyerr,anyerr)
+ denthalpy = denthalpy / rhonew
+#else
denthalpy = EOS_DPressByDrho(handle, rhonew, epsilon) / rhonew
+#endif
df = w_lorentz - rhonew * s2 * denthalpy / &
(w_lorentz*(udens**2)*(enthalpy**3))
@@ -1005,12 +1182,22 @@ subroutine Con2Prim_ptPolytype(handle, dens, sx, sy, sz, tau, rho, &
end if
!!$ Recalculate primitive variables and function
-
- enthalpy = 1.d0 + EOS_SpecificIntEnergy(handle, rhonew, press) + &
+
+#if USE_EOS_OMNI
+ call EOS_Omni_press(poly_eoskey,keytemp,n,&
+ rhonew,epsilon,xtemp,xye,press,keyerr,anyerr)
+
+ call EOS_Omni_EpsFromPress(poly_eoskey,keytemp,n,&
+ rhonew,xeps,xtemp,xye,press,epsilon,keyerr,anyerr)
+
+ enthalpy = 1.0d0 + epsilon + press / rhonew
+#else
+ enthalpy = 1.d0 + EOS_SpecificIntEnergy(handle, rhonew, press) + &
EOS_Pressure(handle, rhonew, epsilon) / rhonew
- w_lorentz = sqrt(1.d0 + s2 / ( (udens*enthalpy)**2 ))
+ press = EOS_Pressure(handle, rhonew, epsilon)
+#endif
- press = EOS_Pressure(handle, rhonew, epsilon)
+ w_lorentz = sqrt(1.d0 + s2 / ( (udens*enthalpy)**2 ))
tau = sqrtdet * ((rho * enthalpy) * w_lorentz**2 - press) - dens
f = rhonew * w_lorentz - udens
@@ -1022,10 +1209,21 @@ subroutine Con2Prim_ptPolytype(handle, dens, sx, sy, sz, tau, rho, &
if (rhonew .le. GRHydro_rho_min*(1.d0+GRHydro_atmo_tolerance) ) then
rhonew = GRHydro_rho_min
udens = rhonew
- ! before 2009/10/07 dens was not reset and was used with its negative value below; this has since been changed, but the change produces significant changes in the results
+ ! before 2009/10/07 dens was not reset and was used with its negative
+ ! value below; this has since been changed, but the change produces
+ ! significant changes in the results
dens = sqrtdet * rhonew
+
+#if USE_EOS_OMNI
+ call EOS_Omni_press(poly_eoskey,keytemp,n,&
+ rhonew,1.0d0,xtemp,xye,press,keyerr,anyerr)
+
+ call EOS_Omni_EpsFromPress(poly_eoskey,keytemp,n,&
+ rhonew,xeps,xtemp,xye,press,epsilon,keyerr,anyerr)
+#else
press = EOS_Pressure(handle, rhonew, 1.d0)
epsilon = EOS_SpecificIntEnergy(handle, rhonew, press)
+#endif
! w_lorentz=1, so the expression for utau reduces to:
tau = rhonew + rhonew*epsilon - udens
sx = 0.d0
@@ -1040,9 +1238,19 @@ subroutine Con2Prim_ptPolytype(handle, dens, sx, sy, sz, tau, rho, &
50 rho = rhonew
+#if USE_EOS_OMNI
+ call EOS_Omni_press(poly_eoskey,keytemp,n,&
+ rhonew,epsilon,xtemp,xye,press,keyerr,anyerr)
+
+ call EOS_Omni_EpsFromPress(poly_eoskey,keytemp,n,&
+ rhonew,xeps,xtemp,xye,press,epsilon,keyerr,anyerr)
+
+ enthalpy = 1.0d0 + epsilon + press / rhonew
+#else
enthalpy = 1.d0 + EOS_SpecificIntEnergy(handle, rhonew, press) + &
EOS_Pressure(handle, rhonew, epsilon) / rhonew
w_lorentz = sqrt(1.d0 + s2 / ( (udens*enthalpy)**2 ))
+#endif
!!$ BEGIN: Check for NaN value (2nd check)
if (w_lorentz .ne. w_lorentz) then
@@ -1053,8 +1261,16 @@ subroutine Con2Prim_ptPolytype(handle, dens, sx, sy, sz, tau, rho, &
endif
!!$ END: Check for NaN value (2nd check)
+#if USE_EOS_OMNI
+ call EOS_Omni_press(poly_eoskey,keytemp,n,&
+ rhonew,epsilon,xtemp,xye,press,keyerr,anyerr)
+
+ call EOS_Omni_EpsFromPress(poly_eoskey,keytemp,n,&
+ rhonew,xeps,xtemp,xye,press,epsilon,keyerr,anyerr)
+#else
press = EOS_Pressure(handle, rhonew, epsilon)
epsilon = EOS_SpecificIntEnergy(handle, rhonew, press)
+#endif
tau = sqrtdet * ((rho * enthalpy) * w_lorentz**2 - press) - dens
if (epsilon .lt. 0.0d0) then
@@ -1116,6 +1332,7 @@ end subroutine Con2Prim_ptPolytype
@@*/
+
subroutine Con2PrimBoundsPolytype(CCTK_ARGUMENTS)
implicit none
diff --git a/src/GRHydro_Eigenproblem.F90 b/src/GRHydro_Eigenproblem.F90
index 194ba72..d98e2d8 100644
--- a/src/GRHydro_Eigenproblem.F90
+++ b/src/GRHydro_Eigenproblem.F90
@@ -63,16 +63,49 @@ subroutine eigenvalues(handle,rho,velx,vely,velz,eps,w_lorentz,&
#endif
#include "EOS_Base.inc"
+#if USE_EOS_OMNI
+! begin EOS Omni vars
+ integer :: n = 1
+ integer :: eoskey = 0
+ integer :: keytemp = 0
+ integer :: anyerr = 0
+ integer :: keyerr(1) = 0
+ real*8 :: xpress = 0.0d0
+ real*8 :: xeps = 0.0d0
+ real*8 :: xtemp = 0.0d0
+ real*8 :: xye = 0.0d0
+ eoskey = GRHydro_eoskey
+! end EOS Omni vars
+#endif
+
one = 1.0d0
two = 2.0d0
!!$ Set required fluid quantities
+
+
+#if USE_EOS_OMNI
+! call EOS_Omni_cs2(eoskey,keytemp,n,&
+! rho,eps,xtemp,xye,cs2,keyerr,anyerr)
+ call EOS_Omni_press(eoskey,keytemp,n,&
+ rho,eps,xtemp,xye,press,keyerr,anyerr)
+
+ call EOS_Omni_DPressByDEps(eoskey,keytemp,n,&
+ rho,eps,xtemp,xye,dpdeps,keyerr,anyerr)
+
+ call EOS_Omni_DPressByDRho(eoskey,keytemp,n,&
+ rho,eps,xtemp,xye,dpdrho,keyerr,anyerr)
+
+ cs2 = (dpdrho + press * dpdeps / (rho**2))/ &
+ (1.0d0 + eps + press/rho)
+#else
press = EOS_Pressure(handle,rho,eps)
dpdrho = EOS_DPressByDRho(handle,rho,eps)
dpdeps = EOS_DPressByDEps(handle,rho,eps)
cs2 = (dpdrho + press * dpdeps / (rho**2))/ &
(1.0d0 + eps + press/rho)
+#endif
vlowx = gxx*velx + gxy*vely + gxz*velz
vlowy = gxy*velx + gyy*vely + gyz*velz
@@ -100,6 +133,7 @@ subroutine eigenvalues(handle,rho,velx,vely,velz,eps,w_lorentz,&
lam(4) = lam3
lam(5) = lamp
+
end subroutine eigenvalues
/*@@
@@ -157,16 +191,47 @@ subroutine eigenproblem(handle,rho,velx,vely,velz,eps,&
#endif
#include "EOS_Base.inc"
+#if USE_EOS_OMNI
+! begin EOS Omni vars
+ integer :: n = 1
+ integer :: eoskey = 0
+ integer :: keytemp = 0
+ integer :: anyerr = 0
+ integer :: keyerr(1) = 0
+ real*8 :: xpress = 0.0d0
+ real*8 :: xeps = 0.0d0
+ real*8 :: xtemp = 0.0d0
+ real*8 :: xye = 0.0d0
+ eoskey = GRHydro_eoskey
+! end EOS Omni vars
+#endif
+
one = 1.0d0
two = 2.0d0
!!$ Set required fluid quantities
+#if USE_EOS_OMNI
+ call EOS_Omni_press(eoskey,keytemp,n,&
+ rho,eps,xtemp,xye,press,keyerr,anyerr)
+
+ call EOS_Omni_DPressByDEps(eoskey,keytemp,n,&
+ rho,eps,xtemp,xye,dpdeps,keyerr,anyerr)
+
+ call EOS_Omni_DPressByDRho(eoskey,keytemp,n,&
+ rho,eps,xtemp,xye,dpdrho,keyerr,anyerr)
+
+ cs2 = (dpdrho + press * dpdeps / (rho**2))/ &
+ (1.0d0 + eps + press/rho)
+! call EOS_Omni_cs2(eoskey,keytemp,n,&
+! rho,eps,xtemp,xye,cs2,keyerr,anyerr)
+#else
press = EOS_Pressure(handle,rho,eps)
dpdrho = EOS_DPressByDRho(handle,rho,eps)
dpdeps = EOS_DPressByDEps(handle,rho,eps)
cs2 = (dpdrho + press * dpdeps / (rho**2))/ &
(1.0d0 + eps + press/rho)
+#endif
! if (cs2<0) cs2=0 ! this does not modify the roe crashing problem with shocktube
enthalpy = one + eps + press / rho
@@ -345,6 +410,7 @@ subroutine eigenproblem(handle,rho,velx,vely,velz,eps,&
rflux(4) = abs(lam1) * du(4) + enthalpy * w * (vlowz * vxa)
rflux(5) = abs(lam1) * du(5) + enthalpy * w * (velx * vxb + vxa) - vxa
+
else
!!$Form Jacobian matrix in characteristic form from right eigenvectors.
@@ -471,6 +537,10 @@ subroutine eigenproblem(handle,rho,velx,vely,velz,eps,&
roeflux4 = rflux(4)
roeflux5 = rflux(5)
+ if(roeflux1.ne.roeflux1) then
+ stop "bad herberd"
+ endif
+
end subroutine eigenproblem
/*@@
@@ -522,16 +592,38 @@ subroutine eigenproblem_leftright(handle,rho,velx,vely,velz,eps,&
#endif
#include "EOS_Base.inc"
+#if USE_EOS_OMNI
+! begin EOS Omni vars
+ integer :: n = 1
+ integer :: eoskey = 0
+ integer :: keytemp = 0
+ integer :: anyerr = 0
+ integer :: keyerr(1) = 0
+ real*8 :: xpress = 0.0d0
+ real*8 :: xeps = 0.0d0
+ real*8 :: xtemp = 0.0d0
+ real*8 :: xye = 0.0d0
+ eoskey = GRHydro_eoskey
+! end EOS Omni vars
+#endif
+
one = 1.0d0
two = 2.0d0
!!$ Set required fluid quantities
+#if USE_EOS_OMNI
+ call EOS_Omni_press(eoskey,keytemp,n,&
+ rho,eps,xtemp,xye,press,keyerr,anyerr)
+ call EOS_Omni_cs2(eoskey,keytemp,n,&
+ rho,eps,xtemp,xye,cs2,keyerr,anyerr)
+#else
press = EOS_Pressure(handle,rho,eps)
dpdrho = EOS_DPressByDRho(handle,rho,eps)
dpdeps = EOS_DPressByDEps(handle,rho,eps)
cs2 = (dpdrho + press * dpdeps / (rho**2))/ &
(1.0d0 + eps + press/rho)
+#endif
! if (cs2<0) cs2=0 ! this does not modify the roe crashing problem with shocktube
enthalpy = one + eps + press / rho
diff --git a/src/GRHydro_Eigenproblem_Marquina.F90 b/src/GRHydro_Eigenproblem_Marquina.F90
index 443329e..806f952 100644
--- a/src/GRHydro_Eigenproblem_Marquina.F90
+++ b/src/GRHydro_Eigenproblem_Marquina.F90
@@ -99,19 +99,46 @@ subroutine eigenproblem_marquina(handle,rhor,velxr,velyr,&
#endif
#include "EOS_Base.inc"
+#if USE_EOS_OMNI
+! begin EOS Omni vars
+ integer :: n = 1
+ integer :: eoskey = 0
+ integer :: keytemp = 0
+ integer :: anyerr = 0
+ integer :: keyerr(1) = 0
+ real*8 :: xpress = 0.0d0
+ real*8 :: xeps = 0.0d0
+ real*8 :: xtemp = 0.0d0
+ real*8 :: xye = 0.0d0
+ eoskey = GRHydro_eoskey
+! end EOS Omni vars
+#endif
+
one = 1.0d0
two = 2.0d0
!!$ LEFT
!!$ Set required fluid quantities
-
+ invrhol = one / rhol
+#if USE_EOS_OMNI
+ call EOS_Omni_press(eoskey,keytemp,n,&
+ rhol,epsl,xtemp,xye,pressl,keyerr,anyerr)
+! call EOS_Omni_cs2(eoskey,keytemp,n,&
+! rhol,epsl,xtemp,xye,cs2l,keyerr,anyerr)
+ call EOS_Omni_DPressByDEps(eoskey,keytemp,n,&
+ rhol,epsl,xtemp,xye,dpdepsl,keyerr,anyerr)
+ call EOS_Omni_DPressByDRho(eoskey,keytemp,n,&
+ rhol,epsl,xtemp,xye,dpdrhol,keyerr,anyerr)
+ cs2l = (dpdrhol + pressl * dpdepsl * invrhol**2)/ &
+ (1.0d0 + epsl + pressl*invrhol)
+#else
pressl = EOS_Pressure(handle,rhol,epsl)
dpdrhol = EOS_DPressByDRho(handle,rhol,epsl)
dpdepsl = EOS_DPressByDEps(handle,rhol,epsl)
- invrhol = one / rhol
cs2l = (dpdrhol + pressl * dpdepsl * invrhol**2)/ &
(1.0d0 + epsl + pressl*invrhol)
+#endif
enthalpyl = one + epsl + pressl * invrhol
@@ -161,14 +188,25 @@ subroutine eigenproblem_marquina(handle,rhor,velxr,velyr,&
!!$ RIGHT
!!$ Set required fluid quantities
-
+ invrhor = one / rhor
+#if USE_EOS_OMNI
+ call EOS_Omni_press(eoskey,keytemp,n,&
+ rhor,epsr,xtemp,xye,pressr,keyerr,anyerr)
+! call EOS_Omni_cs2(eoskey,keytemp,n,&
+! rhor,epsr,xtemp,xye,cs2r,keyerr,anyerr)
+ call EOS_Omni_DPressByDEps(eoskey,keytemp,n,&
+ rhor,epsr,xtemp,xye,dpdepsr,keyerr,anyerr)
+ call EOS_Omni_DPressByDRho(eoskey,keytemp,n,&
+ rhor,epsr,xtemp,xye,dpdrhor,keyerr,anyerr)
+ cs2r = (dpdrhor + pressr * dpdepsr * invrhor**2)/ &
+ (1.0d0 + epsr + pressr*invrhor)
+#else
pressr = EOS_Pressure(handle,rhor,epsr)
dpdrhor = EOS_DPressByDRho(handle,rhor,epsr)
dpdepsr = EOS_DPressByDEps(handle,rhor,epsr)
- invrhor = one / rhor
cs2r = (dpdrhor + pressr * dpdepsr * invrhor**2)/ &
(1.0d0 + epsr + pressr*invrhor)
-
+#endif
enthalpyr = one + epsr + pressr * invrhor
vlowxr = gxx*velxr + gxy*velyr + gxz*velzr
@@ -247,6 +285,7 @@ subroutine eigenproblem_marquina(handle,rhor,velxr,velyr,&
kappal = dpdepsl / (dpdepsl - rhol * cs2l)
+
!!$ Right eigenvector # 1
reivec1l(1) = kappal / (enthalpyl * wl)
diff --git a/src/GRHydro_EoSChangeGamma.F90 b/src/GRHydro_EoSChangeGamma.F90
index 5c854a6..f486c79 100644
--- a/src/GRHydro_EoSChangeGamma.F90
+++ b/src/GRHydro_EoSChangeGamma.F90
@@ -38,7 +38,11 @@
subroutine GRHydro_EoSChangeGamma(CCTK_ARGUMENTS)
+#if USE_EOS_OMNI
+ USE EOS_Omni_Module, only: press_gf, inv_rho_gf, poly_k_cgs, rho_gf
+#else
USE EOS_Polytrope_Scalars
+#endif
implicit none
@@ -53,15 +57,38 @@ subroutine GRHydro_EoSChangeGamma(CCTK_ARGUMENTS)
#include "EOS_Base.inc"
!!$ Set up the fluid constants
+#if USE_EOS_OMNI
+! begin EOS Omni vars
+ integer :: n = 1
+ integer :: poly_eoskey = 0
+ integer :: keytemp = 0
+ integer :: anyerr = 0
+ integer :: keyerr(1) = 0
+ real*8 :: xpress = 0.0d0
+ real*8 :: xeps = 0.0d0
+ real*8 :: xtemp = 0.0d0
+ real*8 :: xye = 0.0d0
+ poly_eoskey = GRHydro_poly_eoskey
+! end EOS Omni vars
+ call EOS_Omni_press(poly_eoskey,keytemp,n,&
+ 1.0d0,1.0d0,xtemp,xye,xpress,keyerr,anyerr)
+
+ call EOS_Omni_EpsFromPress(poly_eoskey,keytemp,n,&
+ 1.0d0,1.0d0,xtemp,xye,xpress,xeps,keyerr,anyerr)
+ local_Gamma = 1.0d0 + xpress/xeps
+ press = press_gf * poly_k_cgs * &
+ (rho * inv_rho_gf)**local_Gamma
+ eps = press / (rho * (local_Gamma - 1.d0))
+#else
local_Gamma = 1.d0 + EOS_Pressure(GRHydro_polytrope_handle, 1.d0, 1.d0) / &
EOS_SpecificIntEnergy(GRHydro_polytrope_handle, 1.d0, 1.d0)
-
-!!$ Change the pressure and specific internal energy
-
press = p_geom_factor * eos_k_cgs * &
(rho * rho_geom_factor_inv)**local_Gamma
eps = press / (rho * (local_Gamma - 1.d0))
+#endif
+
+!!$ Change the pressure and specific internal energy
!!$ Get the conserved variables. Hardwired polytrope EoS!!!
!!$ Note that this call also sets pressure and eps
@@ -125,11 +152,33 @@ subroutine GRHydro_EoSChangeK(CCTK_ARGUMENTS)
#include "EOS_Base.inc"
!!$ Set up the fluid constants
+#if USE_EOS_OMNI
+! begin EOS Omni vars
+ integer :: n = 1
+ integer :: poly_eoskey = 0
+ integer :: keytemp = 0
+ integer :: anyerr = 0
+ integer :: keyerr(1) = 0
+ real*8 :: xpress = 0.0d0
+ real*8 :: xeps = 0.0d0
+ real*8 :: xtemp = 0.0d0
+ real*8 :: xye = 0.0d0
+ poly_eoskey = GRHydro_poly_eoskey
+! end EOS Omni vars
+ call EOS_Omni_press(poly_eoskey,keytemp,n,&
+ 1.0d0,1.0d0,xtemp,xye,xpress,keyerr,anyerr)
+
+ call EOS_Omni_EpsFromPress(poly_eoskey,keytemp,n,&
+ 1.0d0,1.0d0,xtemp,xye,xpress,xeps,keyerr,anyerr)
+ local_Gamma = 1.0d0 + xpress/xeps
+ local_K = xpress
+#else
local_Gamma = 1.d0 + EOS_Pressure(GRHydro_polytrope_handle, 1.d0, 1.d0) / &
EOS_SpecificIntEnergy(GRHydro_polytrope_handle, 1.d0, 1.d0)
local_K = EOS_Pressure(GRHydro_polytrope_handle, 1.d0, 1.d0)
+#endif
if (abs(local_Gamma - 2.d0) < 1.d-10) then
@@ -184,7 +233,11 @@ end subroutine GRHydro_EoSChangeK
subroutine GRHydro_EoSChangeGammaK_Shibata(CCTK_ARGUMENTS)
+#if USE_EOS_OMNI
+ USE EOS_Omni_Module, only: press_gf, inv_rho_gf, poly_k_cgs, rho_gf
+#else
USE EOS_Polytrope_Scalars
+#endif
implicit none
@@ -203,6 +256,38 @@ subroutine GRHydro_EoSChangeGammaK_Shibata(CCTK_ARGUMENTS)
#include "EOS_Base.inc"
!!$ Set up the fluid constants
+#if USE_EOS_OMNI
+! begin EOS Omni vars
+ integer :: n = 1
+ integer :: poly_eoskey = 0
+ integer :: keytemp = 0
+ integer :: anyerr = 0
+ integer :: keyerr(1) = 0
+ real*8 :: xpress = 0.0d0
+ real*8 :: xeps = 0.0d0
+ real*8 :: xtemp = 0.0d0
+ real*8 :: xye = 0.0d0
+ poly_eoskey = GRHydro_poly_eoskey
+! end EOS Omni vars
+ call EOS_Omni_press(poly_eoskey,keytemp,n,&
+ 1.0d0,1.0d0,xtemp,xye,xpress,keyerr,anyerr)
+
+ call EOS_Omni_EpsFromPress(poly_eoskey,keytemp,n,&
+ 1.0d0,1.0d0,xtemp,xye,xpress,xeps,keyerr,anyerr)
+
+ local_Gamma = 1.0d0 + xpress/xeps
+ local_K = xpress
+
+ eos_k_initial_cgs = initial_k * rho_gf**initial_Gamma / press_gf
+
+ press = (local_Gamma - 1.d0) / (initial_Gamma - 1.0d0 ) * press_gf * eos_k_initial_cgs * &
+ (rho * rho_gf) ** initial_Gamma
+
+ eps = press_gf * eos_k_initial_cgs * &
+ (rho * inv_rho_gf) ** initial_Gamma / &
+ (rho * (initial_Gamma - 1.0d0))
+
+#else
call CCTK_INFO("Pulling the rug...by changing K and Gamma")
@@ -220,6 +305,8 @@ subroutine GRHydro_EoSChangeGammaK_Shibata(CCTK_ARGUMENTS)
(rho * rho_geom_factor_inv) ** initial_Gamma / &
(rho * (initial_Gamma - 1.0d0))
+#endif
+
do k = 1, cctk_lsh(3)
do j = 1, cctk_lsh(2)
do i = 1, cctk_lsh(1)
diff --git a/src/GRHydro_Marquina.F90 b/src/GRHydro_Marquina.F90
index a4196cf..144049f 100644
--- a/src/GRHydro_Marquina.F90
+++ b/src/GRHydro_Marquina.F90
@@ -37,10 +37,6 @@ subroutine GRHydro_Marquina(CCTK_ARGUMENTS)
implicit none
-#ifdef _EOS_BASE_INC_
-#undef _EOS_BASE_INC_
-#endif
-#include "EOS_Base.inc"
DECLARE_CCTK_ARGUMENTS
DECLARE_CCTK_PARAMETERS
@@ -220,7 +216,6 @@ subroutine GRHydro_Marquina(CCTK_ARGUMENTS)
endif
!!$ END: Check for NaN value (1st check)
-!!$ pressp = EOS_Pressure(GRHydro_eos_handle,primp(1),primp(5))
!!$right state
@@ -244,7 +239,6 @@ subroutine GRHydro_Marquina(CCTK_ARGUMENTS)
endif
!!$ END: Check for NaN value (2nd check)
-!!$ pressm_i = EOS_Pressure(GRHydro_eos_handle,primm_i(1),primm_i(5))
!!$eigenvalues and right eigenvectors
@@ -353,7 +347,7 @@ subroutine GRHydro_Marquina(CCTK_ARGUMENTS)
syflux(i,j,k) = f_marquina(3)
szflux(i,j,k) = f_marquina(4)
tauflux(i,j,k) = f_marquina(5)
-
+
enddo
enddo
enddo
diff --git a/src/GRHydro_Prim2Con.F90 b/src/GRHydro_Prim2Con.F90
index 9710a60..06ed464 100644
--- a/src/GRHydro_Prim2Con.F90
+++ b/src/GRHydro_Prim2Con.F90
@@ -132,6 +132,21 @@ subroutine prim2con(handle, gxx, gxy, gxz, gyy, gyz, gzz, det, ddens, &
#include "EOS_Base.inc"
+#if USE_EOS_OMNI
+! begin EOS Omni vars
+ integer :: n = 1
+ integer :: eoskey = 0
+ integer :: keytemp = 0
+ integer :: anyerr = 0
+ integer :: keyerr(1) = 0
+ real*8 :: xpress = 0.0d0
+ real*8 :: xeps = 0.0d0
+ real*8 :: xtemp = 0.0d0
+ real*8 :: xye = 0.0d0
+ eoskey = GRHydro_eoskey
+! end EOS Omni vars
+#endif
+
w = 1.d0 / sqrt(1.d0 - (gxx*dvelx*dvelx + gyy*dvely*dvely + gzz &
*dvelz*dvelz + 2*gxy*dvelx*dvely + 2*gxz*dvelx *dvelz + 2*gyz&
*dvely*dvelz))
@@ -145,7 +160,12 @@ subroutine prim2con(handle, gxx, gxy, gxz, gyy, gyz, gzz, det, ddens, &
endif
!!$ END: Check for NaN value
+#if USE_EOS_OMNI
+ call EOS_Omni_press(eoskey,keytemp,n,&
+ drho,deps,xtemp,xye,dpress,keyerr,anyerr)
+#else
dpress = EOS_Pressure(handle, drho, deps)
+#endif
vlowx = gxx*dvelx + gxy*dvely + gxz*dvelz
vlowy = gxy*dvelx + gyy*dvely + gyz*dvelz
@@ -339,6 +359,21 @@ subroutine prim2conpolytype(handle, gxx, gxy, gxz, gyy, gyz, &
#undef _EOS_BASE_INC_
#endif
#include "EOS_Base.inc"
+
+#if USE_EOS_OMNI
+! begin EOS Omni vars
+ integer :: n = 1
+ integer :: poly_eoskey = 0
+ integer :: keytemp = 0
+ integer :: anyerr = 0
+ integer :: keyerr(1) = 0
+ real*8 :: xpress = 0.0d0
+ real*8 :: xeps = 0.0d0
+ real*8 :: xtemp = 0.0d0
+ real*8 :: xye = 0.0d0
+ poly_eoskey = GRHydro_poly_eoskey
+! end EOS Omni vars
+#endif
w_tmp = gxx*dvelx*dvelx + gyy*dvely*dvely + gzz *dvelz*dvelz + &
2*gxy*dvelx*dvely + 2*gxz*dvelx*dvelz + 2*gyz*dvely*dvelz
@@ -357,11 +392,19 @@ subroutine prim2conpolytype(handle, gxx, gxy, gxz, gyy, gyz, &
else
w = 1.d0 / sqrt(1.d0 - w_tmp)
endif
-
+
+#if USE_EOS_OMNI
+ call EOS_Omni_press(poly_eoskey,keytemp,n,&
+ drho,xeps,xtemp,xye,dpress,keyerr,anyerr)
+
+ call EOS_Omni_EpsFromPress(poly_eoskey,keytemp,n,&
+ drho,xeps,xtemp,xye,dpress,deps,keyerr,anyerr)
+#else
if (handle .ge. 0) then
- dpress = EOS_Pressure(handle, drho, deps)
- deps = EOS_SpecificIntEnergy(handle, drho, dpress)
+ dpress = EOS_Pressure(handle, drho, deps)
+ deps = EOS_SpecificIntEnergy(handle, drho, dpress)
end if
+#endif
vlowx = gxx*dvelx + gxy*dvely + gxz*dvelz
vlowy = gxy*dvelx + gyy*dvely + gyz*dvelz