【科学代码】VaspCZ:一个提高效率的VASP计算辅助程序
开发者:张正德,谈蒙露,任翠兰,怀平
开发单位:中国科学院上海应用物理研究所,中国科学院大学 等
代码下载:
https://code.koushare.com/#/code/codeDetail?codeId=249
授权协议:MIT
VaspCZ是张正德博士在中国科学院上海应用物理研究所读博期间为提高科研效率而开发的Vasp辅助程序。
一、程序总体设计
VaspCZ程序基于Linux系统,用Python语言编写而成,该程序框架如图1所示。该对Linux系统无额外要求,Python需使用3.6及以上版本,支持库需安装numpy以实现高性能数值计算。程序分为两部分:顶层是软件部分,底层是API部分。
图1 VaspCZ程序框架图
Fig.1 Frameworks of VaspCZ
顶层的软件部分为了满足快速提交任务、便捷检查的需求,针对结构优化、静态计算、过渡态计算和测试计算设计了三个模块:OS(Optimization andStatic)模块、NEB(Nudged Elastic Band)模块和Test模块。底层的API部分是顶层的python库,分为shell、File 和Vasp模块,安装VaspCZ时库自动安装,使用时import VaspCZ.zzdlib,为编写顶层应用提供便捷的接口。
1.1 顶层:软件部分
软件部分提供了如图2所示的Linux命令行用户界面,终端输入快捷键vcz启动程序后,在主界面输入数字选择模块,而后在该模块界面选择功能即可。
软件部分分为OS模块、NEB模块和Test模块。
图 2 VaspCZ软件主界面和OS模块界面
Fig.2 The main and OS module user interface of VaspCZ.
1.1.1 OS模块
OS模块提供了快捷进行结构优化(Optimization)计算和静态(Static)计算以及检查结果的功能,各功能如表1所示。
表1 OS模块功能
Table 1 List of OS module
其中,标签使用模块名.功能名的格式代表了具体的功能,如1.1代表第1个模块(OS模块)的第1个功能,调用此功能只需在终端依次输入:vcz-1-1。
功能 1.1,产生示例的Vasp输入文件,会在当前目录下产生5个文件(Vasp计算所需文件):INCAR、POSCAR、POTCAR、KPOINTS和计算平台PBS任务系统提交计算任务的脚本Vasp.sh。
功能 1.2,将当前路径的结构优化 INCAR 一键修改为静态计算的INCAR。
功能 1.3,自动产生匹配POSCAR中元素的Vasp计算所需贋势文件POTCAR,或指定元素和贋势类型产生POTCAR。
功能 1.4,输入网格和方法(或使用默认值),一键产生Vasp计算所需网格文件KPOINTS。
功能 1.5,输入节点数、核数和任务名(或使用默认值),一键产生PBS系统提交任务的脚本Vasp.sh。
功能 1.6,删除当前目录其他所有文件和文件夹,仅保留Vasp的5个输入文件(INCAR、POSCAR、POTCAR、KPOINTS和Vasp.sh),用于计算出现问题时重算。选择该功能后可输入文件名添加需要额外保留的文件。
功能 1.7,准备好输入文件后,一键进行前检查,检查INCAR、POSCAR和 POTCAR 是否匹配,检查通过后将打印检查信息,并提交任务。
功能 1.8,一键检查当前目录及所有子目录下的结构优化和静态计算的结果,如 OUTCAR或者log中有错误(ERROR)或警告(WARNING)将提示所在位置。检查内容包括:当前路径、能量、离子步数、磁 矩、POSCAR和CONTCAR原子之间的距离、原子最大受力。
1.1.2 NEB模块
NEB模块提供了便捷地使用NEB(NudgedElastic Band)方法计算过渡态和检查结果的功能。本程序假设计算遵循如图3所示的过渡态计算的一般流程:先进行结构优化,而后静态计算,最后过渡态计算,如需再振动分析。
用NEB方法计算过渡态需要知道过渡态的初态和末态,如催化反应中原子吸附脱附前后的结构、扩散研究中原子扩散前后的结构等。为保证过渡态计算的准确性,初态和末态需要分别在文件夹[WORKDIR]/ini/Opt和[WORKDIR]/fin/Opt 文件夹内进行结构优化,将原子弛豫到比较稳定的结构。确定初末态的稳定结构后,分别在文件夹[WORKDIR]/ini和[WORKDIR]/fin 文件夹内进行静态计算,以获得更加准确的能量。而后将初态的稳定结构作为初始点,末态的稳定结构作为末态点,
图 3 过渡态计算的一般流程图
Fig.3 General flow charts of NEB calculation
使用vtst工具插入中间态,用NEB方法在当前工作目录[WORKDIR]下进行过渡态搜索计算。最后如果需要,在当前文件夹通过振动分析计算出该过渡过程原子的有效跃迁频率。遵循此过渡态计算的一般过程而设计的NEB模块各功能如表2所示。
表2 NEB模块功能
Table 2 List of NEB module
功能 2.1,在初末态的结构优化完成后,一键检查结果 、拷贝CONTCAR为 POSCAR、设置新的INCAR、前检查、提交静态计算任务。
功能 2.2,在初末态的静态计算完成后,一键检查结果、根据初末态的稳定结构的原子距离差之和/0.8自动插入中间态、设置新的INCAR、提交过渡态计算任务。
功能 2.3,在过渡态计算完成后,自动读取初态、末态 、鞍点态的结构,确定迁移的原子,修改POSCAR文件,设置新的INCAR,提交振动分析任务,计算迁移原子在初态、末态、鞍点态时的振动频率。
功能 2.4,在过渡态计算出现错误或其他原因需要重新计算时,回滚到第一步初末态结构优化阶段。删除当前目录下的所有文件和文件夹,仅保留ini/Opt/下和fin/Opt下的5个输入文件(INCAR,POSCAR,POTCAR,KPOINTS和Vasp.sh),而后可使用功能2.1重新提交任务。
功能 2.5,在过渡态计算出现错误或其他原因需要重新计算时,回滚到NEB计算阶段。删除目录下的文件和文件夹,仅保留ini/和fin/文件夹下所有内容,而后可使用功能2.2重新提交任务。
功能 2.6,过渡态计算中或计算结束不收敛时,检查受力情况。一键打印各个离子步时各个中间态的原子最大受力及他们之和。根据原子最大受力和最小时对应的步数,快捷查找到过渡态搜索中较为合理的中间结构,进行进一步分析和计算。
功能 2.7,过渡态计算中或计算结束不收敛或计算完成后,检查各中间态原子距离。快捷查看过渡态搜索中是否有某个中间态弛豫到不可预测的结构导致计算不收敛。
功能 2.8,在过渡态计算中或完成后,检查当前目录及所有子目录下的NEB计算结果(忽略静态计算和结构优化),如OUTCAR或者log中有错误(ERROR)或警告(WARNING)将提示所在位置,检查完成后输出结果。输出结果包含过渡态计算路径、各中间态的编号、体系总能、势垒等信息。
功能 2.9,在过渡态振动分析完成后,检查当前目录及所有子目录下的原子振动频率(即尝试频率)并计算有效频率。
1.1.3 Test模块
Test模块提供了一键截断能测试和K点测试功能。通常,一个体系在大规模进行计算和分析之前,需要进行截断能测试和K点测试确定合适的ENCUT设置和KPOINTS设置。本程序提供的Test模块各功能如表3所示。
表3 Test模块功能
Table 3 List of Test module
做截断能测试的目的是选取一个合适的截断能,截断能决定了VASP计算过程中被作为贋势处理的电子波函数的范围。截断能太小,计算得到的体系总能不可信,截断能太大,计算中迭代需要花费大量资源。
功能 3.1,提供了一键进行截断能测试得到合理的截断能测试的功能。做K点测试的目的是选取一个合适的KPOINTS设置,K点决定了VASP计算过程中倒空间的网格分隔点数,体系越大,合适的K点网格一般越小。
功能 3.2,提供了一键进行K点测试得到合理的K点设置的功能。
1.2 底层:API部分
API部分为有python基础的研究者提供了本程序通用功能的接口。通过库便捷调用相关功能,以实现自定义计算和高通量计算等功能。库名:VaspCZ.zzdlib,包含:Shell模块、File模块和Vasp模块,该库在安装本程序时自动安装,使用本库在python交互界面或.py文件中导入库即可:
1 import VaspCZ.zzdlib as zzd
API部分的Shell模块提供了便捷获取控制台输出的接口,可使用本模块实现程序部分的功能。File模块提供了便捷的文件处理接口。Vasp该模块提供了编写高级 Vasp计算辅助程序的底层接口。各模块详细的接口函数、传入参数、功能和返回值见API说明文档[14]。
2 应用实例
将通过三个实例说明VaspCZ软件部分的使用和输出结果,并通过两个代码实例说明如何使用API部分减少代码量,实现高通量计算。
2.1 软件部分实例
实例在安装本程序时自动获得,安装默认目录为:[HOME]/bin/ VaspCZ/examples。
例1:一键检查结构优化和静态计算结果
cd进入实例文件下的1.8文件夹,依次输入vcz-1-8,即可运行OS模块的功能 1.8:后检查并打印结果。
输出结果如图4所示,自动识别当前目录及所有子目录是否存在结构优化或静态计算,存在则判断是否完成,并输出当前的离子步和电子步;自动检查是否有警告或错误,如有则打印警告或错误类型及内容;自动检查各路径下计算的体系总能、步数、磁性、距离和原子最大受力。
例2:一键检查过渡态计算和振动分析结果
图 4 功能1.8:后检查并打印输出示例
Fig.4 Function 1.8: post check and print example
同理,在examples/2.6-2.9文件夹下调用功能2.8可以一键检查过渡态计算结果,调用功能2.9可以一键检查振动分析结果。该文件夹下的实例是fcc-Fe中Fe原子向其第一近邻空位扩散的过渡态计算(该计算中未考虑自旋极化)。
功能2.8检查过渡态计算结果如图5所示,自动判断当前目录及所有子目录中是否存在过渡态计算,判断该计算是否完成并输出;自动检查是否在警告或错误;而后打印当前的过渡态计算结果。第一列IMAGE0是初态,IMAGE4是末态,IMAGE1、2、3是中间态,第二列显示出中间态原子的最大受力,第三列是各态的体系总能,第四列是以初态能量为原点的相对能量,IMAGE2的能量差最高,该中间态即为鞍点态(或称为过渡态),因此fcc-Fe中Fe向其第一近邻空位扩散的势垒为1.39eV。
图 5 功能2.8:检查过渡态输出结果
Fig.5 Function 2.8: check the NEB results
2.9功能检查过渡态振动分析结果如图6所示,[True,True,False]表示是否分析了初态、鞍点态和末态的原子的振动。由于fcc-Fe自扩散的初态和末态是相同的,因此不必分析末态原子的振动。输出表明:扩散原子在初态中三个自由度上的尝试频率(Attempt Frequency)分别为:6.59THz、6.16THz和 4.99THz,而扩散原子在鞍点态中三个自由度上的尝试频率分别为:6.92 THz、4.67THz和5.82THz,其 中,第三个方向上由f/i标识表示出该方向的振动为虚频,是不稳定的。过渡态的有效频率(EffectiveFrequency)是所有原子在初态时的尝试频率之积与在过渡态时尝试频率之积的商,简化为扩散原子在初态时的尝试频率之积与在过渡态时尝试频率之积的商(不计虚频)[15],计算得该过渡态的有效频率为6.28 THz。
图 6 功能2.9:检查过渡态振动分析输出结果
Fig.6 Function 2.9: check the vibration results of transientstates
例3:过渡态收敛性
能量收敛但力不收敛是过渡态计算中很可能出现的收敛问题,不收敛有可能是初末态结构不合理所致,也可能是在计算中结构弛豫到不可预测的结果所致。进入examples文件夹,调用2.6功能可以对力不收敛的过渡态计算进行分析。
该示例的各中间态在各离子步下时的原子最大受力如图5所示。中间态共三个:01、02和03。由第2~4列看出,随着计算进行到第8离子步时,各中间态的原子最大受力减小到小于设置的收敛标准(0.01 eV∙A−1)以下,该过渡态计算收敛成功。某些力不收敛的计算表现为在第7步将收敛的时候,原子最大受力不降反升,最终计算到100步都没有收敛,此时较为合理的中间态结构不是100步时的结构,而是第7步的结构。使用功能2.6根据最大受力之和最小时所在的离子步判断哪一步的结构较为合理 ,而后取出该合理的结构进行进一步分析和计算。
图 7 功能2.6:检查未达到收敛标准的过渡态
Fig.7 Function 2.6: check the unconvergent NEB results
2.2 API部分实例
例4说明了如何调用VaspCZ.zzdlib库降低代码量完成自定义计算,例5说明了如何调用该库实现高通量计算。
例4:14行代码实现一键截断能测试程序
进行截断能测试的原理是在INCAR中分别设置截断能分为200 eV、250 eV、300 eV、… 700 eV,进行结构优化计算。一般来说截断能越高,体系总能越准确,但资源消耗也越大。随着截断能增加,体系能量相差小于0.001eV每原子即可确定合适的截断能。程序设计思路为:当前目录准备好VASP输入文件,每个截断能创建一个文件夹,拷贝输入文件到文件夹内,修改INCAR中的截断能设置,进行前检查并提交任务,计算结束用软件部分OS模块功能1.8后检查确定合适的截断能 。实现脚本为Vasp_ENCUT_Test. py,代码在VaspCZ安装目录/examples/API/example_1下,在命令行界面输入:python3 Vasp_ENCUT_Test.py即可运行代码实现本功能。
本例中,代码使用了API部分的File模块的2.2接口substituteData()函数和 Vasp模块的3.7接口check_and_qsub()函数,将近百行代码缩短到14行,大大简化了开发难度。
例5:批量提交结构优化计算任务
本例中计算任务为:对不同的溶质元素(Al、As、Bi、Co、Cr、Ga、Ge、Ir、Mo、Nb、Ni、P、Pb、Rh、Ru、Sb、Si、Sn、Tc、Ti、V、W、Zn、Cu、Mn、Ag、Au、Cd、Hf、Hg、In、Os、Pd、Pt、Sc、Ta、Tl、Zr、Re)进行高通量计算筛选,需要获得不同元素作为溶质时在bcc-Fe中空位辅助下进行扩散的扩散势垒,如 Wu 等[15]所述。程序设计思路为:通过NEB获得扩散势垒,需要执行如图3的过渡态一般过程:先结构优化,而后静态计算,最后过渡态计算。编写程序一键提交39种溶质元素初态和末态的结构优化共78个计算任务,而后使用软件部分NEB模块功能2.1和2.2一键进行下一步静态计算和过渡态计算。计算完成后使用功能2.8后检查一键获得全部扩散势垒。实现脚本为Vasp_Batch. p,代码在VaspCZ安装目录/examples/API/example_2下,在 命令行界面输入 :python3Vasp_Batch.py即可运行代码实现本功能。
本例中,使用了VaspCZ.zzdlib库实现高通量计算,十分方便。其他的高级功能实现见VaspCZ安装目录/sourcecode文件夹下。
3 程序可用性
本程序已在 github 免费开源,开源许可[16]。安装使用说明文档见网页[17]。所需 python 及环境安装教程见网页[18]。
4 结语
为了满足科研人员在使用VASP进行高通量计算时快速提交任务,批量检查结果的需求,我们设计了VaspCZ软件,该软件的设计在包含三个模块的同时,提供了LINUX环境下的用户界面,是使用VASP在超算平台进行计算的高效辅助程序。VaspCZ软件同时提供了API接口,为研究者提供了编写高级应用(如VASP高通量计算)更便捷的Python库。本程序使用简单、便捷,有望为使用VASP软件进行计算的广大计算材料研究者带来更好的体验。
参考文献
1 Kresse G, Hafner J. Abinitio molecular-dynamics forliquid-metals[J]. Physical Review B, 1993, 47(1): 558−561.
2 Kresse G, Hafner J. Ab-initio molecular-dynamics simulation of the liquid-metal amorphous-semiconductor transition in germanium[J]. Physical Review B, 1994, 49 (20): 14251−14269. DOI: 10.1103/physrevb.49.14251.
3 Kresse G, Furthmüller J. Efficient iterative schemes forab initiototal-energy calculations using a plane-wave basis set [J]. Physical Review B, 1996, 54(16): 11169−11186. DOI: 10.1103/physrevb.54.11169.
4 Group J. Transition State Tools for VASP [EB/OL]. 2019-10-10. http://theory.cm.utexas.edu/vtsttools/index.html.
5 Henkelman G, Jónsson H. Improved tangent estimate in the nudged elastic band method for finding minimum energy paths and saddle points[J]. The Journal ofChemical Physics, 2000, 113(22): 9978 − 9985. DOI: 10.1063/1.1323224.
6 Henkelman G, Uberuaga B P, Jónsson H. A climbing image nudged elastic band method for finding saddle points and minimum energy paths[J]. The Journal of Chemical Physics, 2000, 113(22): 9901 − 9904. DOI: 10.1063/1.1329672.
7 Henkelman G, Jónsson H. A dimer method for finding saddle points on high dimensional potential surfaces using only first derivatives[J]. The Journal of Chemical Physics,1999, 111(15): 7010−7022. DOI: 10.1063/1.480097.
8 Mathew K, Sundararaman R, Letchworth-Weaver K, et al. Implicit solvation model for density-functional study of nanocrystal surfaces and reaction pathways[J]. The Journal of Chemical Physics, 2014, 140(8): 084106. DOI: 10.1063/1.4865107.
9 Mathew K, Chaitanya Kolluru V S, et al. VASPsol: implicit solvation and electrolyte model for density functional theory[EB/OL]. 2019-10-10. https://github.com/henniggroup/VASPsol.
10 PyLab. VASPy manipulating VASP files with Python[EB/OL]. 2019-10-10. https://github.com/PytLab/VASPy.
11 Stoliaroff A, Jobic S, Latouche C. PyDEF 2.0: an easy to use post-treatment software for publishable charts featuring a graphical user interface[J]. Journal ofComputational Chemistry, 2018, 39(26): 2251 − 2261.DOI: 10.1002/jcc.25543.
12 Kundu S, Bhattacharjee S, Lee S C, et al. PASTA: python algorithms for searching transition stAtes[J]. Computer Physics Communications, 2018, 233: 261 − 268. DOI:10.1016/j.cpc.2018.06.026.
13 Rutter M J. C2x: a tool for visualisation and input preparation for Castep and other electronic structure codes[J]. Computer Physics Communications, 2018, 225: 174−179. DOI: 10.1016/j.cpc.2017.12.008.
14 Zhang Z D. The API documentation for VaspCZ [EB/OL]. 2019-10-10. https://github.com/zhangzhengde0225/VaspCZ/blob/master/docs/VaspCZ_python_API.md.
15 Wu H, Mayeshiba T, Morgan D. High-throughput abinitio dilute solute diffusion database[J]. Scientific Data, 2016, 3: 160054. DOI: 10.1038/sdata.2016.54.
16 Zhang Z D. The LICENSE for VaspCZ[EB/OL]. 2019-10-10. https://github. com/zhangzhengde0225/VaspCZ/blob/master/LICENSE.md.
17 Zhang Z D. The README for VaspCZ[EB/OL]. 2019-10-10. https://github.com/zhangzhengde0225/VaspCZ.
18 Zhang Z D. The install tutorial of python3[EB/OL]. 2019-10-10. https://github.com/zhangzhengde0225/VaspCZ/blob/master/docs/python3_install_tutorial.md.
扩展阅读
1.【科学代码】计算全同玻色体系的格林函数、密度分布和相变等热力学和基态性质的C++代码
编辑:黄琦
蔻享学术平台,国内领先的一站式科学资源共享平台,依托国内外一流科研院所、高等院校和企业的科研力量,聚焦前沿科学,以优化科研创新环境、传播和服务科学、促进学科交叉融合为宗旨,打造优质学术资源的共享数据平台。
版权说明:未经授权严禁任何形式的媒体转载和摘编,并且严禁转载至微信以外的平台!
原创源码文章首发于蔻享代码,仅代表开发者观点,不代表蔻享代码立场。
转载请在公众号后台留言。