状態密度(DOS)
- DOSの種類
- total DOS: 単にDOSというとこれ。全電子、s, p, dなどの角運動量成分を全て含む
- projected DOS: s, p, dなどの角運動量に分けたもの
- localized DOS: DOSを原子や原子種に分けたもの。2とは両立してよい
- スピン分極した場合、上記は全てup成分とdown成分に分かれれる
ASEを使った描画例
-
ase.calculators.vasp
のVaspDos
を使う (古いかもしれない) - 例
from ase import Atoms, Atom
from ase.calculators.vasp import Vasp
from ase.calculators.vasp import VaspDos
import matplotlib.pylab as plt
h2 = Atoms("H2",[(0,0,0),(0,0,0.7)], cell=[10,10,10])
calc = Vasp(prec="normal", xc="pbe", kpts=[1,1,1])
h2.set_calculator(calc)
h2.get_potential_energy()
dos = VaspDos(efermi=calc.get_fermi_level())
energy = dos.energy
dos = dos.dos
plt.plot(energy, dos)
plt.show()
- PDOSを得る場合
...
# to lm-decompose, set lorbit=11
calc = Vasp(prec="normal", xc="PBE", kpts=[1,1,1], lorbit=10)
...
iatom = 0
dos = VaspDos(efermi=calc.get_fermi_level())
pdos = dos.site_dos(iatom, orbital="s")
...
Localized DOS
- 原子に射映したDOS
- 作成する手法は主に3つ
- University of Texas, Henkelman groupのスクリプト(split_dos, sum_dos)などを使う
- ASEで原子ごとのDOSを取り出す
- VaspKitを用いる
- 3.が一番楽
smeared DOSを作る場合
- 通常のDOSはギザギザしすぎるのでsmearすることがおおい
- Gaussian smearingなどを用いることがある
import numpy as np
from scipy.ndimage import gaussian_filter1d
import matplotlib.pyplot as plt
# localized DOS (LDOS) generated by VaspKit
a = np.loadtxt("PDOS_C_UP.dat")
plt.plot(a[:,0], gaussian_filter1d(a[:,2],sigma=4))
plt.show()