如何读取Fortran中分子动力学的混合变量的vmd文件(.xyz格式)

时间:2017-10-26 14:09:41

标签: fortran vmd

我想阅读看起来像......的<.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

1 个答案:

答案 0 :(得分:1)

现在您发布了代码,可以更轻松地为您提供帮助。

  1. 无论粒子数是多少,您总是可以读取400个坐标。

  2. 重复读取粒子数和时间步长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
    
  3. 这种分析MD数据的方法(在内存中读取所有内容然后继续)可能非常耗费内存,仅适用于短/小模拟。

  4. 您可以尝试使用现有的库:

    1. Chemfiles有一个Fortran界面,可以轻松读取坐标:http://chemfiles.org/chemfiles.f03/0.7.4/(Fortran绑定)
    2. 考虑其他语言。 MDAnalysis是用Python编写的,支持xyz文件,并提供了许多用于轨迹分析的基本功能。