Previous Section - LAMMPS WWW Site - LAMMPS Documentation - LAMMPS Commands - Next Section

4. How-to discussions

The following sections describe what commands can be used to perform certain kinds of LAMMPS simulations.

4.1 Restarting a simulation
4.2 2d simulations
4.3 CHARMM and AMBER force fields
4.4 Multiple simulations on different partitions
4.5 Parallel tempering
4.6 Granular models
4.7 TIP3P water model

The example input scripts included in the LAMMPS distribution and highlighted in this section also show how to setup and run various kinds of problems.


4.1 Restarting a simulation

There are 3 ways to continue a long LAMMPS simulation. Multiple run commands can be used in the same input script. Each run will continue from where the previous run left off. Or binary restart files can be saved to disk using the restart command. At a later time, these binary files can be read via a read_restart command in a new script. Or they can be converted to text data files and read by a read_data command in a new script. This section discusses the restart2data tool that is used to perform the conversion.

Here we give examples of 2 scripts that read either a binary restart file or a converted data file and then issue a new run command to continue where the previous run left off. They illustrate what settings must be made in the new script. Details are discussed in the documentation for the read_restart and read_data commands.

Look at the in.chain input script provided in the bench directory of the LAMMPS distribution to see the original script that these 2 scripts are based on. If that script had the line

restart	        50 tmp.restart 

added to it, it would produce 2 binary restart files (tmp.restart.50 and tmp.restart.100) as it ran.

This script could be used to read the 1st restart file and re-run the last 50 timesteps:

read_restart	tmp.restart.50 
neighbor	0.4 bin
neigh_modify	every 1 delay 1 
fix		1 all nve
fix		2 all langevin 1.0 1.0 10.0 904297 
timestep	0.012 
run		50 

Note that the following commands do not need to be repeated because their settings are included in the restart file: units, atom_style, special_bonds, pair_style, bond_style. However these commands do need to be used, since their settings are not in the restart file: neighbor, fix, timestep.

If you actually use this script to perform a restarted run, you will notice that the thermodyanmic data match at step 50 (if you also put a "thermo 50" command in the original script), but do not match at step 100. This is because the fix langevin command uses random numbers in a way that does not allow for perfect restarts.

As an alterate approach, the restart file could be converted to a data file using this tool:

restart2data tmp.restart.50 tmp.restart.data 

Then, this script could be used to re-run the last 50 steps:

units		lj
atom_style	bond
pair_style	lj/cut 1.12
pair_modify	shift yes
bond_style	fene
special_bonds   0.0 1.0 1.0 
read_data	tmp.restart.data 
neighbor	0.4 bin
neigh_modify	every 1 delay 1 
fix		1 all nve
fix		2 all langevin 1.0 1.0 10.0 904297 
timestep	0.012 
reset_timestep	50
run		50 

Note that nearly all the settings specified in the original in.chain script must be repeated, except the pair_coeff and bond_coeff commands since the new data file lists the force field coefficients. Also, the reset_timestep command is used to tell LAMMPS the current timestep. This value is stored in restart files, but not in data files.


4.2 2d simulations

Use the dimension command to specify a 2d simulation.

Make the simulation box periodic in z via the boundary command. This is the default.

If using the create box command to define a simulation box, set the z dimensions narrow, but finite, so that the create_atoms command will tile the 3d simulation box with a single z plane of atoms - e.g.

create box 1 -10 10 -10 10 -0.25 0.25 

If using the read data command to read in a file of atom coordinates, set the "zlo zhi" values to be finite but narrow, similar to the create_box command settings just described. For each atom in the file, assign a z coordinate so it falls inside the z-boundaries of the box - e.g. 0.0.

Use the fix enforce2d command as the last defined fix to insure that the z-components of velocities and forces are zeroed out every timestep. The reason to make it the last fix is so that any forces induced by other fixes will be zeroed out.

Many of the example input scripts included in the LAMMPS distribution are for 2d models.


4.3 CHARMM and AMBER force fields

There are many different ways to compute forces in the CHARMM and AMBER molecular dynamics codes, only some of which are available as options in LAMMPS. A force field has 2 parts: the formulas that define it and the coefficients used for a particular system. Here we only discuss formulas implemented in LAMMPS. Setting coefficients is done in the input data file via the read_data command or in the input script with commands like pair_coeff or bond_coeff. See this section for additional tools that can use CHARMM or AMBER to assign force field coefficients and convert their output into LAMMPS intput.

