在第一性原理计算中,构建体系晶胞是常见的操作。同时,许多研究可能涉及到需要通过改变超胞中原子的位置来达到某种目的。这类工作通常可以经由专用的图形软件完成,比如开源软件Avogadro、Vesta、Xcrysden等等。

但是今天,小编将为你介绍如何使用Pymatflow中的structflow工具来实现对晶体结构中原子位置的移动。

安装

为了使用structflow工具,首先需要安装Pymatflow。你可以通过pip来实现安装:

~$ pip install pymatflow

使用展示

这里我们以两个示例来演示如何使用structflow来移动晶胞中的原子。

移动NaCl原胞中的一个Na离子

如何整理stl模型的网格线(使用structflow更改晶体结构中原子的位置)(1)

如图所示为NaCl晶体结构示意图,我们此次需要尝试移动的为图中单独用黑色标注的一个Na离子。

为了移动该离子,首先我们需要知道他在结构中的原子顺序编号,可以通过VESTA软件打开,然后点击该Na离子,然后在下方状态信息中获取选中的部分的编号,这里是2。

然后我们需要将该Na离子往图中右移1Angstrom的距离,为了描述该移动方向,我们需要从晶向指数的角度来进行判定,可以明显地看到图中朝右的方向是b轴所在方向,对应晶向指数为[0 1 0]。

知道所有信息后,我们给出实现该操作的命令:

~$ sflow move -i nacl.cif -o nacf-moved.cif --atoms 2 --disp 1 --direction 0 1 0

得到的结构如下图所示:

如何整理stl模型的网格线(使用structflow更改晶体结构中原子的位置)(2)

可以看到Na离子已经往[0 1 0]方向移动了对应的距离。下面我们来看看命令中各个参数的意义。

首先-i和-o参数分别用于指定输入结构和输出结构文件。然后参数--atoms用于指定需要移动的原子的编号,这里移动的是2号原子。实际上,该参数可以指定同时移动多个原子。--direction参数通过三个实数指定移动的方向。最后参数--disp用于指定往特定方向移动的距离,单位是埃。

为何不直接使用图形软件?

有可能你想要问,这样的操作可以简单通过具有GUI的分子结构构建和可视化工具来完成,为什么还要这样麻烦地处理呢。

当然,对于少量样本的操作,小编也建议您直接通过类似Avogadro、VESTA等图形软件进行操作,这样可以很方便快捷。

但是有些情况,我们可能需要批量地进行结构地构建。比如,这里我想产生一组Na移动不同距离的结构,从0.5 Angstrom到1.5Angstrom,步长为0.1,那么使用图形软件可能需要进行多次操作,但是使用命令就可以通过一个循环很容易地进行:

for d in `seq -w 0.5 0.1 1.5` do sflow convert -i nacl.cif -o nacl-%{i}.cif --atoms 2 --disp 1 --direction 0 1 0 done

说这么多,表达的观点就是,你需要根据自己的需求选择不同的解决问题的方案。

往期文章

晶体结构文件转换工具structflow

CP2K教程系列之结构优化(Pymatflow篇)

CP2K教程系列之第一性原理分子动力学(Pymatflow篇)

Quantum ESPRESSO教程之结构优化(Pymatflow篇)

Quantum ESPRESSO教程之态密度能带结构计算(Pymatflow篇)

Quantum ESPRESSO教程之电子局域函数计算(Pymatflow篇)

Pymatflow是一个用于第一性原理模拟的工作流自动化管理软件,目前支持的计算程序有VASP、Qutum ESPRESSO、Abinit、SIESTA、CP2K。

项目文档地址:

http://pymatflow.readthedocs.org/

中文手册:

欢迎关注以获取更多关于Pymatflow和第一性原理计算的精彩内容。

,