计算工作流——Atomate2基本设置
Atomate2
安装过程官网 上介绍的已经非常详细了,唯一需要注意的是云数据库的设置。Atomate2
推荐采用云数据库来存储工作量计算结果,官网给出的例子为使用Mongdb Atlas
。但是由于一些原因,采用云数据库来储存数据,对于个人用户来说不是很友好,特别是国内用户:
- 由于“局域网”问题,许多集群可能连接不上
Mongdb Atlas
,或者速度比较慢,容易掉线; - 云数据库要花钱购买存储空间,
Mongdb Atlas
也只提供500M的免费空间,长期来看也是不够用的,不管你是学生还是社畜,咱自己总不能倒贴上班吧; - 小批量计算没有这个必要,个人用户自己计算的东西,体量实在太小,没必要纠结于按照官网教程来配置数据库,我们主要是使用
Atomate2
方便的工作流。
Note: 当然,如果你单位有这个条件搭建数据库,那自然是更好的QAQ。
采用本地读取数据,实际上官网上也给出了相应的介绍,只需要把对应的jobflow.yaml
文件设置成以下格式:
自此,假设你已经完成了pymatgen
的配置(pymatgen
的配置之前出过详细的教程,可查看往期内容),Atomate2
的配置,那么接下来就可以正式进入Atomate2
的实操了。
Atomate2可运行任务&工作流类型
下表为Atomate2
已经为你预制的计算类型,实际使用时只需要进行调用即可:
根据任务Type
不同,job
任务的调用为:
1 | from atomate2.vasp.jobs.core import * |
flow
任务的调用为:
1 | from atomate2.vasp.flows.core import * |
除此上述“基本”的工作流之外,Atomate2
还有相对复杂的工作流,例如:
1 | from atomate2.vasp.flows.adsorption import AdsorptionMaker |
这是一个计算吸附能的工作流,具体流程为:
The flow consists of the following steps:
- Optimize the molecule structure and calculate its static energy.
- Optimize the bulk structure.
- Generate a slab structure using the optimized bulk structure and calculate its static energy.
- Generate adsorption sites on the slab and calculate corresponding static energy.
- Calculate the adsorption energy by calculating the energy difference between the slab with adsorbed molecule and the sum of the slab without the adsorbed molecule and the molecule.
吸附能工作流相对来说比较复杂,涉及到多步计算以及结构变化操作,工作流中的每一个task
的参数设置都要格外小心,相对于上述“基本”工作流而言,属于“进阶”工作流,如果用好了的话会非常方便,当然也有它的使用局限性,我们后面再介绍。
工作流的组成
本小节是本篇内容的核心部分。
Atomate2
给出的工作流中,关键参数是已经提供了默认值的,例如之前给出得例子:
1 | from atomate2.vasp.flows.core import RelaxBandStructureMaker |
算Si
的能带态密度结构,直接按照上面的代码提交任务进行vasp
计算,计算完成后可以在当前路径下找到五个文件夹:
我们找到RelaxBandStructureMaker
的文档注释看一下:
实际上,RelaxBandStructureMaker
是调用了relax_maker
和band_structure_maker
,然后查看源代码可以发现:
工作流结构优化部分是调用了DoubleRelaxMaker
,能带结构分析调用了BandStructureMaker
,继续顺藤摸瓜:
可以发现,DoubleRelaxMaker
进行了两个结构优化任务,BandStructureMaker
进行了一个静态自洽计算,两个非自洽计算,这也是为什么计算完成后会有5个计算文件夹。
计算文件夹命名可以根据时间来区分,即自上而下分别是:第一次结构优化、第二次结构优化、静态自洽、uniform 非自洽计算、line 非自洽计算。
Note: 上述uniform 非自洽计算即态密度计算,line 非自洽计算才是能带计算结果。可以在bandstructure_type
中选择计算哪种或者都计算。
回到计算结果,Atomate2
计算完成后,对于顺利结束的任务,会自动打包为.gz
格式的文件;反之,如果任务有ERROR
或WARNING
之类,则不会打包文件。
上述计算中,结果优化与静态自洽计算都正常结束,后两步非自洽计算都出现了报错,报错内容可以在每个文件夹中custodian.json
文件中查看:
实际上这个error
就是INCAR
中NBANDS
设置有误,但是在实际计算中由于VASP
可以自行调整部分参数:
实际上计算也是可以正常结束的。
但是这不意味着在实际使用过程中可以信赖默认的参数,最稳妥以及保险的做法,还是要自定义输入参数!
自定义输入参数
通过查看Atomate2
的文档说明,实际上Atomate2
的输入参数也是直接调用的pymatgen
的各类sets
的默认输入,可以去pymatgen
源代码中查看yaml格式文件Link 。
还有一点需要注意,随着VASP
的更新,pymatgen
的sets
的默认参数也会更新。在Atomate2
里面,relax
操作调用的是pymatgen
中的MPSCANRelaxSet
的默认输入,其中部分INCAR
词条的设置只适用于VASP 6+
版本,如果你使用的还是VASP 5.4.4
版本的话,推荐在Atomate2
使用中还是使用MPRelaxSet
,下面会详细说明。
回到上述Si
单质计算能带态密度工作流的案例,下面将详细的说明在每一步里面如何合理的自定义输入参数:
- relax步骤
以RelaxMaker
为例,主要是需要区分input_set_generator
和write_input_set_kwargs
的区别,其余的设置都可以采用默认。
通俗的来讲,input_set_generator
控制输入文件的设置,可以约等于set
类,如MPRelaxSet
;而write_input_set_kwargs
可传入的参数更多,可以传input_set_generator
、structure
、output_path
等等,自由度更高。但是目前来说,只修改input_set_generator
就可以满足绝大多数使用场景了。
由于本人使用的是VASP 5.4.4
,这里重新调用了pymatgen
的MPRelaxSet
来生成输入
1 | # relax |
Note:relax
步骤只采取了一步优化,所以对应的最后输出的计算文件夹个数只有四个。
上面针对所有的计算task
的输入进行了自定义,然后就是进行组合:
1 | # bandstrucure_maker |
至此,整个工作流的输入实现了自定义。关于sets
类的参数设置可以参考本人之前写的pymatgen
教程。
完整代码如下:
1 | from atomate2.vasp.jobs.core import RelaxMaker, StaticMaker, NonSCFMaker |
运行方法:如果是个人电脑上运行,可以直接python relaxband.py
运行上述脚本;如果是在集群上,需要修改下提交脚本,下面以slurm
作业调度系统为例:
1 | !/bin/bash |
计算完成后,当前路径下会生成四个文件夹,分别是:结构优化、静态计算、态密度计算、能带计算:
工作流的参数自定义大致操作就是这样。学会举一反三,对于其他类型工作流的参数自定义设置也类似,想要进一步的去理解和个性化设置,鼓励各位还是要去看看文档和源代码。
工作流JSON文件
Atomate2
在工作流计算完成后,会生成doc
文档来记录部分计算结果,具体设置由jobflow.yaml
文件控制。需要说明的是,如果采用云数据库的话,除了doc
文档的话还会有data
文件来储存数据,如上述relaxbandstructure
工作流最后得到态密度和能带可以直接从data
里面读取,而不需要从VASP
的输出文件:OUTCAR
或vasprun.xml
文件中进行后处理。
但是,如果采用的是本地储存的话,实际上data
文件是为空的,本人也暂时不知道为啥,官方论坛上也暂时检索不到解决办法,具体报错内容为:WARNING Response.stored_data is not supported with local manager
。如果有大佬知道如何解决,可以分享一下。
但是无论如何,即使没有data
文件,大不了通过处理OUTCAR
或vasprun.xml
来得到相关数据,从结果上来没有什么区别。
这里简单介绍一下doc
文档,doc
文档的路径即jobflow.yaml
中给定的路径,文件格式为JSON
格式,官网上对文档的结构有详尽的介绍:Link 。这里不赘述。
主要是针对计算时的操作给出一点建议。如果我们有多个结构需要进行relaxbandstructure
工作流计算,按照上述代码结构批量提交了之后,我们最终得到的doc
文档是所有结构工作流的信息,也就是doc
文档不会去根据任务数量在jobflow.yaml
中定义的路径下针对不同的任务新建不同的doc
,而是在原有的doc
文档末尾添加新的信息,久而久之,doc
文档会非常冗长,可读性差。所以,建议把doc
文档保存在每个工作流目录下,只需要在上述代码中做如下修改:
1 | from atomate2.vasp.jobs.core import RelaxMaker, StaticMaker, NonSCFMaker |
最终可以在工作流文件夹下生成对应的doc
文档和data
数据文件夹,实现每个工作流的信息独立存储:
To be continued……
- 标题: 计算工作流——Atomate2基本设置
- 作者: 炫酷老司机
- 创建于 : 2024-11-08 00:00:00
- 更新于 : 2024-11-08 10:37:01
- 链接: https://andyhox.github.io/2024/11/08/二、Atomate2基本设置/
- 版权声明: 欢迎个人转载、使用、转贴等,但请获得作者同意且注明出处!