バンド分散は次の2つの段階を経由して、計算されます。
(1) SCF計算
ダイヤモンド構造の炭素を例として、バンド分散の計算方法を説明します。 「work」ディレクトリ内のファイル「Cdia.dat」には、原子の座標、単位胞ベクトル および「scf.Kgrid」が次のように指定されています。
Atoms.Number 2 Atoms.SpeciesAndCoordinates.Unit Ang # Ang|AU <Atoms.SpeciesAndCoordinates 1 C 0.000 0.000 0.000 2.0 2.0 2 C 0.890 0.890 0.890 2.0 2.0 Atoms.SpeciesAndCoordinates> Atoms.UnitVectors.Unit Ang # Ang|AU <Atoms.UnitVectors 1.7800 1.7800 0.0000 1.7800 0.0000 1.7800 0.0000 1.7800 1.7800 Atoms.UnitVectors> scf.Kgrid 7 7 7 # means n1 x n2 x n3
バンド分散の単位胞ベクトルとバンド分散を計算するためのk点の経路は次の書式で与えられます。
Band.dispersion on # on|off, default=off <Band.KPath.UnitCell 3.56 0.00 0.00 0.00 3.56 0.00 0.00 0.00 3.56 Band.KPath.UnitCell> Band.Nkpath 5 <Band.kpath 15 0.0 0.0 0.0 1.0 0.0 0.0 g X 15 1.0 0.0 0.0 1.0 0.5 0.0 X W 15 1.0 0.5 0.0 0.5 0.5 0.5 W L 15 0.5 0.5 0.5 0.0 0.0 0.0 L g 15 0.0 0.0 0.0 1.0 0.0 0.0 g X Band.kpath>
次にOpenMXを以下の様に、通常実行します。
% ./openmx Cdia.datここでは単一コアを使用した計算例を示しましたが、もちろん並列計算も実行可能です。 この実行が正常に終了すると、「work」ディレクトリに「cdia.Band」というファイルが生成されます。 キーワード「Band.KPath.UnitCell」が存在する場合には この単位胞ベクトルを用いてk点経路の指定に用いられる逆格子ベクトル基底が計算されます。 もしこのキーワード「Band.KPath.UnitCell」が指定されない場合には、「Atoms.UnitVectors」による 単位胞ベクトルを用いて逆格子ベクトルを計算し、その目的に使用されます。
「source」ディレクトリに「bandgnu13.c」というファイルがあります。このファイルを次のようにしてコンパイルします。
% gcc bandgnu13.c -lm -o bandgnu13コンパイルが正常に終了すると、「source」ディレクトリに実行可能なファイル「bandgnu13」が生成します。 このファイルを「work」ディレクトリにコピーして下さい。 実行ファイル「bandgnu13」を用いて、次のコマンドを実行することにより、ファイル「cdia.Band」はgnuplot形式に変換されます。
% ./bandgnu13 cdia.Bandこれで、「cdia.GNUBAND」、「cdia.BANDDAT1」(および「cdia.BANDDAT2」)の2または3個のファイルが生成されます。 ファイル「cdia.GNUBAND」はgnuplotのスクリプトであり、アップとダウンのスピン状態のデータファイル(それぞれ「cdia.BANDDAT1」および「cdiaBANDDAT2」)を 読み込むためのファイルです。 もし「LSDA-CA」、「LSDA-PW」、「GGA-PBE」のいずれかを用いてスピン分極計算を行った場合には、「*.BANDDAT1」に加えて ダウンスピン状態の「System.Name.BANDDAT2」が生成されます。 ファイル「cdia.GNUBAND」は次のコマンドにより、gnuplotを使ってプロットすることができます。
% gnuplot cdia.GNUBAND図 14 はここで説明した方法で計算した炭素ダイヤモンドのバンド分散を示しています。 ただし「cdia.GNUBAND」内のy軸の範囲は変更されています。 化学ポテンシャルがエネルギーの原点となるように自動的に調整されていることに注意してください。
バンド分散を描く際の問題点はバンド分散の計算で使われる単位胞の選択法です。 しばしば、SCF計算で使用される単位胞と異なる単位胞を用いてバンド分散の計算における特殊k点の指定が行われます。 このような場合は、バンド分散の計算で用いる単位胞を キーワード「Band.KPath.UnitCell」で定義する必要があります。 「Band.KPath.UnitCell」を定義すると バンド分散の計算の逆格子ベクトルは 「Band.KPath.UnitCell」で指定された格子ベクトルから計算されます。 「Band.KPath.UnitCell」を定義しなければ、逆格子ベクトルは 「Atoms.UnitVectors」で指定された格子ベクトルで計算され、 バンド分散の計算に用いられます。 体心、面心、底心、三方晶の場合はバンド分散の計算のための逆格子ベクトルはバンド構造計算の慣例に従い キーワード「Band.KPath.UnitCell」を用いて指定するべきです。