From: Jeffrey A Tibbitt (JTibbitt_at_odu.edu)
Date: Tue May 01 2007 - 16:57:47 CDT
Jianhui,
Here is some fortran code that works for me. A couple of things:
1. Code assumes no fixed atoms
You need to modify it with an if........then type statement
if you have fixed atoms.
2. The dimension of x( ) y( ) z( ) need to be set to the number of
atoms before running.
What I do when I don't want to set the dimensions is to place the code
inside of a shell script and read in both a dcd and a psf. The script
reads the number of atoms from the psf and sets it to a variable then uses
that variable as it reads the dcd file. I attached the file for doing
that. It uses the code below. Try running it in a directory where you
have a dcd and its corresponding psf.
Jeff
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
c
program readdcd
character*4 header
integer control(20),i,ntitle,natom
character*80 title(4)
real*4 x( )
real*4 y( )
real*4 z( )
c OPEN TRAJECTORY FILE
open(unit=56,file="tmp.dcd",status='old',form='unformatted')
c READ IN HEADER AND CONTROL INFO
read(56) header,control
write (*,*) "Type:
",header
write (*,*) "Number of Frames:
",control(1)
write (*,*) "Number of Previous Dynamic Steps: ",control(2)
write (*,*) "Skip Frequency:
",control(3)
write (*,*) "Number of Dynamics Steps: ",control(4)
c READ IN THE TITLE LINES
read(56) ntitle,(title(j),j=1,ntitle)
c READ IN NUMBER OF ATOMS
read(56) natom
write (*,*) "Number of Atoms: ",natom
c READ IN COORDINATES AND CONVERT TO DOUBLE PRECISION
do i=1,control(1)
read(56) x
read(56) y
read(56) z
enddo
close(56)
end program
c
c
c
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
This archive was generated by hypermail 2.1.6 : Wed Feb 29 2012 - 15:44:37 CST