Ex50 影响功函数计算的因素(一)
前面我们通过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命令)
领取专属 10元无门槛券
私享最新 技术干货