详细内容

LAMMPS讲解15-in文件的命令解析规则

输入脚本中的每个非空行都被视为一个命令。LAMMPS命令区分大小写。命令名称是小写的,指定的命令参数也是如此。大写字母可用于文件名或用户选择的ID字符串。

以下是LAMMPS如何解析输入脚本中的每一行的6条规则:

1.如果该行的最后一个可打印字符是“&”字符,则假定该命令在下一行继续。通过删除“&”字符和换行符将下一行连接到上一行。这允许长命令跨两行或多行继续。

2.从第一个“#”字符开始的所有字符都被视为注释并被丢弃。此规则的例外情况在6中进行了描述。请注意,尾部“&”字符后的注释将阻止命令在下一行继续。另请注意,对于多行命令,单个前导“#”将注释掉整个命令。

3.重复搜索该行以查找$字符,这些字符表示用文本字符串替换的变量。该规则的例外情况在6中描述。如果$后跟大括号“{}”中的文本,则变量名是大括号内的文本。如果$后面没有大括号,则变量名是紧跟$的单个字符。因此,${myTemp} 和$x指的是名为“myTemp”和“x”的变量,而“$xx”将被解释为一个名为“x”的变量后跟一个“x”字符。

变量如何转换为文本字符串取决于它是什么类型的变量;它可以是存储多个文本字符串的变量,并返回其中一个。返回的文本字符串可以是多个“单词”(空格分隔),然后将其解释为输入命令中的多个参数。该变量还可以存储一个数字公式,该公式将被计算并将其数字结果作为字符串返回。

作为一种特殊情况,如果 $ 后跟括号“()”,则括号内的文本将被视为“立即”变量并作为等式变量进行评估。这是一种在输入脚本中使用数字公式而无需将它们分配给变量名称的方法。例如,这3个输入脚本行:

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”。

此外,“立即”变量表达式后面可以跟一个冒号,后面跟一个C风格的格式字符串,例如“:%f”或“:%.10g”。格式字符串必须适合双精度浮点值。格式字符串用于输出变量表达式求值的结果。如果未指定格式字符串,则默认使用高精度“%.20g”。这对于将打印输出格式化为所需的精度非常有用:

print "Final energy per atom: $(pe/atoms:%10.3f) eV/atom"

请注意,大括号或立即形式的变量都不能包含嵌套的$字符以供其他变量替换。因此你不能这样做:

variable        a equal 2

variable        b2 equal 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 every命令的一部分),则可以以通常的方式嵌套单引号、双引号或三引号。只允许嵌套一级,但这对于大多数用例来说应该足够了。

ASCII与UTF-8

LAMMPS在内部需要并处理7位ASCII格式的文本。许多现代环境使用 UTF-8 编码,它是7位ASCII字符表的超集,因此大多兼容。但是,有几个非 ASCII字符可能看起来与它们的ASCII等效字符非常相似或不可见(因此它们看起来像一个空白),但编码不同。众所周知,Web浏览器、PDF查看器、文档编辑器有时会将其中一个替换为另一个以获得更好看的输出。但是,这可能会导致问题,例如,当使用来自网页的输入文件示例的剪切-粘贴时,或者当使用文档编辑器(不是专用的纯文本编辑器)来编写LAMMPS输入时。LAMMPS将尝试检测这一点,并将非ASCII字符替换为已知的ASCI等效字符。如果发生这种情况,还会打印警告。建议在LAMMPS输入、数据和潜在文件中完全避免使用此类字符。

 

 

感谢鲍路瑶老师的分享,内容来自于鲍老师分享出来的资料

如有需要添加微信:lmp_zhushou  进入微信群,帮助他人,共建社区

获取完整版lammps讲义可以加微信lmp_zhushou或加入QQ994359511


最新评论
请先登录才能进行回复登录
技术支持: CLOUD | 管理登录
seo seo