12. 最局在ワニエ関数

ここではquantum-ESPRESSOを用いた電子状態計算から最局在ワニエ関数を構築する方法について紹介します。 そのためのプログラムとして、 wannier90 が公開されています。 このプログラムを利用すると、バンド構造をタイトバインディング模型で表現することができるので、 k点を細かくとる必要があるような計算が容易に行えるようになります。 具体的に何ができるようになるかは、wannier90 の web page論文 を参考にしてください。

ここでは、wannier90 3.0.0 を用いますが、ここで説明する内容はほとんどバージョンには依らないと思います。

注釈

ソースコードの doc/ の中に user_guide.pdf, tutorial.pdf が、examples/ の中に tutorial.pdf で 説明している例の実際のファイルが含まれています。 ここで説明する以外にも様々な例があり、user_guide.pdf にも非常に詳細な説明がありますので、 詳しくはそちらを参考にしてください。

12.1. インストール

Espresso のディレクトリの中で

make w90

とやればインストールできます。(qe-6.3 なら wannier90-2.1.0, qe-6.4.1 なら wannier90-3.0.0がインストールされます)

自分でコンパイルするなら、以下のように config/ の中の自分の環境にあったファイルをもとに make.inc をつくって、 make してください。(Materiapps LIVE!ではインストールされていませんが、以下のようにコンパイルできます)

tar zxvf wannier90-3.0.0.tar.gz
cd wannier90-3.0.0
cp config/make.inc.gfort make.inc   # gfortran を使う場合
make

12.2. グラフェンのsp2 と π軌道

例としてグラフェンの valence band における sp2軌道とFermi準位前後にあるπ軌道に対する最局在ワニエ波動関数を作成してみます。

まず、準備として、graphene の scf 計算を行い、12x12x1 のメッシュにおける電子状態を nscf 計算で求めます。 nscf 計算では、nbnd オプションで計算するバンド数を指定していることに注意してください。

% ~/espresso-6.3.0/bin/pw.x < graphene.scf.in > graphene.scf.in
% ~/espresso-6.3.0/bin/pw.x < graphene.nscf.in > graphene.nscf.in

次に、以下のような graphene.win というwannier90用のインプットファイルを用意します。 それぞれの値の意味は以下の通りです。

  • バンドの数、ワニエ関数の数の指定

    num_bands         =   16
    num_wann          =   5
    

    計算に使用するバンド数と、ワニエ関数の数の指定です。num_bands は exclude_bands を指定しない場合 nscf 計算したバンド数と一致しなければなりません。 また、num_wann は後述するprojectionの指定と一致しなければなりません。

  • Outer window, Inner window の指定

    dis_win_min = -30
    dis_win_max =  12
    dis_froz_min = -30
    dis_froz_max = 2.6
    

    Inner window (dis_froz_max,min) はワニエを作る際、ワニエによるバンドが完全にもとのバンドと一致するべき範囲で、Outer window (dis_win_max,win) はワニエを作る際に考慮するバンドが含まれている範囲を指定します。 今の場合、E = 2.6 eV 以下のバンドは全て sp2軌道およびπ軌道で表されるべきバンドなので、E<2.6eVをInner window に指定しています。 逆にΓ点の E=2.6 eVより少し上にあるバンドは、炭素由来のものではないので、Inner window にこのバンドを含めてしまうとワニエがうまく作れなくなってしまいます。(このページの下の方にあるバンド図を参照してください) 一方、π軌道の存在する範囲は上にE ~ 12eV近くまであることがバンド図をみることで分かります。 従って Outer window はこのπ軌道を全て含むように E<12eVで指定しています。

  • projection の指定

    begin projections
    C: pz
    f= 0.167, 0.333, 0.00: s
    f=-0.333,-0.167, 0.00: s
    f= 0.167,-0.167, 0.00: s
    end projections
    

    ワニエ関数の初期値として炭素上のπ軌道(pz)とC-Cボンド間に存在する sp2 軌道をボンドの中心に位置する s 軌道で表現しています。

  • 計算するものの指定

    write_hr = .true.
    bands_plot = .true.
    wannier_plot = .true.
    

    ハミルトニアンの出力、バンドの出力、ワニエ波動関数の出力を指定しています。 ワニエ関数の出力をするには、pw2wannier.x で write_unk = .true. にしておく必要があります。

  • その他

    wannier90 の入力として、quantum ESPRESSO の計算で使用した値をいくつか入力する必要があります。

このファイル(graphene.win)を用いてまず

% ~/wannier90-3.0.0/wannier90.x -pp graphene

