Earth Science分享 http://blog.sciencenet.cn/u/hongyesies Learning

博文

[转载]Bader电荷计算

已有 2858 次阅读 2020-10-6 22:02 |个人分类:VASP|系统分类:科研笔记| vasp |文章来源:转载

本文来源:

https://www.bigbrosci.com/2011/12/23/A07/

https://www.bigbrosci.com/2011/12/24/A08/

转载说明:本文转载自大师兄科研网,版权属于李强博士。

最近,群里有人在问Bader电荷分析的问题,在这里,将Bader分析的基本流程,以及本人写的一个后处理的脚本分享一下,希望大家不要再纠缠这个问题了。大家务必认真浏览参考网址的内容。http://theory.cm.utexas.edu/henkelman/code/bader/

最近,群里有人在问Bader电荷分析的问题,在这里,将Bader分析的基本流程,以及本人写的一个后处理的脚本分享一下,希望大家不要再纠缠这个问题了。大家务必认真浏览参考网址的内容。http://theory.cm.utexas.edu/henkelman/code/bader/

计算流程

优化自己的体系结构:

使用VASP计算,获得稳定的结构,过程略过。

Bader电荷分析的计算部分:

1) 将前面优化完的CONTCAR 重命名为POSCAR

2) 设置INCAR:

1
2
3
4
LAECHG=.TRUE. 
LCHARG = .TRUE.
NSW = 0
IBRION = -1 ## 前面有了NSW = 0, 这个也可以不设置

3) KPOINTS可以用之前优化计算的,也可设置的稍微大些。

4) WAVECARCHGCAR等有的话就读一下(在第二步加上读它们的相关参数)。没有的话就不读了,这个无关紧要,不要纠结。但是,如果你的体系很难收敛的时候,建议保留上一步的WAVECAR以便节省计算时间,如果没有的话电子步数适当增加(NELM=200) 。

获取VTST的脚本

1)下载网址:

2)将前面下载的内容解压,然后复制到~/bin 文件夹中。

3)如果后面运行的时候遇到权限问题:执行:

chmod u+x ~/bin/chgsum.pl

chmod u+x ~/bin/bader

使用VTST的脚本处理结果

1) 进入计算的目录下面

2) chgsum.pl AECCAR0 AECCAR2

注意: AECCAR0AECCAR2 是由LAECHG=.TRUE.这个参数控制输出的。如果你计算没有得到这两个文件,仔细检查一下这个参数。

运行这个命令:你会得到类似这样的输出结果:

结束后,你会得到 CHGCAR_sum 这个文件。

3) bader CHGCAR -ref CHGCAR_sum

注意:

i) 图中大师兄不小心把CHGCAR删掉了…所以没办法呈现完整的流程。放图上去只是想告诉大家,命令是正确的。ii) 如果你在服务器上运行,得到了这样的错误。

1
2
FATAL:kernel too old
Segmentationfault

那么,你需要将计算复制到本地电脑上(由于CHGCAR等文件很大,该过程比较蛋疼,需要忍一会儿),然后用自己的电脑运行这个命令。(前提是电脑有Linux系统,没有的话,我也没办法。)

iii) 命令结束后,你会得到一些相应输出的文件:ACF.dat, BCF.dat, AVF.dat…

iv) 本人一般查看的是ACF.dat文件:(以SiH[Math Processing Error]为例)

如下图:

ACF.dat文件中,第一列的数字对应的是POSCAR中的原子顺序。

每个原子的电荷对应的是CHARGE那一列。注意,该列中的电荷是该原子价层电子中的电子总数。如果你想要知道这个原子是带正电或者负电荷,需要减去POTCAR中的电子数目。

图中Si为第一个原子:有1.58个电子 ,减去POTCAR中的4,为 -2.42。

这表明Si失去了电子。2.42个电子分别转移到了4个H上面。

每个H有[Math Processing Error] 个电子。(对比下4个H中的电子)

得到任意原子的电荷信息

如果你对自己体系中的某一个或者某些特定的原子感兴趣,又不想每次打开ACF.dat文件或者已经导出来的excel文件。那么可以通过使用下面这个脚本提取相关的电荷信息。

1) 脚本运行命令如下图:get-charge.py Natom Natom 是你感兴趣的原子序数

注意:

A) 目前只支持一个,如果想查看多个,可以运行该命令若干次,或者使用一个for 循环即可:

1
for i in 1 2 3 4 5 ; do get-charge.py $i ; done

B) 使用该命令前,请务必确认自己所关注的原子在POSCAR中的序数,如果不知道,可以通过p4vasp查看。

2) 脚本内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/env python
import sys

script, Natom = sys.argv

# Natom is the atom number when run ths script
# Convert Natom into integer

Natom = int(Natom)

# Creat an empty list
charge_list = []

