aboutsummaryrefslogtreecommitdiff
path: root/src/EOS_Hybrid.F
diff options
context:
space:
mode:
Diffstat (limited to 'src/EOS_Hybrid.F')
-rw-r--r--src/EOS_Hybrid.F144
1 files changed, 144 insertions, 0 deletions
diff --git a/src/EOS_Hybrid.F b/src/EOS_Hybrid.F
new file mode 100644
index 0000000..c74af75
--- /dev/null
+++ b/src/EOS_Hybrid.F
@@ -0,0 +1,144 @@
+ /*@@
+ @file EOS_Hybrid.F
+ @date Wed Mar 20 14:56:35 2002
+ @author Ian Hawke
+ @desc
+ Routines to calculate the EOS used by
+ Dimmelmeier Novak Font Ibanez Mueller PRD71 064023 (2005)
+ in supernova core collapse simulations.
+ @enddesc
+ @@*/
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+
+ CCTK_REAL function EOS_Hybrid_Pressure(rho, eps)
+
+ USE EOS_Polytrope_Scalars
+ USE EOS_Hybrid_Scalars
+
+ implicit none
+
+ DECLARE_CCTK_PARAMETERS
+
+ CCTK_REAL rho, eps, local_eos_gamma, p_poly, p_th, local_eos_k_cgs, zero
+
+ zero = 0.d0
+
+ if (rho > rho_nuc) then
+ local_eos_gamma = eos_gamma_supernuclear
+ local_eos_k_cgs = eos_k_supernuclear_cgs
+ else
+ local_eos_gamma = eos_gamma
+ local_eos_k_cgs = eos_k_cgs
+ end if
+
+ p_poly = p_geom_factor * local_eos_k_cgs *
+ . (rho * rho_geom_factor_inv)**local_eos_gamma
+
+ p_th = - p_geom_factor * local_eos_k_cgs * (eos_gamma_th - 1.d0) /
+ . (local_eos_gamma - 1.d0) * (rho * rho_geom_factor_inv)**local_eos_gamma +
+ . (eos_gamma_th - 1.d0) * rho * eps -
+ . (eos_gamma_th - 1.d0) * (local_eos_gamma - eos_gamma) /
+ . (eos_gamma - 1.d0) / (eos_gamma_supernuclear - 1.d0) *
+ . p_geom_factor * eos_k_cgs * rho_geom_factor_inv**eos_gamma *
+ . rho_nuc**(eos_gamma - 1.d0) * rho
+
+ p_th = max(zero, p_th)
+
+ EOS_Hybrid_Pressure = p_poly + p_th
+
+ end function EOS_Hybrid_Pressure
+
+c The specific internal energy isn''t correct yet
+
+ CCTK_REAL function EOS_Hybrid_SpecificIE(rho, press)
+
+ USE EOS_Polytrope_Scalars
+ USE EOS_Hybrid_Scalars
+
+ implicit none
+ DECLARE_CCTK_PARAMETERS
+
+ CCTK_REAL rho, press
+
+c$$$ if (rho > rho_nuc) then
+c$$$ EOS_Hybrid_SpecificIE = eos_k_cgs / (eos_gamma_2 - 1.d0) *
+c$$$ . (rho / rho_nuc) ** eos_gamma_2 * rho_nuc ** eos_gamma_1 /
+c$$$ . rho +
+c$$$ . eos_k_cgs * (eos_gamma_2 - eos_gamma_1) /
+c$$$ . (eos_gamma_2 - 1.d0) / (eos_gamma_1 - 1.d0) *
+c$$$ . rho_nuc ** (eos_gamma_1 - 1.d0)
+c$$$ else
+c$$$ EOS_Hybrid_SpecificIE = eos_k_cgs * (rho ** (eos_gamma_1 - 1.d0)) /
+c$$$ . (eos_gamma_1 - 1.d0)
+c$$$ end if
+
+ EOS_Hybrid_SpecificIE = 2.34567890d0
+
+ end function EOS_Hybrid_SpecificIE
+
+c The rest mass density isn''t correct yet
+
+ CCTK_REAL function EOS_Hybrid_RestMassDens(eps, press)
+
+ implicit none
+ DECLARE_CCTK_PARAMETERS
+
+ CCTK_REAL eps, press
+
+ EOS_Hybrid_RestMassDens = 1.23456789d0
+
+ end function EOS_Hybrid_RestMassDens
+
+ CCTK_REAL function EOS_Hybrid_DPressByDRho(rho, eps)
+
+ USE EOS_Polytrope_Scalars
+ USE EOS_Hybrid_Scalars
+
+ implicit none
+ DECLARE_CCTK_PARAMETERS
+
+ CCTK_REAL rho, eps, local_eos_gamma, local_eos_k_cgs, d_p_poly, d_p_th_1,
+ . d_p_th_2, zero
+
+ zero = 0.d0
+
+ if (rho > rho_nuc) then
+ local_eos_gamma = eos_gamma_supernuclear
+ local_eos_k_cgs = eos_k_supernuclear_cgs
+ else
+ local_eos_gamma = eos_gamma
+ local_eos_k_cgs = eos_k_cgs
+ end if
+
+ d_p_poly = local_eos_gamma * p_geom_factor * local_eos_k_cgs *
+ . rho**(local_eos_gamma - 1.d0) * rho_geom_factor_inv**local_eos_gamma
+
+ d_p_th_1 = - local_eos_gamma * p_geom_factor * local_eos_k_cgs *
+ . (eos_gamma_th - 1.d0) / (local_eos_gamma - 1.d0) *
+ . rho**(local_eos_gamma - 1.d0) * rho_geom_factor_inv**local_eos_gamma
+
+ d_p_th_2 = (eos_gamma_th - 1.d0) * eps
+ . - (eos_gamma_th - 1.d0) * (local_eos_gamma - eos_gamma) /
+ . (eos_gamma - 1.d0) / (eos_gamma_supernuclear - 1.d0) *
+ . p_geom_factor * eos_k_cgs * rho_geom_factor_inv**eos_gamma *
+ . rho_nuc**(eos_gamma - 1.d0)
+
+! d_p_th_1 = max(d_p_th_1, zero)
+! d_p_th_2 = max(d_p_th_2, zero)
+
+ EOS_Hybrid_DPressByDRho = d_p_poly + d_p_th_1 + d_p_th_2
+
+ end function EOS_Hybrid_DPressByDRho
+
+ CCTK_REAL function EOS_Hybrid_DPressByDEps(rho, eps)
+
+ implicit none
+ DECLARE_CCTK_PARAMETERS
+
+ CCTK_REAL rho, eps
+
+ EOS_Hybrid_DPressByDEps = (eos_gamma_th - 1.d0) * rho
+
+ end function EOS_Hybrid_DPressByDEps