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)

赤い太線がC-Cボンドに、6角形に配置している小さい丸が炭素の位置に対応しています。 pseudopotentialを用いているため1sの電荷は考慮されていないので、炭素の中心よりその周りのC−Cボンドの部分の方が電荷量が多くなっていることが分かります。
また、graphene.pp.in のなかで、
iflag = 3
output_format = 5
を指定すると XCrysden 用のファイルが作成されるので、それをもとに XCrysden や VESTA で表示してやることもできます。