예제 #1
0
파일: Quarkyonic.py 프로젝트: sotzee/ns2019
def get_eos_array(u_min,u_max,eos_args):
    n_s,a,b,Lambda,kappa,mass_args=eos_args
    n_s_mev4=toMev4(n_s,'mevfm')
    k_Fn_max=opt.newton(n_B_for_newton,1000.,args=(n_s_mev4*u_max,Lambda,kappa))
    k_Fn_min=(3*np.pi**2*n_s_mev4*u_min)**(1./3)
    k_Fn_array=k_Fn_min*np.exp(np.linspace(0,np.log(k_Fn_max/k_Fn_min),500))
    baryon_density=np.concatenate(([0],n_B(k_Fn_array,Lambda,kappa)))
    energy_density=np.concatenate(([0],Energy_density(k_Fn_array,n_s_mev4,a,b,Lambda,kappa,mass_args)))
    pressure=np.concatenate(([0],Pressure(k_Fn_array,n_s_mev4,a,b,Lambda,kappa,mass_args)))
    eos_array=np.array([baryon_density,energy_density,pressure])
    k_Fs=(3*np.pi**2*n_s_mev4)**(1./3)
    sol_saturation=np.array([n_B(k_Fs,Lambda,kappa),Energy_density(k_Fs,n_s_mev4,a,b,Lambda,kappa,mass_args),Pressure(k_Fs,n_s_mev4,a,b,Lambda,kappa,mass_args)])
    stability=np.logical_and(eos_array[1,1:]-eos_array[1,:-1]>0,eos_array[2,1:]-eos_array[2,:-1]>0)
    causality=eos_array[1,1:]-eos_array[1,:-1]>eos_array[2,1:]-eos_array[2,:-1]
    return toMevfm(eos_array,'mev4'),toMevfm(sol_saturation,'mev4'),bool(stability.min() and causality.min())
예제 #2
0
 def __init__(self,init_args,init_sat,args):
     self.baryon_density_sat,self.bd_energy,self.incompressibility,\
     self.m_eff,self.J,self.L,self.self_W,self.mass_args=args
     self.args=args
     self.eos_RMF=EOS_RMF(init_args,init_sat,args)
     self.eos_args=self.eos_RMF.eos_args
     self.init_sat=self.eos_RMF.init_sat
     self.eos_array=self.eos_RMF.eos_array
     self.sol_saturation=toMevfm(np.array(self.eos_RMF.sol_saturation),'mev4')
     fix_crust_baryon_density=np.linspace(0.6,0.3,4)*self.sol_saturation[0]
     self.fix_crust_logic=False
     for fix_crust_baryon_density_i in fix_crust_baryon_density:
         if(self.sol_saturation[2]>1.1*EOS_BPS.eosPressure_frombaryon(fix_crust_baryon_density_i)):
             self.eos_SLY4withPoly=EOS_BPSwithPoly([fix_crust_baryon_density_i,self.sol_saturation[2],self.sol_saturation[0],4*self.sol_saturation[2],2*self.sol_saturation[0],8*self.sol_saturation[2],3*self.sol_saturation[0]])
             self.fix_crust_logic=True
             break
         
     self.stability=self.eos_RMF.stability
     self.positive_pressure=self.eos_RMF.positive_pressure
     self.baryon_density_s=self.eos_RMF.baryon_density_s
     self.pressure_s=self.eos_RMF.pressure_s
     self.density_s=self.eos_RMF.density_s
     self.unit_mass=self.eos_RMF.unit_mass
     self.unit_radius=self.eos_RMF.unit_radius
     self.unit_N=self.eos_RMF.unit_N
예제 #3
0
파일: eos_class.py 프로젝트: sotzee/ns
 def __init__(self, args):
     self.m0, self.ms, self.ns, self.g = args  #m in unit MeV
     self.baryon_density_s = self.ns
     self.pressure_s = toMevfm(self.m0**4, 'mev4')
     self.density_s = self.pressure_s
     n_intepolation = np.linspace(0, 20, 1001)
     self.pressureFermiGas = self.eos_for_intepolation(n_intepolation)
     self.eos_n_from_pressure = interp1d(self.pressureFermiGas,
                                         n_intepolation,
                                         kind='linear')
