/*
xmd - molecular dynamics for metals and ceramics
By Jonathan Rifkin <jon.rifkin@uconn.edu>
Copyright 1995-2004 Jonathan Rifkin
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <stdio.h>
#define NLINE 21 /* NUMBER OF USED FOR DISPLAY */
char *Usage[] =
{
"",
"Usage",
"",
"",
" XMD [-p nproc][-h?] infile|-",
"",
" Parameters",
" ----------",
" input_file Input file containing commands",
"",
" Options",
" -------",
" -p nproc Use nproc processors (for multiprocessor systems)",
" -h -? Print out command summary",
"",
" Debug options",
" -------------",
" -c Turns on memory leak check and fills output",
" with CHECK messages. Use 'CheckMem' to analyze.",
" -d Turns on any other debug output (version dependent)",
"",
NULL
};
char *Doc[] =
{
"COMMAND SUMMARY",
"",
"# (comment)",
"* (comment)",
"BOX [SCALE] xbox ybox zbox",
"BSAVE nskip file",
"CALC (expression..)",
"CLAMP [SEL] { temp cstep | OFF }",
"CLAMP INFO",
"CMD nstep",
"COR file [ [run] step]]",
"COMPARE { ON | OFF } [INV] crad cfile",
"CONSTRAIN OFF | { LINE | PLANE } [ formula ... ] xd yd zd xc yc zc",
"CONSTRAIN CAVITY ELLIPSOID spring xcenter ycenter zcenter xaxis yaxis zaxis",
"CONSTRAIN CAVITY SPHERE spring xcenter ycenter radius",
"DAMP [ formula ] [ formula ... ] damp",
"DISP [SEL] { CLEAR | MOVE [scale] | READ n | REFCALC | SCALE scale }",
"DTIME dtime",
"DUP ndup xmove ymove zmove",
"ECHO { ON | OFF }",
"ERASE file",
"ERASE file",
"ESAVE nskip file",
"EUNIT { EV | ERG | JOULE | K | uname uvalue }",
"EXTFORCE { CLEAR | [ formula ] [ formula ... ] fx fy fz }",
"EXTSPRING { CLEAR | [ formula ] [ formula ... ] kx ky kz }",
"FIX { ON | OFF }",
"FILL ALIGN x y z",
"FILL BOUNDARY BOX x1 y1 z1 x2 y2 z2",
"FILL BOUNDARY SPHERE radius xcenter ycenter zcenter",
"FILL BOUNDARY CYLINDER r length xc yc zc xorient yorient zorient",
"FILL GO",
"FILL MARGIN margin",
"FILL ORIENT ax ay az bx by bz cx cy cz",
"FILL PARTICLE n",
" type x y z",
" ....",
"ITEMP [SEL] temp [X] [Y] [Z]",
"LABEL nlabel",
" .... (up to 8 lines)",
"MACRO name value",
"MACROF name format value",
"MASS mass",
"MC nstep temp",
"MOVE [ formula ] [ formula ... ] xmove ymove zmove",
"NRANGE nrange",
"NSEARCH SORT | CELL",
"PARTICLE [ADD] np",
" type x y z",
"",
"PLOT BOND { ON | OFF } [ lo hi ]",
"PLOT DEVICE { CANON | POSTSCRIPT }",
"PLOT DISP { ON | OFF | SCALE scale }",
"PLOT LAYER nlayer [ l1 [ l2 [ l3 ... ] ] ]",
"PLOT ORIENT x/y | y/x | x/z | z/x | y/z | z/y",
"PLOT PAGE page",
"PLOT SIZE xinch yinch",
"PLOT SYMBOL [FILL] ",
" [ RGB red green blue | HSB hue saturation brightness ]",
" { NON | CIR | TRI | ITR | DIA | CRO | SQU | AST | NUM } radius",
"PLOT WRITE [SEL] [[+]file]",
"POSITION [ADD] np",
" type x y z",
"",
"POSVEL [ADD] np",
"POTENTIAL SET STILL",
" (Stillinger-Weber, all atom types are Silicon)",
"POTENTIAL SET TERSOFF",
" (Tersoff CSi, types (1,2) are (C,Si)",
"POTENTIAL SET EAM ntype",
"PRESSURE ANDERSEN xmass [ ymass [ zmass ] ]",
"PRESSURE CLAMP bulkmodulus [ cstep ] (bulkmodulus in MBAR units)",
"PRESSURE EXTERNAL pressureX [ pressureY [ pressureZ ] ] (Units of MBAR)",
"PRESSURE { ISOTROPIC | ORTHORHOMBIC }",
"PRESSURE OFF",
"PSTRAIN strain dx dy dz nx ny nz",
"QUENCH nstep [qtype]",
"RCV [file [ [run] step]]",
"READ file",
"REFSTEP [CLEAR | COPY | SWAP]",
"REMOVE",
"REPEAT n\n...\nEND",
"REPEAT { COR | RCV } filename [ step1 [ step2 | * [ skip ] ]\n...\nEND",
"ROTATE xaxis yaxis zaxis xcenter ycenter zcenter angle",
"RUN run",
"SCALE { xyzscale | xscale yzscale | xscale yscale zscale }",
"SCREW xburgers yburgers zburgers xorg yorg zorg [refX refY refZ]",
"SELECT [OR | AND | NOT | XOR]",
" ALL",
" | BOX x1 y1 z1 x2 y2 z2",
" | EATOM lo hi",
" | ELLIPSE xc yc zc xr yr zr",
" | ILIST n",
" i1 i2 i3 ..in",
"",
" | INDEX i1 i2 iskip",
" | LAYER X|Y|Z nlayer layer1 layer2 ..",
" | NEAR n [ INDEX index | POINT x y z | SET set ]",
" | NEAR [ n ] RADIUS r1 r2 [ INDEX index | POINT x y z | SET set ]",
" | NONE",
" | PLANE nx ny nz x1 y1 z1 x2 y2 z2",
" | SET set",
" | TAG tag",
" | TYPE ntype",
" | VELOCITY [ABS] {X|Y|Z|MAG} lo hi",
"SELECT KEEP { ON|OFF }",
"SEED seed",
"SET {SUB | ADD | CLEAR} set",
"SIZE size",
"SSAVE nskip file",
"STRESS THERMAL { ON|OFF }",
"STATE file",
"STEP step",
"SURFACE ON|OFF X|Y|Z",
"TAG tag",
"TSAVE nskip file",
"TYPE type",
"TYPELIST [SEL] n",
" t1 t2 t3 ... tn",
"",
"TYPENAME type name [ type name ] ...",
"VERBOSE { INFO | FILE } { ON | OFF }",
"VELOCITY { LINEAR | ANGULAR } dx dy dz mag",
"WAVE phase dx dy dz kx ky kz",
"WRITE [SEL] [TAG] COR [+]fname",
"WRITE [SEL] PDB [+]fname",
"WRITE [SEL] RCV [+]fname",
"WRITE [SEL] XMOL [+]fname",
"WRITE [SEL] {ILIST | TYPELIST} [ [+]fname ]",
"WRITE [SEL] [FILE [+]fname] { STRESS }",
"WRITE [SEL] [FILE [+]fname] [AVG] [MIN] [MAX] ",
" { FORCE | PARTICLE | POSVEL | VELOCITY }",
"WRITE [SEL] [FILE [+]fname] [FORMAT format] [AVG] [MIN] [MAX] PARTICLE",
"WRITE [SEL] [FILE [+]fname] { DISP | EXTFORCE | EXTSPRING }",
"WRITE [SEL] [FILE [+]fname] EATOM",
"WRITE [SEL] [FILE [+]fname] { TEMP | EKIN | EPOT | ENERGY }",
"WRITE [SEL] [FILE [+]fname] MASS",
"WRITE [SEL] [FILE [+]fname] VAR [i|t|df|g|m|x|y|z|vx|vy|vz|ep|ek] ...",
"WRITE [FILE [+]fname] RDF ntable rmin rmax [type1 type2]",
"WRITE [FILE [+]fname] { BOX | RUN | STEP }",
"WRITE STATE fname",
"WRITE [SEL] XMOL [+]fname",
"WRITE [FILE [+]fname] SEED",
NULL
}
;
void write_more (char **s, int rflag)
{
char c;
int n;
char **t = s;
n = NLINE;
c='0';
while ((rflag || *t) && c!='q')
{
/* PRINT CHARACTER - COUNT LINEFEEDS */
puts (*t);
t++;
n--;
/* END OF TEXT */
if (rflag && *t==NULL)
{
t = s;
n = 0; /* SIGNAL TO WAIT FOR KEYPRESS */
}
if (!n)
{
printf ("\n(q/ret):");
c = getchar();
printf ("\n\n\n");
n = NLINE;
}
}
}
void write_usage (void)
{
write_more (Usage, 0);
}
void write_doc (void)
{
write_more (Doc, 1);
}