User Tools

Site Tools


Sidebar

quantumespresso:dft_u

概要

密度汎関数理論(density functional theory, DFT)ではバンドギャップの大きさが過小評価されたり、絶縁体であるにもかかわらず金属になってしまう場合もある。 このような問題を回避するため、オンサイトの相互作用を取り込んだDFT+Uの計算方法を解説し、ギャップの大きさの改善を目指す。

このページのタイトルはDFT+Uとしているが、LDA+UおよびGGA+Uのことを総称してそう呼んでいる。 どちらの場合でも計算手順は同じである。

なお、Uの値は手で入れないといけないが、どの程度の大きさか見積もる方法は別のページで触れる(予定)。 ただし、Uの大きさを第一原理的に見積もるための計算コストは大きい上にそんなに信頼性も高くないので、普通は実験で観測されたギャップや光吸収スペクトル、磁性体であれば磁気モーメントに合うように決める。

NiO

酸化ニッケル(NiO)は典型的な反強磁性体である。 ただし、電子相関が強いため、通常のDFTによるバンド計算ではバンドギャップの大きさを説明できない。 反強磁性のスピン配置については以下の論文を参照のこと。

  • W. L. Roth, Phys. Rev. 110, 1333 (1958).

計算手順

DFT計算

まずはUを入れずに計算を行う。

擬ポテンシャルはウルトラソフト型のO.pbe-rrkjus.UPFとNi.pbe-nd-rrkjus.UPFを使う。 単位胞は反強磁性秩序を示すので2倍となる。 アップスピンのNiとダウンスピンのNiが非等価になることに注意する。 ここではそれぞれをNi1とNi2で分けて指定している。

nspin=2のときは、絶縁体であってもoccupationsの指定が必要である。

NiO.scf.in
&control
   calculation='scf',
   prefix='NiO',
   pseudo_dir = './',
   outdir='./'
/
&system
   ibrav=0, 
   celldm(1)=7.9, 
   nat=4, 
   ntyp= 3,
   ecutwfc = 30.0, ecutrho = 240.0,
   occupations='smearing', 
   smearing='mp', 
   degauss=0.02,
   nspin=2, 
   starting_magnetization(2)= 0.5, 
   starting_magnetization(3)=-0.5,
   tot_magnetization = 0.0
/
&electrons
/
CELL_PARAMETERS
 0.50 0.50 1.00
 0.50 1.00 0.50
 1.00 0.50 0.50
ATOMIC_SPECIES
 O    16.00  O.pbe-rrkjus.UPF
 Ni1  58.69  Ni.pbe-nd-rrkjus.UPF
 Ni2  58.69  Ni.pbe-nd-rrkjus.UPF
ATOMIC_POSITIONS crystal
 O   0.25 0.25 0.25
 O   0.75 0.75 0.75
 Ni1 0.0  0.0  0.0 
 Ni2 0.5  0.5  0.5
K_POINTS automatic
 4 4 4 1 1 1

tot_magnetizationは単位胞内の磁化の合計を表していて、反強磁性の場合はゼロである。 もしこれを指定しないのであれば、半導体・絶縁体であってもoccupations, smearing, degaussの指定が必要である。 実行は次の通り。

  $ pw.x < NiO.scf.in > NiO.scf.out

出力ファイルを見れば全磁化がゼロで絶対磁化が有限の値を持つので、反強磁性秩序を起こしていることがわかる。

NiO.scf.out
(略)
     total magnetization       =     0.00 Bohr mag/cell
     absolute magnetization    =     3.13 Bohr mag/cell
(略)

ひとつのNiが持つ磁化は1.56μ_Bで、実験で得られている値1.90μ_Bよりも小さい。

  • A. K. Cheetham and D. A. O. Hope, Phys. Rev. B 27, 6964 (1983).

次に、バンドギャップを見積もるために状態密度を計算する。 以下のNiO.nscf.inとNiO.dos.inを用意する。 NiO.nscf.inはNiO.scf.inをコピーして、calculationを'nscf'に変更し、occupationsを'tetrahedra'にしてsmearingとdegaussを削除し、k点の数を増やす。 このときk点に対称点が含まれていたほうが状態密度が精度よく出る。

