VASP 系列001. 高通量计算 Python 库 pymatgen 安装和一些使用(用 pymatgen 画 HSE 能带的细节和输出图片字体的简单调整)

一、安装

0. 作者
  • Author: Zhi-Yong Chen
  • Source: Experience of failure
  • date: 09.25.2020
  • 注意: 截至今天,可以安装日期前的最新版

1. 系统

windows 7


2. 环境
  1. anaconda 3.7

安装最新版即可,网址: https://www.anaconda.com

  • 注意: 需要设置添加到系统路径

  1. C++14 或以上

安装 Visual Studio 2015 或以上
Windows 10 系统建议直接安装官网最新的 Visual Studio 2019+,网址:

https://visualstudio.microsoft.com/zh-hans/downloads/

可能是 Windows 7 的原因,我的电脑无法安装 Visual Studio 2019+ 版本。
Visual Studio 2015 安装:

百度网盘-链接:https://pan.baidu.com/s/14Hk72X2vNObBFspc23Tnqg 
提取码:fzpu

备注:文件为压缩包,没有设密码
  • 注意:安装好 Visual Studio 后,要测试一个简单的 C++ 程序,确保C++14 已被安装

3. 安装 pymatgen
  1. 打开 Python 命令行
  2. 安装依赖库 ase:
pip install ase
  1. 安装 pymatgen
pip install pymatgen
  1. 进入 ipython 测试 pymatgen
In [1]: import pymatgen





二、使用

  1. 准备输入文件 (vasp 结果文件,注意:最好 INCAR 设置 LORBIT=11, 全部文件放置在同一个文件夹,我记为 HSE_example) 。下面是计算 HSE 能带的一个例子:

KPOINTS
POTCAR
vasprun.xml

  • 如图:
    在这里插入图片描述

  • 其中 KPOINTS 需要修改
# KPOINTS Parameters to Generate KPOINTS (Don't Edit This Line):   0.040  0.040    8   59   3  22  12  25
    67
Reciprocal lattice
    0.00000000000000    0.00000000000000    0.00000000000000     1
    0.14285714285714    0.00000000000000    0.00000000000000     6
    0.28571428571429    0.00000000000000    0.00000000000000     6
    0.42857142857143    0.00000000000000    0.00000000000000     6
    0.14285714285714    0.14285714285714    0.00000000000000     6
    0.28571428571429    0.14285714285714    0.00000000000000    12
    0.42857142857143    0.14285714285714    0.00000000000000     6
    0.28571428571429    0.28571428571429    0.00000000000000     6
    0.00000000000000    0.00000000000000    0.00000000000000     0      G
    0.02380952380952    0.00000000000000    0.00000000000000     0
    0.04761904761905    0.00000000000000    0.00000000000000     0
    0.07142857142857    0.00000000000000    0.00000000000000     0
    0.09523809523810    0.00000000000000    0.00000000000000     0
    0.11904761904762    0.00000000000000    0.00000000000000     0
    0.14285714285714    0.00000000000000    0.00000000000000     0
    0.16666666666667    0.00000000000000    0.00000000000000     0
    0.19047619047619    0.00000000000000    0.00000000000000     0
    0.21428571428571    0.00000000000000    0.00000000000000     0
    0.23809523809524    0.00000000000000    0.00000000000000     0
    0.26190476190476    0.00000000000000    0.00000000000000     0
    0.28571428571429    0.00000000000000    0.00000000000000     0
    0.30952380952381    0.00000000000000    0.00000000000000     0
    0.33333333333333    0.00000000000000    0.00000000000000     0
    0.35714285714286    0.00000000000000    0.00000000000000     0
    0.38095238095238    0.00000000000000    0.00000000000000     0
    0.40476190476190    0.00000000000000    0.00000000000000     0
    0.42857142857143    0.00000000000000    0.00000000000000     0
    0.45238095238095    0.00000000000000    0.00000000000000     0
    0.47619047619048    0.00000000000000    0.00000000000000     0
    0.50000000000000    0.00000000000000    0.00000000000000     0      M
    0.50000000000000    0.00000000000000    0.00000000000000     0      M
    0.48484848484545    0.03030303030000    0.00000000000000     0
    0.46969696969091    0.06060606060000    0.00000000000000     0
    0.45454545453636    0.09090909090000    0.00000000000000     0
    0.43939393938182    0.12121212120000    0.00000000000000     0
    0.42424242422727    0.15151515150000    0.00000000000000     0
    0.40909090907273    0.18181818180000    0.00000000000000     0
    0.39393939391818    0.21212121210000    0.00000000000000     0
    0.37878787876364    0.24242424240000    0.00000000000000     0
    0.36363636360909    0.27272727270000    0.00000000000000     0
    0.34848484845455    0.30303030300000    0.00000000000000     0
    0.33333333330000    0.33333333330000    0.00000000000000     0      K
    0.33333333330000    0.33333333330000    0.00000000000000     0      K
    0.31944444441250    0.31944444441250    0.00000000000000     0
    0.30555555552500    0.30555555552500    0.00000000000000     0
    0.29166666663750    0.29166666663750    0.00000000000000     0
    0.27777777775000    0.27777777775000    0.00000000000000     0
    0.26388888886250    0.26388888886250    0.00000000000000     0
    0.24999999997500    0.24999999997500    0.00000000000000     0
    0.23611111108750    0.23611111108750    0.00000000000000     0
    0.22222222220000    0.22222222220000    0.00000000000000     0
    0.20833333331250    0.20833333331250    0.00000000000000     0
    0.19444444442500    0.19444444442500    0.00000000000000     0
    0.18055555553750    0.18055555553750    0.00000000000000     0
    0.16666666665000    0.16666666665000    0.00000000000000     0
    0.15277777776250    0.15277777776250    0.00000000000000     0
    0.13888888887500    0.13888888887500    0.00000000000000     0
    0.12499999998750    0.12499999998750    0.00000000000000     0
    0.11111111110000    0.11111111110000    0.00000000000000     0
    0.09722222221250    0.09722222221250    0.00000000000000     0
    0.08333333332500    0.08333333332500    0.00000000000000     0
    0.06944444443750    0.06944444443750    0.00000000000000     0
    0.05555555555000    0.05555555555000    0.00000000000000     0
    0.04166666666250    0.04166666666250    0.00000000000000     0
    0.02777777777500    0.02777777777500    0.00000000000000     0
    0.01388888888750    0.01388888888750    0.00000000000000     0
    0.00000000000000    0.00000000000000    0.00000000000000     0      G

  • 注意:
  • HSE 计算能带的 KPOINTS 前面权重(第 4 列 不为 0 的不管,从 第一个为 0 的点 开始看,设置高对称点名称(第五列 只要手动补充一组字母路径 (G-M-K-G)))
  • 如果 KPOINTS 不添加高对称点,画出的图横坐标不会显示高对称点。
  • 其它的文件内容 (POTCAR, vasprun.xml) 太长,就不列举。

  1. 在文件夹右键打开命令行终端,并输入命令进入 ipython 终端:
$ ipython
Python 3.7.3 (default, Apr 24 2019, 15:29:51) [MSC v.1915 64 bit (AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.6.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]:  

  1. 输入 “! dir” 查看文件,能看到 “KPOINTS”, “POTCAR”, “vasprun.xml” 即可,我的是 git bash 终端,输入 “! ls -l
In [1]: ! ls -l
total 2064
-rw-r--r-- 1 lenovo 197121    4653 六月   27 14:21 KPOINTS
-rw-r--r-- 1 lenovo 197121  437216 六月   27 14:18 POTCAR
-rw-r--r-- 1 lenovo 197121 1664929 六月   27 14:18 vasprun.xml

  1. 在 python 终端操作 (导入库):
In [2]: from pymatgen.io.vasp.outputs import Vasprun

In [3]: from pymatgen.electronic_structure.plotter import BSDOSPlotter, DosPlotter

  1. 输入(初始化变量):
In [4]: bs_vasprun = Vasprun("vasprun.xml", parse_projected_eigen=True)
C:\ProgramData\Anaconda3\lib\site-packages\pymatgen\io\vasp\inputs.py:1857: BadPotcarWarning: POTCAR with symbol Se has metadata that does not match                          any VASP POTCAR known to pymatgen. The data in this
                        POTCAR is known to match the following functionals:                          ['PBE_54', 'PBE_52', 'unvie_PBE_52']
  BadPotcarWarning)
C:\ProgramData\Anaconda3\lib\site-packages\pymatgen\io\vasp\inputs.py:1857: BadPotcarWarning: POTCAR with symbol In has metadata that does not match                          any VASP POTCAR known to pymatgen. The data in this
                        POTCAR is known to match the following functionals:                          ['PBE_54', 'PBE_52', 'unvie_PBE_52']
  BadPotcarWarning)
  
# 注意: force_hybrid_mode=True 是打开杂化泛函计算能带的开关,是 pymatgen 2020.05 版本后提供的新功能
In [5]: bs_data = bs_vasprun.get_band_structure(line_mode=True, force_hybrid_mode=True)
In [6]: dos_data = bs_vasprun.complete_dos

  1. 例子 1 (只画能带):
