!-----------------------------------------------------! ! ! ! A SIMPLE PROG TO CONVERT VTF TRAJECTORY INTO LAMMPS ! ! Dusan Racko (c) 2011 ! ! ! !-----------------------------------------------------! PROGRAM VTF CHARACTER*80 :: ARG, FILEIN, FILEOUT CHARACTER*256 :: XLINE, XWORD, PRINTL INTEGER :: STAT INTEGER :: POS1, POS2, n INTEGER :: NAT, NSTEPS, ID CHARACTER*14 :: PBC (1:3) INTEGER :: CT_PBC !defaults CT_PBC = 0 !#CONTROL: PERIODIC SYSTEM? NSTEPS = 0 STAT = -1 !--- !#READ FILENAME FROM COMMANDLINE IF ENTERED CALL GETARG (1, ARG, STAT) IF (STAT.EQ.-1) THEN WRITE (0,*) 'NAME OF A FILE TO BE CONVERTED: ' READ (*,*) FILEIN ELSE FILEIN = TRIM(ADJUSTL(ARG)) END IF POS1 = INDEX (FILEIN,'.') WRITE (FILEOUT,*) TRIM (ADJUSTL(FILEIN(1:POS1-1))),'.lammpstrj' OPEN (7, FILE = FILEIN) !#GET GLOBAL PARAMETERS: NSTEP, NAT DO WHILE (.NOT.EOF(7)) READ (7, '(A256)') XLINE !#GET PBC IF (TRIM (XLINE(1:1)).EQ.'p') THEN CT_PBC = 1 n = 0 POS1 = 1 POS2 = INDEX (XLINE(POS1:), ' ') DO WHILE (n.LE.20) POS2 = INDEX (XLINE(POS1:), ' ') XWORD = TRIM (ADJUSTL(XLINE(POS1:POS1+POS2-2))) IF ((LEN(TRIM(XWORD)).GT.1).AND.(N.GE.1)) THEN WRITE (PBC(N),*) TRIM(ADJUSTL(XWORD)) END IF POS1 = POS1 + POS2 n = n + 1 END DO END IF !#GET ATOMIC COORDS IF (TRIM (XLINE(1:1)).EQ.'t') THEN NSTEPS = NSTEPS + 1 NAT = 0 READ (7, '(A256)') XLINE CHARID = 45 DO WHILE ((CHARID.GE.45).AND.(CHARID.LE.57)) NAT = NAT + 1 READ (7, '(A256)') XLINE CHARID = ICHAR (XLINE(1:1)) END DO END IF END DO CLOSE (7) !# GLOBAL PARAMS INFO ON SCREEN WRITE (0,'(A35,I6,A11)') 'THE CONVERTED TRAJECTORY CONTAINS ', NSTEPS,' STRUCTURES.' WRITE (0,'(A33,I6,A8 )') 'EACH OF THE STRUCTURES CONTAINS ', NAT,' ATOMS.' IF (CT_PBC) WRITE (0,*) 'PERIODIC BOUNDARY DETECTED: ', TRIM(PBC(1)),' ', TRIM(PBC(2)),' ',TRIM(PBC(3)) WRITE (0,*) 'OUTPUT FILE: ', TRIM(ADJUSTL(FILEOUT)) WRITE (0,*) WRITE (0,*) 'CONVERTING..' !#CONVERT TO LAMMPSTRJ OPEN (7, FILE = FILEIN) OPEN (8, FILE = FILEOUT) NSTEPS = 0 DO WHILE (.NOT.EOF(7)) READ (7, '(A256)') XLINE IF (TRIM (XLINE(1:1)).EQ.'t') THEN NSTEPS = NSTEPS + 1 WRITE (8,'(A14)') 'ITEM: TIMESTEP' WRITE (8,*) NSTEPS WRITE (8,'(A21)') 'ITEM: NUMBER OF ATOMS' WRITE (8,*) NAT WRITE (8,'(A16)') 'ITEM: BOX BOUNDS' WRITE (8,*) '0 ', TRIM(PBC(1)) WRITE (8,*) '0 ', TRIM(PBC(2)) WRITE (8,*) '0 ', TRIM(PBC(3)) WRITE (8,'(A11)') 'ITEM: ATOMS' ID = 0 !READ (7, '(A256)') XLINE CHARID = 45 DO WHILE ((CHARID.GE.45).AND.(CHARID.LE.57)) ID = ID + 1 READ (7, '(A256)') XLINE WRITE (PRINTL,*) ID,' 1 ',TRIM(ADJUSTL(XLINE)) IF (ID.LE.NAT) WRITE (8,*) TRIM(ADJUSTL(PRINTL)) CHARID = ICHAR (XLINE(1:1)) END DO END IF END DO CLOSE (8) CLOSE (7) END PROGRAM !