# read ACF.dat file and add all lines with charges into the charge_list
# These lines are started with atom numbers: line.rstrip().split()[0]
# line.rstrip() : '    19     -1.2426      6.3529      5.9723      9.9947      1.0601     10.4547'
# line.rstrip().split(): '19', '-1.2426', '6.3529', '5.9723', '9.9947', '1.0601', '10.4547'

with open ('ACF.dat', 'r') as infile:
   lines = infile.readlines()
   for line in lines:
       if line.rstrip().split()[0].isdigit(): # == True: # escape the first 2 and last 4 lines  
           charge_list.append(line.rstrip())    

# Print the charge information of Natom
for i in  charge_list:
# i.split() is used to split the whole line into different columns
   if Natom == int(i.split()[0]):
# The 5th data in each line is the charge value, so we print i.split()[4]  
       print Natom, i.split()[4]

原理:

ACF.dat中的信息以行的形式保存到一个列表里面。

然后根据用户输入的原子序数,调出来对应行中的电荷信息。

扩展练习

1) 浏览VTST官网Bader电荷分析的有关内容。

2) 找几个简单的气相分子或者自己的体系练练手。

总结

本节简单介绍了一下Bader电荷分析的计算流程,电荷分析的过程,以及本人自己写的一个小脚本。大家如果还有其他遇到的问题,可以在本文后面留言。我会持续更新相关的问题解答。



A07 Bader电荷计算 _ Learn VASP The Hard Way.pdf





-------------------------------------------------------------------------------------------------

本节我们Bader电荷分析的常见问题做个总结。

VTST的网站

Henkelman 课题组主页:

http://theory.cm.utexas.edu/henkelman/

Bader计算的链接:

http://theory.cm.utexas.edu/henkelman/code/bader/

VTST脚本链接:

http://theory.cm.utexas.edu/vtsttools/

常见问题:

电荷数字保留位数:

Bader电荷分析只是定性的辅助工具,得到的结果肯定也是定性的。大致分析原子上的带电情况即可,不要去较真小数点后多少位,一般来说小数点后两位就足够了。

ACF.dat 文件怎么看?

ACF.dat 中的CHARGE那一列,对应的是每个原子上总的价电子数目。

划重点: 1)总的 2)价电子数目

如何判断原子的带电情况?

你需要用CHARGE那列的数值去减去该原子对应的POTCAR中的价电子数目。

怎么才能得到POTCAR中原子的价电子数目呢?

打开POTCAR,查找关键词:ZVAL,后面对应的就是价电子数目,更方便点:

grep ZVAL POTCAR

划重点:不要以为自己元素周期表倒背如流就可以随便设定原子的价电子数目。

POTCAR中原子的价电子数目有些和周期表是一样的,比如H。

有些差别是很大的。比如:Europium [Xe]4f76s2, Lanshipunvboshanyougatedihuoerdiuyilu 中的you。

You有9个价电子,但POTCAR中有17个。

减完之后怎么分析?

如果一个原子POTCAR中的电子数为5.

1) ACF.dat中该原子对应的CHARGE为6.2,6.2 - 5 = 1.2, 这说明该原子得到了1.2个电子。虽然是+1.2,但它的化合价是-1.2价。

2) ACF.dat中该原子对应的CHARGE 为 4.3, 4.3 – 5 = -0.7, 说明该原子失去了0.7个电子,虽然是负值,但它的化合价是 + 0.7 价。

注意:这里我们说的化合价,是基于Bader电荷分析得到的。由于Bader电荷分析是一个经验性的定性分析工具,这些化合价的值只能用来参考判断体系中电子的转移情况。

大家千万不要把这里的化合价跟我们中学所学到的化合价的概念混淆了。因为大部分的情况下,Bader电荷分析出来的化合价与我们在教科书里面所学到的化合价还是有区别的。


师兄,前面扯了那多么,直接用POTCAR中的价电子数减去CHARGE对应的不就更直接了?

是的,你很聪明:对应前面的例子:

  • 1) 5 –6.2 = -1.2 说明该原子是-1.2价,得到了1.2个电子,

  • 2) 5 - 4.3 = 0.7 说明该原子是 +0.7 价,失去了0.7个电子。

所以得失电子和化学价是反着的。这点你能把握住,就会分析了。

总结:

Bader电荷分析并不神秘,你需要做的有两点:

1) 去看VTST的官网,知道怎么去算;
2) 怎么通过得失电子判断原子的带电情况。ACF.dat中的CHARGE列,以及POTCAR中的价电子数。




http://wap.sciencenet.cn/blog-695784-1253418.html

上一篇:[转载]第一性原理计算资源(免费和收费系列集锦)
下一篇:[转载]VASP计算稀土元素要点归纳

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2021-4-11 05:58

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部