【LAMMPS学习】五、LAMMPS命令(2) 输入脚本的解析规则

5. 命令 

本部分描述了 LAMMPS 输入脚本的格式以及其中的命令如何用于定义 LAMMPS 模拟。主要包括以下内容。

5.1. LAMMPS 输入脚本

5.2.输入脚本的解析规则

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

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

1、如果该行的最后一个可打印字符是“&”字符,则假定该命令在下一行继续。通过删除“&”字符和换行符,下一行与上一行连接起来。这允许长命令跨两行或更多行继续。有关如何在不使用“&”字符的情况下跨多行继续命令的信息,请参阅第 6 节中对三引号的讨论。

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

# this is a comment
timestep  1.0   # this is also a comment

3、将在该行中重复搜索 $ 字符,这些字符表示被文本字符串替换的变量。该规则的例外情况在第 6 条中进行了描述。

如果 $ 后面跟着大括号“{}”中的文本,则变量名称就是大括号内的文本。如果 $ 后面没有大括号,则变量名称是紧跟在 $ 后面的单个字符。因此,${myTemp} 和 $x 引用名为“myTemp”和“x”的变量,而“$xx”将被解释为名为“x”的变量,后跟“x”字符。

变量如何转换为文本字符串取决于变量的样式;有关详细信息,请参阅变量页面。它可以是一个存储多个文本字符串的变量,并返回其中之一。返回的文本字符串可以是多个“单词”(空格分隔),然后将其解释为输入命令中的多个参数。该变量还可以存储将被计算的数值公式,并将其数值结果作为字符串返回。

作为一种特殊情况,如果 $ 后面跟着括号“()”,则括号内的文本将被视为“immediate”变量并被评估为 equal 样式变量。这是一种在输入脚本中使用数值公式而无需将它们分配给变量名称的方法。例如,这 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”。

此外,整个“immediate”变量表达式后面可以跟一个冒号,后面跟一个 C 风格的格式字符串,例如“:%f”或“:%.10g”。格式字符串必须适合双精度浮点值。格式字符串用于输出变量表达式求值的结果。如果未指定格式字符串,则使用高精度“%.20g”作为默认格式。

这对于将打印输出格式化为所需的精度很有用:

print "Final energy per atom: $(v_ke_per_atom+v_pe_per_atom:%10.3f) eV/atom"

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

variable        a equal 2
variable        b2 equal 4
print           "B2 = ${b$a}"

您也不能为立即变量指定“$($x-1.0)”之类的表达式,但可以使用 $(v_x-1.0),因为后者是 equal-style 变量的有效语法。

有关如何将字符串分配给变量并求值以及如何在输入脚本命令中使用它们的更多详细信息,请参阅变量命令。

4、该行被分成由空格(制表符、空格)分隔的“单词”。请注意,单词可以包含字母、数字、下划线或标点符号。

5、第一个单词是命令名称。该行中所有连续的单词都是参数。

6、如果您希望将带有空格的文本视为单个参数,则可以将其括在单引号 (’) 或双引号 (") 或三引号 (""") 中。如果使用“&”字符,则用单引号或双引号括起来的长单个参数可以跨越多行,如上面 1 中所述。当通过 LAMMPS 将行连接在一起(并删除“&”字符和换行符)时,组合的文本将成为单行。如果您希望参数的多行保留换行符,则可以将文本括在三引号中,在这种情况下,不需要“&”字符,并且不能用作行继续字符。例如:

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
"""

在每种情况下,单引号、双引号或三引号都会被删除,并且所包含的文本将在内部存储为单个参数。

有关示例,请参阅转储修改格式、打印、if 和 python 命令。

引号之间的“#”或“$”字符不会被视为 2 中的注释指示符,也不会被替换为 3 中的变量。

注:

如果参数本身是一个需要带引号的参数的命令(例如,使用 print 命令作为 if 或 run every 命令的一部分),则可以按通常的方式嵌套单引号、双引号或三引号。有关示例,请参阅这些命令的文档页面。仅允许一层嵌套,但这对于大多数用例来说应该足够了。

ASCII 与 UTF-8:

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

  • 33
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值