3.13 DFT 计算常见问题
3.13.1 不同体系不同任务的输入文件
任何一个计算任务开始之前,请务必确保你的POSCAR是你想要的,同时确认POTCAR中的元素对应的赝势没有弄错。对于POSCAR来说,元素是否正确,元素顺序和原子坐标信息是否对应等,并且其中没有原子重叠的情况。一般在vesta肉眼看不出原子是否重叠,可以用ovito查看RDF(径向分布函数)来判断是否有原子重叠,如果RDF在0附近有峰,说明有原子距离十分近。自行网上搜索“OVITO下载,OVITO查看RDF”。
目前为止,DFT计算中常见的主要基本计算内容都已经介绍。针对不同的结构,不同的任务,考虑各种效应时,都需要针对地设置INCAR中不同的参数,并配合相应的KPOINTS文件。要明确你的体系是否要考虑磁性、强关联效应(+U)、VDW、SOC等效应;如果需要考虑这其中一种或多种,则结构优化、静态计算、能带态密度计算、声子、AIMD等一系列计算都需要在INCAR中加上相应的参数。有时候SOC对声子谱影响很小,一般在算声子时不考虑SOC,因为SOC算声子的时候计算量和内存需求很大。但是磁性体系算声子时一定要考虑磁性(已经明确的磁性体系不考虑磁性时,原子间的力算得不对,声子频率自然也不对,其余如+U,VDW同理)。
特别强调,对于磁性体系,一般跑300K或者更高温度的AIMD时,是不需要开自旋参数的,其物理含义是:磁性是材料在低温下的状态,大部分磁性材料在300K以上变非磁了,因此不开自旋参数做MD模拟更合理。当然有很多磁性体系在更高温度仍能保持磁性,需要分情况讨论。
-
如果含有d/f电子,比如含过渡金属,尤其是V, Cr, Mn, Fe, Co, Ni以及稀土元素等,通常需要考虑是否有磁性,ISPIN=2以及MAGMOM参数;如果是它们的O/S化物,还可能需要进一步考虑强关联效应(+U),具体需要看相关体系的计算文献。
-
如果体系是层状材料,或者含小分子基团,则一般需要考虑VDW作用。
-
如果体系含有重元素,原子序数超过50的,一般还需要考虑SOC效应,尤其是对于能带结构和带隙的影响。
-
绝大部分计算时最常用的两种泛函是PBE和LDA。有时候某些性质如状态方程等也会用到如SCAN等高级一些的泛函,此外,一些分子体系也可能需要杂化泛函如B3LYP等。对于半导体和绝缘体,如果要获得体系准确的带隙,一般用杂化泛函,比如典型的HSE06;有些半导体体系也会用DFT+U的方法获得与实验匹配的带隙;不同泛函的使用,通过在INCAR中设置相应参数实现
https://www.vasp.at/wiki/index.php/List_of_hybrid_functionals
-
有时候PBE或者HSE算出来的能带最上方几条锯齿形太严重,可以通过在INCAR中提高NBANDS参数(见2.3.5)再重新做的band计算即可。
-
当研究稀土元素时,VASP提供两套赝势,一套是把f电子作为芯电子,一套是将其视为价电子。原则上需要用后者的赝势进行计算,但通常此时在计算中容易遇到SCF不收敛的问题,解决方法见2.3.5;有时候也会直接用不含f电子的赝势文件。
-
原子数越多的计算,一般建议使用更多的cpu核心数,通过修改任务提交脚本实现。过多使用核数,可能造成计算资源浪费,边际效用递减。个人经验,保持核数和原子数接近是比较有性价比的选择之一。
-
在所有计算中合理利用NCORE和KPAR参数,以加速计算。但有一些计算,如算bader或者ELF,或者DFPT计算声子时,可能不支持设置NCORE为非1(默认1)。
-
不同的计算任务用了不同的vasp版本,或者在不同的服务器算的,会影响结果吗?一般不会,只要确保赝势版本是5.4.4版本以后即可,且是PBE而非PW91(目前一般下载到的都是新版的PBE)。但为了安全起见,最好拿一个结构在不同服务器或者VASP版本下测试静态计算的能量和力的差别。
3.13.2 如何实现不同泛函?
常用的泛函类型是PBE和LDA。一般来说,计算过程中,对所有元素需要采样相同的泛函类型。通过以下命令查看当前POTCAR的泛函类型
grep LEXCH POTCAR
输出的内容是LEXCH = PE,表明当前POTCAR对应的是PBE类型,见VASPwiki官网:https://vasp.at/wiki/LEXCH
(1)如果要实现LDA泛函,有两种途径:
一是在PBE的POTCAR下,在INCAR中设置GGA=CA
二是直接用LDA的POTCAR
(2)PBEsol泛函。在PBE的POTCAR下,直接INCAR里面设置:
GGA = PS
其余泛函设置逻辑类似,见https://vasp.at/wiki/GGA
还有一种更高级的meta-GGA泛函,比如SCAN。
(3)SCAN泛函。在PBE的POTCAR下,直接INCAR里面设置下面两行:
METAGGA = SCAN
LASPH =.TRUE.
SCAN泛函的计算量比常规的PBE高几倍。
(4)r2SCAN泛函
METAGGA = R2SCAN
LASPH =.TRUE.
更多meta-GGA泛函见https://vasp.at/wiki/METAGGA
一般来说,需要根据体系进行测试。最直接的,询问你的导师或者指导你做科研的师兄师姐。
3.13.3 常见的报错以及解决思路
由于新手学VASP初期会遇到太多可能的报错,要在这里把所有可能遇到的报错讲清楚,不是这份手册的目的,因此这里只提供一些解决思路。一般来说,报错分两类,一类是服务器的问题,一类是vasp的问题;报错提示一般在计算任务结束后输出的err或者out后缀的文件中,或者在result/OUTCAR文件中。
对于服务器的问题:
-
VASP没安装成功,导致vasp没有开始运行。这一点可以从服务器提交任务后输出的err或者out文件中确认,或者查看vasp是否有顺利输出OUTCAR或者result文件,以及通过里面的内容查看vasp是否顺利开始运行。
-
任务使用的内存不足。当你看到VASP的任务没有成功完成(查看OUTCAR确认)且result或者OUTCAR中并没有显示ERROR信息,但是计算队列中任务已经结束时,这时候需要查看服务器输出的err或者out文件。一般可以增加核数,或者降低计算精度(如ECUT和k点数量)来测试是否是这个原因。
-
服务器某些节点故障,可能导致任务卡住。比如你发现长时间下VASP都没有更新输出文件,这时候可能是服务器的某些节点出问题,需要终止任务重新提交。一般可以通过ll -h查看上一次文件更新距离现在隔了多久。注意有些服务器的时钟不是北京时间,自行甄别。
-
服务器资源被抢占,导致某些电子步运行时间明显不合理,任务不会报错,会继续算,但是速度很慢。此时需要咨询服务器管理员。通过grep LOOP OUTCAR查看电子步运行时间。一般来说,每一次电子步运行时间不会相差一个量级。HSE是例外,因为它一开始做PBE计算,后面开始HSE计算。
对于VASP中可能的报错
-
一般来说VASP中的报错都会在result或者OUTCAR中输出,并且会给出相关的解决方法,仔细阅读里面的ERROR内容遵循官方的建议进行操作即可。并且,请务必确保你的操作无误,比如做NSCF计算时,提供的POSCAR和前面SCF计算的POSCAR要完全一样,并且确保CHGCAR不是空的。
-
如果VASP没有给出明确的原因,比如OUTCAR或者result中一些报错只给了一些数字代码信息,你很难判断问题在哪时,可以把报错复制到网上,用google或者edge搜索。或者向课题组其它成员咨询。有时候result文件中会看到电子步迭代到某一步时,后面出现ERR,但没有说详细原因。此时可以考虑更换ALGO参数。
-
有时候result中会输出一些WARNING信息。一般来说WARNING信息可以不用管,但建议你最好仔细阅读其中的内容。唯独有些情况下,WARNING会提示你NBANDS可能太少,尽管当前计算已经收敛,但还是建议你增加NBANDS,见教程2.3.5
-
VASP显示POSCAR的信息有问题,但实际检查发现写法没有错,并且没有原子重叠。此时可能是POSCAR里面的信息有一些乱码,肉眼看不出来,但是程度读取信息时出错。可以用vaspkit-411或者412功能转一次分数或直角坐标,再把新生成的POSCAR_REV文件作为新的POSCAR进行计算即可。新版vaspkit-151该功能的命令是413.
-
VASP计算绝大部分人最容易遇到的问题可能就是“自洽计算不收敛”,注意这里的“自洽计算”并不单单指某一次静态自洽计算,因为在很多任务中,都嵌套着很多个“自洽计算”。这种情况下,解决办法思路和“静态自洽计算不收敛”一样,除了本教程提供的例子之外,也建议多从网上或者师兄/师姐那里寻求思路。
3.13.4 一些有用的快捷命令
查看电子步时间 grep LOOP OUTCAR
查看离子步时间 grep LOOP+ OUTCAR
查看OUTCAR中压强信息 grep “in kB” OUTCAR
查看OUTCAR中原子受力信息 awk “/POSITION/,/total drift:/” OUTCAR
这里有些引号“”直接复制到Linux服务器终端上时可能会格式不对,重新手动输入即可。合理利用grep和awk命令可用快速查看特定文件中很多重要信息。可以在Linux的~/.bashrc文件中用alias命令给这些命令设置快捷字符,请自行网上学习alias命令的用法。
基于vaspkit可能常用到的功能
快速生成0.025密度下的KPOINTS echo -e “102 \n1 \n0.025” |vaspkit
快速寻找POSCAR结构的对称性:vaspkit的 601功能
寻找CONTCAR的对称性:vaspkit的 608功能
把当前结构的原子坐标转为分数/直角坐标 vaspkit 的411和412
寻找当前POSCAR结构的(惯用)晶胞或原胞 :vaspkit 的 602输出原胞;603输出晶胞。二者都是读取POSCAR文件。如果要对CONTCAR操作,需要先把CONTCAR命令为POSCAR,记得新建文件夹,不要覆盖原先的POSCAR。
注意,不同版本的vaspkit中某些命令模块可能有变化,该手册主要以1.4.0为准,部分命令会用到1.5.1版本。建议多查看vaspkit不同的功能模块,并多摸索以及从vaspkit官网了解其用法。