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

how to read vmd file (.xyz format) of mixed variable for molecular dynamics in Fortran

我想阅读看起来像....

的 .xyz 文件
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. 无论粒子数量多少,你总是读取 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 数据的方法(读取所有内存然后继续)可能会占用大量内存并且仅对 short/small 模拟有用。

您可以尝试现有的库:

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