输入脚本中的每个非空行被当作一个命令。LAMMPS命令是区分大小写的。命令名是小写的,如指定命令参数。大写字母可能用于文件名或用户选择的ID字符串。
下面是LAMMPS每一行的输入脚本解析:
(1)如果某行的最后一个可打印字符是“&”字符,则假定该命令在下一行继续。通过删除“&”字符和换行符,下一行将连接到上一行。这使长命令延续在两条或更多条的命令上。请参阅(6),如何在不使用“&”字符的情况下在多行上继续执行命令。
(2) “#”字符后的所有字符都被视为注释并被丢弃,详见(6)。注意,“&”字符后面的注释将阻止命令在下一行继续。另外请注意,对于多行命令,单个“#”字符将注释整个命令。
(3)某行重复搜索“$”字符,表示用文本字符串替换该变量,详见(6)。如果字符“$”后跟大括号,则变量名称是大括号内的文本。
如果字符“$”后没有大括号跟随,则变量名称是紧跟在$之后的单个字符。如${myTemp}和$x的变量名分别为"myTemp" and "x"。
变量如何转换为文本字符串取决于变量的样式。它可以是一个存储多个文本字符串的变量,并返回其中的一个。返回的文本字符串可以是多个“单词”(空格分隔),然后将其解释为输入命令中的多个参数。该变量还可以存储为一个数学公式,该公式将被估算,其数值结果作为字符串返回。
如果字符$后跟圆括号则是一种特殊情况,圆括号内的文本被视为“临时”变量,并被评估为等式样式的变量。这是在输入脚本中使用数字公式的方法,而不必给它们分配变量名称。
variable X equal (xlo+xhi)/2+sqrt(v_area)
region 1 block $X 2 INF INF EDGE EDGE
variable X delete
等价于:
region 1 block $((xlo+xhi)/2+sqrt(v_area)) 2 INF INF EDGE EDGE
以便您不必定义(或丢弃)临时变量X.
注意,变量的大括号或即时形式都不能包含嵌套的$字符以供其他变量替代。
如下做法是错误的:
variable a equal 2
variable b2equal 4
print "B2 = ${b$a}"
不能为一个临时变量指定$($ x-1.0),但可以使用$(v_x-1.0),因为后者是符合等效样式变量语法。
有关字符串如何分配给变量和评估的详细信息,以及如何在输入脚本命令中使用,请参阅变量命令。
(4)某行“单词”被空格分隔(制表符,空格)隔开。请注意,单词可以包含字母,数字,下划线或标点符号。
(5)每行的第一个词是命令名。行中的所有连续词都是参数。
(6)如果要将具有空格的文本视为单个参数,则可以将其包含在单引号或双引号或三引号中。如果使用“&”字符,则单引号或双引号的单个参数可以跨多个行。当行连接在一起(并删除“&”字符和换行符)时,文本将变为单行。如果希望多行参数保留换行符,则文本可以用三重引号括起来,在这种情况下不需要“&”字符。
例如:
print "Volume = $v"
print 'Volume = $v'
if "${steps} > 1000" then quit
variable a string "red green blue &
purple orange cyan"
print """
System volume =$v
System temperature = $t"""
在每种情况下,单个,双引号或三引号在其内部存储的单个参数被删除。引号之间的“#”或“$”字符不会被视为(2)中的注释指示符,或在)(3)中替换为变量。
注意:如果参数本身是一个需要引用参数的命令(例如,使用print命令作为if或run命令的一部分),则单引号,双引号或三引号可以以通常的方式嵌套。
最后,有需求欢迎通过微信公众号联系我们。
微信公众号:320科技工作室。