としてやります。これで graphene.nnkp というファイルが生成されます。 これをもとに ESPRESSO で計算した nscf 計算の内容を wannier90 用に変換します。 変換のためのプログラムは espresso-6.3.0/bin/pw2wannier90.x でそのための入力は graphene.pw2wan.in です。

% ~/espresso-6.3.0/bin/pw2wannier90.x < graphene.pw2wan.in > graphene.pw2wan.out

最後に最局在ワニエ波動関数を作成します。

% ~/wannier90-3.0.0/wannier90.x graphene

これで、graphene_band.{gnu,dat,kpt} というワニエで作成したバンドの情報、 graphene_hr.dat というワニエ関数をベースとして表現したハミルトニアン(タイトバインディング模型)、 5つの最局在ワニエ波動関数 graphene_00001.xsf - graphene_00005.xsf が生成されます。

ワニエで作成したバンドは gnuplot で

% gnuplot
gnuplot> load 'graphene_band.gnu'

としてやればみることができます。 もとのESPRESSOで計算したバンドとの比較は以下のようになります。

_images/band4.png

また、graphene_hr.dat ファイルをみると最近接、次近接の transfer integral がそれぞれ t = -3.00 eV, t'=0.23 eV と得られていることが分かります。

    0    0    0    5    1    0.000000   -0.000000
    0    0    0    1    2   -3.001042    0.000000
    0    0    0    2    2   -0.154412    0.000000
    0    0    0    3    2   -0.000000    0.000000
    0    0    0    4    2   -0.000000   -0.000000
...
    0    0    0    5    5  -11.355711    0.000000
    0    1    0    1    1    0.231742   -0.000000
    0    1    0    2    1   -3.001042   -0.000000
    0    1    0    3    1   -0.000000   -0.000000
    0    1    0    4    1    0.000000   -0.000000
...

ワニエ関数の具体的な形は XCrysden や VESTA で確認できます。 実際 graphen_00001.xsf を XCrysden でプロットすれば、得られた最局在ワニエ関数を以下のようにプロットできます。

_images/graphene_00001.png

12.3. スピン軌道相互作用がある場合

例として Fe の強磁性状態を考えます。

Feの擬ポテンシャルとして Fe.rel-pbe-spn-rrkjus_psl.0.2.1.UPF を使いますので、同名のファイルを公式サイトからダウンロードしてください。

注釈

なお、このウルトラソフト擬ポテンシャルでスピン軌道相互作用があるとき、あるいはノンコリニアな磁性があるときのワニエ関数をつくるにはespresso のバージョン 6.0 以上が必要となります。この機能を使う場合、wannier90-3.0.0の論文 を引用してください。

必要なファイルは以下の通りです。

スピン軌道相互作用の入った scf 計算をするにはスピン軌道相互作用の入った擬ポテンシャルと 以下のオプションを追加します。

	lspinorb = .true.
	noncolin = .true.

まず、電子状態を計算します。 nscf 計算では、ワニエ関数作成に使うバンドの数も指定しておきます。(nbnd = 68)

% ~/espresso-6.3.0/bin/pw.x < Fe.scf.in > Fe.scf.out
% ~/espresso-6.3.0/bin/pw.x < Fe.nscf.in > Fe.nscf.out

スピン軌道相互作用がある場合、一般にスピンの縮退はないのでバンド数やワニエ関数の数は全て2倍になります。 win ファイルではそれらの数に注意するとともに spinors オプションを追加します。

spinors = .true.

あとはグラフェンの場合と同様に

% ~/wannier90-3.0.0/wannier90.x -pp Fe
% ~/qe-6.0/bin/pw2wannier90.x < Fe.pw2wan.in > Fe.pw2wan.out
% ~/wannier90-3.0.0/wannier90.x Fe

とやればワニエ関数が作れます。なお、この計算はそこそこはやい計算機でも1coreで数十分かかります。

12.4. wannier90 を使うときの注意点

  • 結果を確認するときは、まず wannier90 でできたバンドと wout ファイルに記述されている各ワニエの spread を見ます。 バンドが波打っていたり、spread が大きい場合はワニエの作成に失敗していますので、パラメータを確認してください。

  • うまく作れないときは、たいていfitするために選ぶバンドと projection で指定する最初の波動関数の予想が合っていないことが原因です。 winファイルで、exclude_bands, dis_win_min, dis_win_max, dis_froz_min, dis_froz_max をうまく設定してください。

  • 各原子で考慮している軌道、およびそのおおよそのエネルギーは擬ポテンシャルのファイルに記述されていますのでその値を参考にしてください。