计算化学公社

 找回密码 Forget password
 注册 Register
Views: 88967|回复 Reply: 57
打印 Print 上一主题 Last thread 下一主题 Next thread

[其它程序] 【更新1.1版本】二维材料的二维能带图绘制以及有效质量计算软件band2d.py

  [复制链接 Copy URL]

908

帖子

37

威望

5435

eV
积分
7083

Level 6 (一方通行)

本帖最后由 ggdh 于 2021-8-22 20:24 编辑

听说2D材料最近要火?我博后期间做这个写了个程序。关键是能够产生2D能带图,1维材料只能产生1维能带图,2维材料可以产生2维能带和1维能带。看2维能带能够直观掌握整个布里渊区的信息。而3维材料的3维能带图估计只有用VR跑到布里渊区里面才能看个contour版的3D能带图。。。现在把这个脚本分享出来,亲生的脚本希望能产生更多价值。

需求:
vasp
python 3.8.3
mayavi 4.7.3

1.1版新特性
1.1版主要增加了一些风格的控制
1. --shift 选项位移能带,--shift homo/fermi/0.04 分别是把vbm位移到0,fermi位移到0,以及位移0.04eV
2. --style3d 选项可以设置2维能带图的一些风格,包括是否显示边框,坐标轴,填色风格,尺寸大小等等(具体用法见帮助)
3. --rangeC 选项设置contour图的色彩范围(具体用法见帮助)
4. --contour 选项设置二维contour填色图等高线的数量和位置(具体用法见帮助)
5. -j pc 配合 --range3d 可以显示某个能带的contour填色图

主要功能:
对于二维材料:
a.计算1维能带结构,并绘制如下所示的图(左边是能带图,右边是K路径和布里渊区示意图):


b.计算2维能带结构,并绘制如下所示的图(这里只绘制了top of valence band):



c.计算有效质量,并在能带平面图上标出方向(分别是空穴和电子的有效质量):



安装说明:
先安装anaconda作为python环境
https://www.continuum.io/downloads
这里装python3.8.3版本的,可以装windows或者linux版本
安装好之后再linux Termial 或者是windows cmd 里面输入:
pip install mayavi
pip install PyQt5

使用说明:
1. 准备工作
用vasp优化好你的二维结构,或者是拿优化好的结构算个单点,例子输入文件如下,注意你的slab必须在xy平面,而z方向是真空层,同时晶体的ab轴在xy平面内,c轴和z平行:

INCAR文件如下:
PREC=Normal
ISMEAR=0
SIGMA=0.05
LREAL=AUTO
NSW=100
IBRION=2
ISIF=4

KPOINT文件如下:
0
Gamma
4 4 1
计算完成后产生的OUTCAR IBZKPT文件会被本程序读取。


2.检查当前情况以及设置条件
将band2d.py 拷贝到刚才vasp计算的文件夹下,运行
python band2d.py -j c
或者在linux 下把band2d.py 放到PATH路径下,直接运行
band2d.py -j c
对当前目录进行检查,并产生输出如下(红色是我的说明文字,不是输出的部分)
10 k points found in OUTCAR  #在OUTCAR中找到10个K点
no mesh_band data found #没有找到网格数据,网格数据是用来产生2D能带的
no mass_points data found #没有找到质量数据,质量数据是用来计算有效质量的
no points detected for peripheral band #没有找到外周能带数据点,外周能带就是布里渊区的边
no points detected for radical band #没有找到径向能带数据点,径向能带就是从Gamma点到布里渊区边缘的能带
0 k points found in 2D data #2维数据里面找到了0个K点,2维数据就是上面的mesh,mass,peripheral,radical点之和,因为这一步还没有计算,所以没有找到任何点。
Using eigen values from OUTCAR to determine the following infor #从OUTCAR里面的K点数据来计算下表中的数据
Gap       HOMO      LUMO      H_width   L_width   H_kpt               L_kpt
1.1188    -4.9184   -3.7996   0.1497    0.2720    0.0,0.0             0.0,0.0 #分别是能带,HOMO,LUMO,价带宽度,导带宽度,价带顶点坐标,导带底坐标(这两个坐标程序会自动选取价带顶和导带底,也可以手动选。有可能2d能带算了以后会找到一个更高的价带顶,那么就需要重新算有效质量)
step size for h, e are 0.060, 0.035 with delte E 0.020000 #计算有效质量的步长,因为价带宽度小一些(平滑一些),所以改变相同的能量(0.02)所需要的步长就大一些,用-s选项设置能量变化
angle between a b is 59.9979
length of a, b is 0.4273, 0.4273
hex reciprocal lattice detected with precision 1 #根据ab和夹角检测到是一个正六变形的晶胞, 这里对称性高的话,下面所需要算的k点数量也少,可以用-p选项提高precision 来强制降低对称性
number of kpts along a is 8 with step size (-G) of 0.050000 #根据间隔是0.05计算出沿着a轴要算8个k点, 这部分k数量点包括了peripheral 和 radical,决定了1维能带是否平滑,用-G选项改变间隔
number of grid pt in x is 4 with step size (-g) of 0.050000 #根据间隔是0.05 x和y方向需要各算4个k点, 这部分k数量点包括了mesh,决定了2维能带是否平滑,用-g选项改变间隔
number of grid pt in y is 4 with step size (-g) of 0.050000