예제 #4
0
파일: eos_class.py 프로젝트: sotzee/ns
 def __init__(self, args):
     self.m, self.g = args  #m in unit MeV
     self.baryon_density_s = 0.16
     self.pressure_s = toMevfm(self.m**4, 'mev4')
     self.density_s = self.pressure_s
     x_intepolation = np.linspace(0, 2000. / self.m, 1001)
     self.pressureFermiGas = self.eos_for_intepolation(x_intepolation)
     self.eos_x_from_pressure = interp1d(self.pressureFermiGas,
                                         x_intepolation,
                                         kind='linear')
예제 #5
0
def pressure_density_PNM(PNM_args,eos_args,extra_args):
    g2_Phi,g2_W,g2_rho,b,c,Lambda,self_W=eos_args
    n,mass_args=extra_args
    m_e,m,m_Phi,m_W,m_rho=mass_args
    m_eff,W_0=PNM_args
    n_n=n
    n3=-n_n
    k_F_n=(3*np.pi**2*n_n)**(1./3)
    E_F_n=(k_F_n**2+m_eff**2)**0.5
    Phi_0=m-m_eff
    rho_0=0.5*n3/((m_rho)**2/g2_rho + 2*Lambda*W_0**2)
    chempo_n=E_F_n+W_0-rho_0/2
    energy_density=((E_F_n*k_F_n**3+E_F_n**3*k_F_n-m_eff**4*np.log((k_F_n+E_F_n)/m_eff)))/(8*np.pi**2)+(m_Phi*Phi_0)**2/(2*g2_Phi)+(m_W*W_0)**2/(2*g2_W)+(m_rho*rho_0)**2/(2*g2_rho)+b*m*Phi_0**3/3+c*Phi_0**4/4+self_W*W_0**4/8+3*Lambda*(W_0*rho_0)**2
    pressure=chempo_n*n_n-energy_density
    return toMevfm(np.array([energy_density,pressure]),'mev4')
예제 #6
0
def eos_pressure_density(eos_array_args,eos_args_with_baryon,mass_args):
    m_e,m,m_Phi,m_W,m_rho=mass_args
    n,g2_Phi,g2_W,g2_rho,b,c,Lambda,self_W=eos_args_with_baryon
    m_eff,W_0,k_F_n=eos_array_args
    n_n=k_F_n**3/(3*np.pi**2)
    n_p=n-n_n
    n3=n_p-n_n
    n_e=n_p
    k_F_p=(3*np.pi**2*n_p)**(1./3)
    k_F_e=k_F_p
    E_F_e=(k_F_e**2+m_e**2)**0.5
    E_F_p=(k_F_p**2+m_eff**2)**0.5
    E_F_n=(k_F_n**2+m_eff**2)**0.5
    Phi_0=m-m_eff
    rho_0=0.5*n3/((m_rho)**2/g2_rho + 2*Lambda*W_0**2)
    chempo_e=E_F_e
    chempo_p=E_F_p+W_0+rho_0/2
    chempo_n=E_F_n+W_0-rho_0/2
    energy_density=((E_F_e*k_F_e**3+E_F_e**3*k_F_e-m_e**4*np.log((k_F_e+E_F_e)/m_e))+(E_F_p*k_F_p**3+E_F_p**3*k_F_p-m_eff**4*np.log((k_F_p+E_F_p)/m_eff))+(E_F_n*k_F_n**3+E_F_n**3*k_F_n-m_eff**4*np.log((k_F_n+E_F_n)/m_eff)))/(8*np.pi**2)+(m_Phi*Phi_0)**2/(2*g2_Phi)+(m_W*W_0)**2/(2*g2_W)+(m_rho*rho_0)**2/(2*g2_rho)+b*m*Phi_0**3/3+c*Phi_0**4/4+self_W*W_0**4/8+3*Lambda*(W_0*rho_0)**2
    pressure=chempo_e*n_e+chempo_p*n_p+chempo_n*n_n-energy_density
    return toMevfm(np.array([n,energy_density,pressure]),'mev4')
