aboutsummaryrefslogtreecommitdiff
path: root/src/EOS_Omni_MultiVarCalls.F90
blob: ec35cfe509beeafaa7d515dc71b4095ef4135ff9 (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
#include "cctk.h"
#include "cctk_Parameters.h"
#include "cctk_Arguments.h"
#include "cctk_Functions.h"

! eoskey:
! 1 --- polytropic EOS
! 2 --- gamma-law EOS
! 3 --- hybrid EOS
! 4 --- finite-T microphysical NSE EOS


subroutine EOS_Omni_EOS_short(eoskey,keytemp,rf_precision,npoints,&
     rho,eps,temp,ye,press,entropy,cs2,dedt,dpderho,dpdrhoe,munu,&
     keyerr,anyerr)

  use EOS_Omni_Module
  implicit none
  DECLARE_CCTK_PARAMETERS

  CCTK_INT, intent(in)     :: eoskey,keytemp,npoints
  CCTK_INT, intent(out)    :: keyerr(npoints)
  CCTK_INT, intent(out)    :: anyerr
  CCTK_REAL, intent(in)    :: rf_precision
  CCTK_REAL, intent(in)    :: rho(npoints),ye(npoints)
  CCTK_REAL, intent(inout) :: eps(npoints), temp(npoints)
  CCTK_REAL, intent(out)   :: press(npoints)
  CCTK_REAL, intent(inout) :: entropy(npoints)
  CCTK_REAL, intent(out)   :: cs2(npoints)
  CCTK_REAL, intent(out)   :: dedt(npoints)
  CCTK_REAL, intent(out)   :: dpderho(npoints)
  CCTK_REAL, intent(out)   :: dpdrhoe(npoints)
  CCTK_REAL, intent(out)   :: munu(npoints)

  ! local vars
  integer          :: i
  character(256)   :: warnstring
  ! temporary vars for nuc_eos
  real*8           :: xrho,xye,xtemp,xenr,xent
  real*8           :: xprs,xmunu,xcs2
  real*8           :: xdedt,xdpderho,xdpdrhoe

  if(eoskey.ne.4) then
     call CCTK_WARN(0,"EOS_Omni_EOS_short currently does not work for this eoskey")
  endif

  anyerr    = 0
  keyerr(:) = 0
  
  do i=1,npoints

     xrho = rho(i) * inv_rho_gf
     xtemp = temp(i)
     xye = ye(i)
     xenr = eps(i) * inv_eps_gf
     xent = entropy(i)
     call nuc_eos_short(xrho,xtemp,xye,xenr,xprs,& 
          xent,xcs2,xdedt,xdpderho,xdpdrhoe,xmunu,&
          keytemp,keyerr(i),rf_precision)
     
     if(keyerr(i).ne.0) then
        anyerr = 1
     endif
     
     if(keytemp.eq.1.or.keytemp.eq.2) then
        eps(i) = xenr * eps_gf
     else if(keytemp.eq.2) then
        eps(i) = xenr * eps_gf
        temp(i) = xtemp
     else
        temp(i) = xtemp
     endif
     
     press(i)     = xprs * press_gf
     entropy(i)   = xent
     cs2(i)       = xcs2
     dedt(i)      = xdedt * eps_gf
     dpderho(i)   = xdpderho * press_gf * inv_eps_gf
     dpdrhoe(i)   = xdpdrhoe * press_gf * inv_rho_gf
     munu(i)      = xmunu
     
  enddo

end subroutine EOS_Omni_EOS_short