nio.nscf.in
&control
   calculation='nscf',
   prefix='NiO',
   pseudo_dir = './',
   outdir='./'
/
&system
   ibrav=0, 
   celldm(1)=7.9, 
   nat=4, 
   ntyp= 3,
   ecutwfc = 30.0, ecutrho = 240.0,
   nspin=2, 
   starting_magnetization(2)= 0.5, 
   starting_magnetization(3)=-0.5,
   tot_magnetization = 0.0
/
&electrons
/
CELL_PARAMETERS
 0.50 0.50 1.00
 0.50 1.00 0.50
 1.00 0.50 0.50
ATOMIC_SPECIES
 O    16.00  O.pbe-rrkjus.UPF
 Ni1  58.69  Ni.pbe-nd-rrkjus.UPF
 Ni2  58.69  Ni.pbe-nd-rrkjus.UPF
ATOMIC_POSITIONS crystal
 O   0.25 0.25 0.25
 O   0.75 0.75 0.75
 Ni1 0.0  0.0  0.0 
 Ni2 0.5  0.5  0.5
K_POINTS automatic
 8 8 8 0 0 0
NiO.dos.in
&dos
   prefix='NiO',
   outdir='./',
   DeltaE=0.01
/

実行は次のようにする。

$ pw.x < NiO.nscf.in > NiO.nscf.out
$ dos.x < NiO.dos.in > NiO.dos.out

状態密度はNiO.dosに出力される。

DFT+U計算

状態密度をプロットするとわかるが、バンドギャップは1eV程度しか開いていない。 しかしながら、実験で観測されているバンドギャップのサイズは4.3eVである。

  • G. A. Sawatzky and J. W. Allen, Phys. Rev. Lett. 53, 2339 (1984).

電子相関の効果を取り入れることで、ギャップの値を再現する。 NiO.scf.inをコピーしてNiO_U.scf.inを作成する(ファイルが多くなるとややこしいので、新しいディレクトリで作業することを推奨)。

NiO_U.scf.in
&control
   calculation='scf',
   prefix='NiO_U',
   pseudo_dir = './',
   outdir='./'
/
&system
   ibrav=0, 
   celldm(1)=7.9, 
   nat=4, 
   ntyp= 3,
   ecutwfc = 30.0, ecutrho = 240.0,
   nspin=2, 
   starting_magnetization(2)= 0.5, 
   starting_magnetization(3)=-0.5,
   tot_magnetization = 0.0,
   lda_plus_u = .true.,
   Hubbard_U(2) = 8.0,
   Hubbard_U(3) = 8.0,
/
&electrons
/
CELL_PARAMETERS
 0.50 0.50 1.00
 0.50 1.00 0.50
 1.00 0.50 0.50
ATOMIC_SPECIES
 O    16.00  O.pbe-rrkjus.UPF
 Ni1  58.69  Ni.pbe-nd-rrkjus.UPF
 Ni2  58.69  Ni.pbe-nd-rrkjus.UPF
ATOMIC_POSITIONS crystal
 O   0.25 0.25 0.25
 O   0.75 0.75 0.75
 Ni1 0.0  0.0  0.0 
 Ni2 0.5  0.5  0.5
K_POINTS automatic
 4 4 4 1 1 1

さきほどとの違いは&systemにlda_plus_uとHubbard_Uが追加された点である。 それぞれのオプションの意味は次の通り。

変数説明
lda_plus_u.true.にすることでDFT+U計算を行う。(LDA+U、GGA+Uで共通)
Hubbard_U(i)i番目の原子のオンサイトクーロン相互作用の大きさを表す。iは1からntypまでの値を取る。指定しなければゼロとなる。単位はeV。

ここでは酸素の電子には相関は入れていない。 実行は次のようにする。

$ pw.x < nio_u.scf.in > nio_u.scf.out

モーメントの値は原子あたり1.72μ_Bとなり、Uを入れることで改善された。

NiO_U.scf.out
(略)
     total magnetization       =    -0.00 Bohr mag/cell
     absolute magnetization    =     3.54 Bohr mag/cell
(略)

状態密度の計算はさきほどと同様である。 Uを入れることでバンドギャップが4eV程度となった。

quantumespresso/dft_u.txt · Last modified: 2021/06/27 22:04 (external edit)