aboutsummaryrefslogtreecommitdiff
path: root/src/EOS_Hybrid.F
blob: bfcb3ca8e1c933bca95aced08c222e2ec7c68c95 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
 /*@@
   @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_DECLARE(CCTK_REAL, rho, )
      CCTK_DECLARE(CCTK_REAL, 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_DECLARE(CCTK_REAL, eps, )
      CCTK_DECLARE(CCTK_REAL, 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
      CCTK_DECLARE(CCTK_REAL, eps, )

      EOS_Hybrid_DPressByDEps = (eos_gamma_th - 1.d0) * rho

      end function EOS_Hybrid_DPressByDEps