另外还可以产生一个图片如下,其中的小黑点表明了mesh k点的密集度


3.产生输入文件
python band2d.py -j i
然后程序会创建新的文件夹,复制WAVECAR和CHGCAR,产生INCAR,KPOINTS
完成后会发现当面目录下多了一串 2D开头的文件夹



4.计算
cd到每个2D开头的目录下,运行vasp计算。这里我是用脚本批量提交到服务器上算。输入vasps 2D* 就行。但是每个服务器的作业调度系统不一样。所以这个脚本要根据具体的服务器来编写。

5.产生结果文件
算完以后将所有的文件拷贝到本地机器上,一般我是把CHGCAR和WAVECAR 删了再拷。
for i in 2D*
do
rm $i/WAVECAR
rm $i/CHGCAR
done
然后在当前目录(当前目录包括了所有2D开头的文件夹以及之前单点/优化计算的结果)下运行
python band2d.py -j p
在终端会产生下面的输出:
10 k points found in OUTCAR
Warning! Number of points (12) in mesh line 0 not equal to 0.
Change the grid_np_x to 12 now
12 X 4 points detected for mesh grid
25 X 2 points detected for eff. mass grid
7 points detected for peripheral band
11 13 points detected for radical band
129 k points found in 2D data #可以看到这里找到了很多新算的k点
Using 2D data to determine the following infor #采用2Dk点来决定下面的属性,可以看到导带和价带都变宽了,这是布里渊区取样更全导致。
Gap       HOMO      LUMO      H_width   L_width   H_kpt               L_kpt
1.1188    -4.9262   -3.8074   0.2324    0.4061    0.0,0.0             0.0,0.0
step size for h, e are 0.040, 0.025 with delte E 0.020000
angle between a b is 59.9979
length of a, b is 0.4273, 0.4273
hex reciprocal lattice detected with precision 1
number of kpts along a is 8 with step size (-G) of 0.050000
number of grid pt in x is 12 with step size (-g) of 0.050000
number of grid pt in y is 4 with step size (-g) of 0.050000
12 X 4 points detected for mesh grid
25 X 2 points detected for eff. mass grid
7 points detected for peripheral band
11 13 points detected for radical band
然后会依次产生开头出现的那四个图。调整大小后保存就可以了。另外会产生如下的数据文件
DATA_BAND1D.out  绘制1维能带的数据文件(包含所有的能带)
DATA_BAND2D.out  绘制2维能带的数据文件(只包含当前绘制的能带,在--range3d里面设置)
DATA_MASS_K.out  用来计算有效质量的K点能量数据
DATA_MESH_K.out  用来产生2维能带的K点能量数据
DATA_PERI_K.out  用来产生1维外周能带的K点能量数据(外周能带是指那些不经过Γ点的K路径)
DATA_RADI_K.out 用来产生1维径向能带的K点能量数据(径向能带是指那些经过Γ点的K路径)
注意:
使用band2d.py -h 查看可用的选项和帮助
下面举一个使用例子
band2d.py -j p -g 0.03,0.03 -G 0.04 --range2d h5,l2 --range3d h2,h=-5,0  -p  0120340
说明:-j p 运行处理数据的任务,p for process
-g 0.03,0.03 对于2维能带,在x,y方向上的取样间隔是0.03
-G 0.04 对于1维能带,取样间隔是 0.04 (单位都是angstrom^-1)
--range2d h5,l2对于1维能带,绘制HOMO-5 到 LUMO+5 的能带
--range3d h2,h=-5,0 对于2维能带,绘制HOMO-2 和HOMO的能带,然后把z坐标的范围改成-5到0eV
-m h1,h,e 计算HOMO-1,HOMO,LUMO 三条能带的有效质量
-p 0120340 对于1维能带,k点的路径是从Γ点(0)出发,到外周的第一个点(1),然后逆时针转到外周第二个点(2),然后回到Γ,然后到外周的第三个点(3)。。。

