In this tutorial Molecular dynamics simulation in LAMMPS is used to show what happens to a polymer chain at a certain temperature after some time. Chain's movement is caused by a molecular forces between atoms in the chain and by temperature of the chain. This factors are modeled in LAMMPS in order to show the behavior of this polymer chain. The chain was previously prepared in MATLAB. It contains 100 atoms with bound between neighbor atoms. During the simulation, firstly, the chain was left for do deform freely under the molecular forces and a random atomic fluctuation due to the temperature. After that the chain was minimized to find it's minimal energy condition. The tutorial explains basic LAMMPS commands and shows how to make a movie using AtomEye and ImageJ.
Author(s): Dmitry I. Zhuk, Mark A. Tschopp
Corresponding Author: Mark Tschopp
The polymer chain of 100 atoms was specially prepared in MATLAB. The atom's Z coordinate does not varies much, all of them are within 2 Å. The distance between atoms is about 1.5 Å. Basically, the chain goes from left upper to right lower corner of the box. At the right you can see the picture of the initial condition of the chain.
The data file is shown below and available for download here: PE_cl100.txt
# Model for PE 100 atoms 99 bonds 98 angles 97 dihedrals 1 atom types 1 bond types 1 angle types 1 dihedral types 0.0000 158.5000 xlo xhi 0.0000 158.5000 ylo yhi 0.0000 100.0000 zlo zhi Masses 1 14.02 Atoms 1 1 1 5.6240 5.3279 51.6059 2 1 1 7.4995 7.4810 50.2541 3 1 1 8.2322 8.0236 51.2149 4 1 1 9.6108 9.9075 51.7682 5 1 1 11.5481 11.3690 50.4167 6 1 1 12.9409 13.4562 50.2481 7 1 1 14.4708 14.8569 50.0868 8 1 1 16.1916 16.4790 50.5665 9 1 1 17.1338 17.6853 51.8189 10 1 1 19.1109 19.4000 50.3869 ... Bonds 1 1 1 2 2 1 2 3 3 1 3 4 4 1 4 5 5 1 5 6 6 1 6 7 7 1 7 8 8 1 8 9 9 1 9 10 10 1 10 11 ... Angles 1 1 1 2 3 2 1 2 3 4 3 1 3 4 5 4 1 4 5 6 5 1 5 6 7 6 1 6 7 8 7 1 7 8 9 8 1 8 9 10 ... Dihedrals 1 1 1 2 3 4 2 1 2 3 4 5 3 1 3 4 5 6 4 1 4 5 6 7 5 1 5 6 7 8 6 1 6 7 8 9 7 1 7 8 9 10
Figure 1. Not-deformed polymer chain.
Here, the first section defines the numbers of atoms, bonds, angles and dihedrals. Lower you can see the types and the box sizes. Below that are the simulation box sizes.
Then comes the Atoms section. The first column is the atom number, then comes the atom type and some other information not used in this tutorial. Last three columns is the atom's x, y and z coordinates correspondingly.
In the Angle section listed the angles between atoms. First column is the angle number, second - angle ID, then comes the atom's number between which the angle is defined. Example of the distribution of the atoms can be seen on Figure 2. Dihedrals are a little bit more complicated. To define a diherdal four atoms are needed. Syntax are pretty much similar to the angles section. The only difference is that one more atom is needed to define a dihedral. Basically, the dihedral angle is the angle between the planes formed by 2 groups of 3 neighbor atoms. You see the example on Figure 3.
Figure 2. Angles between atoms defined in LAMMPS.
Figure 3. Angles between atoms defined in LAMMPS.
Below is the script used for the actual simulation. This input script was run using the Aug 2015 version of LAMMPS. Changes in some commands in more recent versions may require revision of the input script. This script runs the simulation with the previously discussed data file.
##################################################### # # # # # Filename: in.deform.polychain.txt # # Author: Mark Tschopp, 2010 # # # # The methodology outlined here follows that from # # Hossain, Tschopp, et al. 2010, Polymer. Please # # cite accordingly. The following script requires # # a LAMMPS data file containing the coordinates and # # appropriate bond/angle/dihedral lists for each # # united atom. # # # # Execute the script through: # # lmp_exe < in.deform.polychain.txt # # # ##################################################### # VARIABLES variable fname index PE_cl100.txt variable simname index PE_cl100 # Initialization units real boundary f f f atom_style molecular log log.${simname}.txt read_data ${fname} # Dreiding potential information neighbor 0.4 bin neigh_modify every 10 one 10000 bond_style harmonic bond_coeff 1 350 1.53 angle_style harmonic angle_coeff 1 60 109.5 dihedral_style multi/harmonic dihedral_coeff 1 1.73 -4.49 0.776 6.99 0.0 pair_style lj/cut 10.5 pair_coeff 1 1 0.112 4.01 10.5 compute csym all centro/atom fcc compute peratom all pe/atom ##################################################### # Equilibration (Langevin dynamics at 5000 K) velocity all create 5000.0 1231 fix 1 all nve/limit 0.05 fix 2 all langevin 5000.0 5000.0 10.0 904297 thermo_style custom step temp thermo 10000 timestep 1 run 1000000 unfix 1 unfix 2 write_restart restart.${simname}.dreiding1 ##################################################### # Define Settings compute eng all pe/atom compute eatoms all reduce sum c_eng ##################################################### # Minimization dump 1 all cfg 6 dump.comp_*.cfg mass type xs ys zs c_csym c_peratom fx fy fz reset_timestep 0 fix 1 all nvt temp 500.0 500.0 100.0 thermo 20 thermo_style custom step pe lx ly lz press pxx pyy pzz c_eatoms min_style cg minimize 1e-25 1e-25 500000 1000000 print "All done"
In general, this script does equilibration and minimization to the polymer chain. Polymer chain data file named 'PE_cl100.txt' should be the same directory. Line "dump 1 all cfg 6 dum..." used to output information during simulation can be moved before the equilibration part of the script to output the process of equilibration. Please note that you need to change a time step for a dump command otherwise it will give too many or very few dump files. It may be reasonable to choose a timestep of 10,000 for equilibration and 6 for minimization. That will give about 100 files for each step.
# VARIABLES variable fname index PE_cl100.txt variable simname index PE_cl100 # Initialization units real boundary f f f atom_style molecular log log.${simname}.txt read_data ${fname}
This part is just opens the data file, defines the boundary conditions, units, logfile's name, etc.
# Dreiding potential information neighbor 0.4 bin neigh_modify every 10 one 10000 bond_style harmonic bond_coeff 1 350 1.53 angle_style harmonic angle_coeff 1 60 109.5 dihedral_style multi/harmonic dihedral_coeff 1 1.73 -4.49 0.776 6.99 0.0 pair_style lj/cut 10.5 pair_coeff 1 1 0.112 4.01 10.5
In this section goes the information about the bonds, angles, dihedrals in a chain. Bond_style and bond_coeff defines the type on the force field between atoms and a magnitude of this fields. "1" here corresponds to the second column of the "Bonds" section of the data file. Thus, every atom pair with "1" in the second column will be having such properties during the simulation. Similar goes to the angles and dihedrals. Angle_* and dihedral_* lines defines the angles and dihedral angles between atoms in the polymer chain. Pair_* commands used to define pair potentials between atoms that are within a cutoff distance. More about this commands and a parameters can be found at SANDIA website: http://lammps.sandia.gov/doc/Section_commands.html#cmd_5
compute csym all centro/atom fcc compute peratom all pe/atom
his commands are used to define which properties are to be calculated during the simulation. For example, "pe/atom" simply means to calculate the potential energy for each atom. Information about other possible properties to calculate can be found here.
# Equilibration (Langevin dynamics at 5000 K) velocity all create 5000.0 1231 fix 1 all nve/limit 0.05 fix 2 all langevin 5000.0 5000.0 10.0 904297 thermo_style custom step temp thermo 10000 timestep 1 run 1000000 unfix 1 unfix 2 write_restart restart.${simname}.dreiding1
The equilibration step allows the chain to deform freely under the temperature driven movements of the atoms. Velocity command add the temperature to the chain. Fix command performs the check of the system every time step and updates the velocity and positions of the atoms. Thermo commands defines thermo output during the simulation. Run command stars the dynamic transformation.
##################################################### # Minimization dump 1 all cfg 6 dump.comp_*.cfg id type xs ys zs c_csym c_peratom fx fy fz reset_timestep 0 fix 1 all nvt temp 500.0 500.0 100.0 thermo 20 thermo_style custom step pe lx ly lz press pxx pyy pzz c_eatoms min_style cg minimize 1e-25 1e-25 500000 1000000
The other step in the program is the minimization. It finds the minimum energy condition for such configuration. The parameters for minimize command includes: stopping tolerance for energy, stopping tolerance for force, max iterations of minimizer and max number of force/energy evaluations. Where stopping tolerance for energy being the first parameter and the max number of force/energy evaluations the last one.
Here is the logfile produced by LAMMPS during the simulation. Note that the temperature during the equilibration does not concave and just randomly changes over time. On the other hand, the potential energy during the minimization lowers over time until it reaches the minimum for this configuration within a tolerance.
read_data ${fname} read_data PE_cl100.txt 1 = max bonds/atom 1 = max angles/atom 1 = max dihedrals/atom orthogonal box = (0 0 0) to (158.5 158.5 100) 2 by 2 by 1 processor grid 100 atoms 99 bonds 98 angles 97 dihedrals 2 = max # of 1-2 neighbors 2 = max # of 1-3 neighbors 4 = max # of 1-4 neighbors 6 = max # of special neighbors # Dreiding potential information neighbor 0.4 bin neigh_modify every 10 one 10000 bond_style harmonic bond_coeff 1 350 1.53 angle_style harmonic angle_coeff 1 60 109.5 dihedral_style multi/harmonic dihedral_coeff 1 1.73 -4.49 0.776 6.99 0.0 pair_style lj/cut 10.5 pair_coeff 1 1 0.112 4.01 10.5 compute csym all centro/atom fcc compute peratom all pe/atom ##################################################### # Equilibration (Langevin dynamics at 5000 K) velocity all create 5000.0 1231 fix 1 all nve/limit 0.05 fix 2 all langevin 5000.0 5000.0 10.0 904297 thermo_style custom step temp thermo 10000 timestep 1 run 1000000 Memory usage per processor = 5.96847 Mbytes Step Temp 0 5000 10000 4503.8382 20000 4389.5108 30000 4137.4417 40000 5341.7194 50000 4458.9062 60000 5377.3337 70000 5004.3444 80000 4338.4843 90000 4691.7776 100000 4733.5682 110000 4701.5107 120000 4855.5683 130000 4477.8402 140000 4538.7404 150000 4588.4541 160000 4862.2936 170000 4684.8557 180000 4485.3563 190000 4759.6888 200000 5381.965 210000 5137.9384 220000 4812.9015 230000 4628.1747 240000 4645.6596 250000 4913.3042 260000 5404.8637 270000 4420.5497 280000 5357.551 290000 5009.1386 300000 4610.7359 310000 4752.3123 320000 4358.3474 330000 4961.3549 340000 4317.1413 350000 4154.0022 360000 5339.4602 370000 4460.511 380000 4997.8213 390000 4354.7411 400000 4797.0648 410000 4830.892 420000 5087.6876 430000 4723.8778 440000 4629.8021 450000 4976.1032 460000 4609.4548 470000 5019.8023 480000 4446.1004 490000 4862.2646 500000 5026.155 510000 4431.281 520000 4391.5373 530000 4214.6362 540000 4846.1485 550000 4807.4181 560000 4488.3661 570000 5360.1736 580000 5071.4535 590000 4463.498 600000 4555.1718 610000 5114.4069 620000 4699.2292 630000 5142.6987 640000 4479.5147 650000 4671.0304 660000 4564.5161 670000 4265.3884 680000 4814.3015 690000 4964.3923 700000 5121.2814 710000 5230.1069 720000 4297.1403 730000 4433.7983 740000 5176.7691 750000 4783.2431 760000 4792.0254 770000 4318.1008 780000 5279.5916 790000 4970.3985 800000 4163.3936 810000 5014.5128 820000 4423.9304 830000 4860.6778 840000 4502.2809 850000 4738.7186 860000 4585.4628 870000 4851.0205 880000 4747.5203 890000 4511.0158 900000 4841.8463 910000 5075.7912 920000 5070.3709 930000 4343.2652 940000 4743.7859 950000 4020.8883 960000 4671.5891 970000 4446.4685 980000 4448.264 990000 4507.5559 1000000 4873.6706 Loop time of 36.1922 on 4 procs for 1000000 steps with 100 atoms Pair time (%) = 4.03491 (11.1486) Bond time (%) = 8.30473 (22.9462) Neigh time (%) = 1.95553 (5.40319) Comm time (%) = 19.297 (53.3182) Outpt time (%) = 0.00102639 (0.00283595) Other time (%) = 2.59897 (7.18103) Nlocal: 25 ave 39 max 5 min Histogram: 1 0 0 0 0 1 0 0 1 1 Nghost: 45.75 ave 62 max 25 min Histogram: 1 0 0 0 0 1 0 1 0 1 Neighs: 267.75 ave 425 max 44 min Histogram: 1 0 0 0 1 0 0 0 1 1 FullNghs: 0 ave 0 max 0 min Histogram: 4 0 0 0 0 0 0 0 0 0 Total # of neighbors = 1071 Ave neighs/atom = 10.71 Ave special neighs/atom = 5.88 Neighbor list builds = 100000 Dangerous builds = 100000 unfix 1 unfix 2 write_restart restart.${simname}.dreiding1 write_restart restart.PE_cl100.dreiding1 ##################################################### # Define Settings compute eng all pe/atom compute eatoms all reduce sum c_eng ##################################################### # Minimization dump 1 all cfg 6 dump.comp_*.cfg id type xs ys zs c_csym c_peratom fx fy fz reset_timestep 0 fix 1 all nvt temp 500.0 500.0 100.0 thermo 20 thermo_style custom step pe lx ly lz press pxx pyy pzz c_eatoms min_style cg minimize 1e-25 1e-25 500000 1000000 WARNING: Resetting reneighboring criteria during minimization Memory usage per processor = 6.81045 Mbytes Step PotEng Lx Ly Lz Press Pxx Pyy Pzz eatoms 0 1237.2398 158.5 158.5 100 16.181003 10.716166 11.032966 26.793875 1237.2398 20 93.175603 158.5 158.5 100 23.387346 19.859621 23.64755 26.654868 93.175603 40 63.587362 158.5 158.5 100 25.830375 21.672133 27.047328 28.771665 63.587362 60 54.741088 158.5 158.5 100 26.066912 21.364531 27.7035 29.132705 54.741088 80 48.917554 158.5 158.5 100 25.87727 20.908929 27.620402 29.102479 48.917554 100 45.293817 158.5 158.5 100 26.386696 21.757562 27.905252 29.497275 45.293817 120 41.459225 158.5 158.5 100 25.974718 20.775913 27.911315 29.236928 41.459225 140 37.876111 158.5 158.5 100 25.799883 20.794051 27.553625 29.051972 37.876111 160 36.701952 158.5 158.5 100 25.852641 20.951326 27.544375 29.062221 36.701952 180 35.07739 158.5 158.5 100 26.004914 21.057098 27.774282 29.183362 35.07739 200 33.877666 158.5 158.5 100 25.961315 21.11421 27.590146 29.17959 33.877666 220 31.12208 158.5 158.5 100 23.995326 19.308908 24.96515 27.711921 31.12208 240 28.809216 158.5 158.5 100 25.831303 21.277521 27.270668 28.945719 28.809216 260 26.02543 158.5 158.5 100 25.951859 21.58113 27.157947 29.116498 26.02543 280 23.070199 158.5 158.5 100 26.005868 21.781819 27.222861 29.012922 23.070199 300 20.013665 158.5 158.5 100 25.453848 20.749404 26.676606 28.935533 20.013665 320 18.738385 158.5 158.5 100 25.954677 21.603359 27.136183 29.124488 18.738385 340 16.749844 158.5 158.5 100 25.789221 21.322696 27.03715 29.007817 16.749844 360 15.8834 158.5 158.5 100 25.985101 21.659604 27.170167 29.125532 15.8834 380 14.987185 158.5 158.5 100 25.977784 21.397522 27.357437 29.178393 14.987185 400 14.517165 158.5 158.5 100 25.95897 21.55348 27.296561 29.026868 14.517165 420 13.7945 158.5 158.5 100 26.006995 21.535186 27.281645 29.204153 13.7945 440 12.512098 158.5 158.5 100 25.840513 21.28497 27.217437 29.019132 12.512098 460 12.290892 158.5 158.5 100 25.924928 21.357401 27.298119 29.119263 12.290892 480 10.775174 158.5 158.5 100 25.830121 21.201044 27.158886 29.130434 10.775174 500 10.218356 158.5 158.5 100 25.614842 21.0218 26.893606 28.92912 10.218356 520 9.8614258 158.5 158.5 100 25.93082 21.345743 27.320707 29.126011 9.8614258 540 9.1390877 158.5 158.5 100 25.893538 21.32844 27.283388 29.068787 9.1390877 560 8.5527184 158.5 158.5 100 25.954932 21.387239 27.355923 29.121632 8.5527184 580 8.1607915 158.5 158.5 100 25.865475 21.24017 27.270322 29.085934 8.1607915 600 7.8012324 158.5 158.5 100 25.950545 21.404499 27.375776 29.071362 7.8012324 620 7.6152706 158.5 158.5 100 25.937275 21.370367 27.342438 29.099019 7.6152706 640 7.3593621 158.5 158.5 100 25.940706 21.344493 27.415647 29.061979 7.3593621 656 7.2144567 158.5 158.5 100 25.915345 21.326291 27.308608 29.111136 7.2144567 Loop time of 0.712466 on 4 procs for 656 steps with 100 atoms Minimization stats: Stopping criterion = linesearch alpha is zero Energy initial, next-to-last, final = 1237.23980569 7.21445672663 7.21445672663 Force two-norm initial, final = 1373.33 1.10527 Force max component initial, final = 285.91 0.235955 Final line search alpha, max atom move = 6.31527e-09 1.49012e-09 Iterations, force evaluations = 656 3308 Pair time (%) = 0.0280486 (3.93683) Bond time (%) = 0.0298776 (4.19355) Neigh time (%) = 0.00120121 (0.168599) Comm time (%) = 0.05711 (8.01581) Outpt time (%) = 0.359286 (50.4284) Other time (%) = 0.236944 (33.2568) Nlocal: 25 ave 41 max 4 min Histogram: 1 0 0 0 1 0 0 0 1 1 Nghost: 47.25 ave 65 max 26 min Histogram: 1 0 0 0 0 1 1 0 0 1 Neighs: 287.25 ave 507 max 30 min Histogram: 1 0 0 1 0 0 0 1 0 1 FullNghs: 573 ave 992 max 47 min Histogram: 1 0 0 0 1 0 0 1 0 1 Total # of neighbors = 2292 Ave neighs/atom = 22.92 Ave special neighs/atom = 5.88 Neighbor list builds = 51 Dangerous builds = 0 print "All done" All done
Also, the dump files have been produced during the simulation. The can be used to produce a movie.
Figure 4. The equilibration process followed by minimization.
The authors would like to acknowledge funding for this work through the Department of Energy.