In [7]: bands_plot = BSDOSPlotter()
In [8]: plt = bands_plot.get_plot(bs=bs_data)

在这里插入图片描述

# 如果需要保存图片
# 支持格式 png, tif, jpg....,只要改后缀名即可
In [9]: plt.savefig("InSe_HSE_bands.tif")
In [10]: plt.savefig("InSe_HSE_bands.png")

  1. 例子 2 (只画态密度):
In [11]: dos_plot = DosPlotter()
In [12]: dos_plot.add_dos("Total DOS", dos_data)
In [13]: plt = dos_plot.get_plot([-4, 4], [0, 12])

在这里插入图片描述

# 保存图片
In [14]: plt.savefig("InSe_HSE_dos.png")

8.例子 3 (能带和态密度放一张图)

In [15]: bs_dos_plot = BSDOSPlotter(bs_projection='elements', dos_projection='elements')
In [16]: plt = bs_dos_plot.get_plot(bs=bs_data, dos=dos_data)

在这里插入图片描述

# 保存图片
In [17]: plt.savefig("InSe_HSE_band_dos.png")






三、整理脚本

1. 只画能带
# plot_vasp_band_structure.py
from pymatgen.io.vasp.outputs import Vasprun
from pymatgen.electronic_structure.plotter import BSDOSPlotter, DosPlotter

# 变量初始化
bs_vasprun = Vasprun("vasprun.xml", parse_projected_eigen=True)	
bs_data = bs_vasprun.get_band_structure(line_mode=True, force_hybrid_mode=True)
dos_data = bs_vasprun.complete_dos

def plot_band():
    # 相当于  bands_plot = BSDOSPlotter(bs_projection='elements', dos_projection='elements')
    bands_plot = BSDOSPlotter()
    plt = bands_plot.get_plot(bs=bs_data)
    # 如果需要保存图片
    # 支持格式 png, tif, jpg....,只要改后缀名即可
    plt.savefig("InSe_HSE_bands.tif")
    plt.savefig("InSe_HSE_bands.png")

def plot_dos():
    dos_plot = DosPlotter()
    dos_plot.add_dos("Total DOS", dos_data)
    plt = dos_plot.get_plot([-4, 4], [0, 12])
    plt.savefig("InSe_HSE_dos.png")

def plot_bands_dos():
    bs_dos_plot = BSDOSPlotter(bs_projection='elements', dos_projection='elements')
    plt = bs_dos_plot.get_plot(bs=bs_data, dos=dos_data)
    plt.savefig("InSe_HSE_band_dos.png")


if __name__ == "__main__":
    plot_band()
    plot_dos()
    plot_bands_dos()







四、修改格式

0. 说在前面
可能因为是做计算的课题组写的代码缘故(不是专业写代码的课题组),只能实现它的基本功能,没有提取数据的接口,默认画的图太难看等等。要实现其它功能或许只能修改它的源码

1. 修改画图格式(由于太繁琐,并且平时也不怎么用,我也只研究了上面 “例子 3 (能带和态密度放一张图)”的画图格式)

在这里插入图片描述





  • 操作:

修改 C:\ProgramData\Anaconda3\Lib\site-packages\pymatgen\electronic_structure 下的 plotter.py

在这里插入图片描述
\
\
\

1. 用 VS code 打开,搜索 “bs_ax

在这里插入图片描述
\

2. 仔细观察

\
在这里插入图片描述
\

3. 修改源码,保存


在这里插入图片描述

\

4. 重新跑脚本 (三、整理脚本) plot_vasp_band_structure.py
  • 在这里插入图片描述

五、其它操作

推荐:

0. http://matgenb.materialsvirtuallab.org
1. https://mp.weixin.qq.com/s?__biz=MzI2OTQ4OTExOA==&mid=2247484405&idx=1&sn=d62277344ab874acc237d77188a3829c&chksm=eadec544dda94c52d91e45dda5b4b26293d0763187a9fed0702bad5c099dfde1e617f9ae1f5e&mpshare=1&scene=23&srcid=#rd
2. https://mp.weixin.qq.com/s?__biz=MzI2OTQ4OTExOA==&mid=2247485108&idx=1&sn=286449e79eda774f5753dc7477783383&chksm=eadec005dda94913eab48d136059e47a6146e21e19763f2aa155929bb15de6da3a4ebd7c4511&mpshare=1&scene=23&srcid=&sharer_sharetime=1567245116026&sharer_shareid=7391011dffdb5e46d46643d0c3ee23dc#rd

  • 16
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值