【LAMMPS翻译系列】jump命令

jump命令关闭当前输入脚本文件,打开命令中文件名所指定的文件,并从那个文件开始读入LAMMPS命令。

使用语法

jump file label
  • file: 要跳转到的输入脚本的文件名
  • label:[可选]要跳转到的输入脚本中的标签

使用举例

jump newfile
jump in.run2 runloop
jump SELF runloop

使用介绍

该命令关闭当前输入脚本文件,打开命令中文件名所指定的文件,并从那个文件开始读入LAMMPS命令。与命令include不同的是,LAMMPS不会再返回到之前的输入文件了。当然,你也可以在这些输入脚本中使用多个jump命令,让LAMMPS再返回到之前的输入脚本。

如果文件名被指定为SELF,那么LAMMPS会重新打开当前的输入脚本并读入命令。

注意:如果使用标准输入读入当前输入脚本文件,SELF选项不一定会起作用。标准输入即是指使用重定向符号,如下所示:

lmp_g++ < in.script

因为SELF选项会调用C库函数rewind(),而在某些系统中,标准输入并不支持这个。但还有两位两种方法可以让SELF选项起作用:一个是使用命令行参数-in读入输入脚本文件;另一个是使用命令行参数-var读入输入脚本文件,如下所示:

lmp_g++ -in in.script 

lmp_g++ -var fname n.script < in.script

命令jump中的第二个参数是可选的。如果指定了,就相当于在输入脚本中定义了一个标签,LAMMPS会扫描跳转到的输入文件(不会执行),从标签的位置开始向下执行。这种方式可以用来执行输入脚本的一部分。在下面的例子中,这些命令会被执行10次,每次会运行10000个时间步,并创建10个dump文件。在程序运行了10次之后,变量a取了其定义中的最后一个值,命令next就会使脚本跳出循环,而不会再执行命令jump。

variable a loop 10
label loop
dump 1 all atom 100 file.$a
run 10000
undump 1
next a
jump in.lj loop

如果参数file被指定为一个变量,命令jump可以跳转到不同的处理器分区而执行不同的输入脚本。下面的例子中,LAMMPS在40个处理器上运行,分为4个分区,每个分区有10个处理器。其中的命令jump中使用了变量,这样做就会让不同的分区跳到不同的输入文件。

mpirun -np 40 lmp_ibm -partition 4x10 -in in.file 

variable f world script.1 script.2 script.3 script.4
jump $f

下面的例子是使用命令if和jump实现的双重循环。if条件满足时,跳出内层循环,开始执行外层循环。

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 

next	    a
jump	    in.script loopa

使用限制

如果命令jump跳转到文件中不包括指定的标签,LAMMPS会自动跳到最后并退出。

相关命令

variable, include, label, next

标签: lammps, lammps翻译

相关文章推荐

添加新评论 (无需注册,可直接评论)

已有 4 条评论

  1. [...]在循环体(参考命令jump和next)中使用print命令。[...]

  2. [...]该命令用来将该行的字符串指定为一个ID,供命令jump使用。除非在该命名之前使用了命令jump,否则该命令不会带来任何影响。但如果使用了命令jump,并且带有指向当前标签的参数,那么当前输入脚本中该命令之前的所有命令都会被忽略,而从该命令之后开始执行。该命令对于执行输入脚本中的一部分会非常有用,可以参考命令jump。[...]

  3. [...]jump, include, shell, variable[...]

  4. [...]variable, jump[...]