Syntax:
fix ID group-ID box/relax style args keyword value ...
xyz arg = P = desired pressure (pressure units) xy or yz or xz or aniso args = Px Py Pz Px,Py,Pz = desired pressure in x,y,z (pressure units)
dilate value = all or partial vmax value = fraction = max allowed volume change in one iteration
Examples:
fix 1 all box/relax xyz 0.0 vmax 0.001 fix 2 water box/relax aniso 0.0 0.0 1000.0 dilate partial
Description:
Apply an external pressure to the simulation box during an energy minimization. This allows the box dimensions to vary during the iterations of the minimizer so that the final configuration will be both an energy minimum for the potential energy of the atoms and the system pressure will be close to the desired pressure. Conceptually, specifying a positive pressure is like squeezing on the simulation box; a negative pressure typically allows the box to expand.
The pressure can be specified in one of several styles, as determined by the style argument.
Style xyz means couple all 3 dimensions together when pressure is computed (isotropic pressure), and dilate/contract the 3 dimensions together. Styles xy or yz or xz means that the 2 specified dimensions are coupled together, both for pressure computation and for dilation/contraction. The 3rd dimension dilates/contracts independently according to its specified pressure. For style aniso, all 3 dimensions dilate/contract independently according to the 3 specified pressure values.
For any of the styles except xyz, the target pressure for any independent components (e.g. z in xy, or any dimension in aniso) can be specified as NULL. This means that no pressure is applied to that dimension so that the box dimension remains unchanged during the minimization.
For styles xy and yz and xz, the target pressures must be the same for the two coupled dimensions and cannot be specified as NULL.
For all pressure styles, the simulation box stays rectangular in shape. Tilted boxes (triclinic symmetry) are supported by other LAMMPS commands (see this section of the manual), but not yet by this command.
When the size of the simulation box changes, all atoms are re-scaled to new positions, unless the keyword dilate is specified with a value of partial, in which case only the atoms in the fix group are re-scaled. This can be useful for leaving the coordinates of atoms in a solid substrate unchanged and controlling the pressure of a surrounding fluid.
The vmax keyword can be used to limit the fractional change in the volume of the simulation box that can occur in one iteration of the minimizer. If the pressure is not settling down during the minimization this can be because the volume is fluctuating too much. The specfied fraction must be greater than 0.0 and should be << 1.0. A value of 0.001 means the volume cannot change by more than 1/10 of a percent in one iteration for style xyz. For the other styles it means no linear dimension of the simulation box can change by more than 1/10 of a percent.
IMPORTANT NOTE: As normally computed, pressure includes a kinetic- energy or temperature-dependent component; see the compute pressure command. However, atom velocities are ignored during a minimization, and the applied pressure(s) specified with this command are assumed to only be the virial component of the pressure (the non-kinetic portion). Thus if atoms have a non-zero temperature and you print the usual thermodynamic pressure, it may not appear the system is converging to your specified pressure. The solution for this is to either (a) zero the velocities of all atoms before performing the minimization, or (b) make sure you are monitoring the pressure without its kinetic component. The latter can be done by outputting the pressure from the fix this command creates (see below) or a pressure fix you define yourself.
IMPORTANT NOTE: Because pressure is often a very sensitive function of volume, it can be difficult for the minimizer to equilibrate the system the desired pressure with high precision. Some techiniques that seem to help are (a) use the "min_modify line quadratic" option when minimizing with box relaxtions, and (b) minimize several times in succession if need be, to drive the pressure closer to the target pressure. Also note that some systems (e.g. liquids) will not sustain an anisotropic applied pressure, which means the minimizer will not converge.
This fix computes a temperature and pressure each timestep. The temperature is used to compute the kinetic contribution to the pressure, even though this is subsequently ignored by default. To do this, the fix creates its own computes of style "temp" and "pressure", as if these commands had been issued:
compute fix-ID_temp group-ID temp compute fix-ID_press group-ID pressure fix-ID_temp virial
See the compute temp and compute pressure commands for details. Note that the IDs of the new computes are the fix-ID + underscore + "temp" or fix_ID + underscore + "press", and the group for the new computes is the same as the fix group. Also note that the pressure compute does not include a kinetic component.
Note that these are NOT the computes used by thermodynamic output (see the thermo_style command) with ID = thermo_temp and thermo_press. This means you can change the attributes of this fix's temperature or pressure via the compute_modify command or print this temperature or pressure during thermodynamic output via the thermo_style custom command using the appropriate compute-ID. It also means that changing attributes of thermo_temp or thermo_press will have no effect on this fix.
Restart, fix_modify, output, run start/stop, minimize info:
No information about this fix is written to binary restart files.
The fix_modify temp and press options are supported by this fix. You can use them to assign a compute you have defined to this fix which will be used in its temperature and pressure calculation, as described above. Note that as described above, if you assign a pressure compute to this fix that includes a kinetic energy component it will affect the minimization, most likely in an undesirable way.
IMPORTANT NOTE: If both the temp and press keywords are used in a single thermo_modify command (or in two separate commands), then the order in which the keywords are specified is important. Note that a pressure compute defines its own temperature compute as an argument when it is specified. The temp keyword will override this (for the pressure compute being used by fix npt), but only if the temp keyword comes after the press keyword. If the temp keyword comes before the press keyword, then the new pressure compute specified by the press keyword will be unaffected by the temp setting.
No global scalar or vector or per-atom quantities are stored by this fix for access by various output commands. No parameter of this fix can be used with the start/stop keywords of the run command.
This fix is invoked during energy minimization, but not for the purpose of adding a contribution to the energy or forces being minimized. Instead it alters the simulation box geometry as described above.
Restrictions:
Any box dimension adjusted by this fix must be periodic. A dimension whose target pressure is specified as NULL can be non-periodic or periodic.
Related commands:
Default:
The keyword defaults are dilate = all and vmax = 0.0001.