電荷密度、波動関数等のプロット ============================== 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 `_ を用意します。 .. literalinclude:: files/postproc/graphene.pp.in 最初の &inputpp の部分では、outdir に含まれる scf (or nscf)計算の計算結果を読み込んで、必要なデータを出力します。 今の場合 .. literalinclude:: files/postproc/graphene.pp.in :lines: 4 が電荷密度をプロットすることを意味しています。 結果は、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 `_) .. image:: files/postproc/charge.* 赤い太線がC-Cボンドに、6角形に配置している小さい丸が炭素の位置に対応しています。 pseudopotentialを用いているため1sの電荷は考慮されていないので、炭素の中心よりその周りのC−Cボンドの部分の方が電荷量が多くなっていることが分かります。 また、graphene.pp.in のなかで、 :: iflag = 3 output_format = 5 を指定すると XCrysden 用のファイルが作成されるので、それをもとに XCrysden や VESTA で表示してやることもできます。