These style choices compute force field formulas that are consistent with common options in CHARMM or AMBER. See each command's documentation for the formula it computes.


4.4 Multiple simulations on different partitions

Use the -procs and -in command-line switches to launch LAMMPS on multiple partitions. See the variable, next, and jump commands for more details about the specific commands that are discussed below.

If you want to repeat a simulation with many different parameter settings, you could use the following input script. In this example, temperature is the parameter that is varied.

variable t index 0.8 0.85 0.9 0.95 1.0 1.05 1.1 1.15 1.2 1.25
...
read data.polymer
velocity all create $t 352839
fix 1 all nvt $t $t 100.0
dump 1 all atom 1000 dump.$t
...
run 100000
next t
jump in.run 

The "variable" command defines a set of Lennard-Jones reduced temperatures. The $t temperature variable is used in the "velocity", "fix", and "dump" commands to specify a particular temperature and store simulation output in a unique file. The "..." lines stand for other settings you wish to make, which could include $t or other variables you define. As discussed in its documentation, the next command increments the $t variable as each processor partition finishes its simulation. If the above script is stored in the file "in.run", then the jump command will restart the script with a new value for the $t variable.

If you want to run a set of independent simulations, you could use this strategy. Assume you have 8 directories (run*), each with it's own data.polymer and in.polymer input files.

Name this script "in.master" and store it in the directory that contains the run* sub-dirs:

variable d index run1 run2 run3 run4 run5 run6 run7 run8
cd $d
jump in.polymer 

At the bottom of each in.polymer script put these lines:

cd ..
next d
clear
jump in.master 

The clear command will re-initialize LAMMPS so that the partition of processors can run a new simulation.


4.5 Parallel tempering

The temper command can be used to perform a parallel tempering or replica-exchange simulation where multiple copies of a simulation are run at different temperatures on different sets of processors, and Monte Carlo temperature swaps are performed between pairs of copies.

Use the -procs and -in command-line switches to launch LAMMPS on multiple partitions.

In your input script, define a set of temperatures, one for each processor partition, using the variable command:

variable t proc 300.0 310.0 320.0 330.0 

Define a fix of style nvt or langevin to control the temperature of each simulation:

fix myfix all nvt $t $t 100.0 

Use the temper command in place of a run command to perform a simulation where tempering exchanges will take place:

temper 100000 100 $t myfix 3847 58382 

4.6 Granular models

To run a simulation of a granular model, you will want to use the following commands:

Use one of these 3 pair potentials:

These commands implement fix options specific to granular systems:

The fix style freeze zeroes both the force and torque of frozen atoms, and should be used for granular system instead of the fix style setforce.

For computational efficiency, you can eliminate needless pairwise computations between frozen atoms by using this command:


4.7 TIP3P water model

The TIP3P water model as implemented in CHARMM (MacKerell) specifies a 3-site rigid water molecule with charges and Lennard-Jones parameters assigned to each of the 3 atoms. In LAMMPS the fix shake command can be used to hold the two O-H bonds and the H-O-H angle rigid. A bond style of harmonic and an angle style of harmonic or charmm should also be used. These are the additional parameters (in real units) to set for O and H atoms and the water molecule to run a TIP3P model:

O charge = -0.834
H charge = 0.417

O mass = 15.9994
H mass = 1.008

LJ epsilon of O = 0.1521
LJ sigma of O = 3.15057
LJ epsilon of H = 0.046
LJ sigma of H = 0.400014

K of O-H bond = 450
r0 of O-H bond = 0.9572

K of H-O-H angle = 55
theta of H-O-H angle = 104.52

Note: If the LJ epsilon and sigma for H are set to 0.0, it corresponds to the original 1983 TIP3P model (Jorgensen).


(MacKerell) MacKerell, Bashford, Bellott, Dunbrack, Evanseck, Field, Fischer, Gao, Guo, Ha, et al, J Phys Chem, 102, 3586 (1998).

(Jorgensen) Jorgensen, Chandrasekhar, Madura, Impey, Klein, J Chem Phys, 79, 926 (1983).