使用Python脚本获取VASP能带计算数据

您所在的位置:网站首页 铁岭开原扫黑除恶最新名单公布 使用Python脚本获取VASP能带计算数据

使用Python脚本获取VASP能带计算数据

2022-11-16 16:16| 来源: 网络整理| 查看: 265

最近刚写了一份提取VASP能带数据的Python脚本,代码已经提交到了我的Github仓库中,有需要的朋友自提。这篇文章主要是介绍一下代码的结构和代码的用法,可以作为手册使用。

1.准备工作

数据的提取主要是基于Pymatgen库来实现的,脚本语言是python3,以下简单列出脚本运行需要使用的环境:

Python 3.9 or later

pymatgen

numpy

pandas

2.使用脚本

使用脚本时需要注意以下几点:

需要设置费米能,一般是提取scf计算中的费米能(因为scf计算得到的费米能比能带计算得到的费米能精度更高),提取费米能也很容易:

grep E-fermi OUTCAR

需要在脚本的同级目录下放入能带计算的K点路径KPOINTS文件和产生的vasprun.xml文件,作为初始输入文件

根据计算得到的能带是否分为自旋向上和自旋向下两支决定使用哪个脚本,注意不能根据是否打开了自旋来区分,因为对于有的体系即使打开了自旋最后算出来的能带还是只有一支,这种情况仍然使用no spin版本

3.简要介绍一下代码的结构

从vasp原始输出文件中读入数据

获取关键变量

得到BandStructure对象之后,需要进一步提取所需的变量,BandStructure对象本身就是字典类型,以键值对的方式存储,提取非常方便,后续计算需要提取的几个主要变量是:

倒晶格基矢,相应的键是"lattice_rec" -> "matrix"

倒空间中的k点坐标(包含所有),是分数坐标的形式。相应的键是"kpoints"

每条能带分支的信息,包含当前分支下start_index, end_index, 高对称点的名字。相应的键是"branches"

每条能带上每个k点的能量,相应的键是"bands" -> "1"或"-1"(如果是能带分了自旋向上和自旋向下两支)

这部分代码如下:

将对应的K点坐标投影到X轴上

要画能带图,需要解决的一个关键问题就是:要把三维倒空间中的K点投影到一维X轴上。投影的方法是根据它们在K空间中的坐标计算相应的距离,然后对每个点逐步累加,得出的总距离即对应该点在X轴上的距离。这里有一个技巧,即vasp能带计算过程中,对于每一个分支上的能带,k点是均匀分布的,所以我们只需要计算出这一分支的总距离,然后平分就能得到该分支中相邻k点之间的距离,而不需要对于每两个相邻的点都计算一下,这也是上面为什么要获得每条能带分支的信息。以下代码完成的是这一工作:

这一过程中还生成了klabel.csv文件,这一文件的作用是标出每条分支中的高对称点和相应的在X轴上的坐标。

将能带数据存入文件

开始已经获取了存储相应每条能带上每个K点的能量,同时上一步也获取了每个K点在X轴上对应的坐标,因此就可以将完整的能带数据存入文件中了,以下函数完成这一过程:

保存的文件结构类似以下表格:

spin和no spin版本的区别

相较于no spin版本,spin版本的改动主要有以下几处:

vasprun.xml文件读入时设置separate_spins=True

读取能带能量时键为"1"的数据对应自旋向上,键为"-1"的数据对应自旋向下

处理能带数据分为自旋向上和向下分别处理,新增两列。

4.数据后处理

脚本运行完成之后会生成两个文件:klabel.csv和bd.txt,其中klabel.csv文件存储的是每条分支能带的信息,包括每个高对称点处的坐标,可以用于后续画能带图。而bd.txt存储的就是每条能带上每个点的在X轴上的坐标和相应的能量大小。如下为一个示例:

原文地址:https://www.jun997.xyz/2022/04/18/4ea3d8ef74d8.html

脚本地址:https://github.com/June976/getVASPBandScripys



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3