熔体和流体是自然系统中无处不在的质量传递载体。我们开发了一个开源软件包来分析此类系统的分子动力学模拟。我们计算结构(键合,聚类,化学形态),传递(扩散,粘度)和热力学性质(振动光谱)。
我们开发了一个基于Python的开源包来分析从流体的分子动力学模拟中产生的结果。该封装最适合自然系统上的应用,如硅酸盐和氧化物熔体、水基流体和各种超临界流体。该软件包是Python脚本的集合,其中包括两个处理文件格式和晶体学的主要库。所有脚本都在命令行运行。我们提出了一种简化的格式来存储模拟的原子轨迹和相关热力学信息,这些信息保存在UMD文件中,代表通用分子动力学。UMD封装允许计算一系列结构,传输和热力学特性。从成对分布函数开始,它定义键长,构建原子间连接矩阵,并最终确定化学物种形成。确定化学物质的寿命允许运行完整的统计分析。然后,专用脚本计算原子和化学物质的均方位移。对原子速度实施的自相关分析得出扩散系数和振动谱。对应力进行相同的分析得出粘度。该软件包可通过GitHub网站及其ERC IMPACT项目自己的专用页面作为开放访问软件包获得。
流体和熔体是自然环境中的活性化学和物理传递载体。原子扩散速率的升高有利于化学交换和反应,低粘度加上不同的浮力有利于较大的质量传递,而晶体 – 熔体密度关系有利于行星体内部的分层。由于没有周期性晶格,达到熔融状态所需的典型高温以及淬火的难度使得一系列明显特性(如密度、扩散和粘度)的实验测定极具挑战性。这些困难使得替代计算方法强大而有用的工具可用于研究这类材料。
随着计算能力的出现和超级计算机的可用性,目前采用两种主要的数值原子模拟技术来研究非结晶原子系统的动力学状态,蒙特卡罗1 和分子动力学(MD)1,2。在蒙特卡罗模拟中,配置空间是随机采样的;蒙特卡罗方法显示并行化中的线性缩放,如果所有采样观测值彼此独立。结果的质量取决于随机数生成器的质量和抽样的代表性。蒙特卡罗方法显示并行化中的线性缩放,如果采样彼此独立。在分子动力学(MD)中,构型空间是通过瞬态原子轨迹采样的。从给定的配置开始,原子轨迹是通过积分牛顿运动方程来计算的。原子间力可以使用模型原子间电位(在经典MD中)或使用第一性原理方法(从头开始或第一性原理,MD)来计算。结果的质量取决于轨迹的长度及其不被局部最小值吸引的能力。
分子动力学模拟包含大量信息,所有这些都与系统的动力学行为有关。热力学平均属性,如内能、温度和压力,是相当标准的计算。它们可以从模拟的输出文件中提取并取平均值,而与原子的运动及其相互关系直接相关的量需要在提取原子位置和速度后计算。
因此,人们已经付出了很多努力来可视化结果,并且今天可以在不同的平台上使用各种软件包,无论是否开源[Ovito3,VMD4,Vesta5,Travis6等]。所有这些可视化工具都可以有效地处理原子间距离,因此,它们允许有效地计算成对分布函数和扩散系数。执行大规模分子动力学模拟的各种小组拥有专有软件来分析模拟产生的各种其他属性,有时以共享软件或其他形式的有限访问社区,有时仅限于范围和使用某些特定软件包。在其中一些包中开发和实现用于提取有关原子间键合,几何图案和热力学信息的复杂算法3,4,5,6,7等。
在这里,我们提出了 UMD包 – 一个用Python编写的开源包,用于分析分子动力学模拟的输出。UMD 封装允许计算各种结构、动力学和热力学特性(图 1)。该软件包可通过GitHub网站(https://github.com/rcaracas/UMD_package)和ERC IMPACT项目的专用页面(http://moonimpact.eu/umd-package/)作为开放获取软件包获得。
为了使其具有通用性并且更易于处理,我们的方法是首先从实际分子动力学运行的输出文件中提取与热力学状态和原子轨迹相关的所有信息。此信息存储在专用文件中,其格式独立于运行仿真的原始 MD 包。我们将这些文件命名为”umd”文件,代表通用分子动力学。通过这种方式,我们的UMD软件包可以被任何ab initio组使用任何软件,所有这些都可以以最小的适应工作进行。使用当前软件包的唯一要求是将特定MD软件的输出中的相应解析器写入umd文件格式(如果尚不存在)。目前,我们为VASP8 和QBox9 软件包提供这样的解析器。
图 1:UMD 库的流程图。
物理属性为蓝色,主要 Python 脚本及其选项为红色。 请点击此处查看此图的放大版本。
umd文件是ASCII文件;典型的扩展是”umd.dat”,但不是强制性的。所有分析组件都可以读取 umd 格式的 ASCII 文件,而不管实际的扩展名如何。但是,一些旨在对多个模拟执行快速大规模统计信息的自动脚本专门查找扩展名为 umd.dat 的文件。每个物理属性都用一行表示。每行都以关键字开头。通过这种方式,格式具有高度的适应性,并允许将新属性添加到umd文件中,同时在整个版本中始终保持其可读性。下面讨论中使用的热膨胀石在4.6 GPa和3000 K下模拟的umd文件的前30行 如图2所示。
图 2:umd 文件的开头,描述了在 4.6 GPa 和 3000 K 下模拟液态热浮石的过程。
标头后跟每个快照的说明。每个属性都写在一行上,包含物理属性的名称、值和单位,全部用空格分隔。 请点击此处查看此图的放大版本。
所有 umd 文件都包含描述模拟单元内容的标题:原子数、电子数和原子类型,以及每个原子的详细信息,例如其类型、化学符号、价电子数及其质量。空行标记标头的末尾,并将其与 umd 文件的主要部分分开。
然后详细介绍模拟的每个步骤。首先,给出瞬时热力学参数,每个参数在不同的线上,指定(i)参数的名称,如能量,应力,等效静水压力,密度,体积,晶格参数等,(ii)其值和(iii)其单位。接下来是描述原子的表格。标题行给出了不同的度量,如笛卡尔位置,速度,电荷等,以及它们的单位。然后每个原子在一行上详细介绍。通过对应于三个 x,y,z 轴的三组,条目是:减少的位置,折叠到模拟单元中的笛卡尔位置,笛卡尔位置(正确考虑了原子在模拟过程中可以穿越多个单元单元的事实),原子速度和原子力。最后两个条目是标量:电荷和磁矩。
两个主要的库确保了整个软件包的正常运行。 umd_process.py 库处理 umd 文件,如读取和打印。 crystallography.py 库处理与实际原子结构相关的所有信息。 crystallography.py 库的基本理念是将格视为向量空间。单元单元参数及其方向表示基向量。”空间”具有一系列标量属性(特定体积,密度,温度和特定原子数),热力学属性(内能,压力,热容等)和一系列张量属性(应力和弹性)。原子填充了这个空间。”格”类定义了这个集合,以及各种简短的计算,如比体积,密度,从直接格获得倒数格等。”原子”类定义原子。它们的特点是一系列标量性质(名称,符号,质量,电子数等)和一系列矢量性质(空间中的位置,相对于格类中描述的向量基,或相对于通用笛卡尔坐标,速度,力等)。除了这两个类之外, crystallography.py 库还包含一系列函数,用于执行各种测试和计算,例如原子距离或单元格乘法。元素周期表也作为字典包含在内。
umd 包的各个组件写入多个输出文件。作为一般规则,它们都是ASCII文件,它们的所有条目都由选项卡分隔,并且它们尽可能不言自明。例如,它们总是清楚地指示物理属性及其单位。 umd.dat 文件完全符合此规则。
UMD 包旨在更好地与 ab initio 模拟配合使用,其中快照数量通常限制为数十到数十万个快照,每个单元单元只有几百个原子。如果运行后处理的计算机具有足够的活动内存资源,则还可以处理较大的模拟。该代码通过其可以计算的各种属性及其开源许可证来区分自己。
umd.dat 文件适用于在整个模拟过程中保持粒子数不变的融合。UMD 包可以读取来自模拟盒形状和体积变化的计算产生的文件。这些涵盖了最常见的计算,如NVT和NPT,其中粒子的数量,N,温度T,体积,V和/或压力P保持恒定。
对于开始的时间,对分布函数以及所有需要估计原子间距离的脚本(如物种形成脚本)仅适用于正交单元单元,这意味着对于立方,四方和正交单元,其中轴之间的角度为90°。
2.0版的主要开发路线是消除距离的正交性限制,并为物种形成脚本添加更多特征:分析单个化学键,分析原子间角,并实现第二个配位球体。在外部协作的帮助下,我们正在努力将代码移植到GPU上,以便在更大的系统中更快地进行分析。
The authors have nothing to disclose.
这项工作得到了欧洲研究理事会(ERC)在欧盟地平线2020研究和创新计划(资助协议编号681818 IMPACT to RC)下的支持,由深碳天文台极端物理和化学理事会以及挪威研究理事会通过其卓越中心资助计划(项目编号223272)提供支持。我们承认通过stl2816系列eDARI计算授权访问GENCI超级计算机,通过PRACE RA4947项目访问Irene AMD超级计算机,以及通过UNINETT Sigma2 NN9697K访问Fram超级计算机。金融服务得到了Marie Skłodowska-Curie项目的支持(赠款协议ABISSE No.750901)。
getopt library | open-source | ||
glob library | open-source | ||
matplotlib library | open-source | ||
numpy library | open-source | ||
os library | open-source | ||
Python software | The Python Software Foundation | Version 2 and 3 | open-source |
random library | open-source | ||
re library | open-source | ||
scipy library | open-source | ||
subprocess library | open-source | ||
sys library | open-source |