diff --git a/tools/msi2lmp/README b/tools/msi2lmp/README index 924ca7024f..e3477a359f 100644 --- a/tools/msi2lmp/README +++ b/tools/msi2lmp/README @@ -1,6 +1,11 @@ Stephanie Teich-McGoldrick (Sandai) is the current maintainer of the msi2lmp tool. She can be contacted at steichm at sandia.gov +02 Aug 2013 Axel Kohlmeyer + +Added rudimentary support for OPLS-AA based on +input provided by jeff greathouse. + 18 Jul 2013 Axel Kohlmeyer Added support for writing out image flags diff --git a/tools/msi2lmp/biosym_frc_files/oplsaa.frc b/tools/msi2lmp/biosym_frc_files/oplsaa.frc new file mode 100644 index 0000000000..e388bc3489 --- /dev/null +++ b/tools/msi2lmp/biosym_frc_files/oplsaa.frc @@ -0,0 +1,236 @@ +!BIOSYM forcefield 1 + +! This is a modified version of msi2lmp for use specifically wtih the +! OPLS force field. No out-of-plane or cross-terms are included. +! Atom types from SPC water and CLAYFF are also included. + + +#atom_types cvff + +> Masses from CRC 1973/74 pages B-250. + +!Ver Ref Type Mass Element Connections Comment +!---- --- ---- ---------- ------- ----------------------------------------- + 1.0 1 HC 1.007970 H 1 H, RH, alkanes + 1.0 1 HO 1.007970 H 1 H(O), ROH + 1.0 1 HS 1.007970 H 1 H(S), RSH + 1.0 1 HM 1.007970 H 1 H(C), CH3OH + 1.0 1 CT 12.011150 C 4 Aliphatic C + 1.0 1 OH 15.999400 O 2 O, ROH + 1.0 1 SH 32.064000 S 2 S, RSH + 1.0 1 S 32.064000 S 2 S, RSR + 1.0 1 CG 12.011150 C 1 Graphite C + 1.0 1 CL 35.453000 Cl 1 Cl, RCl + X.X X CC 12.011150 C 3 Carbonate ion C, AMBER + X.X X OC 15.035060 O 1 Carbonate ion O, AMBER + + +#equivalence cvff + +> Equivalence table for any variant of cvff + +! Equivalences +! ----------------------------------------- +!Ver Ref Type NonB Bond Angle Torsion OOP +!---- --- ---- ---- ---- ----- ------- ---- + 1.0 1 h h h h h h + + + +#quadratic_bond cvff + +> E = K2 * (R - R0)^2 + +!Ver Ref I J R0 K2 +!---- --- ---- ---- ------- -------- + 2.3 23 CT CT 1.529 268.0 + 2.3 23 CT HC 1.09 340.0 + 2.3 23 CT OH 1.410 320.0 + 2.3 23 CT SH 1.810 222.0 + 1.0 1 HO OH 0.96 553.0 + 1.0 1 HS SH 1.336 274.0 + 1.0 1 CT S 1.810 222.0 + 1.0 1 CT CL 1.781 245.0 + X.X X CC OC 1.21 648.0 + + + +#quadratic_angle cvff + +> E = K2 * (Theta - Theta0)^2 + +!Ver Ref I J K Theta0 K2 +!---- --- ---- ---- ---- -------- ------- + 2.3 23 CT CT CT 112.7 58.35 + 2.3 23 CT CT HC 110.7 37.50 + 2.3 23 CT CT OH 109.5 50.00 + 2.3 23 HC CT HC 107.8 33.00 + 2.3 23 CT OH HO 108.5 55.00 + 2.3 23 HC CT OH 109.5 35.00 + 1.0 1 CT CT SH 108.6 50.00 + 1.0 1 CT SH HS 96.0 44.00 + 1.0 1 HC CT SH 109.5 35.00 + 1.0 1 CT CT S 114.7 50.00 + 1.0 1 CT S CT 98.9 62.00 + 1.0 1 HC CT S 109.5 35.00 + 1.0 1 CT CT CL 109.8 69.0 + 1.0 1 HC CT CL 107.6 51.0 + X.X X OC CC OC 127.0 79.1 + + +#bond-bond cvff + +> E = K(b,b') * (R - R0) * (R' - R0') + +!Ver Ref I J K K(b,b') +!---- --- ---- ---- ---- ------- + 1.0 1 c o c' 0.0000 + +#bond-angle cvff + +> E = K * (R - R0) * (Theta - Theta0) + +!Ver Ref I J K K(b,theta) K(b',theta) +!---- --- ---- ---- ---- ---------- ----------- + 1.0 1 c o c' 57.0000 57.0000 + +#torsion_1 opls + +> E = 0.5*K1*[1 + cos(Phi)] + 0.5*K2*[1 + cos(2*Phi)] + 0.5*K3*[1 + cos(3*Phi)] + 0.5*K4*[1 + cos(4*Phi)] + +!Ver Ref I J K L K1 K2 K3 K4 +!---- --- ---- ---- ---- ---- ------- ------ ------ ----- + X.X XX HC CT CT HC 0.0 0.0 0.318 0.0 + X.X XX HC CT CT CT 0.0 0.0 0.366 0.0 + X.X XX HC CT OH HO 0.0 0.0 0.450 0.0 + X.X XX CT CT OH HO -0.356 -0.174 0.492 0.0 + X.X XX HC CT CT OH 0.0 0.0 0.468 0.0 + X.X XX CT CT CT OH 1.711 -0.500 0.663 0.0 + X.X XX HC CT SH HS 0.0 0.0 0.451 0.0 + X.X XX CT CT SH HS -0.759 -0.282 0.603 0.0 + X.X XX HC CT CT SH 0.0 0.0 0.452 0.0 + X.X XX CT CT CT SH 1.876 0.0 0.0 0.0 + X.X XX HC CT CT S 0.0 0.0 0.452 0.0 + X.X XX CT CT S CT 0.925 -0.576 0.677 0.0 + X.X XX HC CT S CT 0.0 0.0 0.647 0.0 + X.X XX S CT CT CL 0.0 0.0 0.452 0.0 + X.X XX CL CT CT CL 0.250 -0.250 0.0 0.0 + X.X XX HC CT CT CL 0.0 0.0 0.400 0.0 + + +#angle-angle-torsion_1 cvff + +> E = K * (Theta - Theta0) * (Theta' - Theta0') * cos(Phi) +!Ver Ref I J K L K(Ang,Ang,Tor) +!---- --- ---- ---- ---- ---- -------------- + 1.0 1 * c c * -10.5000 + +#out_of_plane cvff + +> E = Kchi * [ 1 + cos(n*Chi - Chi0) ] + +!Ver Ref I J K L Kchi n Chi0 +!---- --- ---- ---- ---- ---- ------- ------ ------- + 2.3 0 hn n c c' 10.0 2 180.0 + X.X X OC CC OC OC 1.1 2 180.0 + + +#out_of_plane-out_of_plane cvff + +> E = Koo * Chi * Chi' + +!Ver Ref I J K L Koo +!---- --- ---- ---- ---- ---- ------- + 1.0 1 c c' n o' 0.0100 + +#angle-angle cvff + +> E = K * (Theta - Theta0) * (Theta' - Theta0') + +! J' I' K' +!Ver Ref I J K K +!---- --- ---- ---- ---- ---- ------- + 1.0 1 c c c c -7.9000 + + + +#morse_bond cvff_auto + +> E = D * (1 - exp(-ALPHA*(R - R0)))^2 + +!Ver Ref I J R0 D ALPHA +!---- --- ---- ---- ------- -------- ------- + 2.0 18 c3m_ c3m_ 1.5100 88.0000 1.9150 + +#quadratic_bond cvff_auto + +> E = K2 * (R - R0)^2 + +!Ver Ref I J R0 K2 +!---- --- ---- ---- ------- -------- + 2.0 18 c3m_ c3m_ 1.5100 322.7158 + + +#quadratic_angle cvff_auto + +> E = K2 * (Theta - Theta0)^2 + +!Ver Ref I J K Theta0 K2 +!---- --- ---- ---- ---- -------- ------- + 2.0 18 c3m_ c3m_ c3m_ 60.0000 46.0000 + + + + +#torsion_1 cvff_auto + +> E = Kphi * [ 1 + cos(n*Phi - Phi0) ] + +!Ver Ref I J K L Kphi n Phi0 +!---- --- ---- ---- ---- ---- ------- ------ ------- + 2.0 18 * c_ n3n_ * 0.0500 3 0. + + + + +#out_of_plane cvff_auto + +> E = Kchi * [ 1 + cos(n*Chi - Chi0) ] + +!Ver Ref I J K L Kchi n Chi0 +!---- --- ---- ---- ---- ---- ------- ------ ------- + 2.0 18 * c'_ * * 10.0000 2 180.0000 + + +#nonbond(12-6) cvff + +@type A-B +@combination geometric + +> E = Aij/r^12 - Bij/r^6 +> where Aij = sqrt( Ai * Aj ) +> Bij = sqrt( Bi * Bj ) + +!Ver Ref I A B +!---- --- ---- ----------- ----------- + 1.0 1 HC 7152.557 29.297 + 1.0 1 HO 0.0 0.0 + 1.0 1 HS 0.0 0.0 + 1.8 14 HM 7152.557 29.297 + 1.0 1 CT 892114.214 485.302 + 1.0 1 OH 578580.831 627.244 + 2.3 25 SH 4006270.2 2001.567 + 2.3 25 S 4006270.2 2001.567 + 1.0 1 CG 531140.879 343.824 + 1.0 1 CL 2863704.82 1853.765299 + X.X X CC 819971.66216 531.10286 + XX X OC 379876.39852 564.88598 + + + +#bond_increments cvff + +!Ver Ref I J DeltaIJ DeltaJI +!---- --- ---- ---- ------- ------- + 2.3 23 no o- 0.1684 -0.1684 + diff --git a/tools/msi2lmp/src/GetParameters.c b/tools/msi2lmp/src/GetParameters.c index f4b83b926c..3fc6057a6f 100644 --- a/tools/msi2lmp/src/GetParameters.c +++ b/tools/msi2lmp/src/GetParameters.c @@ -77,7 +77,7 @@ void GetParameters() printf(" Unable to find vdw data for %s\n",atomtypes[i].potential); condexit(11); } else { - if (forcefield & FF_TYPE_CLASS1) { + if (forcefield & (FF_TYPE_CLASS1|FF_TYPE_OPLSAA)) { if((ff_vdw.data[k].ff_param[0] != 0.0 ) && (ff_vdw.data[k].ff_param[1] != 0.0)) { atomtypes[i].params[0] = @@ -132,7 +132,7 @@ void GetParameters() potential_types[0],potential_types[1]); condexit(12); } else { - if (forcefield & FF_TYPE_CLASS1) { + if (forcefield & (FF_TYPE_CLASS1|FF_TYPE_OPLSAA)) { bondtypes[i].params[0] = ff_bond.data[k].ff_param[1]; bondtypes[i].params[1] = ff_bond.data[k].ff_param[0]; } @@ -189,7 +189,7 @@ void GetParameters() potential_types[0],potential_types[1],potential_types[2]); condexit(13); } else { - if (forcefield & FF_TYPE_CLASS1) { + if (forcefield & (FF_TYPE_CLASS1|FF_TYPE_OPLSAA)) { angletypes[i].params[0] = ff_ang.data[k].ff_param[1]; angletypes[i].params[1] = ff_ang.data[k].ff_param[0]; } @@ -341,6 +341,10 @@ void GetParameters() } dihedraltypes[i].params[2] = ff_tor.data[k].ff_param[1]; } + if (forcefield & FF_TYPE_OPLSAA) { + for (j=0; j < 4; j++) + dihedraltypes[i].params[j] = ff_tor.data[k].ff_param[j]; + } if (forcefield & FF_TYPE_CLASS2) { for (j=0; j < 6; j++) dihedraltypes[i].params[j] = ff_tor.data[k].ff_param[j]; diff --git a/tools/msi2lmp/src/InitializeItems.c b/tools/msi2lmp/src/InitializeItems.c index 954589ad04..4df9fd0f10 100644 --- a/tools/msi2lmp/src/InitializeItems.c +++ b/tools/msi2lmp/src/InitializeItems.c @@ -31,7 +31,7 @@ void InitializeItems(void) /* BOND */ ff_bond.number_of_members = 2; - if (forcefield & FF_TYPE_CLASS1) { + if (forcefield & (FF_TYPE_CLASS1|FF_TYPE_OPLSAA)) { strcpy(ff_bond.keyword,"#quadratic_bond"); ff_bond.number_of_parameters = 2; } @@ -52,7 +52,7 @@ void InitializeItems(void) /* ANGLE */ ff_ang.number_of_members = 3; - if (forcefield & FF_TYPE_CLASS1) { + if (forcefield & (FF_TYPE_CLASS1|FF_TYPE_OPLSAA)) { strcpy(ff_ang.keyword,"#quadratic_angle"); ff_ang.number_of_parameters = 2; } @@ -65,7 +65,7 @@ void InitializeItems(void) /* TORSION */ ff_tor.number_of_members = 4; - if (forcefield & FF_TYPE_CLASS1) { + if (forcefield & (FF_TYPE_CLASS1|FF_TYPE_OPLSAA)) { strcpy(ff_tor.keyword,"#torsion_1"); ff_tor.number_of_parameters = 3; } @@ -78,7 +78,7 @@ void InitializeItems(void) /* OOP */ ff_oop.number_of_members = 4; - if (forcefield & FF_TYPE_CLASS1) { + if (forcefield & (FF_TYPE_CLASS1|FF_TYPE_OPLSAA)) { strcpy(ff_oop.keyword,"#out_of_plane"); ff_oop.number_of_parameters = 3; } diff --git a/tools/msi2lmp/src/ReadCarFile.c b/tools/msi2lmp/src/ReadCarFile.c index f07c9871b3..9a4f0e996b 100644 --- a/tools/msi2lmp/src/ReadCarFile.c +++ b/tools/msi2lmp/src/ReadCarFile.c @@ -188,7 +188,7 @@ void ReadCarFile(void) atoms[k].molecule = m; atoms[k].no = k; - fscanf(CarF,"%s %lf %lf %lf %*s %d %s %s %f", + fscanf(CarF,"%s %lf %lf %lf %*s %d %s %s %lf", atoms[k].name, &(atoms[k].x[0]), &(atoms[k].x[1]), diff --git a/tools/msi2lmp/src/ReadFrcFile.c b/tools/msi2lmp/src/ReadFrcFile.c index a64798add3..ce22288450 100644 --- a/tools/msi2lmp/src/ReadFrcFile.c +++ b/tools/msi2lmp/src/ReadFrcFile.c @@ -57,8 +57,9 @@ void ReadFrcFile(void) ff_vdw.keyword,ff_vdw.entries); fprintf(stderr," Item %s has %d entries\n", ff_bond.keyword,ff_bond.entries); - fprintf(stderr," Item %s has %d entries\n", - ff_morse.keyword,ff_morse.entries); + if (forcefield & FF_TYPE_CLASS1) + fprintf(stderr," Item %s has %d entries\n", + ff_morse.keyword,ff_morse.entries); fprintf(stderr," Item %s has %d entries\n", ff_ang.keyword,ff_ang.entries); if (forcefield & FF_TYPE_CLASS2) { diff --git a/tools/msi2lmp/src/SearchAndFill.c b/tools/msi2lmp/src/SearchAndFill.c index f3b3a37cbb..c9ea457d8e 100644 --- a/tools/msi2lmp/src/SearchAndFill.c +++ b/tools/msi2lmp/src/SearchAndFill.c @@ -41,7 +41,7 @@ void SearchAndFill(struct FrcFieldItem *item) while (got_it == 0) { status = fgets( line, MAX_LINE_LENGTH, FrcF ); if (status == NULL) { - fprintf(stderr," Unable to find forcefield keyword %s\n",item->keyword); + fprintf(stderr," Unable to find keyword '%s'\n",item->keyword); fprintf(stderr," Check consistency of forcefield name and class \n"); fprintf(stderr," Exiting....\n"); exit(1); diff --git a/tools/msi2lmp/src/WriteDataFile.c b/tools/msi2lmp/src/WriteDataFile.c index ed64ec7d38..dbed331889 100644 --- a/tools/msi2lmp/src/WriteDataFile.c +++ b/tools/msi2lmp/src/WriteDataFile.c @@ -94,6 +94,7 @@ void WriteDataFile(char *nameroot) if (no_bond_types > 0) { m = 0; if (forcefield & FF_TYPE_CLASS1) m = 2; + if (forcefield & FF_TYPE_OPLSAA) m = 2; if (forcefield & FF_TYPE_CLASS2) m = 4; fprintf(DatF,"Bond Coeffs\n\n"); @@ -109,6 +110,7 @@ void WriteDataFile(char *nameroot) if (no_angle_types > 0) { m = 0; if (forcefield & FF_TYPE_CLASS1) m = 2; + if (forcefield & FF_TYPE_OPLSAA) m = 2; if (forcefield & FF_TYPE_CLASS2) m = 4; fprintf(DatF,"Angle Coeffs\n\n"); @@ -134,6 +136,17 @@ void WriteDataFile(char *nameroot) (int) dihedraltypes[i].params[1], (int) dihedraltypes[i].params[2]); + } else if (forcefield & FF_TYPE_OPLSAA) { + + fprintf(DatF,"Dihedral Coeffs\n\n"); + + for (i=0; i < no_dihedral_types; i++) { + fprintf(DatF, "%3i",i+1); + for ( j = 0; j < 4; j++) + fprintf(DatF, " %10.4f",dihedraltypes[i].params[j]); + + fputs("\n",DatF); + } } else if (forcefield & FF_TYPE_CLASS2) { fprintf(DatF,"Dihedral Coeffs\n\n"); @@ -160,6 +173,17 @@ void WriteDataFile(char *nameroot) } fputs("\n",DatF); } + } else if (forcefield & FF_TYPE_OPLSAA) { + if (no_oop_types > 0) { + /* opls improper coeffs are like cvff: type K0 d(=-1) n(=2) */ + fprintf(DatF,"Improper Coeffs\n\n"); + for (i=0; i < no_oop_types; i++) { + 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); + } } else if (forcefield & FF_TYPE_CLASS2) { if ((no_oop_types + no_angleangle_types) > 0) { fprintf(DatF,"Improper Coeffs\n\n"); diff --git a/tools/msi2lmp/src/msi2lmp.c b/tools/msi2lmp/src/msi2lmp.c index f1f9af6a40..c53109faa3 100644 --- a/tools/msi2lmp/src/msi2lmp.c +++ b/tools/msi2lmp/src/msi2lmp.c @@ -1,6 +1,8 @@ /* * -* msi2lmp.exe V3.8 +* msi2lmp.exe V3.9 +* +* v3.9 AK - Rudimentary support for OPLS-AA * * v3.6 KLA - Changes to output to either lammps 2001 (F90 version) or to * lammps 2005 (C++ version) @@ -317,15 +319,23 @@ int main (int argc, char *argv[]) printf(" Forcefield file name: %s\n",FrcFileName); } - if (((forcefield & FF_TYPE_CLASS1) && (strstr(FrcFileName,"cff") != NULL)) || - ((forcefield & FF_TYPE_CLASS2) && - ! ((strstr(FrcFileName,"cvff") == NULL) - || (strstr(FrcFileName,"clayff") == NULL) - || (strstr(FrcFileName,"compass") == NULL))) || - ((forcefield & FF_TYPE_OPLSAA) && - ! (strstr(FrcFileName,"opls") == NULL))) { - fprintf(stderr," WARNING - forcefield name and class appear to\n"); - fprintf(stderr," be inconsistent - Errors may result\n\n"); + n = 0; + if (forcefield & FF_TYPE_CLASS1) { + if (strstr(FrcFileName,"cvff") != NULL) ++n; + if (strstr(FrcFileName,"clayff") != NULL) ++n; + } else if (forcefield & FF_TYPE_OPLSAA) { + if (strstr(FrcFileName,"oplsaa") != NULL) ++n; + } else if (forcefield & FF_TYPE_CLASS2) { + if (strstr(FrcFileName,"pcff") != NULL) ++n; + if (strstr(FrcFileName,"cff91") != NULL) ++n; + if (strstr(FrcFileName,"compass") != NULL) ++n; + } + + if (n == 0) { + if (iflag > 0) fputs(" WARNING",stderr); + else fputs(" Error ",stderr); + + fputs("- forcefield name and class appear to be inconsistent\n\n",stderr); if (iflag == 0) return 7; } diff --git a/tools/msi2lmp/test/data-compare.pl b/tools/msi2lmp/test/data-compare.pl index 63e40630fb..28d64b28f7 100755 --- a/tools/msi2lmp/test/data-compare.pl +++ b/tools/msi2lmp/test/data-compare.pl @@ -826,6 +826,38 @@ sub syscompare { die "Number of ",$i," types does not match: $a vs $b" unless ($a == $b); } + topocompare($d1,$d2,'bond',2); + topocompare($d1,$d2,'angle',3); + topocompare($d1,$d2,'dihedral',4); + topocompare($d1,$d2,'improper',4); + + coeffcompare($d1,$d2,'pair','atom'); + coeffcompare($d1,$d2,'bond','bond'); + coeffcompare($d1,$d2,'angle','angle'); + coeffcompare($d1,$d2,'bondbond','angle'); + coeffcompare($d1,$d2,'bondangle','angle'); + coeffcompare($d1,$d2,'dihedral','dihedral'); + coeffcompare($d1,$d2,'angleangletorsion','dihedral'); + coeffcompare($d1,$d2,'bondbond13','dihedral'); + coeffcompare($d1,$d2,'endbondtorsion','dihedral'); + coeffcompare($d1,$d2,'middlebondtorsion','dihedral'); + coeffcompare($d1,$d2,'improper','improper'); + coeffcompare($d1,$d2,'angleangle','improper'); + + for ($i=0; $i < $d1->{natomtypes}; ++$i) { + $j = $i+1; + if (exists $d1->{mass}[$i]) { + $a = $d1->{mass}[$i]; + } else { + die "No mass for atom type $j in data file 1"; + } + if (exists $d2->{mass}[$i]) { + $a = $d2->{mass}[$i]; + } else { + die "No mass for atom type $j in data file 2"; + } + } + # check box information die "Inconsistent box shape" if ($d1->{triclinic} != $d2->{triclinic}); @@ -868,38 +900,6 @@ sub syscompare { } } - for ($i=0; $i < $d1->{natomtypes}; ++$i) { - $j = $i+1; - if (exists $d1->{mass}[$i]) { - $a = $d1->{mass}[$i]; - } else { - die "No mass for atom type $j in data file 1"; - } - if (exists $d2->{mass}[$i]) { - $a = $d2->{mass}[$i]; - } else { - die "No mass for atom type $j in data file 2"; - } - } - - topocompare($d1,$d2,'bond',2); - topocompare($d1,$d2,'angle',3); - topocompare($d1,$d2,'dihedral',4); - topocompare($d1,$d2,'improper',4); - - coeffcompare($d1,$d2,'pair','atom'); - coeffcompare($d1,$d2,'bond','bond'); - coeffcompare($d1,$d2,'angle','angle'); - coeffcompare($d1,$d2,'bondbond','angle'); - coeffcompare($d1,$d2,'bondangle','angle'); - coeffcompare($d1,$d2,'dihedral','dihedral'); - coeffcompare($d1,$d2,'angleangletorsion','dihedral'); - coeffcompare($d1,$d2,'bondbond13','dihedral'); - coeffcompare($d1,$d2,'endbondtorsion','dihedral'); - coeffcompare($d1,$d2,'middlebondtorsion','dihedral'); - coeffcompare($d1,$d2,'improper','improper'); - coeffcompare($d1,$d2,'angleangle','improper'); - } ######################################################################## diff --git a/tools/msi2lmp/test/ethane-oplsaa.car b/tools/msi2lmp/test/ethane-oplsaa.car new file mode 100644 index 0000000000..dac6475948 --- /dev/null +++ b/tools/msi2lmp/test/ethane-oplsaa.car @@ -0,0 +1,15 @@ +!BIOSYM archive 3 +PBC=ON +Materials Studio Generated CAR File +!DATE Tue Jul 02 12:42:22 2013 +PBC 10.0000 10.0000 10.0000 90.0000 90.0000 90.0000 (P1) +C1 4.462910000 5.148330000 -5.000410000 XXXX 1 CT C -0.180 +C2 5.965490000 5.079930000 -4.999750000 XXXX 1 CT C -0.180 +H3 4.099550000 6.054480000 -5.502500000 XXXX 1 HC H 0.060 +H4 4.020330000 4.288350000 -5.519840000 XXXX 1 HC H 0.060 +H5 4.057610000 5.156680000 -3.980190000 XXXX 1 HC H 0.060 +H6 6.409980000 5.944880000 -4.490510000 XXXX 1 HC H 0.060 +H7 6.329880000 4.179410000 -4.488110000 XXXX 1 HC H 0.060 +H8 6.370610000 5.061380000 -6.019850000 XXXX 1 HC H 0.060 +end +end diff --git a/tools/msi2lmp/test/ethane-oplsaa.mdf b/tools/msi2lmp/test/ethane-oplsaa.mdf new file mode 100644 index 0000000000..3d83475a78 --- /dev/null +++ b/tools/msi2lmp/test/ethane-oplsaa.mdf @@ -0,0 +1,36 @@ +!BIOSYM molecular_data 4 + +!Date: Tue Jul 02 12:42:23 2013 Materials Studio Generated MDF file + +#topology + +@column 1 element +@column 2 atom_type +@column 3 charge_group +@column 4 isotope +@column 5 formal_charge +@column 6 charge +@column 7 switching_atom +@column 8 oop_flag +@column 9 chirality_flag +@column 10 occupancy +@column 11 xray_temp_factor +@column 12 connections + +@molecule ethane + +XXXX_1:C1 C CT 1 0 0 -0.1800 0 0 8 1.0000 0.0000 C2 H3 H4 H5 +XXXX_1:C2 C CT 1 0 0 -0.1800 0 0 8 1.0000 0.0000 C1 H6 H7 H8 +XXXX_1:H3 H HC 1 0 0 0.0600 0 0 8 1.0000 0.0000 C1 +XXXX_1:H4 H HC 1 0 0 0.0600 0 0 8 1.0000 0.0000 C1 +XXXX_1:H5 H HC 1 0 0 0.0600 0 0 8 1.0000 0.0000 C1 +XXXX_1:H6 H HC 1 0 0 0.0600 0 0 8 1.0000 0.0000 C2 +XXXX_1:H7 H HC 1 0 0 0.0600 0 0 8 1.0000 0.0000 C2 +XXXX_1:H8 H HC 1 0 0 0.0600 0 0 8 1.0000 0.0000 C2 + +! +#symmetry +@periodicity 3 xyz +@group (P1) + +#end diff --git a/tools/msi2lmp/test/in.ethane-oplsaa b/tools/msi2lmp/test/in.ethane-oplsaa new file mode 100644 index 0000000000..b2611906bf --- /dev/null +++ b/tools/msi2lmp/test/in.ethane-oplsaa @@ -0,0 +1,14 @@ +log log.ethane-oplsaa +units real +atom_style full +pair_style lj/cut/coul/cut 15.0 +bond_style harmonic +angle_style harmonic +dihedral_style opls + +read_data ethane-oplsaa.data + +thermo_style multi +minimize 0.0 0.0 100 1000 + +write_data ethane-oplsaa.data2 diff --git a/tools/msi2lmp/test/reference/ethane-oplsaa.data b/tools/msi2lmp/test/reference/ethane-oplsaa.data new file mode 100644 index 0000000000..33cf687b1f --- /dev/null +++ b/tools/msi2lmp/test/reference/ethane-oplsaa.data @@ -0,0 +1,89 @@ +LAMMPS data file from msi2lmp v3.8 for ethane-oplsaa + + 8 atoms + 7 bonds + 12 angles + 9 dihedrals + 0 impropers + + 2 atom types + 2 bond types + 2 angle types + 1 dihedral types + + -5.000000000 5.000000000 xlo xhi + -5.000000000 5.000000000 ylo yhi + -5.000000000 5.000000000 zlo zhi + +Masses + + 1 12.011150 + 2 1.007970 + +Pair Coeffs + + 1 0.0659999660 3.5000001502 + 2 0.0300002576 2.4999982005 + +Bond Coeffs + + 1 268.0000 1.5290 + 2 340.0000 1.0900 + +Angle Coeffs + + 1 37.5000 110.7000 + 2 33.0000 107.8000 + +Dihedral Coeffs + + 1 0.0000 0.0000 0.3180 0.0000 + +Atoms + + 1 1 1 -0.180000 4.462910000 -4.851670000 4.999590000 0 1 -1 + 2 1 1 -0.180000 -4.034510000 -4.920070000 -4.999750000 1 1 0 + 3 1 2 0.060000 4.099550000 -3.945520000 4.497500000 0 1 -1 + 4 1 2 0.060000 4.020330000 4.288350000 4.480160000 0 0 -1 + 5 1 2 0.060000 4.057610000 -4.843320000 -3.980190000 0 1 0 + 6 1 2 0.060000 -3.590020000 -4.055120000 -4.490510000 1 1 0 + 7 1 2 0.060000 -3.670120000 4.179410000 -4.488110000 1 0 0 + 8 1 2 0.060000 -3.629390000 -4.938620000 3.980150000 1 1 -1 + +Bonds + + 1 1 1 2 + 2 2 1 3 + 3 2 1 4 + 4 2 1 5 + 5 2 2 6 + 6 2 2 7 + 7 2 2 8 + +Angles + + 1 1 2 1 3 + 2 1 2 1 4 + 3 1 2 1 5 + 4 2 3 1 4 + 5 2 3 1 5 + 6 2 4 1 5 + 7 1 1 2 6 + 8 1 1 2 7 + 9 1 1 2 8 + 10 2 6 2 7 + 11 2 6 2 8 + 12 2 7 2 8 + +Dihedrals + + 1 1 3 1 2 6 + 2 1 3 1 2 7 + 3 1 3 1 2 8 + 4 1 4 1 2 6 + 5 1 4 1 2 7 + 6 1 4 1 2 8 + 7 1 5 1 2 6 + 8 1 5 1 2 7 + 9 1 5 1 2 8 + diff --git a/tools/msi2lmp/test/reference/ethane-oplsaa.data2 b/tools/msi2lmp/test/reference/ethane-oplsaa.data2 new file mode 100644 index 0000000000..51ac8544aa --- /dev/null +++ b/tools/msi2lmp/test/reference/ethane-oplsaa.data2 @@ -0,0 +1,97 @@ +LAMMPS data file via write_data, version 14 Aug 2013-ICMS, timestep = 38 + +8 atoms +2 atom types +7 bonds +2 bond types +12 angles +2 angle types +9 dihedrals +1 dihedral types + +-5.0000000000000000e+00 5.0000000000000000e+00 xlo xhi +-5.0000000000000000e+00 5.0000000000000000e+00 ylo yhi +-5.0000000000000000e+00 5.0000000000000000e+00 zlo zhi + +Masses + +1 12.0112 +2 1.00797 + +Pair Coeffs + +1 0.066 3.5 +2 0.0300003 2.5 + +Bond Coeffs + +1 268 1.529 +2 340 1.09 + +Angle Coeffs + +1 37.5 110.7 +2 33 107.8 + +Dihedral Coeffs + +1 0 0 0.318 0 + +Atoms + +1 1 1 -1.7999999999999999e-01 4.4513654787991950e+00 -4.8452952225235171e+00 4.9978618185413897e+00 0 1 -1 +2 1 1 -1.7999999999999999e-01 -4.0223413274230113e+00 -4.9265327783543249e+00 -4.9984426635205530e+00 1 1 0 +3 1 2 5.9999999999999998e-02 4.1118234494897825e+00 -3.9519955907798003e+00 4.4733619774254318e+00 0 1 -1 +4 1 2 5.9999999999999998e-02 4.0174988470475572e+00 4.2860576171223572e+00 4.5022469929383719e+00 0 0 -1 +5 1 2 5.9999999999999998e-02 4.0630111196035328e+00 -4.8077899330369602e+00 -3.9842586979365473e+00 0 1 0 +6 1 2 5.9999999999999998e-02 -3.5902683367048773e+00 -4.0732209849776302e+00 -4.4754195169139814e+00 1 1 0 +7 1 2 5.9999999999999998e-02 -3.6834327143496224e+00 4.1648625434843920e+00 -4.5005239377702599e+00 1 0 0 +8 1 2 5.9999999999999998e-02 -3.6312965164625557e+00 -4.9326456509345169e+00 3.9840140272361455e+00 1 1 -1 + +Velocities + +1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +2 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +3 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +4 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +5 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +6 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +7 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 +8 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 + +Bonds + +1 1 1 2 +2 2 1 3 +3 2 1 4 +4 2 1 5 +5 2 2 6 +6 2 2 7 +7 2 2 8 + +Angles + +1 1 2 1 3 +2 1 2 1 4 +3 1 2 1 5 +4 2 3 1 4 +5 2 3 1 5 +6 2 4 1 5 +7 1 1 2 6 +8 1 1 2 7 +9 1 1 2 8 +10 2 6 2 7 +11 2 6 2 8 +12 2 7 2 8 + +Dihedrals + +1 1 3 1 2 6 +2 1 3 1 2 7 +3 1 3 1 2 8 +4 1 4 1 2 6 +5 1 4 1 2 7 +6 1 4 1 2 8 +7 1 5 1 2 6 +8 1 5 1 2 7 +9 1 5 1 2 8 diff --git a/tools/msi2lmp/test/runtests.sh b/tools/msi2lmp/test/runtests.sh index 6c0dd097e7..309de85064 100755 --- a/tools/msi2lmp/test/runtests.sh +++ b/tools/msi2lmp/test/runtests.sh @@ -5,6 +5,24 @@ MSI2LMP=../src/msi2lmp.exe LAMMPS=../../../src/lmp_serial CHECKDATA=./data-compare.pl +if [ ! -x $MSI2LMP ] +then + echo "No executable $MSI2LMP" + exit 1 +fi + +if [ ! -d $BIOSYM_LIBRARY ] +then + echo "No directory $BIOSYM_LIBRARY" + exit 1 +fi + +if [ ! -x $LAMMPS ] +then + echo "No executable $LAMMPS" + exit 1 +fi + verbose=1 counter=0 errors=0 @@ -41,6 +59,22 @@ do \ counter=$(expr $counter + 4) done +# OPLS-AA tests +for m in ethane +do \ + before=$errors + ${MSI2LMP} ${m}-oplsaa -c 0 -p ${verbose} -f oplsaa -n \ + || errors=$(expr $errors + 1) + ${LAMMPS} -log none -screen none -in in.${m}-oplsaa \ + || errors=$(expr $errors + 1) + ${CHECKDATA} ${m}-oplsaa.data reference/${m}-oplsaa.data \ + || errors=$(expr $errors + 1) + ${CHECKDATA} ${m}-oplsaa.data2 reference/${m}-oplsaa.data2 \ + || errors=$(expr $errors + 1) + [ $before -eq $errors ] && rm ${m}-oplsaa.data ${m}-oplsaa.data2 log.${m}-oplsaa + counter=$(expr $counter + 4) +done + # Class2 tests with compass for m in hydrogen ethane benzene naphthalene do \