遇到bug,或者有使用问题,或者有新功能建议在本帖留言或者加本人QQ:32589927。










band2d.py

70.61 KB, 下载次数 Times of downloads: 274

band2d_1.1.py

76.18 KB, 下载次数 Times of downloads: 108

评分 Rate

参与人数
Participants 35
威望 +2 eV +130 收起 理由
Reason
yangqy + 5 牛!
kwj + 4 精品内容
oucheng + 3 谢谢
短耳鸮 + 3 谢谢
liuzl + 3 牛!
exthmixer + 5 谢谢
Yan_njit + 5 好物!
ljc050512 + 5 好物!
maple367 + 3 牛!
Para1lel + 5 好物!
ymeng + 5 牛!
yonghui + 4 精品内容
Sinner + 3 精品内容
Penson + 3 好物!
zjxitcc + 3 赞!
czp2019526 + 1 谢谢
啦啦黑还黑 + 5 谢谢
吴旭明 + 3 我很赞同
qishiyy + 2 谢谢
自有色彩 + 3 好物!

查看全部评分 View all ratings

1

帖子

0

威望

49

eV
积分
50

Level 2 能力者

58#
发表于 Post on 2024-12-25 16:55:05 | 只看该作者 Only view this author
请问老师,我进行第一步的时候出现这样的情况应该如何解决

202412251654422475..png (103.53 KB, 下载次数 Times of downloads: 50)

202412251654422475..png

908

帖子

37

威望

5435

eV
积分
7083

Level 6 (一方通行)

57#
 楼主 Author| 发表于 Post on 2024-12-3 21:37:39 | 只看该作者 Only view this author
oucheng 发表于 2024-11-1 01:03
楼主请问这个提示如何应对呢,我用-s尝试了不同的值还是会有

Warning! The difference between ELECTRON ...

不用管。这是个警告而已
如果不同的-s值差别不大,随便取一个就行,保持你研究的多个体系-s值统一就行

2

帖子

0

威望

19

eV
积分
21

Level 1 能力者

56#
发表于 Post on 2024-12-3 11:59:26 | 只看该作者 Only view this author
感觉会用到,楼主牛皮

4

帖子

0

威望

80

eV
积分
84

Level 2 能力者

55#
发表于 Post on 2024-11-1 01:03:23 | 只看该作者 Only view this author
楼主请问这个提示如何应对呢,我用-s尝试了不同的值还是会有

Warning! The difference between ELECTRON mass calculated by h and 2h is larger than 20% (m1:60.60%, m2:60.04%). You may want to try different delta E(current value is 0.0400 )

4

帖子

0

威望

99

eV
积分
103

Level 2 能力者

54#
发表于 Post on 2024-5-31 00:53:30 | 只看该作者 Only view this author
00gi 发表于 2024-5-31 00:31
楼主您好 我在计算最后一步的时候 出现了下面的问题 没有出来最后的彩图 麻烦楼主帮我看看是什么原因 十分 ...

感谢 已经解决啦 环境重新配置了一下~

4

帖子

0

威望

99

eV
积分
103

Level 2 能力者

