git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@11643 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
@ -1,5 +1,23 @@
|
|||||||
Stephanie Teich-McGoldrick (Sandai) is the current maintainer
|
Axel Kohlmeyer is the current maintainer of the msi2lmp tool.
|
||||||
of the msi2lmp tool. She can be contacted at steichm at sandia.gov
|
Please send any inquiries about msi2lmp to the lammps-users mailing list.
|
||||||
|
|
||||||
|
06 Mar 2014 Axel Kohlmeyer <akohlmey@gmail.com>
|
||||||
|
|
||||||
|
Fixed a bug in handling of triclinic cells, where the matrices to
|
||||||
|
convert to and from fractional coordinates were incorrectly built.
|
||||||
|
|
||||||
|
26 Oct 2013 Axel Kohlmeyer <akohlmey@gmail.com>
|
||||||
|
|
||||||
|
Implemented writing out force field style hints in generated data
|
||||||
|
files for improved consistency checking when reading those files.
|
||||||
|
Also added writing out CGCMM style comments to identify atom types.
|
||||||
|
|
||||||
|
08 Oct 2013 Axel Kohlmeyer <akohlmey@gmail.com>
|
||||||
|
|
||||||
|
Fixed a memory access violation with Class 2 force fields.
|
||||||
|
Free all allocated memory to better detection of memory errors.
|
||||||
|
Print out version number and data with all print levels > 0.
|
||||||
|
Added valgrind checks to the regression tests
|
||||||
|
|
||||||
08 Oct 2013 Axel Kohlmeyer <akohlmey@gmail.com>
|
08 Oct 2013 Axel Kohlmeyer <akohlmey@gmail.com>
|
||||||
|
|
||||||
@ -99,6 +117,9 @@ see msi2lmp/TriclinicModification.pdf doc for details
|
|||||||
geometrical center of the provided geometry but
|
geometrical center of the provided geometry but
|
||||||
rather around the origin
|
rather around the origin
|
||||||
|
|
||||||
|
-- -oldstyle (or -o) write out a data file without style hints
|
||||||
|
(to be compatible with older LAMMPS versions)
|
||||||
|
|
||||||
-- -shift (or -s) translate the entire system (box and coordinates)
|
-- -shift (or -s) translate the entire system (box and coordinates)
|
||||||
by a vector (default: 0.0 0.0 0.0)
|
by a vector (default: 0.0 0.0 0.0)
|
||||||
|
|
||||||
|
|||||||
@ -83,7 +83,14 @@ void WriteDataFile(char *nameroot)
|
|||||||
|
|
||||||
/* COEFFICIENTS */
|
/* COEFFICIENTS */
|
||||||
|
|
||||||
fprintf(DatF,"Pair Coeffs\n\n");
|
fputs("Pair Coeffs",DatF);
|
||||||
|
if (hintflag) {
|
||||||
|
if (forcefield & (FF_TYPE_CLASS1|FF_TYPE_OPLSAA))
|
||||||
|
fputs(" # lj/cut/coul/long\n\n",DatF);
|
||||||
|
else if (forcefield & FF_TYPE_CLASS2)
|
||||||
|
fputs(" # lj/class2/coul/long\n\n",DatF);
|
||||||
|
} else fputs("\n\n",DatF);
|
||||||
|
|
||||||
for (i=0; i < no_atom_types; i++) {
|
for (i=0; i < no_atom_types; i++) {
|
||||||
fprintf(DatF, " %3i ", i+1);
|
fprintf(DatF, " %3i ", i+1);
|
||||||
for ( j = 0; j < 2; j++)
|
for ( j = 0; j < 2; j++)
|
||||||
@ -98,7 +105,14 @@ void WriteDataFile(char *nameroot)
|
|||||||
if (forcefield & FF_TYPE_OPLSAA) m = 2;
|
if (forcefield & FF_TYPE_OPLSAA) m = 2;
|
||||||
if (forcefield & FF_TYPE_CLASS2) m = 4;
|
if (forcefield & FF_TYPE_CLASS2) m = 4;
|
||||||
|
|
||||||
fprintf(DatF,"Bond Coeffs\n\n");
|
fputs("Bond Coeffs",DatF);
|
||||||
|
if (hintflag) {
|
||||||
|
if (forcefield & (FF_TYPE_CLASS1|FF_TYPE_OPLSAA))
|
||||||
|
fputs(" # harmonic\n\n",DatF);
|
||||||
|
else if (forcefield & FF_TYPE_CLASS2)
|
||||||
|
fputs(" # class2\n\n",DatF);
|
||||||
|
} else fputs("\n\n",DatF);
|
||||||
|
|
||||||
for (i=0; i < no_bond_types; i++) {
|
for (i=0; i < no_bond_types; i++) {
|
||||||
fprintf(DatF, "%3i ", i+1);
|
fprintf(DatF, "%3i ", i+1);
|
||||||
for ( j = 0; j < m; j++)
|
for ( j = 0; j < m; j++)
|
||||||
@ -114,7 +128,14 @@ void WriteDataFile(char *nameroot)
|
|||||||
if (forcefield & FF_TYPE_OPLSAA) m = 2;
|
if (forcefield & FF_TYPE_OPLSAA) m = 2;
|
||||||
if (forcefield & FF_TYPE_CLASS2) m = 4;
|
if (forcefield & FF_TYPE_CLASS2) m = 4;
|
||||||
|
|
||||||
fprintf(DatF,"Angle Coeffs\n\n");
|
fputs("Angle Coeffs",DatF);
|
||||||
|
if (hintflag) {
|
||||||
|
if (forcefield & (FF_TYPE_CLASS1|FF_TYPE_OPLSAA))
|
||||||
|
fputs(" # harmonic\n\n",DatF);
|
||||||
|
else if (forcefield & FF_TYPE_CLASS2)
|
||||||
|
fputs(" # class2\n\n",DatF);
|
||||||
|
} else fputs("\n\n",DatF);
|
||||||
|
|
||||||
for (i=0; i < no_angle_types; i++) {
|
for (i=0; i < no_angle_types; i++) {
|
||||||
fprintf(DatF, "%3i ", i+1);
|
fprintf(DatF, "%3i ", i+1);
|
||||||
for ( j = 0; j < m; j++)
|
for ( j = 0; j < m; j++)
|
||||||
@ -127,81 +148,91 @@ void WriteDataFile(char *nameroot)
|
|||||||
|
|
||||||
if (no_dihedral_types > 0) {
|
if (no_dihedral_types > 0) {
|
||||||
|
|
||||||
if (forcefield & FF_TYPE_CLASS1) {
|
fputs("Dihedral Coeffs",DatF);
|
||||||
|
if (forcefield & FF_TYPE_CLASS1) {
|
||||||
|
|
||||||
fprintf(DatF,"Dihedral Coeffs\n\n");
|
if (hintflag) fputs(" # harmonic\n\n",DatF);
|
||||||
|
else fputs("\n\n",DatF);
|
||||||
|
|
||||||
for (i=0; i < no_dihedral_types; i++)
|
for (i=0; i < no_dihedral_types; i++)
|
||||||
fprintf(DatF, "%3i %10.4f %3i %3i\n", i+1,
|
fprintf(DatF, "%3i %10.4f %3i %3i\n", i+1,
|
||||||
dihedraltypes[i].params[0],
|
dihedraltypes[i].params[0],
|
||||||
(int) dihedraltypes[i].params[1],
|
(int) dihedraltypes[i].params[1],
|
||||||
(int) dihedraltypes[i].params[2]);
|
(int) dihedraltypes[i].params[2]);
|
||||||
|
|
||||||
} else if (forcefield & FF_TYPE_OPLSAA) {
|
} else if (forcefield & FF_TYPE_OPLSAA) {
|
||||||
|
|
||||||
fprintf(DatF,"Dihedral Coeffs\n\n");
|
if (hintflag) fputs(" # opls\n\n",DatF);
|
||||||
|
else fputs("\n\n",DatF);
|
||||||
|
|
||||||
for (i=0; i < no_dihedral_types; i++) {
|
for (i=0; i < no_dihedral_types; i++) {
|
||||||
fprintf(DatF, "%3i",i+1);
|
fprintf(DatF, "%3i",i+1);
|
||||||
for ( j = 0; j < 4; j++)
|
for ( j = 0; j < 4; j++)
|
||||||
fprintf(DatF, " %10.4f",dihedraltypes[i].params[j]);
|
fprintf(DatF, " %10.4f",dihedraltypes[i].params[j]);
|
||||||
|
|
||||||
fputs("\n",DatF);
|
fputs("\n",DatF);
|
||||||
|
}
|
||||||
|
} else if (forcefield & FF_TYPE_CLASS2) {
|
||||||
|
|
||||||
|
if (hintflag) fputs(" # class2\n\n",DatF);
|
||||||
|
else fputs("\n\n",DatF);
|
||||||
|
|
||||||
|
for (i=0; i < no_dihedral_types; i++) {
|
||||||
|
fprintf(DatF, "%3i",i+1);
|
||||||
|
for ( j = 0; j < 6; j++)
|
||||||
|
fprintf(DatF, " %10.4f",dihedraltypes[i].params[j]);
|
||||||
|
|
||||||
|
fputs("\n",DatF);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (forcefield & FF_TYPE_CLASS2) {
|
fputs("\n",DatF);
|
||||||
|
|
||||||
fprintf(DatF,"Dihedral Coeffs\n\n");
|
|
||||||
|
|
||||||
for (i=0; i < no_dihedral_types; i++) {
|
|
||||||
fprintf(DatF, "%3i",i+1);
|
|
||||||
for ( j = 0; j < 6; j++)
|
|
||||||
fprintf(DatF, " %10.4f",dihedraltypes[i].params[j]);
|
|
||||||
|
|
||||||
fputs("\n",DatF);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fputs("\n",DatF);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (forcefield & FF_TYPE_CLASS1) {
|
if (forcefield & FF_TYPE_CLASS1) {
|
||||||
if (no_oop_types > 0) {
|
if (no_oop_types > 0) {
|
||||||
/* cvff improper coeffs are: type K0 d n */
|
/* cvff improper coeffs are: type K0 d n */
|
||||||
fprintf(DatF,"Improper Coeffs\n\n");
|
if (hintflag) fputs("Improper Coeffs # cvff\n\n",DatF);
|
||||||
for (i=0; i < no_oop_types; i++) {
|
else fputs("Improper Coeffs\n\n",DatF);
|
||||||
fprintf(DatF,"%5i %10.4f %3i %3i\n",i+1,
|
|
||||||
ooptypes[i].params[0], (int) ooptypes[i].params[1],
|
for (i=0; i < no_oop_types; i++) {
|
||||||
(int) ooptypes[i].params[2]);
|
fprintf(DatF,"%5i %10.4f %3i %3i\n",i+1,
|
||||||
|
ooptypes[i].params[0], (int) ooptypes[i].params[1],
|
||||||
|
(int) ooptypes[i].params[2]);
|
||||||
|
}
|
||||||
|
fputs("\n",DatF);
|
||||||
}
|
}
|
||||||
fputs("\n",DatF);
|
|
||||||
}
|
|
||||||
} else if (forcefield & FF_TYPE_OPLSAA) {
|
} else if (forcefield & FF_TYPE_OPLSAA) {
|
||||||
if (no_oop_types > 0) {
|
if (no_oop_types > 0) {
|
||||||
/* opls improper coeffs are like cvff: type K0 d(=-1) n(=2) */
|
/* opls improper coeffs are like cvff: type K0 d(=-1) n(=2) */
|
||||||
fprintf(DatF,"Improper Coeffs\n\n");
|
if (hintflag) fputs("Improper Coeffs # cvff\n\n",DatF);
|
||||||
for (i=0; i < no_oop_types; i++) {
|
else fputs("Improper Coeffs\n\n",DatF);
|
||||||
fprintf(DatF,"%5i %10.4f %3i %3i\n",i+1,
|
|
||||||
ooptypes[i].params[0], (int) ooptypes[i].params[1],
|
for (i=0; i < no_oop_types; i++) {
|
||||||
(int) ooptypes[i].params[2]);
|
fprintf(DatF,"%5i %10.4f %3i %3i\n",i+1,
|
||||||
|
ooptypes[i].params[0], (int) ooptypes[i].params[1],
|
||||||
|
(int) ooptypes[i].params[2]);
|
||||||
|
}
|
||||||
|
fputs("\n",DatF);
|
||||||
}
|
}
|
||||||
fputs("\n",DatF);
|
|
||||||
}
|
|
||||||
} else if (forcefield & FF_TYPE_CLASS2) {
|
} else if (forcefield & FF_TYPE_CLASS2) {
|
||||||
if ((no_oop_types + no_angleangle_types) > 0) {
|
if ((no_oop_types + no_angleangle_types) > 0) {
|
||||||
fprintf(DatF,"Improper Coeffs\n\n");
|
if (hintflag) fputs("Improper Coeffs # class2\n\n",DatF);
|
||||||
for (i=0; i < no_oop_types; i++) {
|
else fputs("Improper Coeffs\n\n",DatF);
|
||||||
fprintf(DatF, "%3i ", i+1);
|
|
||||||
for ( j = 0; j < 2; j++)
|
for (i=0; i < no_oop_types; i++) {
|
||||||
fprintf(DatF, "%10.4f ", ooptypes[i].params[j]);
|
fprintf(DatF, "%3i ", i+1);
|
||||||
fputs("\n",DatF);
|
for ( j = 0; j < 2; j++)
|
||||||
|
fprintf(DatF, "%10.4f ", ooptypes[i].params[j]);
|
||||||
|
fputs("\n",DatF);
|
||||||
|
}
|
||||||
|
for (i=0; i < no_angleangle_types; i++) {
|
||||||
|
fprintf(DatF, "%3i ", i+no_oop_types+1);
|
||||||
|
for ( j = 0; j < 2; j++)
|
||||||
|
fprintf(DatF, "%10.4f ", 0.0);
|
||||||
|
fputs("\n",DatF);
|
||||||
|
}
|
||||||
|
fputs("\n",DatF);
|
||||||
}
|
}
|
||||||
for (i=0; i < no_angleangle_types; i++) {
|
|
||||||
fprintf(DatF, "%3i ", i+no_oop_types+1);
|
|
||||||
for ( j = 0; j < 2; j++)
|
|
||||||
fprintf(DatF, "%10.4f ", 0.0);
|
|
||||||
fputs("\n",DatF);
|
|
||||||
}
|
|
||||||
fputs("\n",DatF);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (forcefield & FF_TYPE_CLASS2) {
|
if (forcefield & FF_TYPE_CLASS2) {
|
||||||
@ -302,19 +333,23 @@ void WriteDataFile(char *nameroot)
|
|||||||
|
|
||||||
/* ATOMS */
|
/* ATOMS */
|
||||||
|
|
||||||
fprintf(DatF, "Atoms\n\n");
|
if (hintflag) fputs("Atoms # full\n\n",DatF);
|
||||||
|
else fputs("Atoms\n\n",DatF);
|
||||||
|
|
||||||
for(k=0; k < total_no_atoms; k++) {
|
for(k=0; k < total_no_atoms; k++) {
|
||||||
fprintf(DatF, " %6i %6i %3i %9.6f %15.9f %15.9f %15.9f %3i %3i %3i\n",
|
int typ = atoms[k].type;
|
||||||
|
fprintf(DatF," %6i %6i %3i %9.6f %15.9f %15.9f %15.9f %3i %3i %3i # %s\n",
|
||||||
k+1,
|
k+1,
|
||||||
atoms[k].molecule,
|
atoms[k].molecule,
|
||||||
atoms[k].type+1,
|
typ+1,
|
||||||
atoms[k].q,
|
atoms[k].q,
|
||||||
atoms[k].x[0],
|
atoms[k].x[0],
|
||||||
atoms[k].x[1],
|
atoms[k].x[1],
|
||||||
atoms[k].x[2],
|
atoms[k].x[2],
|
||||||
atoms[k].image[0],
|
atoms[k].image[0],
|
||||||
atoms[k].image[1],
|
atoms[k].image[1],
|
||||||
atoms[k].image[2]);
|
atoms[k].image[2],
|
||||||
|
atomtypes[typ].potential);
|
||||||
}
|
}
|
||||||
fputs("\n",DatF);
|
fputs("\n",DatF);
|
||||||
|
|
||||||
|
|||||||
@ -2,6 +2,8 @@
|
|||||||
*
|
*
|
||||||
* msi2lmp.exe
|
* msi2lmp.exe
|
||||||
*
|
*
|
||||||
|
* v3.9.4 AK- Make force field style hints optional with a flag
|
||||||
|
*
|
||||||
* v3.9.3 AK- Bugfix for triclinic cells.
|
* v3.9.3 AK- Bugfix for triclinic cells.
|
||||||
*
|
*
|
||||||
* v3.9.2 AK- Support for writing out force field style hints
|
* v3.9.2 AK- Support for writing out force field style hints
|
||||||
@ -51,7 +53,7 @@
|
|||||||
* The program is started by supplying information at the command prompt
|
* The program is started by supplying information at the command prompt
|
||||||
* according to the usage described below.
|
* according to the usage described below.
|
||||||
*
|
*
|
||||||
* USAGE: msi2lmp3 ROOTNAME {-print #} {-class #} {-frc FRC_FILE} {-ignore} {-nocenter}
|
* USAGE: msi2lmp3 ROOTNAME {-print #} {-class #} {-frc FRC_FILE} {-ignore} {-nocenter} {-oldstyle}
|
||||||
*
|
*
|
||||||
* -- msi2lmp3 is the name of the executable
|
* -- msi2lmp3 is the name of the executable
|
||||||
* -- ROOTNAME is the base name of the .car and .mdf files
|
* -- ROOTNAME is the base name of the .car and .mdf files
|
||||||
@ -73,6 +75,9 @@
|
|||||||
* -- -nocenter - tells msi2lmp to not center the box around the (geometrical)
|
* -- -nocenter - tells msi2lmp to not center the box around the (geometrical)
|
||||||
* center of the atoms, but around the origin
|
* center of the atoms, but around the origin
|
||||||
*
|
*
|
||||||
|
* -- -oldstyle - tells msi2lmp to write out a data file without style hints
|
||||||
|
* (to be compatible with older LAMMPS versions)
|
||||||
|
*
|
||||||
* -- -shift - tells msi2lmp to shift the entire system (box and coordinates)
|
* -- -shift - tells msi2lmp to shift the entire system (box and coordinates)
|
||||||
* by a vector (default: 0.0 0.0 0.0)
|
* by a vector (default: 0.0 0.0 0.0)
|
||||||
*
|
*
|
||||||
@ -148,6 +153,7 @@ int periodic = 1;
|
|||||||
int TriclinicFlag = 0;
|
int TriclinicFlag = 0;
|
||||||
int forcefield = 0;
|
int forcefield = 0;
|
||||||
int centerflag = 1;
|
int centerflag = 1;
|
||||||
|
int hintflag = 1;
|
||||||
|
|
||||||
int pflag;
|
int pflag;
|
||||||
int iflag;
|
int iflag;
|
||||||
@ -219,7 +225,7 @@ int main (int argc, char *argv[])
|
|||||||
frc_dir_name = getenv("MSI2LMP_LIBRARY");
|
frc_dir_name = getenv("MSI2LMP_LIBRARY");
|
||||||
|
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
printf("usage: %s <rootname> [-class <I|1|II|2>] [-frc <path to frc file>] [-print #] [-ignore] [-nocenter]\n",argv[0]);
|
printf("usage: %s <rootname> [-class <I|1|II|2>] [-frc <path to frc file>] [-print #] [-ignore] [-nocenter] [-oldstyle]\n",argv[0]);
|
||||||
return 1;
|
return 1;
|
||||||
} else { /* rootname was supplied as first argument, copy to rootname */
|
} else { /* rootname was supplied as first argument, copy to rootname */
|
||||||
int len = strlen(argv[1]) + 1;
|
int len = strlen(argv[1]) + 1;
|
||||||
@ -258,8 +264,10 @@ int main (int argc, char *argv[])
|
|||||||
shift[2] = atof(argv[++n]);
|
shift[2] = atof(argv[++n]);
|
||||||
} else if (strncmp(argv[n],"-i",2) == 0 ) {
|
} else if (strncmp(argv[n],"-i",2) == 0 ) {
|
||||||
iflag = 1;
|
iflag = 1;
|
||||||
} else if (strncmp(argv[n],"-n",2) == 0 ) {
|
} else if (strncmp(argv[n],"-n",4) == 0 ) {
|
||||||
centerflag = 0;
|
centerflag = 0;
|
||||||
|
} else if (strncmp(argv[n],"-o",4) == 0 ) {
|
||||||
|
hintflag = 0;
|
||||||
} else if (strncmp(argv[n],"-p",2) == 0) {
|
} else if (strncmp(argv[n],"-p",2) == 0) {
|
||||||
n++;
|
n++;
|
||||||
if (check_arg(argv,"-print",n,argc))
|
if (check_arg(argv,"-print",n,argc))
|
||||||
@ -333,6 +341,10 @@ int main (int argc, char *argv[])
|
|||||||
if (forcefield & FF_TYPE_CLASS2) puts(" Forcefield: Class II");
|
if (forcefield & FF_TYPE_CLASS2) puts(" Forcefield: Class II");
|
||||||
if (forcefield & FF_TYPE_OPLSAA) puts(" Forcefield: OPLS-AA");
|
if (forcefield & FF_TYPE_OPLSAA) puts(" Forcefield: OPLS-AA");
|
||||||
printf(" Forcefield file name: %s\n",FrcFileName);
|
printf(" Forcefield file name: %s\n",FrcFileName);
|
||||||
|
if (centerflag) puts(" Output is recentered around geometrical center");
|
||||||
|
if (hintflag) puts(" Output contains style flag hints");
|
||||||
|
else puts(" Style flag hints disabled");
|
||||||
|
printf(" System translated by: %g %g %g\n",shift[0],shift[1],shift[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
n = 0;
|
n = 0;
|
||||||
|
|||||||
@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
# include <stdio.h>
|
# include <stdio.h>
|
||||||
|
|
||||||
#define MSI2LMP_VERSION "v3.9.3 / 07 Mar 2014"
|
#define MSI2LMP_VERSION "v3.9.4 / 11 Mar 2014"
|
||||||
|
|
||||||
#define PI_180 0.01745329251994329576
|
#define PI_180 0.01745329251994329576
|
||||||
|
|
||||||
@ -171,6 +171,7 @@ extern int TriclinicFlag; /* 0= Orthogonal 1= Triclinic */
|
|||||||
extern int forcefield; /* BitMask: the value FF_TYPE_COMMON is set for common components of the options below,
|
extern int forcefield; /* BitMask: the value FF_TYPE_COMMON is set for common components of the options below,
|
||||||
* FF_TYPE_CLASS1 = ClassI, FF_TYPE_CLASS2 = ClassII, FF_TYPE_OPLSAA = OPLS-AA*/
|
* FF_TYPE_CLASS1 = ClassI, FF_TYPE_CLASS2 = ClassII, FF_TYPE_OPLSAA = OPLS-AA*/
|
||||||
extern int centerflag; /* 1= center box 0= keep box */
|
extern int centerflag; /* 1= center box 0= keep box */
|
||||||
|
extern int hintflag; /* 1= print style hint comments 0= no hints */
|
||||||
extern int pflag; /* print level: 0, 1, 2, 3 */
|
extern int pflag; /* print level: 0, 1, 2, 3 */
|
||||||
extern int iflag; /* 0 stop at errors 1 = ignore errors */
|
extern int iflag; /* 0 stop at errors 1 = ignore errors */
|
||||||
extern int *no_atoms;
|
extern int *no_atoms;
|
||||||
|
|||||||
Reference in New Issue
Block a user