Chap.7 计算小白硬学VASP —— 材料性质计算—>态密度分析(2)
¡Hola a todos!
本章主要介绍态密度画图的两种的方法。
常规方法——Matplotlib
上一章介绍了如何分析dos计算的结果,并根据需求把态密度轨道数据保存为csv文件。在此基础上常规绘图方法就是采用matpltolib
库的pyplot
模块。代码如下:
1 | from matplotlib import pyplot as plt |
运行代码:
这里可以看到态密度画出来,毛刺非常多,原因可以分为两个部分:
- 在设置INCAR
时,NEDOS的数量较大或EMIN
,ENMAX
的区间过小,导致取点非常密集;
- 主要原因还是在INCAR
中,ISMEAR = -5
时,sigma
为0,费米狄拉克分布,不会有展宽(见下左图),这就导致相邻的态是直接过渡的,没有考虑平滑处理,所以画出来的dos图普遍毛刺比较多。这也是为什么也有很多人在算态密度的时候选择ISMEAR = 0
,出图放文章里面会好看一点。
手动平滑处理——scipy.ndimage.gaussian_filter1d
当然,python
有许许多多其他的库可以用来平滑处理,这样就避免了我们重新设置参数进行计算。这里采用scipy.ndimage.gaussian_filter1d
模块进行平滑处理,代码如下:
1 | from matplotlib import pyplot as plt |
运行代码:
也可以得到相对客观的结果。这里平滑度由sigma
参数控制,根据需求需自行调整。
pymatgen自带模块——DosPlotter
DosPlotter是专门用于绘制态密度图的类,可以直接从VASP计算的输出文件中读取数据并绘制,并且绘图结果默认把费米能级平移至0eV,方便比较。
代码如下:
1 | from pymatgen.io.vasp.outputs import Vasprun |
运行代码:
直接使用DosPlotter
也可以绘制出类似的结果,然而DosPlotter
绘制的结果会自动标出费米能级参考线,即x=0
参考线,同时自身还提供了平滑曲线的功能,DosPlotter
可以接受的参数有:
- zero_at_efermi
:布尔值,是否将费米能级作为零点,默认值为True
;
- stack
:布尔值,是否绘制成面积图,默认值为False
;
- sigma
:浮点数,平滑曲线的标准差,值越大,曲线约平滑。
这里重新修改下,增加sigma
参数使得曲线平滑一点:
1 | ...... |
再次运行代码:
曲线平滑了非常多,但是具体使用过程中,sigma
参数的选择还是很重要的,如果过于平滑,可能会失去重要的性质,所以实际使用时,需要根据实际情况进行调整。
总结
既然第二种方法可以直接画,那为啥还要费老鼻子劲输出csv文件呢,是否多此一举。
实际上,上一步输出csv文件跟这一步画图的操作并不冲突,输出csv文件是为了保存绘图源数据,vasprun.xml
文件虽然包含了计算的所有数据,但是动辄几百兆的大小也不太适合作为长期保存的文件。
推荐的做法是,无论怎么画图,都最好导出相关的数据保存为csv文件。小规模的计算结果的处理,两者差异不大;但是对于高通量来说,如果需要批量处理画图,直接读取csv文件绘图要快得多。例如上面两种方法,直接读csv绘图运行时间只要0.1s
;第二种方法读vasprun.xml
文件绘图,运行时间可能需要4.3s
,这个差距就比较明显了。
话虽如此,但是在高通量计算过程中,主要是的时间消耗还是在计算上,绘图上面的时间差在VASP
计算的时间上可以忽略不计~~~~~~
简而言之就是,记得保存数据,画图爱用啥用啥,都一样,无非就是代码不一样,DosPlotter
预设了一些格式,而直接用matplotlib
就自行设置一下格式(字体、字号、排版)就好了。
¡Muchas gracias!
- 标题: Chap.7 计算小白硬学VASP —— 材料性质计算—>态密度分析(2)
- 作者: 炫酷老司机
- 创建于 : 2024-06-17 00:00:00
- 更新于 : 2024-06-27 18:14:57
- 链接: https://andyhox.github.io/2024/06/17/Learn-VASP-from-pymatgen-7/
- 版权声明: 欢迎个人转载、使用、转贴等,但请获得作者同意且注明出处!