Visualization of molecular orbitals of a water monomer

このチュートリアルではpp.xを使って電子密度と分子軌道を可視化する方法を述べます。ここでは立方体中の水分子を使用します。

準備

もしもまだビルドしておらずbin/にpp.xが存在しない場合はQEのルートディレクトリで以下を実行します。

$ make pp

SCF/構造最適化

先ずSCFあるいは構造最適化を行い、波動関数を獲得します。 以下は孤立水分子の構造最適化のための入力ファイルの一例です。

H2O in a box
 &control
    calculation   = 'relax'
    restart_mode  = 'from_scratch'
    prefix        = 'h2o'
    pseudo_dir    = '/home/ikutaro/QE/pseudo/'
    outdir        = './tmp/'
    forc_conv_thr = 1.0D-4
 /
 &system
    ibrav     = 1
    celldm(1) = 20.00
    nat       = 3
    ntyp      = 2
    ecutwfc   = 50.0
    ecutrho   = 400.0
    nbnd      = 8
 /
 &electrons
    mixing_beta = 0.5
    conv_thr    = 1.0d-10
 /
 &ions
 /
ATOMIC_SPECIES
 H 0.0000  H.pbe-kjpaw_psl.1.0.0.UPF
 O 0.0000  O.pbe-n-kjpaw_psl.1.0.0.UPF
ATOMIC_POSITIONS (bohr)
 H      1.447909955222      0.000000000000      1.127167146902
 H     -1.447909955222      0.000000000000      1.127167146902      
 O      0.000000000000      0.000000000000      0.000000000000
K_POINTS (GAMMA)

pw.xを以下のように実行します。

$ mpirun -np 4 ${HOME}/QE/src/qe-6.6/bin/pw.x < h2_relax.in > h2_relax.out

あるいはジョブスクリプト(この例ではh2o.sh)を使ってジョブをサブミットします。

$ qsub h2o.sh

計算 (SCF) が収束したならば波動関数と電子密度の(実空間での)計算が可能になります。

ポストプロセス

実空間における電子密度

実空間における電子密度をプロットするためのpp.xの入力ファイル (ここではpp_rho.in) は以下のようになります。

&inputpp
    prefix     = 'h2o'
    outdir     = './tmp/'
    filplot    = 'h2o'
    plot_num   = 0 
/
&plot
 iflag         = 3
 output_format = 5
 fileout       = 'h2o_rho.xsf'
/

ここでprefixとoutdirはpw.xのものと同じである必要があります。

この例では

    plot_num   = 0 

と&inputpp ... / セクションでしています。これは電子密度を実空間でプロットするためのものです。 さらに

 iflag         = 3

を指定することで、電子密度を3Dでプロットすることができます。

さらに以下を指定することでXSFフォーマットで電子密度が出力されます。

 output_format = 5

以下のようにして出力ファイル名を指定しています。

 fileout       = 'h2o_rho.xsf'

入力ファイルが準備できたならば以下を実行します。

$ mpirun -np 4 ${HOME}/QE/src/qe-6.6/bin/pp.x < pp_rho.in > pp_rho.out

(もしくは同様のコマンドをジョブスクリプトを使用して実行)

ここで使用するコア数はpp.xの前のpw.xで使用したものと同じものにする必要があります(wf_collectが指定できる場合はwf_collect=.true.にすることで異なるコア数の使用が可能)。

波動関数

ここでは波動関数(波動関数の二乗)をプロットします。

この場合の入力ファイル (pp_psi2.in) は以下のようになります。

&inputpp
    prefix     = 'h2o'
    outdir     = './tmp/'
    filplot    = 'h2o'
    plot_num   = 7
    kpoint(1)  = 1
    kband(1)   = 1
    kband(2)   = 5
    lsign      = .true.
/
&plot
 iflag         = 3
 output_format = 5
 fileout       ='.xsf'
/

ここで波動関数として複数のものをプロットすることが可能で、kpoint(1)とkpoint(2)でそれぞれ最初と最後のk点を指定します。同様にkbnad(1)とkband(2)でプロットするバンドを指定することも可能です。 ガンマ点における波動関数の二乗をプロットする際には符号をつけることが可能です (lsign = .true.) また波動関数をプロットする場合, fileoutはファイル名ではなくsuffixを指定するために使用されます。今の例だとpp.xを実行すると以下のようなアウトプットファイルが作成されます。

h2o_K001_B001.xsf  h2o_K001_B002.xsf  h2o_K001_B003.xsf  h2o_K001_B004.xsf  h2o_K001_B005.xsf
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-01-23 (月) 11:57:01 (472d)