예제 #7
0
파일: eos_class.py 프로젝트: sotzee/ns
class EOS_BPS(object):
    # =============================================================================
    #     #density in units: g/cm3
    #     densityBPS = np.array([-7.861E0,0.0,7.861E0,  7.900E0,  8.150E0,  1.160E1,  1.640E1,  4.510E1,  2.120E2,  1.150E3,  1.044E4,  2.622E4,  6.587E4,  1.654E5,  4.156E5,  1.044E6,  2.622E6,  6.588E6,  8.294E6,  1.655E7,  3.302E7,  6.590E7,  1.315E8,  2.624E8,  3.304E8,  5.237E8,  8.301E8,  1.045E9,  1.316E9,  1.657E9,  2.626E9,  4.164E9,  6.602E9,  8.313E9,  1.046E10,  1.318E10,  1.659E10,  2.090E10,  2.631E10,  3.313E10,  4.172E10,  5.254E10,  6.617E10,  8.333E10,  1.049E11,  1.322E11,  1.664E11,  1.844E11,  2.096E11,  2.640E11,  3.325E11,  4.188E11,  4.299E11,  4.460E11,  5.228E11,  6.610E11,  7.964E11,  9.728E11,  1.196E12,  1.471E12,  1.805E12,  2.202E12,  2.930E12,  3.833E12,  4.933E12,  6.248E12,  7.801E12,  9.612E12,  1.246E13,  1.496E13, 1.778E13, 2.210E13, 2.988E13, 3.767E13, 5.081E13, 6.193E13, 7.732E13, 9.826E13, 1.262E14])
    #     #pressure in units: g*cm/s
    #     pressureBPS = np.array([-1.010E9,0.0, 1.010E9,  1.010E10,  1.010E11,  1.210E12,  1.400E13,  1.700E14,  5.820E15,  1.900E17,  9.744E18,  4.968E19,  2.431E20,  1.151E21,  5.266E21,  2.318E22,  9.755E22,  3.911E23,  5.259E23,  1.435E24,  3.833E24,  1.006E25,  2.604E25,  6.676E25,  8.738E25,  1.629E26,  3.029E26,  4.129E26,  5.036E26,  6.860E26,  1.272E27,  2.356E27,  4.362E27,  5.662E27,  7.702E27,  1.048E28,  1.425E28,  1.938E28,  2.503E28,  3.404E28,  4.628E28,  5.949E28,  8.089E28,  1.100E29,  1.495E29,  2.033E29,  2.597E29,  2.892E29,  3.290E29,  4.473E29,  5.816E29,  7.538E29,  7.805E29,  7.890E29,  8.352E29,  9.098E29,  9.831E29,  1.083E30,  1.218E30,  1.399E30,  1.638E30,  1.950E30,  2.592E30,  3.506E30,  4.771E30,  6.481E30,  8.748E30,  1.170E31, 1.695E31, 2.209E31, 2.848E31, 3.931E31, 6.178E31, 8.774E31, 1.386E32, 1.882E32, 2.662E32, 3.897E32, 5.861E32])
    #     #baryon density in units: 1/cm3
    #     baryondensityBPS = np.array([-4.73E24,0.0, 4.73E24, 4.76E24, 4.91E24, 6.990E24,  9.900E24,  2.720E25,  1.270E26,  6.930E26,  6.295E27,  1.581E28,  3.972E28,  9.976E28,  2.506E29,  6.294E29,  1.581E30,  3.972E30,  5.000E30,  9.976E30,  1.990E31,  3.972E31,  7.924E31,  1.581E32,  1.990E32,  3.155E32,  5.000E32,  6.294E32,  7.924E32,  9.976E32,  1.581E33,  2.506E33,  3.972E33,  5.000E33,  6.294E33,  7.924E33,  9.976E33,  1.256E34,  1.581E34,  1.990E34,  2.506E34,  3.155E34,  3.972E34,  5.000E34,  6.294E34,  7.924E34,  9.976E34,  1.105E35,  1.256E35,  1.581E35,  1.990E35,  2.506E35,  2.572E35,  2.670E35,  3.126E35,  3.951E35,  4.759E35,  5.812E35,  7.143E35,  8.786E35,  1.077E36,  1.314E36,  1.748E36,  2.287E36,  2.942E36,  3.726E36,  4.650E36,  5.728E36, 7.424E36, 8.907E36, 1.059E37, 1.315E37, 1.777E37, 2.239E37, 3.017E37, 3.675E37, 4.585E37, 5.821E37, 7.468E37])
    #     #density in units: Mevfm3
    #     densityBPS = toMevfm(densityBPS,'density')
    #     #pressure in units: Mevfm3
    #     pressureBPS = toMevfm(pressureBPS,'pressure')
    #     #baryon density in units: 1/fm3
    #     baryondensityBPS = toMevfm(baryondensityBPS,'baryondensity')
    # =============================================================================

    eos_sly4 = np.loadtxt('./eos_sly4.dat')
    baryondensityBPS = eos_sly4[:, 0]
    densityBPS = eos_sly4[:, 1]
    pressureBPS = eos_sly4[:, 2]

    #density in units: Mevfm3
    densityBPS = toMevfm(densityBPS, 'density')
    #pressure in units: Mevfm3
    pressureBPS = toMevfm(pressureBPS, 'pressure')
    eos_array = np.array([baryondensityBPS, densityBPS, pressureBPS])

    eosPressure_frombaryon = interp1d(
        list(baryondensityBPS[:66]) + [0.16 / 2.7] +
        list(baryondensityBPS[66:]) + [baryondensityBPS[-1] * 100],
        list(pressureBPS[:66]) + [0.22201] + list(pressureBPS[66:]) +
        [pressureBPS[-1] * 100],
        kind='quadratic')
    eosPressure = interp1d(list(densityBPS[:66]) + [56.2006] +
                           list(densityBPS[66:]) + [densityBPS[-1] * 100],
                           list(pressureBPS[:66]) + [0.22201] +
                           list(pressureBPS[66:]) + [pressureBPS[-1] * 100],
                           kind='quadratic')
    eosDensity = interp1d(list(pressureBPS[:66]) + [0.22201] +
                          list(pressureBPS[66:]) + [pressureBPS[-1] * 100],
                          list(densityBPS[:66]) + [56.2006] +
                          list(densityBPS[66:]) + [densityBPS[-1] * 100],
                          kind='quadratic')
    eosBaryonDensity = interp1d(
        list(pressureBPS[:66]) + [0.22201] + list(pressureBPS[66:]) +
        [pressureBPS[-1] * 100],
        list(baryondensityBPS[:66]) + [0.16 / 2.7] +
        list(baryondensityBPS[66:]) + [baryondensityBPS[-1] * 100],
        kind='quadratic')
    baryon_density_s = 0.16
    chempo_surface = (pressureBPS[0] + densityBPS[0]) / baryondensityBPS[0]
    pressure_s = eosPressure_frombaryon(baryon_density_s)
    density_s = eosDensity(pressure_s)
    unit_mass = c**4 / (G**3 * density_s * 1e51 * e)**0.5
    unit_radius = c**2 / (G * density_s * 1e51 * e)**0.5
    unit_N = unit_radius**3 * baryon_density_s * 1e45

    def eosChempo(self, pressure):
        return (pressure +
                self.eosDensity(pressure)) / self.eosBaryonDensity(pressure)

    def eosCs2(self, pressure):
        return 1.0 / derivative(
            self.eosDensity, pressure, dx=pressure * dlnx_cs2)
