我想阅读看起来像......的<.xz文件。
3 !no. of particles
1.0000 ! time step
a 2.345 2.458 0.564 ! ID x y z for 1st particle
a 5.455 2.486 5.456 ! ID x y z for 2nd particle
a 6.545 4.566 2.665 ! ID x y z for 3rd particle
3 !no.of particles (same as before)
2.000 ! next time step
a 4.345 3.458 4.564 ! ID x y z for 1st particle
a 4.455 3.486 4.456 ! ID x y z for 2nd particle
a 8.545 3.566 4.665 ! ID x y z for 3rd particle
...... continue..... for 1000 time step
我想在每个时间步计算每个粒子与其他粒子的距离。如何阅读此文件?
program size
implicit none
integer i,j,k
integer,parameter :: n=400,t=714
integer dn(n),n1
real*8 px(n,t),py(n,t),dt,pz
character(75) nam
open (unit=50,file='vmd.xyz',status='old',action='read')
do k=1,t
do i=1,n
read(50,*) n1
read(50,*) dt
read(50,*) nam,px(i,k),py(i,k),pz
end do
end do
close(50)
end program
答案 0 :(得分:1)
现在您发布了代码,可以更轻松地为您提供帮助。
无论粒子数是多少,您总是可以读取400个坐标。
重复读取粒子数和时间步长400倍。只有行read(50,*) nam,px(i,k),py(i,k),pz
应该在循环中。尝试
program size
implicit none
integer i,j,k
integer,parameter :: n=400,t=2
integer dn(n),n1
real*8 px(n,t),py(n,t),dt,pz
character(75) nam
open (unit=50,file='vmd.xyz',status='old',action='read')
do k=1,t
read(50,*) n1
read(50,*) dt
do i=1,n1
read(50,*) nam,px(i,k),py(i,k),pz
end do
end do
close(50)
end program
这种分析MD数据的方法(在内存中读取所有内容然后继续)可能非常耗费内存,仅适用于短/小模拟。
您可以尝试使用现有的库: