【发布时间】:2020-07-10 21:28:15
【问题描述】:
所以我正在运行一个模拟,其中粒子相互之间以及墙壁相互作用。这里是 sn-p,它已经将粒子数据(时间步数、速度-x、速度-y、速度-z、位置-x、位置-y、位置-z)写入每个粒子的单个文件大量时间步长(增加 1000)。现在我有 15 个粒子,但未来会更多。
N_max = sim.getNumTimeSteps()
particleData = [ [] for x in range(len(sim.getParticleList()))]
for n in range (N_max):
sim.runTimeStep()
if (n%1000==0):
particles = sim.getParticleList()
for i in range(len(sim.getParticleList())):
x, y, z = particles[i].getVelocity()
x2, y2, z2 = particles[i].getPosition()
particleData[i].append( (n, x, y, z, x2, y2, z2) )
for i in range(len(sim.getParticleList())):
with open("{0:d}.dat".format(i), "w") as f:
for j in particleData[i]:
f.write("%f : %f,%f,%f : %f,%f,%f \n" % (j[0], j[1], j[2], j[3], j[4], j[5], j[6]))
sim.exit()
在我的模拟中,顶壁是固定的,底部是剪切的(移动的)。我有兴趣根据 y 位置将我的模拟分成条带。因此,如果它在 y 方向上是 10 个单位,我想将它分成 10 个宽度为 1 的条带。我正在尝试收集这些条带中粒子的速度(根据与哪个墙的接近程度来比较速度),然后我将对其进行平均并使用 matplotlib 绘制图表。
我对 Python 很陌生,所以非常擅长 Python 的人建议我使用 binning。 IE 对于每个时间步长,在读取粒子位置和速度后,我应该检查该粒子的 y 位置在哪里。我如何像这样分箱——将它添加到每个分箱的粒子列表中?他们建议将平均信息存储在另一个数组中。我在谷歌上搜索了很多关于 binning 的内容,但我对 numpy 和 scipy 可以做的所有事情感到不知所措,所以这些复杂/高级的例子对我来说已经丢失了。这是最好的方法吗?这一切有意义吗?!
这是我在读取粒子数据时所获得的……
for i in range(10):
with open("{}.dat".format(i),'r') as csvfile:
data = csv.reader(csvfile, delimiter=',')
y2 = []
for row in data:
y2.append(float(row[5]))
然后我假设分箱发生,将 y2 置于某些值之间?喜欢if (n / 10) <= y2 <= ((n+1) / 10):?
以下是 dat 文件的示例:
0.0 : 0.999900,-0.999900,0.0 : -6.999000,-7.001000,0.0
1000.0 : -1.617575,-0.927360,0.0 : -6.032388,-9.007120,0.0
2000.0 : -1.019145,-0.939388,0.0 : -3.059924,-9.008897,0.0
3000.0 : 0.654350,-0.560711,0.0 : -4.575242,-9.242543,0.0
4000.0 : 0.592084,0.509928,0.0 : -3.952575,-9.275643,0.0
5000.0 : 2.288733,0.0,0.0 : -3.038456,-10.0,0.0
等直到模拟结束,n=20000
- 每个文件都属于一个单独的粒子,因此它显示了该粒子在时间步长上的运动和速度。
- 我正在模拟 15 个粒子,所以我有 15 个文件。
- 对于条带,我希望所有粒子随时都在该条带中。
- 稍后我会平均这些数字。
- 如果模拟的域是 10x10,则粒子位于 y=0 和 y=10 之间的任意位置。
【问题讨论】:
-
你能举一个
1.dat和2.dat的例子吗?1.dat是否包含粒子一的时间历史数据?trying to collect the speeds of particles throughout these strips: 对于strip x,你想要那个strip 中的所有粒子吗?还是每次都会有一个 strip x 包含该特定时间该条中的粒子?如果 y 值的范围是固定的,它是什么? (粒子必须介于 0 和 ? 之间)? -
我编辑了我的帖子以包含一个 dat 文件的示例。每个文件都属于一个单独的粒子,因此它显示了粒子在时间步长上的运动和速度。我正在模拟 15 个粒子,所以我有 15 个文件。 // 对于条带,我希望所有粒子随时都在该条带中。我稍后会平均这些数字。 // 如果模拟的域是 10x10,粒子在 y=0 和 y=10 之间的任意位置。那么以 1 或 2 为增量(即 0-2、2-4、4-6、6-8、8-10)的 bin 会有用吗?或者如果域发生变化,可以将其除以我想要的任何数字?