6. 電荷密度、波動関数等のプロット

scf計算で得られた電荷密度、波動関数などをプロットするには専用のプログラムpp.xがあります。 詳細は INPUT_PP.html のplot_numの項を見てもらえば分かりますが、

  • 電荷密度 (charge density)

  • EF における局所状態密度 (local density of states at EF)

  • STM images

  • 波動関数 (wavefunction)

  • スピン電荷密度 (spin polarization)

などが計算できます。

例として、graphene の電荷密度をプロットしてみましょう。

以下のようなインプットファイル graphene.pp.in を用意します。

&inputpp
 prefix='graphene',
 outdir='./work/'
 plot_num=0
/
&plot
 iflag=2
 output_format=7
 fileout='charge.dat'
 x0 = 0.0, 0.0, 0.0
 e1 = 2.0, 0.0, 0.0
 e2 = 0.0, 2.0, 0.0
 nx = 100
 ny = 100
/

最初の &inputpp の部分では、outdir に含まれる scf (or nscf)計算の計算結果を読み込んで、必要なデータを出力します。 今の場合

 plot_num=0

が電荷密度をプロットすることを意味しています。 結果は、tmp.pp というファイル(あるいは filplot で指定したファイル)に出力されます。

後半の &plot の部分では、この tmp.pp を読み込んでプロットしやすいデータに加工します。 (前半の &inputpp と後半の &plot はそれぞれ独立な計算なので、前半だけやりたければ&plot の部分を削除、後半だけやりたければ &inputpp の中身を空にすればよいです。)

今の例では、x0を始点として e1, e2 で定義される2次元面(iflag=2)を nx x nyのメッシュに切って出力するように指定しています。 (x0, e1, e2 の単位は alat (celldm(1)) になります。) 出力のフォーマットもいくつか選べますが、ここでは output_format=7 として gnuplot 用のデータを出力するようにしています。

graphene.scf.in で scf 計算をした後で以下のコマンドで実行します。

% pp.x < graphene.pp.in > graphene.pp.out

得られたファイル(charge.dat)を gnuplot で表示すると以下のような図が得られます。(この例で用いたgnuplot のスクリプト: charge.plt)

_images/charge.png

赤い太線がC-Cボンドに、6角形に配置している小さい丸が炭素の位置に対応しています。 pseudopotentialを用いているため1sの電荷は考慮されていないので、炭素の中心よりその周りのC−Cボンドの部分の方が電荷量が多くなっていることが分かります。

また、graphene.pp.in のなかで、

iflag = 3
output_format = 5

を指定すると XCrysden 用のファイルが作成されるので、それをもとに XCrysden や VESTA で表示してやることもできます。