Potopt 分子动力学套件
维基教科书用户认为此页面应该拆分为更小的页面,并包含更窄的子主题。 您可以通过将此大页面拆分为更小的页面来提供帮助。请确保遵循命名策略。将书籍划分为更小的部分可以提供更多焦点,并允许每个部分都做好一件事,这将有利于所有人。 |
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)。
模拟代码需要一个特定于应用程序(并且可能依赖于平台)的二进制编码流,该流由使用辅助 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:碳原子的质量近似值。
- 键
请注意,除了表示转换之外,所描述的 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 基文本流创建),但结果状态改为保存为Awk 和Gnuplot 友好的用空格分隔的值形式,这需要一个单独的程序(在此未提供)将其转换为适合继续模拟的东西。
一些详细信息以某种冗长且不易解析(例如,使用 Awk 或 Gnuplot)的文本格式报告到stderr 上的每次迭代。对于数万次迭代,结果流的大小最终可能达到数十兆字节。
没有适当的错误报告。该代码改为依赖于一堆 assert ()
宏调用。
也没有适当的命令行界面。
还请查看代码中的 FIXME:
注释。
此处记录的 Potopt 组件的预发布版本可从以下位置获得
- http://am-1.org/~ivan/src/ns8xrqxiojtkiin4drpx4ne19y.c – 模拟代码本身;
- http://am-1.org/~ivan/src/gpqfyhge73tgcr4dkfp9xydju8.perl – YAML 到二进制转换代码;
- http://am-1.org/~ivan/doc-files/qdzyppoeigu1f8gj4mh3m41b1d.yaml – 22 个原子的石墨烯样本系统。
Potopt 由 Ivan Shmakov 编写。
Potopt 是自由软件:您可以在 BSD 类 许可证(包含在代码中)的条款下重新分发和/或修改其当前版本。请注意,但是,许可证可能会在 0.1 版本发布之前或时更改为 GNU 通用公共许可证 版本 3。
此文档是 Wikibooks 上正在进行的免费协作项目,并且根据 知识共享署名-相同方式共享许可证 (CC BY-SA) 版本 3.0 提供。
此页面内容基于作者早期的 帖子,该帖子发布在 news:alt.sources 上,似乎没有传播开来。
- w:Graphene
- v:User:Ivan Shmakov/Potopt 2014
- v:ru:Участник:Ivan Shmakov/Параллельные вычисления в моделировании графена 2014
- ↑ Avinash Parashar (2012-10-26). "多尺度模型研究石墨烯对石墨烯/聚合物纳米复合材料断裂特性的影响". 纳米尺度研究快报. 7 (1): 595. doi:10.1186/1556-276X-7-595. 检索于 2014-02-08.
{{cite journal}}
: 未知参数|coauthors=
被忽略 (|author=
建议) (帮助)
一位读者要求扩展本书以包含更多内容。 您可以通过 添加新内容(了解如何操作)或在 阅览室 中寻求帮助。 |