예제 #8
0

def Cs2(k_Fn, n_s, a, b, Lambda, kappa, mass_args):
    det_Pressure = Pressure(
        k_Fn * 1.001, n_s, a, b, Lambda, kappa, mass_args) - Pressure(
            k_Fn * 0.999, n_s, a, b, Lambda, kappa, mass_args)
    det_Energy_density = Energy_density(
        k_Fn * 1.001, n_s, a, b, Lambda, kappa, mass_args) - Energy_density(
            k_Fn * 0.999, n_s, a, b, Lambda, kappa, mass_args)
    return det_Pressure / det_Energy_density


Lambda = 380.
kappa = 0.3
mass_args = (939., 313., 313.)

n_s = toMev4(0.16, 'mevfm')
a = -28.8
b = 10.
k_Fn = 10**np.linspace(0, 3.3, 100)
k_FQ_array = k_FQ(k_Fn, Lambda, kappa)
n_B_array = toMevfm(n_B(k_Fn, Lambda, kappa), 'mev4')
Energy_density_array = toMevfm(
    Energy_density(k_Fn, n_s, a, b, Lambda, kappa, mass_args), 'mev4')
Pressure_array = toMevfm(Pressure(k_Fn, n_s, a, b, Lambda, kappa, mass_args),
                         'mev4')
