【LAMMPS翻译系列】next命令

label命令用来将该行的字符串指定为一个ID,供jump命令使用。

使用语法

next variables
  • variables: 一个或者多个变量名

使用举例

next x
next a t x myTemp

使用介绍

该命令需要与使用命令variable定义的变量同时使用,用来从为该变量定义的一些列值中将下一个值赋给变量。在使用该命令之后,变量就是一个新值。

参考变量variable,了解如何在LAMMPS输入脚本中定义和使用不同类型的变量。如果变量名字仅仅是一个小写字母,那么在输入脚本中使用该变量的时候可以仅仅在其前面加上符号“$”,例如$a, $z。但如果是多个字母,那么就需要用花括号将变量名括起来,例如${myTemp}。

如果在next命令中使用多个变量作为参数,那么所有的变量都必须具有同样的变量类型,即都必须是index, loop, file, universe, or uloop中的一种。一个例外是universe类型和uloop类型的变量是可以在next命令中混合使用的。

next命令中指定的变量在每次运行next命令时会从它们自己的变量列表中取下一个值。file类型的变量会从相关的文件中读入下一行的值。atomfile类型的变量会从相关的文件中读入下一个系列行(一行一个原子)。String- or atom- or equal- or world- 类型的变量不能在命令next中使用,因为它们只存有一个值。

next命令中任何一个变量没有值可取时,程序就会自动设置一个标记,使得输入脚本会跳过不执行下一个jump命令,这也同时退出了该next命令。用完的变量会被删除,这在命令variable中有介绍。你可以在输入脚本的后面继续使用或定义该变量。对于file类型和atomfile类型的变量,当读到文件的最后时,它们就会被认为已经用完了。

  • 如果在next命令中使用index类型或loop类型的变量,那么变量的下一个值会分配给所有的处理器。
  • 如果在next命令中使用file类型的变量,相关文件中读入的下一行会被分配给变量。
  • 如果在next命令中使用atomfile类型的变量,相关文件中读入的下一系列行(每行一个原子)会分配给变量。
  • 如果在next命令中使用universe类型或uloop类型的变量时,那么变量的下一个值会分配给首先执行该命令的处理器分区。同一个分区中的所有处理器都会分配同样的值。关于如何在多个处理器分区上运行LAMMPS,在命令行参数-partition中有介绍。这两种类型的变量在调整到下一个值的时候,会用到文件"tmp.lammps.variable" 和"tmp.lammps.variable.lock"。在LAMMPS运行的时候,你可以在相应目录下看到这两个文件。

下面是一个在next命令中使用index类型的变量实现运行一系列模拟的例子。如果输入脚本的名字是in.polymer,那么总共会运行8个模拟,并且每个模拟会从不同的目录(从run1到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

如果将上面的变量d定义为universe类型,并在处理器的三个分区上运行该输入脚本,那么最开始的3个模拟(run1,run2,run3)会分别在这三个分区上运行。那个分区上的任务先算完,那么变量d中的第4个模拟就会在那个分区上运行。以此类推直到所有8个模拟都完成。

命令jump和next嵌套使用可以实现多层循环。举个例子,下面的脚本中包括双重循环,总共可以运行15次模拟。

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

下面的例子是使用命令ifjump实现的双重循环。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, include, shell, variable

标签: lammps, lammps翻译

相关文章推荐

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