欢迎光临散文网 会员登陆 & 注册

VASP基于线性响应近似的方法计算DFT+U的U值(有脚本,三分钟学会)

2022-03-28 16:45 作者:秋名山的一只猪猪  | 我要投稿

  这里先介绍一些计算大神的想法,网址http://bbs.keinsci.com/thread-6299-1-1.html

具体内容:

一般有4种方式确定U:


1.凑实验带隙。

2.凑杂化泛函(如HSE)或者GW计算带隙。

3.线性响应方法。


如果体系只有一个Hubbard site,而且盒子也比较大的情况,大体流程应该是这样的:


    (1) 计算一次SCF,然后保存该任务的电荷密度。
    (2) 你需要指定响应势α,对于vasp设置LDAUTYPE=3的情形,原来的LDAUU就变成了α。
    (3) 做分别施加响应势α(比如-0.8 0.6...-0.2 0.2 ...0.8)的计算,每次计算需要读取无响应情形(α=0)下的电荷密度。
    (4) 收集施加响应势后的on site占据数,对于每个α势响应的计算结果都有两个部分,一个是基于α势响应但电荷密度未自洽的on site占据数n0,另一个是基于α势响应但电荷密度自洽后的on site占据数n。
    (5) 线性拟合α值和n0以及n的关系,你就可以得到U=X0^-1-X^-1=dα/dn0-dα/dn。


进一步做以下讨论:


    (1)如果体系有N个Hubbard site的话,就得依次计算第J个位点施加响应以及第I位点的占据数,此时响应系数dα/dn和dα/dn0都是NxN的矩阵,最后取对角化的U.
    (2)对于周期性计算,因为α势施加后也是周期性的,与计算声子谱类似,需要构建超胞来消除镜像上的影响,可以使用超胞外推的方式来使结果收敛,如PRB 71, 035105 (2005)所讨论。当然构建超胞后的Hubbard site的数目也会成倍增加,为了缩减计算量还需要找出等价的响应系数避免重复计算。
    (3)DFT直接响应出来的结果也未必正确,实际上随着U增加,响应得到的Uout应与实际输入的Uin呈现一定自洽的关系,PRL 97, 103001 (2006)表明经验上U较大的时候两者构成线性的关系。和木虫帖子里说的不同,该方法并不是原始构建超胞线性响应的平行版本,使用这种方法还是得构建超胞才能用于周期性体系。PRL 106, 118501 (2011)的SI中提供了一种别的方案,值得参考一下。这两种自洽方法必须要求程序同时在+U的情况下进行α势响应才能做,因此vasp也实现不了。

4  constrainted RPA


    响应系数和U之间的关系可以写成Dyson方程的形式,所以可以采用constrainted RPA的方法进行求解,不过我没有专门研究过这个,你可以PRB 74, 125106(2006),目前我不知道有哪些程序支持。

上面的不太懂也没关系,下面我们介绍今天主要讲的方法

基于线性响应近似的方法计算自洽Hubbard U值的方法

帖子原址:http://mp.weixin.qq.com/s?__biz=MzIwNTQzMTk5Mw==&mid=2247484324&idx=1&sn=bfe1474f2b332abbab95a9d40ff1e9d4&chksm=9731b672a0463f64207b4cc6c1cb65311882fb45edd82c917d346aeede579f4945be8e055f06&mpshare=1&scene=23&srcid=0328xEWuhZa5Hk7KnMj3lCd0&sharer_sharetime=1648453222322&sharer_shareid=44721a85a1edb3657384cdcc5f1c5fe4#rd

要使用到知乎和微信公众号苏理士多云分享的脚本,具体也是将VASP官方的计算方法进行了集成,省去了对POTCAR、INCAR的修改,一键直接进行U值的计算并进行线性拟合。

具体操作如下:

1. 准备必要文件

这里必要的文件是:POSCAR (你也可以自己生成KPOINTS、POTCAR、INCAR文件,也可以通过本脚本自动生成,注意自动生成INCAR后需要手动设置其中的MAGMOM值)

2. 在程序中输入本机运行VASP的代码

运行脚本后输入0

再输入0后,输入服务器运行VASP的代码。

随后即生成run.wsy文件,如果不想通过程序生成,也可事先自己写好run.wsy文件。(PS:像在超算上计算的时候,可以把作业提交脚本复制成run.wsy就可以用了,但貌似是在节点以外运行的。。。虽然是这样,但勉强可以算)


3. 计算DFT基态

运行程序后后输入1,这里会要求你输入需要计算U值原子在POSCAR中的位置以及U值加入的轨道。

例如像我算的是锰原子,就选择2,给d轨道加U,之后程序自动创建文件,调用vaspkit生成新的POTCAR文件,并调VASP进行计算 (此时会生成input.wsy文件,不要修改)


4. 进行+U的自洽与非自洽计算

运行脚本后输入2,程序自动调VASP进行自洽与非自洽计算。

5. 计算U值

上述计算全部完成之后,运行脚本后输入3,计算U值,并生成output.wsy文件

打开output.wsy,最后一行即为该原子所对应的U值。

也可如VASP网中通过上述的第一列和最后两列数据进行线性拟合得到。

(由于赝势选取的不同,对于NiO计算结果与官网有些许差别)

官网链接:https://www.vasp.at/wiki/index.php/Calculate_U_for_LSDA%2BU

官网给出的结果:


这是脚本初代版本,后续还会加入新功能,大家喜欢的话可以关注一下。

最新程序下载地址:https://github.com/Code-WSY/Code-WSY

up在使用过程中遇到了两个问题,给大家讲一下

  1.在INCAR中不要设置ISTART和ICHARG参数,设置了之后,脚本无法在后续计算中对其修改,进而不能完成自洽和非自洽计算。如果不会写INCAR的话,就让它自动生成。它生成的脚本和官网例子是一样的。

  2.用不同的K点会得到不同的U值结果,我用111K点和448K点算β-MnO2晶胞给出的U结果是不同的

111K点结果
448K点

  K采用448算出来的算是比较接近的,K点的影响会有多大呢,我也不清楚,希望评论区有大神可以指点一下。

    3.在VASPKIT群里咨询过一个问题,“大家看下这个帖子,脚本里的LDYUTYPE=3这句是不是写错了”,因为VASP说明书给出的选项只有1,2,4. 然后大神给出的回答是“没问题。3是内置线性响应算U值用的,官网教程也是3。算是一个小trick ”.

  同样的,除了线性响应的方法计算U值,还可以在文献中查找与自己相关体系采用的U值,其中,up主计算老司机有一个视频分享了常见加U原子的U值视频,详细内容可以看他的视频DFT+U的U值哪里来

    4.最后想说,无论是哪种方法得到的U值,都要对你关注的性能能够很好的描述才能去使用

     整理不易,希望大家可以对我的工作关注,点赞,投币,您的关注是我不懈更新的动力!!!

VASP基于线性响应近似的方法计算DFT+U的U值(有脚本,三分钟学会)的评论 (共 条)

分享到微博请遵守国家法律