Cs2_array = Cs2(k_Fn, n_s, a, b, Lambda, kappa, mass_args)

plt.plot(n_B_array, Cs2_array)
plt.xlabel('n_B')
plt.ylabel('c$_s^2$')
예제 #9
0
파일: CompOSE.py 프로젝트: sotzee/ns
    mn,mp=np.loadtxt(path+EOS_i+'/eos.thermo',max_rows=1)[:2]
    thermo=np.loadtxt(path+EOS_i+'/eos.thermo',skiprows=1)
    chempo_min=(thermo[0,5]+1)*mn
    eos.append(EOS_intepolation(chempo_min,EOS_ns_i,nb,(thermo[:,9]+1)*(nb*mn),thermo[:,3]*nb))
import matplotlib.pyplot as plt
import show_properity as sp
fig, axes = plt.subplots(1, 1,figsize=(8,6),sharex=True,sharey=True)
sp.show_eos(axes,eos,0,1,500,pressure_range=[0.01,300,'log'],legend=EOS_LIST)

path='../EOS_Tables_Ozel/'
eos=[]
EOS_LIST=['ap4','mpa1','wff1','sly']
EOS_ns_LIST=[0.16,0.16,0.16,0.159]
for EOS_i,EOS_ns_i in zip(EOS_LIST,EOS_ns_LIST):
    eos_array_i=np.loadtxt(path+EOS_i+'.dat',skiprows=0)
    nb=toMevfm(eos_array_i[:,0]/1.66*1e24,'baryondensity')
    pr=toMevfm(eos_array_i[:,1],'density')
    ep=toMevfm(eos_array_i[:,2],'density')
    chempo_min=(ep[0]+pr[0])
    eos.append(EOS_intepolation(chempo_min,EOS_ns_i,nb,ep,pr))
import matplotlib.pyplot as plt
import show_properity as sp
fig, axes = plt.subplots(1, 1,figsize=(8,6),sharex=True,sharey=True)
sp.show_eos(axes,eos,0,1,500,pressure_range=[0.01,300,'log'],legend=EOS_LIST)

# =============================================================================
# from scipy.optimize import curve_fit
# from FindMaxmass import Maxmass
# index_bondary=2.
# for i in range(4):
#     pc_max=Maxmass(1e-8,1e-5,eos[i])[1]
예제 #10
0
 def __setstate__(self, state):
     self.__dict__.update(state)
     self.eosPressure_frombaryon = interp1d(toMevfm(self.eos_array[0],'mev4'),toMevfm(self.eos_array[2],'mev4'), kind='linear')
     self.eosPressure = interp1d(toMevfm(self.eos_array[1],'mev4'),toMevfm(self.eos_array[2],'mev4'), kind='linear')
     self.eosDensity  = interp1d(toMevfm(self.eos_array[2],'mev4'),toMevfm(self.eos_array[1],'mev4'), kind='linear')
     self.eosBaryonDensity = interp1d(toMevfm(self.eos_array[2],'mev4'),toMevfm(self.eos_array[0],'mev4'), kind='linear')
