remove obsolete tools and files
This commit is contained in:
@ -1,366 +0,0 @@
|
|||||||
/* data2xmovie tool
|
|
||||||
|
|
||||||
read LAMMPS data file as input
|
|
||||||
write a snapshot in XMOVIE format
|
|
||||||
|
|
||||||
Syntax: data2xmovie [options] < infile > outfile
|
|
||||||
|
|
||||||
Options:
|
|
||||||
|
|
||||||
-style atom_style
|
|
||||||
|
|
||||||
use the LAMMPS atom style that corresponds to this file
|
|
||||||
e.g. atomic or bond or angle or full or eam or granular
|
|
||||||
will be used for reading and writing files
|
|
||||||
if not specified, atom_style = full
|
|
||||||
|
|
||||||
-unmap
|
|
||||||
|
|
||||||
unmap all input atom positions using input image flags
|
|
||||||
image flags must be specified in infile
|
|
||||||
default is to leave atoms mapped to periodic box
|
|
||||||
|
|
||||||
-inbox xlo xhi ylo yhi zlo zhi
|
|
||||||
|
|
||||||
use these values for the output bounding box of the system
|
|
||||||
useful if are unmapping atoms into a larger domain
|
|
||||||
if not specified use the box bounds read in from infile
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
struct box {
|
|
||||||
double xlo,xhi,xsize;
|
|
||||||
double ylo,yhi,ysize;
|
|
||||||
double zlo,zhi,zsize;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define MAXLINE 1000
|
|
||||||
|
|
||||||
#define ATOMIC 1
|
|
||||||
#define BOND 2
|
|
||||||
#define ANGLE 3
|
|
||||||
#define FULL 4
|
|
||||||
#define EAM 5
|
|
||||||
#define GRANULAR 6
|
|
||||||
|
|
||||||
main(int argc, char *argv[])
|
|
||||||
|
|
||||||
{
|
|
||||||
char line[1000]; /* strings for reading/parsing input file */
|
|
||||||
char linetoken[1000];
|
|
||||||
char *token;
|
|
||||||
/* numbers of various quantities as read in */
|
|
||||||
|
|
||||||
int natoms,nbonds,nangles,ndihedrals,nimpropers;
|
|
||||||
int ntypes,nbondtypes,nangletypes,ndihedtypes,nimprotypes;
|
|
||||||
|
|
||||||
int nmolecules; /* total # of mols specified by mol tags */
|
|
||||||
|
|
||||||
int atomstyle; /* atomstyle for read/write of Atoms */
|
|
||||||
int unmap; /* 0 = no unmapping, 1 = unmap from input box */
|
|
||||||
int outbox; /* flag for whether out box is explicitly set */
|
|
||||||
|
|
||||||
struct box in,out; /* input/output bounding box */
|
|
||||||
|
|
||||||
char *gettoken(char *, int); /* function defs */
|
|
||||||
void skipline(int);
|
|
||||||
|
|
||||||
/* default input values */
|
|
||||||
|
|
||||||
atomstyle = 0;
|
|
||||||
unmap = 0;
|
|
||||||
outbox = 0;
|
|
||||||
|
|
||||||
/* read input options from command line
|
|
||||||
should do more error checking for missing args */
|
|
||||||
|
|
||||||
int i = 1;
|
|
||||||
while (i < argc) {
|
|
||||||
|
|
||||||
if (!strcmp(argv[i],"-style")) {
|
|
||||||
if (strcmp(argv[i+1],"atomic") == 0) atomstyle = ATOMIC;
|
|
||||||
else if (strcmp(argv[i+1],"bond") == 0) atomstyle = BOND;
|
|
||||||
else if (strcmp(argv[i+1],"angle") == 0) atomstyle = ANGLE;
|
|
||||||
else if (strcmp(argv[i+1],"full") == 0) atomstyle = FULL;
|
|
||||||
else if (strcmp(argv[i+1],"eam") == 0) atomstyle = EAM;
|
|
||||||
else if (strcmp(argv[i+1],"granular") == 0) atomstyle = GRANULAR;
|
|
||||||
else {
|
|
||||||
fprintf(stderr,"Error with command-line arg style\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
i += 2;
|
|
||||||
} else if (!strcmp(argv[i],"-unmap")) {
|
|
||||||
unmap = 1;
|
|
||||||
i += 1;
|
|
||||||
} else if (!strcmp(argv[i],"-inbox")) {
|
|
||||||
outbox = 1;
|
|
||||||
sscanf(argv[i+1],"%lg",&out.xlo);
|
|
||||||
sscanf(argv[i+2],"%lg",&out.xhi);
|
|
||||||
sscanf(argv[i+3],"%lg",&out.ylo);
|
|
||||||
sscanf(argv[i+4],"%lg",&out.yhi);
|
|
||||||
sscanf(argv[i+5],"%lg",&out.zlo);
|
|
||||||
sscanf(argv[i+6],"%lg",&out.zhi);
|
|
||||||
i += 7;
|
|
||||||
} else {
|
|
||||||
fprintf(stderr,"Syntax error: data2xmovie [options] < infile > outfile\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* error checks */
|
|
||||||
|
|
||||||
if (atomstyle == 0) {
|
|
||||||
fprintf(stderr,"ERROR: must use -style to set atom style\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* defaults */
|
|
||||||
|
|
||||||
natoms = nbonds = nangles = ndihedrals = nimpropers = 0;
|
|
||||||
ntypes = nbondtypes = nangletypes = ndihedtypes = nimprotypes = 0;
|
|
||||||
|
|
||||||
/* read header */
|
|
||||||
|
|
||||||
fgets(line,MAXLINE,stdin);
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
fgets(line,MAXLINE,stdin);
|
|
||||||
|
|
||||||
if (strspn(line," \t\n\r") == strlen(line)) continue;
|
|
||||||
else if (strstr(line,"atoms")) sscanf(line,"%d",&natoms);
|
|
||||||
else if (strstr(line,"bonds")) sscanf(line,"%d",&nbonds);
|
|
||||||
else if (strstr(line,"angles")) sscanf(line,"%d",&nangles);
|
|
||||||
else if (strstr(line,"dihedrals")) sscanf(line,"%d",&ndihedrals);
|
|
||||||
else if (strstr(line,"impropers")) sscanf(line,"%d",&nimpropers);
|
|
||||||
else if (strstr(line,"atom types")) sscanf(line,"%d",&ntypes);
|
|
||||||
else if (strstr(line,"bond types")) sscanf(line,"%d",&nbondtypes);
|
|
||||||
else if (strstr(line,"angle types")) sscanf(line,"%d",&nangletypes);
|
|
||||||
else if (strstr(line,"dihedral types")) sscanf(line,"%d",&ndihedtypes);
|
|
||||||
else if (strstr(line,"improper types")) sscanf(line,"%d",&nimprotypes);
|
|
||||||
else if (strstr(line,"xlo xhi")) sscanf(line,"%lg %lg",&in.xlo,&in.xhi);
|
|
||||||
else if (strstr(line,"ylo yhi")) sscanf(line,"%lg %lg",&in.ylo,&in.yhi);
|
|
||||||
else if (strstr(line,"zlo zhi")) sscanf(line,"%lg %lg",&in.zlo,&in.zhi);
|
|
||||||
else break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* compute input box size */
|
|
||||||
|
|
||||||
in.xsize = in.xhi - in.xlo;
|
|
||||||
in.ysize = in.yhi - in.ylo;
|
|
||||||
in.zsize = in.zhi - in.zlo;
|
|
||||||
|
|
||||||
/* write XMOVIE header */
|
|
||||||
|
|
||||||
printf("ITEM: TIMESTEP\n");
|
|
||||||
printf("%d\n",0);
|
|
||||||
printf("ITEM: NUMBER OF ATOMS\n");
|
|
||||||
printf("%d\n",natoms);
|
|
||||||
printf("ITEM: BOX BOUNDS\n");
|
|
||||||
if (outbox) {
|
|
||||||
printf("%g %g\n",out.xlo,out.xhi);
|
|
||||||
printf("%g %g\n",out.ylo,out.yhi);
|
|
||||||
printf("%g %g\n",out.zlo,out.zhi);
|
|
||||||
} else {
|
|
||||||
printf("%g %g\n",in.xlo,in.xhi);
|
|
||||||
printf("%g %g\n",in.ylo,in.yhi);
|
|
||||||
printf("%g %g\n",in.zlo,in.zhi);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* read identifier strings one by one in free-form part of data file */
|
|
||||||
|
|
||||||
token = gettoken(line,1);
|
|
||||||
|
|
||||||
while (token) {
|
|
||||||
|
|
||||||
/* read atoms */
|
|
||||||
|
|
||||||
if (!strcmp(token,"Atoms")) {
|
|
||||||
|
|
||||||
printf("ITEM: ATOMS\n");
|
|
||||||
|
|
||||||
int tag,type,molecule,imagex,imagey,imagez;
|
|
||||||
double x,y,z,radius,density,q;
|
|
||||||
|
|
||||||
for (i = 0; i < natoms; i++) {
|
|
||||||
fgets(line,MAXLINE,stdin);
|
|
||||||
if (unmap) {
|
|
||||||
if (atomstyle == ATOMIC)
|
|
||||||
sscanf(line,"%d %d %lg %lg %lg %d %d %d",
|
|
||||||
&tag,&type,&x,&y,&z,
|
|
||||||
&imagex,&imagey,&imagez);
|
|
||||||
else if (atomstyle == BOND)
|
|
||||||
sscanf(line,"%d %d %d %lg %lg %lg %d %d %d",
|
|
||||||
&tag,&molecule,&type,&x,&y,&z,
|
|
||||||
&imagex,&imagey,&imagez);
|
|
||||||
else if (atomstyle == ANGLE)
|
|
||||||
sscanf(line,"%d %d %d %lg %lg %lg %d %d %d",
|
|
||||||
&tag,&molecule,&type,&x,&y,&z,
|
|
||||||
&imagex,&imagey,&imagez);
|
|
||||||
else if (atomstyle == FULL)
|
|
||||||
sscanf(line,"%d %d %d %lg %lg %lg %lg %d %d %d",
|
|
||||||
&tag,&molecule,&type,&q,&x,&y,&z,
|
|
||||||
&imagex,&imagey,&imagez);
|
|
||||||
else if (atomstyle == EAM)
|
|
||||||
sscanf(line,"%d %d %lg %lg %lg %d %d %d",
|
|
||||||
&tag,&type,&x,&y,&z,
|
|
||||||
&imagex,&imagey,&imagez);
|
|
||||||
else if (atomstyle == GRANULAR)
|
|
||||||
sscanf(line,"%d %d %lg %lg %lg %lg %lg %d %d %d",
|
|
||||||
&tag,&type,&radius,&density,&x,&y,&z,
|
|
||||||
&imagex,&imagey,&imagez);
|
|
||||||
} else {
|
|
||||||
if (atomstyle == ATOMIC)
|
|
||||||
sscanf(line,"%d %d %lg %lg %lg",
|
|
||||||
&tag,&type,&x,&y,&z);
|
|
||||||
else if (atomstyle == BOND)
|
|
||||||
sscanf(line,"%d %d %d %lg %lg %lg",
|
|
||||||
&tag,&molecule,&type,&x,&y,&z);
|
|
||||||
else if (atomstyle == ANGLE)
|
|
||||||
sscanf(line,"%d %d %d %lg %lg %lg",
|
|
||||||
&tag,&molecule,&type,&x,&y,&z);
|
|
||||||
else if (atomstyle == FULL)
|
|
||||||
sscanf(line,"%d %d %d %lg %lg %lg %lg",
|
|
||||||
&tag,&molecule,&type,&q,&x,&y,&z);
|
|
||||||
else if (atomstyle == EAM)
|
|
||||||
sscanf(line,"%d %d %lg %lg %lg",
|
|
||||||
&tag,&type,&x,&y,&z);
|
|
||||||
else if (atomstyle == GRANULAR)
|
|
||||||
sscanf(line,"%d %d %lg %lg %lg %lg %lg",
|
|
||||||
&tag,&type,&radius,&density,&x,&y,&z);
|
|
||||||
imagez = imagey = imagex = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* unmap atom position if requested */
|
|
||||||
|
|
||||||
if (unmap) {
|
|
||||||
x = x + imagex*in.xsize;
|
|
||||||
y = y + imagey*in.ysize;
|
|
||||||
z = z + imagez*in.zsize;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("%d %d %g %g %g\n",tag,type,x,y,z);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* read bonds and replicate */
|
|
||||||
|
|
||||||
else if (!strcmp(token,"Bonds")) {
|
|
||||||
|
|
||||||
printf("ITEM: BONDS\n");
|
|
||||||
|
|
||||||
int n,btype,bond1,bond2;
|
|
||||||
|
|
||||||
for (i = 0; i < nbonds; i++) {
|
|
||||||
fgets(line,MAXLINE,stdin);
|
|
||||||
sscanf(line,"%d %d %d %d",&n,&btype,&bond1,&bond2);
|
|
||||||
printf("%d %d %d\n",btype,bond1,bond2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* non-replicated sections - just skip lines */
|
|
||||||
|
|
||||||
else if (!strcmp(token,"Velocities"))
|
|
||||||
skipline(natoms);
|
|
||||||
else if (!strcmp(token,"Angles"))
|
|
||||||
skipline(nangles);
|
|
||||||
else if (!strcmp(token,"Dihedrals"))
|
|
||||||
skipline(ndihedrals);
|
|
||||||
else if (!strcmp(token,"Impropers"))
|
|
||||||
skipline(nimpropers);
|
|
||||||
else if (!strcmp(token,"Masses"))
|
|
||||||
skipline(ntypes);
|
|
||||||
else if (!strcmp(token,"Dipoles"))
|
|
||||||
skipline(ntypes);
|
|
||||||
else if (!strcmp(token,"Pair Coeffs"))
|
|
||||||
skipline(ntypes);
|
|
||||||
else if (!strcmp(token,"Bond Coeffs"))
|
|
||||||
skipline(nbondtypes);
|
|
||||||
else if (!strcmp(token,"Angle Coeffs"))
|
|
||||||
skipline(nangletypes);
|
|
||||||
else if (!strcmp(token,"Dihedral Coeffs"))
|
|
||||||
skipline(ndihedtypes);
|
|
||||||
else if (!strcmp(token,"Improper Coeffs"))
|
|
||||||
skipline(nimprotypes);
|
|
||||||
else if (!strcmp(token,"BondBond Coeffs"))
|
|
||||||
skipline(nangletypes);
|
|
||||||
else if (!strcmp(token,"BondAngle Coeffs"))
|
|
||||||
skipline(nangletypes);
|
|
||||||
else if (!strcmp(token,"MiddleBondTorsion Coeffs"))
|
|
||||||
skipline(ndihedtypes);
|
|
||||||
else if (!strcmp(token,"EndBondTorsion Coeffs"))
|
|
||||||
skipline(ndihedtypes);
|
|
||||||
else if (!strcmp(token,"AngleTorsion Coeffs"))
|
|
||||||
skipline(ndihedtypes);
|
|
||||||
else if (!strcmp(token,"AngleAngleTorsion Coeffs"))
|
|
||||||
skipline(ndihedtypes);
|
|
||||||
else if (!strcmp(token,"BondBond13 Coeffs"))
|
|
||||||
skipline(ndihedtypes);
|
|
||||||
else if (!strcmp(token,"AngleAngle Coeffs"))
|
|
||||||
skipline(nimprotypes);
|
|
||||||
else {
|
|
||||||
fprintf(stderr,
|
|
||||||
"Error in input data file - unknown identifier %s\n",token);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
token = gettoken(line,0);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
/* return a LAMMPS keyword from data file
|
|
||||||
if first is 1, non-blank line with token is in line
|
|
||||||
else read until find a non-blank line
|
|
||||||
keyword is all text on line w/out leading & trailing white space
|
|
||||||
read one additional line after non-blank line (assumed blank)
|
|
||||||
return ptr to keyword
|
|
||||||
return NULL if end of file */
|
|
||||||
|
|
||||||
char *gettoken(char *line, int first)
|
|
||||||
{
|
|
||||||
char buffer[MAXLINE];
|
|
||||||
|
|
||||||
/* read upto non-blank line plus 1 following line
|
|
||||||
eof is set to 1 if any read hits end-of-file */
|
|
||||||
|
|
||||||
int eof = 0;
|
|
||||||
|
|
||||||
if (!first) if (fgets(line,MAXLINE,stdin) == NULL) eof = 1;
|
|
||||||
while (eof == 0 && strspn(line," \t\n\r") == strlen(line))
|
|
||||||
if (fgets(line,MAXLINE,stdin) == NULL) eof = 1;
|
|
||||||
if (fgets(buffer,MAXLINE,stdin) == NULL) eof = 1;
|
|
||||||
|
|
||||||
/* if eof, return NULL */
|
|
||||||
|
|
||||||
if (eof) return NULL;
|
|
||||||
|
|
||||||
/* bracket non-whitespace portion of line */
|
|
||||||
|
|
||||||
int start = strspn(line," \t\n\r");
|
|
||||||
int stop = strlen(line) - 1;
|
|
||||||
while (line[stop] == ' ' || line[stop] == '\t'
|
|
||||||
|| line[stop] == '\n' || line[stop] == '\r') stop--;
|
|
||||||
line[stop+1] = '\0';
|
|
||||||
|
|
||||||
/* return ptr to keyword */
|
|
||||||
|
|
||||||
return &line[start];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* read n lines and ignore */
|
|
||||||
|
|
||||||
void skipline(int n)
|
|
||||||
{
|
|
||||||
char line[1000];
|
|
||||||
|
|
||||||
while (n) {
|
|
||||||
fgets(line,MAXLINE,stdin);
|
|
||||||
n--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,80 +0,0 @@
|
|||||||
This directory used to contain utility scripts for using VMD to
|
|
||||||
visualize and analyze LAMMPS trajectories. As of April 2010 all of the
|
|
||||||
scripts and many additional features have been merged into the topotools
|
|
||||||
plugin that is bundled with VMD. Updates between VMD releases are here:
|
|
||||||
http://sites.google.com/site/akohlmey/software/topotools
|
|
||||||
This page also contains detailed documentation and some tutorials.
|
|
||||||
|
|
||||||
These scripts within VMD and the plugin for native LAMMPS dump files are
|
|
||||||
are maintained by Axel Kohlmeyer <akohlmey@gmail.com>; please contact
|
|
||||||
him through the LAMMPS mailing list in case of problems.
|
|
||||||
|
|
||||||
Below are a few comments on support for LAMMPS in VMD.
|
|
||||||
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
1. File formats and VMD limitations
|
|
||||||
|
|
||||||
VMD currently supports reading several but not all file formats
|
|
||||||
that LAMMPS can generate. Supported are: atom (text mode), custom
|
|
||||||
(text mode, only some fields are directly supported, please see
|
|
||||||
below for more details), dcd, xyz and xtc. Cfg and binary native
|
|
||||||
dump files are not supported (06/2012). The new molfile dump style
|
|
||||||
in addition allows to use VMD molfile plugins to write dumps in
|
|
||||||
any format that is supported by VMD.
|
|
||||||
|
|
||||||
However VMD requires all frames of a file to have the same number of
|
|
||||||
atoms. If the number of atoms changes between two frames, the file
|
|
||||||
reader will stop. The topotools plugin has a special scripted file
|
|
||||||
reader for .xyz files that can generate the necessary padding so that
|
|
||||||
the file can still be read into VMD. Whether an atom is real or
|
|
||||||
"invisible" is then flagged in the "user" field. For efficiency
|
|
||||||
reasons this script will not preserve atom identity between frames.
|
|
||||||
|
|
||||||
2. Topology files, a.k.a. as "data" files
|
|
||||||
|
|
||||||
The topotools plugin also contains a read and write option for LAMMPS
|
|
||||||
data files. This reader will try to preserve as much information as
|
|
||||||
possible and will also store useful information as comments upon
|
|
||||||
writing. It does not store or read coefficient data. In combination
|
|
||||||
with other functionality in topotools complete topologies for rather
|
|
||||||
complicated systems for LAMMPS can be build with VMD scripting.
|
|
||||||
|
|
||||||
3. Reading custom data fields into VMD
|
|
||||||
|
|
||||||
At this moment VMD only supports reading coordinates and velocities
|
|
||||||
(if present) as per timestep data. Everthing else is just taken
|
|
||||||
from the first frame or whatever file was used to generate this
|
|
||||||
structure information. Through setting the environment variable
|
|
||||||
LAMMPSREMAPFIELDS, custom properties can be mapped to the x, y, z,
|
|
||||||
vx, vy, vz data fields and then accessed from within VMD. For
|
|
||||||
example to store radius and charge of a particle in the vx and vy
|
|
||||||
fields, respectively set this variable to "vx=radius,vy=q". Future
|
|
||||||
versions of VMD will allow more flexibility.
|
|
||||||
|
|
||||||
4. Recovering information about elements
|
|
||||||
|
|
||||||
Colorization in VMD is by default based on atom names, yet LAMMPS
|
|
||||||
requires identification of atoms by consecutive numbers starting at
|
|
||||||
1. With the option of reading a LAMMPS data file, additional
|
|
||||||
information is provided that can help to recover some of this
|
|
||||||
data. 'topo guessatom element mass' will guess the atom's element
|
|
||||||
name from it mass (with fuzz, where possible).
|
|
||||||
|
|
||||||
5. Reading files from the command line
|
|
||||||
|
|
||||||
Converting a LAMMPS data file to a .psf file can be very convenient
|
|
||||||
for loading trajectories from the command line. This conversion is
|
|
||||||
done with
|
|
||||||
|
|
||||||
topo readlammpsdata data.rhodo full
|
|
||||||
animate write psf rhodo.psf
|
|
||||||
|
|
||||||
In the future you can now load this PSF file first and then the
|
|
||||||
LAMMPS dump file(s) (or a more compact and faster loading DCD or
|
|
||||||
XTC file) with:
|
|
||||||
|
|
||||||
vmd micelle.psf -lammpstrj dump.micelle
|
|
||||||
|
|
||||||
Note how the -lammpstrj flag will tell VMD that dump.micelle is a
|
|
||||||
lammps trajectory file.
|
|
||||||
Reference in New Issue
Block a user