跳转到内容

Potopt 分子动力学套件

0% developed
来自维基教科书,开放世界中的开放书籍

Potopt 是一个用分子动力学软件,用ISO C11实现,并利用MPI进行并行处理。

本手册记录了该软件的预发布版本,发布于 2014 年 2 月 26 日。实现和用户界面的详细信息尚未确定,并且在第一个版本发布之前很可能发生重大变化。

$ perl yaml2pob.perl \
      < Initial-state.yaml > Initial-state.pob 
$ mpirun -n N \
      potopt Split [Iterations [Step [Tau2]]] \
      < Initial-state.pob > Output.log 2>&1 

Potopt 是一个基于 ISO C11 和 MPI 的代码(分别用 GCC 4.8.2 和 Open MPI 1.6.5 测试),它可以求解用户指定质量、初始位置和速度的粒子系统运动方程。这些方程基于Morse 势,每个相互作用的粒子对(可能是共享化学键或以其他方式相关的粒子)都指定了参数。

给定于 mpirun(1)-n N 参数指定要运行的进程数。有关更多信息,请参阅所用 MPI 实现的文档。

Split 参数当前是必需的,它是一个用空格分隔的正整数字符串,用于指定每个进程要模拟的粒子数。当然,这些数字应该加起来等于所考虑系统中的粒子总数,例如,在单个进程 (-n 1) 内模拟 22 个原子的石墨烯样本系统,可以使用 22,两个进程 (-n 2) 可以使用 '11 11',三个进程 (-n 3) 可以使用 '7 8 7',等等。

Iterations 是要执行的迭代次数,默认为 64。65536 或更大的值可能更实际。

Step 是初始时间步长(以秒为单位),默认为 1e-18(或 1 as),但约为 2e-19 的值可能是更合适的选择。然而,该软件将持续尝试找到最佳的时间步长,基于 main_loop () 中设置的约束条件(查看那里的 redo_p 局部变量)。

Tau2 是系统应失去一半动能的特征时间,默认为 4e-18(或 4 as)。

基于 YAML 的输入格式

[编辑 | 编辑源代码]

模拟代码需要一个特定于应用程序(并且可能依赖于平台)的二进制编码流,该流由使用辅助 yaml2pob.perl Perl 脚本从YAML 流中生成。

输入 YAML 流可能如下所示(对于单个六元碳环,忽略原子)。

---
xyz:
  - { a: 0, xyz: [ 0.0, 7.104999999999999e-11, 0 ] }
  - { a: 1, xyz: [ 1.2306220987776874e-10, 0.0, 0 ] }
  - { a: 2, xyz: [ 2.461244197555375e-10, 7.104999999999999e-11, 0 ] }
  - { a: 3, xyz: [ 0.0, 2.1315e-10, 0 ] }
  - { a: 4, xyz: [ 1.2306220987776874e-10, 2.842e-10, 0 ] }
  - { a: 5, xyz: [ 2.461244197555375e-10, 2.1315e-10, 0 ] }
bonds:
  - { a: 0, b: 1 }
  - { a: 0, b: 3 }
  - { a: 1, b: 2 }
  - { a: 2, b: 5 }
  - { a: 3, b: 4 }
  - { a: 4, b: 5 }

xyz 部分指定了粒子(原子),而 bonds 指定了用于模拟化学键w:Morse 势的参数。

参数如下。

粒子
  • a – 唯一的粒子标识符(可以是任何字符串);
  • xyz – 粒子的初始位置;
  • v(可选) 粒子的初始速度;默认为零向量;
  • m(可选) 粒子的质量;默认为 1.660539e-27,或 1.660539 × 10⁻²⁷ g,这可能是单个w:碳原子的质量近似值。
  • a, b – 共享键的粒子的标识符;
  • aa, r, D(可选) Morse 势参数;默认为 2.625e10, 1.421e-10, 和 6.03105e-19,这些是 C─C 单键的可能值。[1]

请注意,除了表示转换之外,所描述的 Perl 辅助程序将稍微改变粒子的初始位置和速度,根据代码中的 $perturb$pert_v 变量(指定相应变化的标准差)。这是作为测试措施一种可能的方式来推动系统脱离局部最小值,如果初始状态对应于局部最小值。

结果系统状态将发送到stdout,格式为用空格分隔的值。这些值是质量位置(3 个值)和速度(3 个值)。

Potopt 可执行文件可以用GNU C 编译器构建,在GNU Make下运行,如下所示。(不需要 Makefile)。

$ cp -- ns8xrqxiojtkiin4drpx4ne19y.c potopt.c 
$ LC_ALL=C make CC=mpicc CFLAGS='-g -O2 -Wall -std=gnu11' \
      LDFLAGS=-lm   potopt 

或者,可以使用以下简单的 GNUmakefile 文件,GNU Make 调用变为 $ LC_ALL=C make potopt

VPATH   = $(srcdir)
CC      = mpicc
CFLAGS  = -g -O2 -Wall -std=gnu11
LDFLAGS = -lm

all: potopt

Split 参数应该被设置为可选。

模拟代码以特定于应用程序(并且可能依赖于平台)的编码读取二进制文件。使用X.690(DER 或 BER)中指定的编码,或者可能是NetCDF,可能是一个更好的选择。

更糟糕的是,虽然模拟代码从二进制文件读取初始系统状态(该文件可以从YAML 基文本流创建),但结果状态改为保存为AwkGnuplot 友好的用空格分隔的值形式,这需要一个单独的程序(在此未提供)将其转换为适合继续模拟的东西。

一些详细信息以某种冗长且不易解析(例如,使用 Awk 或 Gnuplot)的文本格式报告到stderr 上的每次迭代。对于数万次迭代,结果流的大小最终可能达到数十兆字节

没有适当的错误报告。该代码改为依赖于一堆 assert () 宏调用。

也没有适当的命令行界面。

还请查看代码中的 FIXME: 注释。

可用性

[编辑 | 编辑源代码]

此处记录的 Potopt 组件的预发布版本可从以下位置获得

Potopt 由 Ivan Shmakov 编写。

Potopt 是自由软件:您可以在 BSD 类 许可证(包含在代码中)的条款下重新分发和/或修改其当前版本请注意,但是,许可证可能会在 0.1 版本发布之前或时更改为 GNU 通用公共许可证 版本 3。

此文档是 Wikibooks 上正在进行的免费协作项目,并且根据 知识共享署名-相同方式共享许可证 (CC BY-SA) 版本 3.0 提供。

此页面内容基于作者早期的 帖子,该帖子发布在 news:alt.sources 上,似乎没有传播开来。

另请参阅

[编辑 | 编辑源代码]

参考文献

[编辑 | 编辑源代码]
  1. Avinash Parashar (2012-10-26). "多尺度模型研究石墨烯对石墨烯/聚合物纳米复合材料断裂特性的影响". 纳米尺度研究快报. 7 (1): 595. doi:10.1186/1556-276X-7-595. 检索于 2014-02-08. {{cite journal}}: 未知参数 |coauthors= 被忽略 (|author= 建议) (帮助)
华夏公益教科书