使用pyiron运行Vasp计算,通过访问ElectronicStructure和Dos对象,我可以轻松地绘制状态的总密度,例如
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()有没有类似的便捷方法来绘制隐藏在某个地方的带状结构?
发布于 2020-01-15 22:11:10
虽然没有直接绘制函数,但可以使用特征值矩阵绘制波段结构
import matplotlib.pylab as plt
plt.plot(vasp.get_electronic_structure().eigenvalue_matrix);发布于 2020-01-15 22:15:41
或者,要手动绘制它,您可以使用:
# 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计算,首先计算电荷密度:
ham_1.write_charge_density = True 在执行此作业后,您可以使用电荷密度通过从上一个作业重新开始来计算带结构:
ham_2 = ham.restart_from_charge_density(job_name="job_band", icharg=11)但据我所知,我们目前还没有这方面的自动化功能。
https://stackoverflow.com/questions/59732041
复制相似问题