如何在Python中开始这个“数字密度的粒子”作业?

时间:2016-10-27 04:34:58

标签: python-3.x computer-science physics

  

第2部分 - 粒子数密度的测定

     

如果我们说q是特定尺寸颗粒的生产率,则在间隔dt中产生的颗粒总数仅为q dt。为了使具体内容如下,请采用案例:

     

a = 0.9amax

     

q = 100000

     

考虑距离原子核一定距离r处的这一数量的粒子。粒子的数密度将是数量除以体积,因此为了找到数量密度,我们必须计算半径为r的壳体的体积,其厚度对应于粒子在我们的时间间隔dt中行进的距离。显然,这只是粒子在半径r乘以时间间隔v(r)dt的速度,所以我们的壳体积是:

     

体积=壳表面积×壳厚度=4πr2v(r)dt

     

因此,半径r处的数密度n为:

     

n(r)= q dt /4πr2v(r)dt = q /4πr2v(r)(等式5)

     

你会注意到我们上面的表达式对于核心表面的粒子数密度具有奇点,因为在那个位置,向外速度v(R)为0.显然,这表明我们预计随着灰尘从表面加速,颗粒密度n会迅速下降。现在,我们不要担心这一点 - 我们以后不需要它 - 只是绘制数字密度如何随核距离的变化而变化,从表面值后的第一个点开始

     

•使用q和上面给出的参数评估所有计算点的Eqaution 5。

     

•制作数字密度与半径的对数图。您应该发现,在达到终端速度后,数密度会减小为r-2,对应于对数 - 对数图上的-2的斜率

当前代码:

% matplotlib inline
import numpy as np
import matplotlib.pyplot as pl

R = 2000 #Nucleus Radius (m)
GM_n = 667 #Nucleus Mass (m^3 s^-2)
Q = 7*10**27 #Gas Production Rate (molecules s^-1)
V_g = 1000 #Gas Velocity (m s^-1)
C_D = 4 #Drag Coefficient Dimensionless
p_d = 500 #Grain Density (kg m^-3)
M_h2o = .01801528/(6.022*10**23) #Mass of a water molecule (g/mol)
pi = np.pi
p_g_R = M_h2o*Q/(4*np.pi*R**2*V_g)
print ('Gas Density at the comets nucleus: ', p_g_R)
a_max = (3/8)*C_D*(V_g**2)*p_g_R*(1/p_d)*((R**2)/GM_n)
print ('Radius of Maximum Size Particle: ', a_max)

def drag_force(C_D,V_g,p_g_R,pi,a,v):
    drag = .5*C_D*((V_g - v)**2)*p_g_R*pi*a**2
    return drag
def grav_force(GM_n,M_d,r):
    grav = -(GM_n*M_d)/(r**2)
    return grav
def p_g_r(p_g_R,R,r):
    p_g_r = p_g_R*(R**2/r**2)
    return p_g_r
dt = 1
tfinal = 100000
v0 = 0
t = np.arange(0.,tfinal+dt,dt)
npoints = len(t)
r = np.zeros(npoints)
v = np.zeros(npoints)
r[0]= R
v[0]= v0

a = np.array([0.9,0.5,0.1,0.01,0.001])*a_max

for j in range(len(a)):
    M_d = 4/3*pi*a[j]**3*p_d
    for i in range(len(t)-1):
        rmid = r[i] + v[i]*dt/2.
        vmid = v[i] + (grav_force(GM_n,M_d,r[i])+drag_force(C_D,V_g,p_g_r(p_g_R,R,r[i]),pi,a[j],v[i]))*dt/2.           
    r[i+1] = r[i] + vmid*dt
    v[i+1] = v[i] + (grav_force(GM_n,M_d,rmid)+drag_force(C_D,V_g,p_g_r(p_g_R,R,rmid),pi,a[j],vmid))*dt
    pl.plot(r,v)

pl.show()

a_2= 0.9*a_max
q = 100000

我以前从来没有编过类似这样的东西,我的班级对我来说很难,我也不理解。我在教授的帮助下开发了上述代码,我几乎没有时间完成这个项目。我只是想帮助理解这个问题。

当我只有v(t),r(t)时,如何找到v(r)? 我该如何计算r值以及我甚至使用哪些r值?

1 个答案:

答案 0 :(得分:2)

你有v作为已知的时间函数,r作为另一个已知的时间函数。您可以将这些转换为tvtr的对比。要将v作为r的函数,请删除t