forked from lijiext/lammps
195 lines
7.8 KiB
HTML
195 lines
7.8 KiB
HTML
<HTML>
|
|
<CENTER><A HREF = "http://lammps.sandia.gov">LAMMPS WWW Site</A> - <A HREF = "Manual.html">LAMMPS Documentation</A> - <A HREF = "Section_commands.html#comm">LAMMPS Commands</A>
|
|
</CENTER>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<HR>
|
|
|
|
<H3>if command
|
|
</H3>
|
|
<P><B>Syntax:</B>
|
|
</P>
|
|
<PRE>if boolean then t1 t2 ... elif boolean f1 f2 ... elif boolean f1 f2 ... else e1 e2 ...
|
|
</PRE>
|
|
<UL><LI>boolean = a Boolean expression evaluated as TRUE or FALSE (see below)
|
|
<LI>then = required word
|
|
<LI>t1,t2,...,tN = one or more LAMMPS commands to execute if condition is met, each enclosed in quotes
|
|
<LI>elif = optional word, can appear multiple times
|
|
<LI>f1,f2,...,fN = one or more LAMMPS commands to execute if elif condition is met, each enclosed in quotes (optional arguments)
|
|
<LI>else = optional argument
|
|
<LI>e1,e2,...,eN = one or more LAMMPS commands to execute if no condition is met, each enclosed in quotes (optional arguments)
|
|
</UL>
|
|
<P><B>Examples:</B>
|
|
</P>
|
|
<PRE>if "${steps} > 1000" then quit
|
|
if "${myString} == a10" then quit
|
|
if "$x <= $y" then "print X is smaller = $x" else "print Y is smaller = $y"
|
|
if "(${eng} > 0.0) || ($n < 1000)" then &
|
|
"timestep 0.005" &
|
|
elif $n<10000 &
|
|
"timestep 0.01" &
|
|
else &
|
|
"timestep 0.02" &
|
|
"print 'Max step reached'"
|
|
if "${eng} > ${eng_previous}" then "jump file1" else "jump file2"
|
|
</PRE>
|
|
<P><B>Description:</B>
|
|
</P>
|
|
<P>This command provides an if-then-else capability within an input
|
|
script. A Boolean expression is evaluted and the result is TRUE or
|
|
FALSE. Note that as in the examples above, the expression can contain
|
|
variables, as defined by the <A HREF = "variable.html">variable</A> command, which
|
|
will be evaluated as part of the expression. Thus a user-defined
|
|
formula that reflects the current state of the simulation can be used
|
|
to issue one or more new commands.
|
|
</P>
|
|
<P>If the result of the Boolean expression is TRUE, then one or more
|
|
commands (t1, t2, ..., tN) are executed. If it is FALSE, then Boolean
|
|
expressions associated with successive elif keywords are evaluated
|
|
until one is found to be true, in which case its commands (f1, f2,
|
|
..., fN) are executed. If no Boolean expression is TRUE, then the
|
|
commands associated with the else keyword, namely (e1, e2, ..., eN),
|
|
are executed. The elif and else keywords and their associated
|
|
commands are optional. If they aren't specified and the initial
|
|
Boolean expression is FALSE, then no commands are executed.
|
|
</P>
|
|
<P>The syntax for Boolean expressions is described below.
|
|
</P>
|
|
<P>Each command (t1, f1, e1, etc) can be any valid LAMMPS input script
|
|
command, except an <A HREF = "include.html">include</A> command, which is not
|
|
allowed. If the command is more than one word, it must enclosed in
|
|
quotes, so it will be treated as a single argument, as in the examples
|
|
above.
|
|
</P>
|
|
<P>IMPORTANT NOTE: If a command itself requires a quoted argument (e.g. a
|
|
<A HREF = "print.html">print</A> command), then double and single quotes can be used
|
|
and nested in the usual manner, as in the examples above and below.
|
|
See <A HREF = "Section_commands.html#cmd_2">Section_commands 2</A> of the manual for
|
|
more details on using quotes in arguments. Only one of level of
|
|
nesting is allowed, but that should be sufficient for most use cases.
|
|
</P>
|
|
<P>Note that by using the line continuation character "&", the if command
|
|
can be spread across many lines, though it is still a single command:
|
|
</P>
|
|
<PRE>if "$a < $b" then &
|
|
"print 'Minimum value = $a'" &
|
|
"run 1000" &
|
|
else &
|
|
'print "Minimum value = $b"' &
|
|
"minimize 0.001 0.001 1000 10000"
|
|
</PRE>
|
|
<P>Note that if one of the commands to execute is <A HREF = "quit.html">quit</A>, as in
|
|
the first example above, then executing the command will cause LAMMPS
|
|
to halt.
|
|
</P>
|
|
<P>Note that by jumping to a label in the same input script, the if
|
|
command can be used to break out of a loop. See the <A HREF = "variable.html">variable
|
|
delete</A> command for info on how to delete the associated
|
|
loop variable, so that it can be re-used later in the input script.
|
|
</P>
|
|
<P>Here is an example of a loop which checks every 1000 steps if the
|
|
system temperature has reached a certain value, and if so, breaks out
|
|
of the loop to finish the run. Note that any variable could be
|
|
checked, so long as it is current on the timestep when the run
|
|
completes. As explained on the <A HREF = "variable.html">variable</A> doc page,
|
|
this can be insured by includig the variable in thermodynamic output.
|
|
</P>
|
|
<PRE>variable myTemp equal temp
|
|
label loop
|
|
variable a loop 1000
|
|
run 1000
|
|
if "${myTemp} < 300.0" then "jump SELF break"
|
|
next a
|
|
jump SELF loop
|
|
label break
|
|
print "ALL DONE"
|
|
</PRE>
|
|
<P>Here is an example of a double loop which uses the if and
|
|
<A HREF = "jump.html">jump</A> commands to break out of the inner loop when a
|
|
condition is met, then continues iterating thru the outer loop.
|
|
</P>
|
|
<PRE>label loopa
|
|
variable a loop 5
|
|
label loopb
|
|
variable b loop 5
|
|
print "A,B = $a,$b"
|
|
run 10000
|
|
if "$b > 2" then "jump SELF break"
|
|
next b
|
|
jump in.script loopb
|
|
label break
|
|
variable b delete
|
|
next a
|
|
jump SELF loopa
|
|
</PRE>
|
|
<HR>
|
|
|
|
<P>The Boolean expressions for the if and elif keywords have a C-like
|
|
syntax. Note that each expression is a single argument within the if
|
|
command. Thus if you want to include spaces in the expression for
|
|
clarity, you must enclose the entire expression in quotes.
|
|
</P>
|
|
<P>An expression is built out of numbers (which start with a digit or
|
|
period or minus sign) or strings (which start with a letter and can
|
|
contain alphanumeric characters or underscores):
|
|
</P>
|
|
<PRE>0.2, 100, 1.0e20, -15.4, etc
|
|
InP, myString, a123, ab_23_cd, etc
|
|
</PRE>
|
|
<P>and Boolean operators:
|
|
</P>
|
|
<PRE>A == B, A != B, A < B, A <= B, A > B, A >= B, A && B, A || B, !A
|
|
</PRE>
|
|
<P>Each A and B is a number or string or a variable reference like $a or
|
|
${abc}, or A or B can be another Boolean expression.
|
|
</P>
|
|
<P>If a variable is used it can produce a number when evaluated, like an
|
|
<A HREF = "variable.html">equal-style variable</A>. Or it can produce a string,
|
|
like an <A HREF = "variable.html">index-style variable</A>. For an individual
|
|
Boolean operator, A and B must both be numbers or must both be
|
|
strings. You cannot compare a number to a string.
|
|
</P>
|
|
<P>Expressions are evaluated left to right and have the usual C-style
|
|
precedence: the unary logical NOT operator "!" has the highest
|
|
precedence, the 4 relational operators "<", "<=", ">", and ">=" are
|
|
next; the two remaining relational operators "==" and "!=" are next;
|
|
then the logical AND operator "&&"; and finally the logical OR
|
|
operator "||" has the lowest precedence. Parenthesis can be used to
|
|
group one or more portions of an expression and/or enforce a different
|
|
order of evaluation than what would occur with the default precedence.
|
|
</P>
|
|
<P>When the 6 relational operators (first 6 in list above) compare 2
|
|
numbers, they return either a 1.0 or 0.0 depending on whether the
|
|
relationship between A and B is TRUE or FALSE. When the 6 relational
|
|
operators compare 2 strings, they also return a 1.0 or 0.0 for TRUE or
|
|
FALSE, but the comparison is done by the C function strcmp().
|
|
</P>
|
|
<P>When the 3 logical operators (last 3 in list above) compare 2 numbers,
|
|
they also return either a 1.0 or 0.0 depending on whether the
|
|
relationship between A and B is TRUE or FALSE (or just A). The
|
|
logical AND operator will return 1.0 if both its arguments are
|
|
non-zero, else it returns 0.0. The logical OR operator will return
|
|
1.0 if either of its arguments is non-zero, else it returns 0.0. The
|
|
logical NOT operator returns 1.0 if its argument is 0.0, else it
|
|
returns 0.0. The 3 logical operators can only be used to operate on
|
|
numbers, not on strings.
|
|
</P>
|
|
<P>The overall Boolean expression produces a TRUE result if the result is
|
|
non-zero. If the result is zero, the expression result is FALSE.
|
|
</P>
|
|
<HR>
|
|
|
|
<P><B>Restrictions:</B> none
|
|
</P>
|
|
<P><B>Related commands:</B>
|
|
</P>
|
|
<P><A HREF = "variable.html">variable</A>, <A HREF = "print.html">print</A>
|
|
</P>
|
|
<P><B>Default:</B> none
|
|
</P>
|
|
</HTML>
|