Learn VASP The Hard Way (Ex51):影响功函数计算的因素(一)

2018-01-09



Ex51 影响功函数计算的因素(一)




前面我们通过Cu(111)表面作为例子,学会了功函数计算的基本步骤和可视化过程。那么功函数计算的时候,需要注意的事项有哪些呢?


1  INCAR中的参数


计算功函数的参数:LVHAR =.TRUE.

加入这一参数时,VASP只将静电势能写入LOCPOT文件中。

在早期的VASP版本中,静电势的写入是通过设置LVTOT这个参数的。

在5.2.12版本之后,如果你设置LVTOT= .TRUE. ,那么静电势,交换相关势都会写入到LVTOT中。由于我们计算功函数的时候,只需要静电势这一部分。所以,如果你用的是5.2.12版本之后的VASP,设置LVHAR= .TRUE. 即可。

如果有疑惑的话,不妨做个测试,分别设置LVTOT和LVHAR = .TRUE. 然后做个单点计算对比下结果。

设置LVTOT = .TRUE. 的结果如下:




设置LVHAR = .TRUE. 的结果如下:


 


我们对比下13-15Å范围内纵坐标的大小和平均值



很显然,两个参数对功函数的影响是不可忽略的。使用LVTOT这个参数,由于加入了交换相关势,曲线变得不再那么光滑,并且与LVHAR的结果有一定的偏差。所以,在计算功函数的时候,LVHAR这个参数一定要注意。

这一点也体现在VASP官网最新的ppt中,如下如:

(自己主动根据下图中的关键词找这个ppt,别问我要,也不要在大师兄群里求助浪费别人的时间。)




注意:


在 hand-on-session(老版本的官方教程)中,使用的是LVTOT这个参数。老版本就是过时的意思。希望大家的以新版本的计算为准。


 老版本中功函数的计算例子。




2 真空层的厚度及修改


真空层的厚度:指的是slab在z(或者c)方向上的长度减去表面原子在z方向的坐标。



Slab方向的长度,指的是POSCAR或者CONTCAR中第5行中的数值,上图箭头所指的地方。

那么我们怎么修改真空层的厚度呢?

由于slab模型中的原子部分就在那边乖乖地待着,我们只需改变slab中晶格常数在z或者c方向的长度即可。

例子1:上图中真空层的厚度为15 Å,我们需要一个20Å的slab模型,也就是在21.2994的基础上再加5个Å,等于26.2994。但这样做,对不对呢?

修改之后的POSCAR:



结构如下图:



我们发现slab的Cu原子部分之间好像也被拉长了。测量了一下两个Cu原子之间的距离为:2.956 Å。



修改之前为: 2.547Å。



所以:我们在前面的操作中,直接修改的z方向的数值,方法是错误的。

原因在于:前面的结构中坐标为分数坐标: Direct

我们修改完成之后,Cu原子在c方向的距离也会发生相应的改变。

所以,如果直接修改POSCAR或者CONTCAR改变真空层厚度的话,我们一定一定要先将它们转化为Cartesian 坐标。怎么转化呢?

方法1:用软件操作,比如p4vasp。



我们可以切换坐标通过鼠标点一下即可,然后保存成Cartesian 的POSCAR。

当然啦,也可以使用其他软件,比如VESTA等等,更好的选择,也欢迎留言补充。




方法2:使用脚本转换:

1)VASP官网在POSCAR的解释部分,提到了怎么进行坐标切换的公式。

链接如下:https://cms.mpi.univie.ac.at/vasp/vasp/POSCAR_file.html 





2)在此基础上,本人写了一个python的小脚本,可以实现Direct到Cartesian的转换。

运行如下:



图中流程的解释:

1)将一个计算中的CONTCAR复制过来;

2)使用head -n 10 看一下这个CONTCAR的文件结构。(10指的是前面10行,如果你想看前面5行,使用head -n 5 )

3)dire2cart.py CONTCAR  使用脚本进行转换,转换的对象为CONTCAR

4)转换完成后,Cartesian的保存为CONTCAR_C文件,

5)cat CONTCAR_C 这个命令查看转化后的内容。(当然也可以继续使用前面的head命令) 

本脚本下载链接: https://pan.baidu.com/s/1eRMJ7m6   密码:btsl




那么怎么把Cartesian转化为Direct呢?


1)  使用VASP,因为VASP的默认输出就是Direct坐标,算个单点就可以啦(笑话,别当真!)

2)  使用p4vasp等其他软件

3)  写个脚本倒着再做一遍,不过本人经常使用的是Cartesian坐标,懒得再写了,有兴趣的可以自己试试。




3 批量处理POSCAR


当我们完成转化后,就可以批量处理Cartesian坐标的POSCAR了。

1)先准备一个文件夹,名字为10,这个文件夹中有一个真空层为:10 Å的POSCAR,以及INCAR, KPOINTS, POTCAR, 任务脚本

2)运行命令:

for i in $(seq 12 2 36); do cp 10  $i ; sed -i "5s/16/$((6+$i))/g" $i/POSCAR; done

3)示例演示:



运行完这个命令后,会生成从12到36 的N个文件夹,每个文件夹之间间隔为2。我们通过下面这个命令查看所有文件夹中POSCAR中z方向的大小:

for i in *; do head -n 5 $i/POSCAR | tail -n 1 ; done



解释:


head -n 5 $i/POSCAR 获取POSCAAR前5行中的内容,

后面跟着一个 |tail -n 1, 这个命令的意思是,显示前面5行中的最后一行。

head 和tail 这两个命令之间用  |  (pipe)连在一起,表示将前面head命令的结果传递给后面的tail命令。

任务准备好之后,批量提交就可以了。(不会的话,请前面自己翻批量操作的介绍。)




4 扩展练习:

1)使用LVTOT和LVHAR测试一下,加深下印象;

2)使用不同的测试不同真空层对功函数的影响以遍下一节的学习




5 总结:

由于时间的关系,本节就先讲到这里了。下一节我们讲解一下真空层对计算功函数的影响,以及如何批量获取真空能级。



如有错误,疑问,或者建议,请发邮件联系大师兄: qli@bigbrosci.com

给大师兄留言:QQ号(2674006510)  微信: BigBroSci

加入大师兄QQ群:遇见大师兄 217821116 (先根据群公告修改群名片,若不修改,一经发现,立即踢出。

如果你有自己的科研经验和心得,也欢迎分享给大家!

此外,QQ群专注于科研思维的碰撞与科研生活的分享,本书中已经详细解释或者指明的易出错部分,不建议在群中继续咨询,请大家认真学习并主动积极地去思考和练习。


如果喜欢大师兄的文章,欢迎关注我们,转载,转发。

打赏一下,鼓励大师兄们写出更好的文章!

本网站由阿里云提供云计算及安全服务