예제 #11
0
    def __init__(self,init_args,init_sat,args):
        self.baryon_density_sat,self.bd_energy,self.incompressibility,\
        self.m_eff,self.J,self.L,self.self_W,self.mass_args=args
        self.args=args
        sol_parameters = opt.root(equations,init_args[:6],tol=Preset_tol,args=self.args)
        self.eos_args=list(sol_parameters.x)+[self.self_W]
        #init_saturation = [6.2e+02,3.2e+02,2.6e+02,4.9e+01,3.2e+02,1.1e+09,1.8e+07]
        self.init_sat,self.eos_array,self.sol_saturation,self.stability,self.positive_pressure=get_eos_array(init_sat,Preset_tol,self.baryon_density_sat,self.mass_args,self.eos_args)
        print(self.stability,self.positive_pressure)
# =============================================================================
#         plt.plot(toMevfm(self.eos_array[6],'mev4'),toMevfm(self.eos_array[7],'mev4'))
#         print(toMevfm(self.eos_array[7],'mev4'))
#         plt.xlim(0,500)
#         plt.ylim(0,5)
# =============================================================================
        self.baryon_density_s=toMevfm(self.baryon_density_sat,'mev4')
        self.pressure_s=toMevfm(self.sol_saturation[2],'mev4')
        self.density_s=toMevfm(self.sol_saturation[1],'mev4')
        self.unit_mass=c**4/(G**3*self.density_s*1e51*e)**0.5
        self.unit_radius=c**2/(G*self.density_s*1e51*e)**0.5
        self.unit_N=self.unit_radius**3*self.baryon_density_s*1e45
        self.eosPressure_frombaryon = interp1d(toMevfm(self.eos_array[0],'mev4'),toMevfm(self.eos_array[2],'mev4'), kind='linear')
        self.eosPressure = interp1d(toMevfm(self.eos_array[1],'mev4'),toMevfm(self.eos_array[2],'mev4'), kind='linear')
        self.eosDensity  = interp1d(toMevfm(self.eos_array[2],'mev4'),toMevfm(self.eos_array[1],'mev4'), kind='linear')
        self.eosBaryonDensity = interp1d(toMevfm(self.eos_array[2],'mev4'),toMevfm(self.eos_array[0],'mev4'), kind='linear')
예제 #12
0
파일: eos_class.py 프로젝트: sotzee/ns
 def eosBaryonDensity(self, pressure):
     n = self.eos_n_from_pressure(pressure)
     return toMevfm(self.g * self.m(n)**3 * self.x(n)**3 / (6 * np.pi**2),
                    'mev4')
예제 #13
0
파일: eos_class.py 프로젝트: sotzee/ns
 def eosDensity(self, pressure):
     n = self.eos_n_from_pressure(pressure)
     return toMevfm(self.g * self.m(n)**4 * self.chi(self.x(n)), 'mev4')
예제 #14
0
파일: eos_class.py 프로젝트: sotzee/ns
 def eos_for_intepolation(self, n):
     pressure = toMevfm(self.g * self.m(n)**4 * self.phi(self.x(n)), 'mev4')
     #energydensity=toMevfm(self.g*self.m**4*self.chi(x),'mev4')
     return pressure  #,energydensity
예제 #15
0
파일: eos_class.py 프로젝트: sotzee/ns
 def eos_for_intepolation(self, chempo):
     pressure = toMevfm(-self.Omega(chempo), 'mev4') - self.bag
     baryondensity = toMevfm(-self.dOmega_dchempo(chempo), 'mev4')
     energydensity = chempo * baryondensity - pressure
     return pressure, energydensity, baryondensity
예제 #16
0
파일: eos_class.py 프로젝트: sotzee/ns
 def eosBaryonDensity(self, pressure):
     return toMevfm(
         self.g * self.m**3 * self.eos_x_from_pressure(pressure)**3 /
         (6 * np.pi**2), 'mev4')
예제 #17
0
파일: eos_class.py 프로젝트: sotzee/ns
 def eosDensity(self, pressure):
     return toMevfm(
         self.g * self.m**4 * self.chi(self.eos_x_from_pressure(pressure)),
         'mev4')