OpenMX Ver. 3.7を用いて最局在ワニエ関数(MLWF)を生成することが可能です [78,79]。 MLWFを計算するためのキーワードと設定について以下に説明します。 キーワードの様式は、OpenMXで本来用いている形式に厳密に従っています。 具体的な例として、この章ではダイヤモンド構造のシリコンに関する計算結果を示します。 計算はディレクトリ「work/wf_example」中にある入力ファイル「Si.dat」を用いて、プログラムコード「openmx」を用いて再現できます。 その他のポストプロセスコードは使用しません。 通常のSCF計算の収束解が得られた後に、再スタートファイルを用い、適切なMLWFが得られるまで、 いくつかのパラメータを変更しながら以下に説明する手順を繰り返すことになります。
この機能を用いて発表を行う際には、文献[58]を引用して下さい。
MLWFを生成する
MLWFを生成するために、キーワード「Wannier.Func.Calc」を「on」と明示的に設定して下さい。 デフォルト値は「off」です。
Wannier.Func.Calc on #default off
生成するMLWFの数の指定
生成するMLWFの数を、キーワード「Wannier.Func.Num」により指定します。 デフォルト値はありません。
Wannier.Func.Num 4 #no default
ブロッホ状態を選択するエネルギーウィンドウ
MLWFは、1組のブロッホ状態から生成されます。 固有エネルギーに対するエネルギー窓を指定することで、1組のブロッホ状態が選択されます。 参考文献[79]に従って、二つのエネルギー窓を導入します。 1つは、外エネルギー窓とよばれ、下限を示す「Wannier.Outer.Window.Bottom」と 上限を示す「Wannier.Outer.Window.Top」の2つのキーワードにより指定されます。 もう1つは、内エネルギー窓で、下限を示す「Wannier.Inner.Window.Bottom」と 上限を示す「Wannier.Inner.Window.Top」の2つの同様なキーワードにより指定されます。 これらの4つの値はすべて、フェルミ準位からの相対的な値をeV単位で与えます。 内エネルギー窓は外エネルギー窓の領域内に設定する必要があります。 内エネルギー窓を定義する下限値と上限値が等しいときには、内エネルギー窓は定義されていないことになり、計算には使用できません。 外エネルギー窓にデフォルト値はなく、また内エネルギー窓の下限値と上限値のデフォルト値はともに0.0です。 例えば、次の様に設定します。
Wannier.Outer.Window.Bottom -14.0 #lower boundary of outer window, no default value Wannier.Outer.Window.Top 0.0 #upper boundary of outer window, no default value Wannier.Inner.Window.Bottom 0.0 #lower boundary of inner window, default value 0.0 Wannier.Inner.Window.Top 0.0 #upper boundary of outer window, default value 0.0
目的のバンドを含む2つのエネルギー窓を適切に設定するためには、MLWFの計算の前にバンド構造と状態密度の一方または両方を 計算し、その範囲を事前に知っておく必要があります。
MLWFの局在化計算では再スタートファイルから重なり行列要素を取得し、計算を行います。
重なり行列はある特定の外エネルギー窓に対して計算され、ファイルに保存されています。
したがって再計算の際に外エネルギー窓を再定義する場合には、事前に設定した外エネルギー窓の範囲内での変更が可能です。
また計算を再スタートする際には、内エネルギー窓は外エネルギー窓の範囲内で自由に変更可能です。
MLWFの両エネルギー窓の依存性を確かめる際には、上述の制約の範疇でエネルギー窓を調節して下さい。
計算の再スタートさせる場合には、本節7項目の「重なり行列の計算を省いた最適化の再スタート」を参照してください。
MLWFの最初の推定
キーワード「Wannier.Initial.Guess」を「on」または「off」と設定することにより、
MLWFの初期推定をするか否かを選択できます。デフォルト値は「on」です。
多くの場合にMLWFの初期推定を行うことで、スプレッド関数を最小化する際の収束性が改善し、また局所的な解への収束を避けることが
可能になります。
初期推定を行う際には、生成するMLWFと同数の局在関数の組を定義しなければなりません。
外エネルギー窓の内部のブロッホ波動関数は、局在関数の組に射影されます。
したがって、このような局在関数はプロジェクタとも呼びます。プロジェクタを指定するには、以下の手順が必要です。
A. プロジェクタに用いる局在関数の定義
擬原子軌道(PAO)をプロジェクタに用いますので、PAOの設定は基底関数の場合と同様です。 ダイヤモンド構造のシリコンに関する設定例は、以下の様になります。
Species.Number 2 <Definition.of.Atomic.Species Si Si7.0-s2p2d1 Si_CA11 proj1 Si5.5-s1p1d1f1 Si_CA11 Definition.of.Atomic.Species>この例では、SiのPAOをプロジェクタとして使用し、原子種「proj1」を上記のように定義します。 キーワードの対「Definition.of.Atomic.Species」および 「Definition.of.Atomic.Species」内で、 1行目のSi原子に加えて、プロジェクタに関する原子種「proj1」を定義します。 この原子種「proj1」は「Si5.5-s1p1d1f1」と擬ポテンシャル「Si_CA」で定義されます。 ただし、この行で定義された擬ポテンシャルは実際の計算では使用されません。 単にデータ入力の一貫性を保つために与えています。 どのようなPAOもプロジェクタとして使用可能ですが、各1-成分に対しては単一の動径軌道のみが指定可能であり、 すべての場合に「s1p1d1f1」の指定を推奨します。
B. プロジェクタの軌道、中心位置、配向の指定
対となるキーワード「Wannier.Initial.Projectos」および 「Wannier.Initial.Projectos」を用いて、 プロジェクタ名、局在軌道関数、局在軌道の中心、軌道の方位を指定する局所的なz軸およびx軸を指定します。 設定例を以下に示します。
<Wannier.Initial.Projectors proj1-sp3 0.250 0.250 0.250 -1.0 0.0 0.0 0.0 0.0 -1.0 proj1-sp3 0.000 0.000 0.000 0.0 0.0 1.0 1.0 0.0 0.0 Wannier.Initial.Projectors>各行には次の項目が記載されています。 例えば、第1行目では、原子種名「proj1」はキーワード対「Definition.of.Atomic.Species」で定義されています。 プロジェクタ名と選択された軌道をつなぐためにハイフン「-」を用います。 「sp3」は、この原子種のsp3混成軌道が生成するワニエ関数の初期推定として使用されることを意味します (利用可能な軌道およびその混成軌道を表6に示します)。 この混成軌道からなるプロジェクタは、次に続く3つの数「0.25 0.25 0.25」で与えられる位置を中心として配置されます。 これらの数値は、キーワード「Wannier.Initial.Projectors.Unit」により定義される 単位で与えられています (説明は後述します)。 その次の3つの数から成る2組の値は、局所座標系のz軸およびx軸の方向をそれぞれ定義しています。 ここで、各軸はxyz座標系の3つの成分により定義されるベクトルにより指定されます。 この例の第1行目では、局所z軸は元のx軸に対して逆向きの「-1.0 0.0 0.0」で表されるベクトルで定義され、 局所x軸はもとのz軸に対して逆向きの「0.0 0.0 -1.0」で表されるベクトルで定義されています。 第2行目では、局所軸は元の座標系と同じです。
プロジェクタとして用いる軌道として、PAO自身かまたはそれらの混成軌道も使用可能です。 「sp3」により定義されるプロジェクタの総数は4個であること注意してください。 同様に、「sp」および「sp2」により定義されるプロジェクタの総数は、それぞれ2個および3個です。 サポートされているPAOおよびそれらの混成軌道のリストは表6にまとめられています。 このリストに記載されていないプロジェクタは使用出来ませんので注意して下さい。
プロジェクタは、単位胞内のどこにでも配置することができます。 その位置の指定には、単位胞ベクトルに相対的な規格化座標(FRAC)か、原子単位(AU)もしくはオングストローム(ANG)の 単位で表したデカルト座標が使用できます。その選択はキーワード「Wannier.Initial.Projectors.Unit」 で行います。
Wannier.Initial.Projectors.Unit FRAC #AU, ANG or FRAC
キーワード「Wannier.Kgrid」により、Monkhorst-Packのk点グリッドを指定します。 デフォルトの設定はありません。 k空間における微分を計算する際に有限差分を用いるために、 中心のk点からの距離に応じて殻(shell)ごとに隣接k点を結ぶbベクトルを探索します。 探索する殻の最大数は、キーワード「Wnnier.Maxshells」により指定します。 デフォルト値は12で、適切なbベクトルの組を見出すことが出来ない場合には、最大数を増やして下さい。 単位格子ベクトル間で大きなアスペクト比を持つ系の場合、問題が起きることがあります。 その場合にはエラーメッセージが表示されます。しかし通常は、最大数12で有効に機能します。 「Wannier.Kgrid」の適切な設定もまた、bベクトルを見つけるときに役立ちます。 ここで、各逆格子ベクトルに対する離散化のグリッド間隔は、互いにほとんど同等でなければなりません。
Wannier.MaxShells 12 # default value is 12. Wannier.Kgrid 8 8 8 # no default value
もつれたバンド (entangled band)の場合 [79]、MLWFを見出すためには2つのステップが必要となります。 最初のステップは、非孤立バンドのもつれを解くことによりスプレッド関数のゲージ不変部分を最小化することです。 第2ステップは孤立バンドの場合と同様です [78]。 ゲージ依存部分は、スプレッド関数の勾配に応じて、選択したブロッホ波動関数のユニタリー変換により最適化します。 最初のステップでは、3つのパラメータを用いてMLWFを生成するための自己無撞着ループを制御します。 それらは、SCFループの最大数「Wannier.Dis.SCF.Max.Steps」、 収束基準「Wannier.Dis.Conv.Criterion」、 そして入出力部分空間プロジェクタの混合を制御するパラメータ「Wannier.Dis.Mixing.Para」です。
Wannier.Dis.SCF.Max.Steps 2000 # default 200 Wannier.Dis.Conv.Criterion 1e-12 # default 1e-8 Wannier.Dis.Mixing.Para 0.5 # default value is 0.5
第2ステップにおいては、3種類の最適化法が利用できます。 1つは最急降下法 (SD: steepest descent)で、2つ目は共役傾斜法 (CG: conjugate gradient)です。 3つ目は、始めにSD法を用いその後CG法に切り替えるハイブリッド法です。 キーワード「Wannier.Minimizing.Scheme」で、どの方法を使うかを指定します。 0は簡易なSD法、1はCG法、2はハイブリッド法です。 SD法のステップ長をキーワード「Wannier.Minimizing.StepLength」により指定します。 CG法では、割線法 (secant method)を用いて最適ステップ長を求めます。 最大割線ステップと初期ステップ長を、それぞれ「Wannier.Minimizing.Secant.Steps」と 「Wannier.Minimizing.Secant.StepLength」により指定します。 また最小化ステップの最大数および収束条件を、それぞれ「Wannier.Minimizing.Max.Steps」 および「Wannier.Minimizing.Conv.Criterion」により指定します。
Wannier.Minimizing.Scheme 2 # default 0, 0=SD 1=CG 2=hybrid Wannier.Minimizing.StepLength 2.0 # default 2.0 Wannier.Minimizing.Secant.Steps 5 # default 5 Wannier.Minimizing.Secant.StepLength 2.0 # default 2.0 Wannier.Minimizing.Conv.Criterion 1e-12 # default 1e-8 Wannier.Minimizing.Max.Steps 200 # default 200
ハイブリッド法でのSD法およびCG法の最大の最適化ステップ数は
「Wannier.Minimizing.Max.Steps」で指定した値となります。
重なり行列の計算を省いた最適化の再スタート
一旦、重なり行列 を計算し、ファイルに保存しておけば、再計算が容易に実行できます。 事前に計算された重なり行列 を利用し、再計算する場合には、 キーワード「Wannier.Readin.Overlap.Matrix」を「on」と設定して下さい。
Wannier.Readin.Overlap.Matrix on # on|off, default is on重なり行列の計算は時間を要しますので、このキーワードを指定することで、無駄な計算を省くことが可能となります。 このキーワードが指定している場合にはプログラムコード「openMX」は、ファイルから固有エネルギーおよび固有状態と共に、 重なり行列を読み取ります。 外エネルギー窓とk点グリッドは、保存された重なり行列と固有値の計算時に用いたものと同じでなければならないことに注意して下さい。 読み込み時にそれらのパラメーターの一貫性がチェックされます。 内エネルギー窓、MLWFの初期推定、また収束条件に関しては、最適化を再スタートする際に変更することができます。 「Wannier.Readin.Overlap.Matrix」が「off」に設定されている場合には、 重なり行列が計算されて自動的にファイルに保存されます。 「System.Name」で定義された名前と「.mmn」という拡張子を持つファイルが生成されます。 また固有エネルギーと固有状態も、拡張子「.eigen」を持ったファイルとして保存されます。
Orbital name | Number of included projector | Description |
s | 1 | orbital from PAOs |
p | 3 | from PAOs |
px | 1 | from PAOs |
py | 1 | from PAOs |
pz | 1 | from PAOs |
d | 5 | from PAOs |
dz2 | 1 | from PAOs |
dx2-y2 | 1 | from PAOs |
dxy | 1 | from PAOs |
dxz | 1 | from PAOs |
dyz | 1 | from PAOs |
f | 7 | from PAOs |
fz3 | 1 | from PAOs |
fxz2 | 1 | from PAOs |
fyz2 | 1 | from PAOs |
fzx2 | 1 | from PAOs |
fxyz | 1 | from PAOs |
fx3-3xy2 | 1 | from PAOs |
f3yx2-y3 | 1 | from PAOs |
sp | 2 | Hybridization between s and px orbitals, including and |
sp2 | 3 | Hybridization among s, px, and py orbitals, including , and |
sp3 | 4 | Hybridization among s, px, py and pz orbitals:
|
sp3dz2 | 5 | Hybridization among
and orbitals:
,
|
sp3deg | 6 | Hybridization among
and
orbitals:
,
|