====== 概要 ======
密度汎関数理論によるバンド計算では、バンドギャップを過小評価してしまうことが知られています。
バンドギャップの大きさを改善する方法はいくつか考案されていて、その中の一つであるハイブリッド汎関数法による計算方法を解説します。
汎関数の種類は様々な人が考案していて、WIEN2kにも多くのものが実装されています。
必要に応じて汎関数を変えることになりますが、よくわからなければデフォルトのままで十分です。
====== 計算方法 ======
===== ハイブリッド汎関数を使ったSCF計算 =====
事前に通常のSCF計算を行ってください。
ハイブリッド汎関数に使う入力ファイルを対話形式で生成してくれるプログラムinit_hf_lapwがあるので、これを使います。
$ init_hf_lapw
設定するのは次の項目です。
- バンドの数nband
* case.inhfというファイルが作成され、自動的に開きます。
* 計算に使うバンドの数を指定します。少なくとも電子が詰まっているバンド(占有バンド)の数プラス1が必要です。
* 非占有バンドの数が増えれば計算精度はあがりますが、計算時間はnbandの自乗で増えていきます。
* case.scfが読み込まれ、価電子バンドの数や伝導バンドのエネルギー範囲などがわかるように画面に表示されますので、これを参考に指定します。
* 設定後は新しく生成されたファイルcase.in1の6行目を確認し、もし考慮する一番上の伝導バンドのエネルギーがemax(=Ef+de)よりも大きくなるようであれば、deの値を大きくします。
- k点数
* 時間を節約するため、SCF計算のときよりもk点数を減らすのが一般的です。
* SCF計算で使ったk点がfull Brillouin zone (FBZ)のk点数、ハイブリッド汎関数法で使うものがreduced Brillouin zone (RBZ)のk点数です。
* RBZの各方向のk点数はFBZのものの約数に限られます。
* 例えばFBZのk点数が10*10*10だった場合、RBZのk点数は1*1*1, 2*2*2, 5*5*5, などに限られます。
設定が終わればrun_lapwによりハイブリッド汎関数を使ったSCF計算を実行します。
$ run_lapw -hf -redklist -ec 0.0001 -cc 0.0001 -p
フラグ-hfでハイブリッド汎関数による計算を行います。
フラグ-redklistはRBZによる計算を行うときにつけますので、なければFBZでの計算となります。
==== 条件を変えて計算 ====
* バンドの数を変更したい場合はcase.inhfを編集してください。
* k点数を変えたい場合は、以下のファイルを削除(するか名前を変更)して、run_kgenhf_lapwを実行してください。そして、再度実行する際はオプション-newklistをつけます。
$ rm case.klist_fbz
$ rm case.klist_ibz
$ rm case.outputkgenhf
$ rm case.klist_rfbz
$ rm case.klist_ribz
$ run_kgenhf_lapw
$ run_lapw -hf -redklist -ec 0.0001 -cc 0.0001 -newklist -p
* バンド数とk点数について必ず収束を確認しましょう
===== 各種物理量の計算 =====
通常通り計算できますが、QTL(軌道ごとの電荷密度に分解するプログラム)を実行する場合はオプション -hf が必要です。
==== 状態密度 ====
x_lapw lapw2 と x_lapw tetra の実行の際にオプション -hf をつけてください
$ x_lapw kgen
$ x_lapw lapw1 -p
$ x_lapw lapw2 -p -qtl -hf # x_lapw qtl -p -hf も可
$ configure_int_lapw -b total 1 tot,d,d-eg,d-t2g 2 tot,s,p end
$ x tetra -p -hf
==== バンド計算 ====
バンド計算のみ、便利なスクリプトが用意されています。
- 通常通り、バンドの経路を指定するファイルcase.klist_bandを作成します。
- run_bandplothf_lapwを実行します(これは通常の x_lapw lapw1 -band の計算に相当します)。さきほどRBZを使った場合はオプション-redklistをつけます。
$ run_bandplothf_lapw -redklist
- 通常通りcase.inspを作成し、フラグ-hfをつけて x_lapw spaghetti を実行します。
$ x_lapw spaghetti -hf
===== 注意 =====
*ハイブリッド汎関数法は計算コストの大きい計算手法です。大型計算機による並列化計算をおすすめします。