1

我正在尝试用 pymatgen 绘制 DOS(状态密度),但我无法使其工作。第一次在python中遇到selfclass函数,所以我很茫然。

这个链接解释了具有我需要的功能的包(我需要使用get_site_t2g_eg_resolved_dos(site)类的一部分CompleteDos)。此链接包含这些功能的源代码。看看网上找到的例子我做了这个代码

from pymatgen.electronic_structure.dos import CompleteDos
from pymatgen.electronic_structure.plotter import DosPlotter
from pymatgen.electronic_structure.core import Spin, Orbital

data = CompleteDos.get_site_t2g_eg_resolved_dos
plot = DosPlotter(data)
plot.get_plot(-5,5).show()

该代码返回一个错误,我确信这是因为该函数get_site_t2g_eg_resolved_dos未正确使用。

即使您不知道 pymatgen 提供的链接,我认为您可以帮助我以正确的方式使用这些功能,我将非常感激。提前致谢!


编辑:我正在尝试的代码现在看起来如何,因为我不确定我是否正确地做事,所以留下两者。

from pymatgen.electronic_structure.dos import CompleteDos
from pymatgen.electronic_structure.plotter import DosPlotter
from pymatgen.electronic_structure.core import Spin, Orbital
from pymatgen.io.vasp.outputs import Vasprun, Procar
from pymatgen.core.ion import Ion

vasprun = Vasprun("./vasprun.xml")

pdos = vasprun.pdos
tdos = vasprun.tdos
efermi = vasprun.efermi
energy = vasprun.eigenvalues
structure = vasprun.structures



a = CompleteDos(structure, tdos, pdos)
data = a.get_site_t2g_eg_resolved_dos(structure)
plot = DosPlotter(data)
plot.get_plot().show()

输出错误:

Traceback (most recent call last):
  File "t2g2g.py", line 21, in <module>
    data= a.get_site_t2g_eg_resolved_dos(structure)
  File "/usr/local/lib/python2.7/dist-packages/pymatgen/electronic_structure/dos.py", line 351, in get_site_t2g_eg_resolved_dos
    for s, atom_dos in self.pdos.items():
AttributeError: 'list' object has no attribute 'items'
4

1 回答 1

1

如果你还没有放弃这里是解决方案

from pymatgen.electronic_structure.dos import CompleteDos
from pymatgen.electronic_structure.plotter import DosPlotter
from pymatgen.electronic_structure.core import Spin, Orbital
from pymatgen.io.vasp.outputs import Vasprun, Procar
from pymatgen.core.ion import Ion

vasprun = Vasprun("./vasprun.xml")

pdos = vasprun.pdos
tdos = vasprun.tdos
efermi = vasprun.efermi
energy = vasprun.eigenvalues
structure = vasprun.structures




data = vasprun.complete_dos.get_site_t2g_eg_resolved_dos(vasprun.structures[0][0])
plot = DosPlotter()
plot.add_dos("t2g",data['t2g'])

plot.show()

您需要指定站点和模式 (t2g/eg) 才能进行绘图。

于 2017-07-08T12:58:38.163 回答