我应该使用F = V.B力来估计B场对粒子偏转的影响。
我有一个nx和ny的2D网格,表示每个方向上的点数.B是磁场,它是2D网格阵列(尺寸nx.ny = 1600.900 = 1440000),V是速度是一个1D数组(尺寸为431605462)。我也有两个一维数组(与V数组的维数相同),分别显示每个粒子的X和y坐标。我称它们为“ grid_pro_x”和“ grid_pro_y”。
由于V是一维数组,而B是2D数组,所以我不能直接将V与B相乘。为解决此问题,我为V创建了一个二维零数组,并使用2进行循环,我发现了每个单元格中都存在的粒子的网格。我将所有粒子的平均速度视为每个单元的速度分量。由于网格的尺寸较大,如果我保持原始尺寸,则代码需要几天才能完成V数组,因为它需要重复1440000次。 作为解决方案,我使用称为“ divider”的可选变量压缩了V。如果我使用divider = 10,我猜代码需要2天才能完成,如果我使用divider = 100,代码将在半小时内完成,但是现在结果的精度大大降低了。您可以在下面看到代码。
nx,ny= 1600, 900
xmin = -30.0e-6
xmax = 50.0e-6
ymin = -45.0e-6
ymax = 45.0e-6
#### create a 2D velocity array
divider = 100
m_p= 1.6726219e-27 # (kg unit) proton mass
nx_new = nx/divider
ny_new = ny/divider
Vx = np.zeros((ny_new, nx_new))
Vy = np.zeros((ny_new, nx_new))
res_x = (xmax - xmin)/nx_new # resolution in x direction
res_y = (ymax - ymin)/ny_new # resolution in y direction
# Find corresponding indices
for i in range( 0,ny_new ):
for j in range( 0,nx_new):
xx = i*res_x
yy = j*res_y
##### all particles with different Px confined in a specific cell
Px_pro_lim = Px_pro[(grid_pro_x >= xx ) & (grid_pro_x < xx+res_x ) & (grid_pro_y >= yy ) & (grid_pro_y < yy+res_y ) ]
Vx[i,j] = np.mean(Px_pro_lim)/m_p
#print 'Vx[i,j]= ' ,Vx[i,j]
您对提高代码效率是否有任何建议,或者是否有其他算法可以为V参数找到2D数组?
欢呼