53#
发表于 Post on 2024-5-31 00:31:44 | 只看该作者 Only view this author
本帖最后由 00gi 于 2024-5-31 00:49 编辑

楼主您好 我在计算最后一步的时候 出现了下面的问题 没有出来最后的彩图 麻烦楼主帮我看看是什么原因 十分感谢

4

帖子

0

威望

80

eV
积分
84

Level 2 能力者

52#
发表于 Post on 2023-6-14 11:41:39 | 只看该作者 Only view this author
ggdh 发表于 2023-6-13 13:24
估计是因为数值误差,导致这个地方的能量比k点还要低。
你可以手动改一下输出OUTCAR,把这个点的能量改 ...

好像明白了,一开始SCF的k点文件不包含K点,算完2D能带才找到这个最低点,电子的有效质量是按一开始的SCF结果来的,所以并不包含K点,有效质量要重算

4

帖子

0

威望

80

eV
积分
84

Level 2 能力者

51#
发表于 Post on 2023-6-14 10:50:09 | 只看该作者 Only view this author
ggdh 发表于 2023-6-13 13:24
估计是因为数值误差,导致这个地方的能量比k点还要低。
你可以手动改一下输出OUTCAR,把这个点的能量改 ...

谢谢您的回复,请问这个点的坐标应该是-j p过程中的L_kpt坐标吗?我这里并不是,我的L_kpt是-K点的坐标(0.6667,-0.3333),然后我现在大概从图上判断这个点的坐标(0.333~0.5,<0.3333)

908

帖子

37

威望

5435

eV
积分
7083

Level 6 (一方通行)

50#
 楼主 Author| 发表于 Post on 2023-6-13 13:24:55 | 只看该作者 Only view this author
oucheng 发表于 2023-6-12 16:39
请问一下,我的导带极小值是在K点的,但是有效质量m1和m2的交点为什么不在K点呢?尝试用-m 修改位置但是还 ...

估计是因为数值误差,导致这个地方的能量比k点还要低。
你可以手动改一下输出OUTCAR,把这个点的能量改高一点。从而使得band2d找到正确的CBM点

4

帖子

0

威望

80

eV
积分
84

Level 2 能力者

49#
发表于 Post on 2023-6-12 16:39:42 | 只看该作者 Only view this author
请问一下,我的导带极小值是在K点的,但是有效质量m1和m2的交点为什么不在K点呢?尝试用-m 修改位置但是还是同样的结果

202306121637398086..png (213.57 KB, 下载次数 Times of downloads: 77)

202306121637398086..png

4

帖子

0

威望

21

eV
积分
25

Level 2 能力者

48#
发表于 Post on 2021-11-17 07:42:11 | 只看该作者 Only view this author
ggdh 发表于 2021-11-15 11:52
你看看你是不是用了4面体的k点,不支持使用4面体k点

嗯嗯,不换了K点,计算就没问题了,大写的赞&#128077;!

4

帖子

0

威望

21

eV
积分
25

Level 2 能力者

47#
发表于 Post on 2021-11-17 07:41:15 | 只看该作者 Only view this author
ggdh 发表于 2021-11-15 11:52
你看看你是不是用了4面体的k点,不支持使用4面体k点

谢谢回复。

908

帖子

37

威望

5435

eV
积分
7083

Level 6 (一方通行)

46#
 楼主 Author| 发表于 Post on 2021-11-15 11:52:12 | 只看该作者 Only view this author
尾巴上 发表于 2021-11-15 04:31
请问2D_mesh_* 中的KPOINTS需要改吗?  我执行2D_mesh_*中的vasp计算都中止了,错误信息是Error reading KP ...

你看看你是不是用了4面体的k点,不支持使用4面体k点

4

帖子

0

威望

21

eV
积分
25

Level 2 能力者

45#
发表于 Post on 2021-11-15 04:32:29 | 只看该作者 Only view this author
maxwong2018 发表于 2018-4-28 22:37
**** 作者被禁止或删除 内容自动屏蔽 ****

请问你的问题解决了吗?我也遇到了这个问题

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2025-8-17 13:04 , Processed in 0.334880 second(s), 31 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list