まずはバンド計算を行い、強束縛模型で使う軌道がどのエネルギーにあるかを把握します。
&CONTROL calculation = 'scf', wf_collect = .true., prefix = 'SrVO3', verbosity = 'high' outdir = './tmp/', pseudo_dir = './pseudo/', / &SYSTEM ibrav = 1 A = 3.8409 nat = 5 ntyp = 3 ecutwfc = 100 occupations = "tetrahedra_opt" / &ELECTRONS conv_thr = 1d-8, / ATOMIC_SPECIES Sr 87.6200 Sr.pbesol-spn-kjpaw_psl.1.0.0.UPF V 50.9415 V.pbesol-spnl-kjpaw_psl.1.0.0.UPF O 15.9994 O.pbesol-n-kjpaw_psl.1.0.0.UPF ATOMIC_POSITIONS alat Sr 0.000000000000000 0.000000000000000 0.000000000000000 V 0.500000000000000 0.500000000000000 0.500000000000000 O 0.000000000000000 0.500000000000000 0.500000000000000 O 0.500000000000000 0.000000000000000 0.500000000000000 O 0.500000000000000 0.500000000000000 0.000000000000000 K_POINTS automatic 6 6 6 0 0 0
&CONTROL calculation = 'bands', prefix = 'SrVO3', wf_collect = .true., verbosity = 'high' outdir = './tmp/', pseudo_dir = './pseudo/', / &SYSTEM ibrav = 1 A = 3.8409 nat = 5 ntyp = 3 ecutwfc = 100 occupations = "tetrahedra_opt" / &ELECTRONS conv_thr = 1d-8, / ATOMIC_SPECIES Sr 87.6200 Sr.pbesol-spn-kjpaw_psl.1.0.0.UPF V 50.9415 V.pbesol-spnl-kjpaw_psl.1.0.0.UPF O 15.9994 O.pbesol-n-kjpaw_psl.1.0.0.UPF ATOMIC_POSITIONS alat Sr 0.000000000000000 0.000000000000000 0.000000000000000 V 0.500000000000000 0.500000000000000 0.500000000000000 O 0.000000000000000 0.500000000000000 0.500000000000000 O 0.500000000000000 0.000000000000000 0.500000000000000 O 0.500000000000000 0.500000000000000 0.000000000000000 K_POINTS crystal_b 6 0.5 0.5 0.0 20 0.0 0.0 0.0 20 0.5 0.0 0.0 20 0.5 0.5 0.0 20 0.5 0.5 0.5 20 0.0 0.0 0.0 0
&bands prefix = 'SrVO3', outdir = './tmp/', filband = 'bands.dat', /
$ mpirun -n 8 pw.x < SrVO3.scf.in > SrVO3.scf.out $ mpirun -n 8 pw.x < SrVO3.bands.in > SrVO3.bands.out $ mpirun -n 8 bands.x < bands.in > bands.out
バンドはplotband.xなどを使用して描きます。
フェルミ準位 (12.4501 eV) 近傍に3本のt2g軌道に由来するバンドが、その上に2本のeg軌道に由来するバンドがあることがわかります。 下の方にある9本のバンドは酸素のp軌道です(酸素原子は単位胞に3つ含まれています)。
最局在ワニエ関数を使ったフィッティングを行うk点を指定します。 今回は4*4*4で区切ったk点を使いましょう。 kmesh.plは /(QEをインストールしたディレクトリ)/wannier90-2.1.0/utility に入っていますので、それをコピーしてきて使用します。
SrVO3.scf.inをコピーしてSrVO3.nscf.inという名前にして、次のように編集してください。
&CONTROL calculation = 'nscf', wf_collect = .true., prefix = 'SrVO3', verbosity = 'high' outdir = './tmp/', pseudo_dir = './pseudo/', / &SYSTEM ibrav = 1 A = 3.8409 nat = 5 ntyp = 3 ecutwfc = 100 / &ELECTRONS conv_thr = 1d-8, / ATOMIC_SPECIES Sr 87.6200 Sr.pbesol-spn-kjpaw_psl.1.0.0.UPF V 50.9415 V.pbesol-spnl-kjpaw_psl.1.0.0.UPF O 15.9994 O.pbesol-n-kjpaw_psl.1.0.0.UPF ATOMIC_POSITIONS crystal Sr 0.000000000000000 0.000000000000000 0.000000000000000 V 0.500000000000000 0.500000000000000 0.500000000000000 O 0.000000000000000 0.500000000000000 0.500000000000000 O 0.500000000000000 0.000000000000000 0.500000000000000 O 0.500000000000000 0.500000000000000 0.000000000000000
$ kmesh.pl 4 4 4 >> SrVO3.nscf.in $ mpirun -n 8 pw.x < SrVO3.nscf.in > SrVO3.nscf.out
これで準備が完了しました。
次にWannier90を使って、実際に強束縛模型を作ります。 入力ファイル名はseedname.winの形式にします(seednameとprefixは異なっていても構いません)。
num_wann = 3 num_bands = 25 mp_grid = 4 4 4 dis_win_min = 11.0 dis_win_max = 14.5 dis_froz_min = 11.0 dis_froz_max = 13.5 write_hr = .true. bands_plot = .true. bands_num_points = 100 wannier_plot = .true. Begin Unit_Cell_Cart Ang 3.8409 0.0000 0.0000 0.0000 3.8409 0.0000 0.0000 0.0000 3.8409 End Unit_Cell_Cart Begin Atoms_Cart Ang Sr 0.00000 0.00000 0.00000 V 1.92045 1.92045 1.92045 O 0.00000 1.92045 1.92045 O 1.92045 0.00000 1.92045 O 1.92045 1.92045 0.00000 End Atoms_Cart Begin Kpoint_path R 0.5 0.5 0.0 G 0.0 0.0 0.0 G 0.0 0.0 0.0 X 0.5 0.0 0.0 X 0.5 0.0 0.0 R 0.5 0.5 0.0 R 0.5 0.5 0.0 M 0.5 0.5 0.5 M 0.5 0.5 0.5 G 0.0 0.0 0.0 End Kpoint_path Begin Projections V:l=2,mr=2,3,5 End Projections Begin Kpoints 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.25000000 (中略) 0.75000000 0.75000000 0.75000000 End Kpoints
変数の意味は次のとおりです。
変数 | 説明 |
---|---|
num_wann | 強束縛模型で取り出す軌道の数。今回はt2g軌道の3つの軌道(xy,yz,zx)です。 |
num_bands | 密度汎関数理論計算で使ったすべての軌道の数。SrVO3.nscf.out内のnumber of Kohn-Sham statesがそれに対応します。 |
mp_grid | k点のメッシュ。kmesh.plで指定したものをそのまま入力します。 |
dis_win_min | ワニエ化するバンドが含まれているエネルギーの下限。 |
dis_win_max | ワニエ化するバンドが含まれているエネルギーの上限。 |
dis_froz_min | ワニエ化するバンドが含まれ、かつ他のバンドが含まれないエネルギーの下限。 |
dis_froz_max | ワニエ化するバンドが含まれ、かつ他のバンドが含まれないエネルギーの上限。 |
write_hr | 飛び移り積分を出力するかどうか。.true.にするとSrVO3_hr.datに出力されます |
bands_plot | ワニエ関数によりできたハミルトニアンのバンドを出力するかどうか。 |
bands_num_points | バンドを出力する場合、そのk点数 |
wannier_plot | 最局在ワニエ関数を出力するかどうか。 |
また、次の変数を指定します。
変数 | 説明 |
---|---|
Unit_Cell_Cart | デカルト座標による結晶の基本並進ベクトル。SrVO3.nscf.outのcrystal axesを見ながら入力します。単位はオングストローム(Ang)あるいはボーア半径(Bohr)のどちらかを指定します。 |
Atoms_Cart | デカルト座標による結晶の原子位置。こちらもSrVO3.nscf.outを見ながら入力します。単位はオングストローム(Ang)あるいはボーア半径(Bohr)のどちらかを指定します。結晶の基本並進ベクトルの分率座標を使いたければATOMS_FRACを使用します。 |
Kpoint_path | ワニエ化後に出力するバンドの経路。bands_plot=.true.としたときに使用します。逆格子ベクトルの分率座標で指定します。 |
Projections | どの軌道でフィッテイングするか指定します。今回はt2g軌道の3つの軌道(xz,yz,xy)です(指定の仕方はWannier90のマニュアルを参照してください)。 |
Kpoints | ワニエ化に使うブロッホ関数のk点。SrVO3.nscf.inのものをそのまま使用します。 |
できたらWannier90を実行し、計算に必要なファイルを生成します。 指定するのはseednameのみです。 MPIが使えないことに注意します。
$ wannier90.x -pp SrVO3
次に、pw.xで生成したファイルをWanner90が読み込める形式に変換します。
&INPUTPP outdir = './tmp/', prefix = 'SrVO3', seedname = 'SrVO3', write_unk = .true. /
ワニエ関数をプロットする場合(SrVO3.winでwannier_plot = .true.とした場合)は write_unk=.true. とする必要があります。 ただし計算時間が非常にかかります。 今回の例でも普通のパソコンだと半日から丸一日くらいかかると思いますので注意してください。
$ mpirun -n 8 pw2wannier90.x < SrVO3.pw2wan.in > SrVO3.pw2wan.out
これで準備が完了したので、実際にワニエ化を行います。
$ wannier90.x SrVO3
強束縛模型によるバンドはSrVO3_band.datに、飛び移り積分はSrVO3_hr.datに出力されます。
バンドのプロットは、GNUPLOTを使ってSrVO3_band.gnuを元に行うのが便利です。
紫の線がDFTによるバンド、緑の点がワニエフィットにより得られたバンドです。 bands.xで作成したバンドの出力ファイルは波数が2π/aを単位としているので、横軸のとり方に注意してください。
SrVO3_hr.datには、ファイルの最初にコメントやワニエ軌道の数、飛び移り先のサイトの数などが出力されたあと、実際の飛び移り積分の値が並んでいます。
単位胞の位置を$\mathbf{r}$、単位胞内の軌道のインデックスを$\alpha$, $\beta$として、強束縛模型のハミルトニアンが \begin{equation} H = \sum_{\mathbf{r}, \mathbf{R}} t_{\alpha,\beta} (\mathbf{R}) c^\dagger_{\mathbf{r}, \alpha} c_{\mathbf{r} + \mathbf{R}, \beta} \end{equation} と書けるとします。 ここで$\mathbf{R}$は結晶の基本並進ベクトルを使って \begin{equation} \mathbf{R} = m_1 \mathbf{a}_1 + m_2 \mathbf{a}_2 + m_3 \mathbf{a}_3 \end{equation} ($m_1$, $m_2$, $m_3$は整数)です。 $m_1=m_2=m_3=0$かつ$\alpha=\beta$のときはオンサイトのエネルギーを表します。
SrVO3_hr.dat内の飛び移り積分の読み方は、例えば
1 -2 -1 3 2 -0.001905 0.000000
の場合は$m_1=1$, $m_2=-2$, $m_3=-1$, $\beta=3$, $\alpha=2$, で、$t_{\alpha,\beta}(\mathbf{R})=-0.001905+i0.000000$という意味です($i$は虚数単位)。
軌道の種類とインデックスの関係は、ワニエ関数をプロットすることで確かめてください。
seedname.win で wannier_plot = .true. とした場合は最局在ワニエ関数が seedname_n.xsf に出力されます(nは軌道の指標)。 プロットするにはXCrysDenを使用します。
例えば上で計算したSrVO3の軌道1のワニエ軌道が見たい場合は
$ xcrysden --xsf SrVO3_00001.xsf
とします。
赤が正、青が負の部分のワニエ軌道です。 l=2, mr=2の軌道(dxz軌道)の形になっていますが、酸素のp軌道が少し混成して酸素サイトにもワニエ軌道が広がっています。 これを防ぐには酸素軌道も含めてワニエ化しなければなりません。