An engineering strain is always defined relative to a reference volume or shape. Worse, an engineering strain rate also depends on this reference. The command fix deform in LAMMPS obviously also uses this reference. A problem arises when one wants to continue the simulation from a restart or data file: LAMMPS does not remember the original reference box.


Quick summary for the impatient: When restarting a deformation with uniaxial strain, the engineering strain rate must be adjusted. Calculate the strain rate for the restarted simulation using

ϵ˙=l0l1ϵ˙orϵ˙=ϵ˙ϵ˙t1+1. \begin{aligned} \dot\epsilon' &= \frac{l_0}{l_1}\dot\epsilon & &\text{or} & \dot\epsilon' &= \frac{\dot\epsilon}{\dot\epsilon t_1 + 1}. \end{aligned}

Shear deformation does not need adjustments.

Uniaxial deformation

Let us look more closely at this, using the example of a tensile test. Given a strain rate ϵ˙\dot\epsilon, the length l of the box changes with time t according to

l(t)=l0(ϵ˙t+1).l(t) = l_0 (\dot\epsilon t + 1).

Note that l depends on the initial box length l0. The corresponding LAMMPS command is, e.g.,

fix 1 all deform 1 z erate 0.01

If we now write a data/restart file and simply start a new run from there with the same rate 0.01, we get a higher actual strain rate than we would have gotten using a single simulation without break. The reason is that we are now at time t1, but LAMMPS starts a new run from t=0t' = 0 (corresponding to t1). It has forgotten l0 and uses the new length l1 as a reference instead. The evolution of the length is therefore

l(t)=l1(ϵ˙t+1).l(t') = l_1 (\dot\epsilon t' + 1).

Graphically, this looks like this:

Strain rate after restart without adjustment.

The solution is to find a new strain rate ϵ˙\dot\epsilon', such that the length l at time t is the same as if we just continued straining without a break. Then, the following picture holds true:

Adjusted strain rate after restart.

To find this equation, we define

l=l0(ϵ˙t+1)for the original strainl=l1(ϵ˙t+1)for the restarted simulation=l1ϵ˙tl1ϵ˙t1+l1with t=tt1=l1ϵ˙tl1ϵ˙t1+l0ϵ˙t1+l0with l1=l0(ϵ˙t1+1). \begin{aligned} l &= l_0 (\dot\epsilon t + 1) & &\text{for the original strain}\\ l &= l_1 (\dot\epsilon' t' + 1) & &\text{for the restarted simulation}\\ &= l_1 \dot\epsilon' t - l_1 \dot\epsilon' t_1 + l_1 & &\text{with } t' = t-t_1 \\ &= l_1 \dot\epsilon' t - l_1 \dot\epsilon' t_1 + l_0 \dot\epsilon t_1 + l_0 & &\text{with } l_1 = l_0(\dot\epsilon t_1 + 1). \end{aligned}

Since the result for l needs to be the same—both for a single run using the original formula, as well as for restarting with a corrected rate—it is:

l0(ϵ˙t+1)=l1ϵ˙tl1ϵ˙t1+l0ϵ˙t1+l0. l_0 (\dot\epsilon t + 1) = l_1 \dot\epsilon' t - l_1 \dot\epsilon' t_1 + l_0 \dot\epsilon t_1 + l_0.

Solving for ϵ˙\dot\epsilon' gives

ϵ˙=l0l1ϵ˙. \dot\epsilon' = \frac{l_0}{l_1}\dot\epsilon.

Alternatively, using l1=l0(ϵ˙t1+1)l_1 = l_0 (\dot\epsilon t_1 + 1) , we can avoid the box lengths in the formula and obtain

ϵ˙=ϵ˙ϵ˙t1+1.\dot\epsilon' = \frac{\dot\epsilon}{\dot\epsilon t_1 + 1}.


When shearing, LAMMPS simply varies the tilt factor, e.g., xz. The shear strain is defined as ϵ=xz/lz\epsilon = \mathrm{xz}/l_z, and the shear rate is also defined correspondingly as

xz=xz0+lzϵ˙t. \mathrm{xz} = \mathrm{xz_0} + l_z \cdot \dot\epsilon \cdot t.

Since lz does not change, the shear rate is not subject to the same effect as the uniaxial strain rate above.