"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c

:link(lws,http://lammps.sandia.gov)
:link(ld,Manual.html)
:link(lc,Section_commands.html#comm)

:line

next command :h3

[Syntax:]

next variables :pre

variables = one or more variable names :ul

[Examples:]

next x
next a t x myTemp :pre

[Description:]

This command is used with variables defined by the
"variable"_variable.html command.  It assigns the next value to the
variable from the list of values defined for that variable by the
"variable"_variable.html command.  Thus when that variable is
subsequently substituted for in an input script command, the new value
is used. 

See the "variable"_variable.html command for info on how to define and
use different kinds of variables in LAMMPS input scripts.  If a
variable name is a single lower-case character from "a" to "z", it can
be used in an input script command as $a or $z.  If it is multiple
letters, it can be used as $\{myTemp\}.

If multiple variables are used as arguments to the {next} command,
then all must be of the same variable style: {index}, {loop}, {file},
{universe}, or {uloop}.  An exception is that {universe}- and
{uloop}-style variables can be mixed in the same {next} command.

All the variables specified with the next command are incremented by
one value from their respective list of values.  A {file}-style variable
reads the next line from its associated file.  {String-} or {atom}- or
{equal}- or {world}-style variables cannot be used with the the next
command, since they only store a single value.

When any of the variables in the next command has no more values, a
flag is set that causes the input script to skip the next
"jump"_jump.html command encountered.  This enables a loop containing
a next command to exit.  As explained in the "variable"_variable.html
command, the variable that has exhausted its values is also deleted.
This allows it to be used and re-defined later in the input script.
{File}-style variables are exhausted when the end-of-file is reached.

When the next command is used with {index}- or {loop}-style or
{file}-style variables, the next value is assigned to the variable for
all processors.  When the next command is used with {universe}- or
{uloop}-style variables, the next value is assigned to whichever
processor partition executes the command first.  All processors in the
partition are assigned the same value.  Running LAMMPS on multiple
partitions of processors via the "-partition" command-line switch is
described in "this section"_Section_start.html#start_7 of the manual.
{Universe}- and {uloop}-style variables are incremented using the
files "tmp.lammps.variable" and "tmp.lammps.variable.lock" which you
will see in your directory during such a LAMMPS run.

Here is an example of running a series of simulations using the next
command with an {index}-style variable.  If this input script is named
in.polymer, 8 simulations would be run using data files from
directories run1 thru run8.

variable d index run1 run2 run3 run4 run5 run6 run7 run8
shell cd $d
read_data data.polymer
run 10000
shell cd ..
clear
next d
jump in.polymer :pre

If the variable "d" were of style {universe}, and the same in.polymer
input script were run on 3 partitions of processors, then the first 3
simulations would begin, one on each set of processors.  Whichever
partition finished first, it would assign variable "d" the 4th value
and run another simulation, and so forth until all 8 simulations were
finished.

Jump and next commands can also be nested to enable multi-level loops.
For example, this script will run 15 simulations in a double loop.

variable i loop 3
  variable j loop 5
  clear
  ...
  read_data data.polymer.$i$j
  print Running simulation $i.$j
  run 10000
  next j
  jump in.script
next i
jump in.script :pre

Here is an example of a double loop which uses the "if"_if.html and
"jump"_jump.html commands to break out of the inner loop when a
condition is met, then continues iterating thru the outer loop.

label	    loopa
variable    a loop 5
  label	    loopb
  variable  b loop 5
  print	    "A,B = $a,$b"
  run       10000
  if	    $b > 2 then "jump in.script break"
  next	    b
  jump	    in.script loopb
label	    break
variable    b delete :pre
next	    a
jump	    in.script loopa :pre

[Restrictions:] none

[Related commands:]

"jump"_jump.html, "include"_include.html, "shell"_shell.html,
"variable"_variable.html,

[Default:] none
