首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何绘制波段结构?

如何绘制波段结构?
EN

Stack Overflow用户
提问于 2020-01-14 18:35:36
回答 2查看 714关注 0票数 3

使用pyiron运行Vasp计算,通过访问ElectronicStructureDos对象,我可以轻松地绘制状态的总密度,例如

代码语言:javascript
复制
from pyiron.project import Project 
pr = Project('tmp')
pr.remove_jobs(recursive=True)
vasp = pr.create_job(pr.job_type.Vasp, 'vasp')
vasp.structure = pr.create_ase_bulk('Al')
vasp.run()
dos = vasp.get_electronic_structure().get_dos()
dos.plot_total_dos()

有没有类似的便捷方法来绘制隐藏在某个地方的带状结构?

EN

回答 2

Stack Overflow用户

发布于 2020-01-15 22:11:10

虽然没有直接绘制函数,但可以使用特征值矩阵绘制波段结构

代码语言:javascript
复制
import matplotlib.pylab as plt
plt.plot(vasp.get_electronic_structure().eigenvalue_matrix);
票数 3
EN

Stack Overflow用户

发布于 2020-01-15 22:15:41

或者,要手动绘制它,您可以使用:

代码语言:javascript
复制
# The trace is system dependent, in this example we use:
trace = np.array([[0, 0, 0], # Gamma
        [1, 0, 0], # X
        [1, 1, 0], # M
        [0, 0, 0], # Gamma
        [0, 0, 1], # Z
        [1, 0, 1], # R
        [1, 1, 1], # A
        [0, 0, 1]]) # Z
label_ticks = ['$\Gamma$', 'X', 'M', '$\Gamma$', 'Z', 'R', 'A', 'Z']

energy = ham['output/electronic_structure/eig_matrix']
E_f = ham_chg['output/electronic_structure/efermi']

energy -= E_f
n_kpoints = len(energy) 
n_trace = int(n_kpoints / (len(trace)-1))
normal_ticks = [i*n_trace for i in range(len(trace))] 

plt.axhline(y=0, ls='--', color='k')
plt.plot(energy, 'r-')

plt.xlim(normal_ticks[0], normal_ticks[-1])
plt.xticks(normal_ticks, label_ticks)
plt.grid(axis='x')
plt.ylabel("Energy - $E_F$ [eV]")

plt.ylim(-1, 1);

这需要两次VASP计算,首先计算电荷密度:

代码语言:javascript
复制
ham_1.write_charge_density = True 

在执行此作业后,您可以使用电荷密度通过从上一个作业重新开始来计算带结构:

代码语言:javascript
复制
ham_2 = ham.restart_from_charge_density(job_name="job_band", icharg=11)

但据我所知,我们目前还没有这方面的自动化功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59732041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档