I have a simple code as follow:
Code: Alles auswählen
import pylab
from scipy.integrate import odeint
from scipy.constants import pi, G, c, hbar, m_n
Msun=1.98892e30
Gamma0 = 5.0/3.0
K0 = (3.0*pi**2)**(2.0/3.0)*hbar**2/(5.0*m_n**(8.0/3.0))
Gamma1 = 3
rho1 = 5e17
P1 = K0*rho1**Gamma0
K1 = P1/rho1**Gamma1
def eos(rho):
if rho<rho1: return K0*rho**Gamma0
else: return K1*rho**Gamma1
def inveos(P):
if P<P1: return (P/K0)**(1.0/Gamma0)
else: return (P/K1)**(1.0/Gamma1)
def tov(y, r):
P, m =y[0], y[1]
rho = inveos(P)
dPdr = -G*(rho+P/c**2)*(m+4.0*pi*r**3*P/c**2)
dPdr = dPdr/(r*(r-2.0*G*m/c**2))
dmdr = 4.0*pi*r**2*rho
return pylab.array([dPdr,dmdr])
def tovsolve(rhoc):
r = pylab.arange(10.0, 20000.0, dr)
m = pylab.zeros_like(r)
P = pylab.zeros_like(r)
m[0] = 4.0*pi*r[0]**3*rhoc
P[0] = eos(rhoc)
y = pylab.array([P[0], m[0]])
i =0
while P[i] > 0.0 and i < len(r)-1:
dr = r[i+1]-r[i]
y = odeint.rk4(tov, y, r[i], dr)
P[i+1] = y[0]
m[i+1] = y[1]
i = i + 1
return m[i-1]/Msun, r[i-1]/1000.0
rhoc = pylab.logspace(17.5,20)
M = pylab.zeros_like(rhoc)
R = pylab.zeros_like(rhoc)
for i in range(len(rhoc)):
print rhoc[i]
M[i], R[i] = tovsolve(rhoc[i])
pylab.plot(R,M)
pylab.xlab('Mass (km)')
pylab.ylab('Mass (solar)')
pylab.grid()
pylab.show()
pl.savefig("M-R Diagram.png")
pl.savefig("M-R Diagram.eps")
File "TOV4.py", line 45, in <module>
M, R = tovsolve(rhoc)
File "TOV4.py", line 26, in tovsolve
r = pylab.arange(10.0, 20000.0, dr)
UnboundLocalError: local variable 'dr' referenced before assignment
Can anybody help me to fix it pls :K . The problem seems to be with
tovsolve funcion.
Thanks