Table of Contents

Siを例に、フォノンの簡単な計算を実行してみます。

SCF計算

事前にpw.xによるSCF計算を行います。

Si.scf.in
&control
   calculation='scf',
   prefix='Si'
   pseudo_dir = './pseudo/',
   outdir='./tmp/'
/
&system
   ibrav=2, celldm(1)=10.26, nat=2, ntyp=1,
   ecutwfc=18.0
/
&electrons
/
ATOMIC_SPECIES
 Si  28.086  Si.pz-vbc.UPF
ATOMIC_POSITIONS (alat)
 Si 0.00 0.00 0.00
 Si 0.25 0.25 0.25
K_POINTS automatic
 8 8 8 1 1 1
$ pw.x < Si.scf.in > Si.scf.out

Γ点のフォノン

電子状態の計算が終われば、フォノンの振動数を計算できるようになる。 まず、k=(0,0,0)のΓ点におけるフォノンを計算してみる。 以下のファイルを用意する。

Si.phG.in
phonons of Si at Gamma
 &inputph
  tr2_ph=1.0d-14,
  prefix='Si',
  epsil=.true.,
  outdir='./tmp/',
  fildyn='Si.dynG',
 /
0.0 0.0 0.0

第1行はコメント行とみなされ無視されます。 また、最後の行は計算する波数(デカルト座標で、単位は格子定数aを使って2π/a)を表します。

各引数の意味は次のとおりです。

変数初期値説明
tr2_ph1.0d-12フォノンの計算の収束条件。経験的に1.0d-14を使ったほうがよい
prefixpwscfSCF計算で使用したプレフィックスと同じにする
epsil.false.誘電率を計算する。Γ点の計算に必要。ただし.true.にする場合は、半導体かつΓ点の計算でないとエラーが出る
outdir./出力ファイルの場所。SCF計算のものと同じにする
fildynmatdyn結果であるdynamical matrixを出力するファイル名

実行は次のようにします。

$ ph.x < Si.phG.in > Si.phG.out

結果はfildynで指定したもの(今の場合はSi.dynG)に出力されます。

Si.dynG
(中略)
 **************************************************************************
     freq (    1) =      -0.170404 [THz] =      -5.684069 [cm-1]
 (  0.274931  0.000000 -0.504256  0.000000 -0.412479  0.000000 ) 
 (  0.274931  0.000000 -0.504256  0.000000 -0.412479  0.000000 ) 
     freq (    2) =      -0.170404 [THz] =      -5.684069 [cm-1]
 ( -0.161796  0.000000  0.380828  0.000000 -0.573404  0.000000 ) 
 ( -0.161796  0.000000  0.380828  0.000000 -0.573404  0.000000 ) 
     freq (    3) =      -0.170404 [THz] =      -5.684069 [cm-1]
 (  0.631059  0.000000  0.317327  0.000000  0.032690  0.000000 ) 
 (  0.631059  0.000000  0.317327  0.000000  0.032690  0.000000 ) 
     freq (    4) =      15.296893 [THz] =     510.249417 [cm-1]
 ( -0.463984  0.000000  0.270574  0.000000  0.459900  0.000000 ) 
 (  0.463984  0.000000 -0.270574  0.000000 -0.459900  0.000000 ) 
     freq (    5) =      15.296893 [THz] =     510.249417 [cm-1]
 (  0.527053  0.000000  0.327503  0.000000  0.339053  0.000000 ) 
 ( -0.527053  0.000000 -0.327503  0.000000 -0.339053  0.000000 ) 
     freq (    6) =      15.296893 [THz] =     510.249417 [cm-1]
 ( -0.083269  0.000000  0.565271  0.000000 -0.416575  0.000000 ) 
 (  0.083269  0.000000 -0.565271  0.000000  0.416575  0.000000 ) 
 **************************************************************************

フォノンの振動に対応する変位ベクトルはXcrysDenを使って見ることができます。 次のファイルを用意します。

Si.dynmatG.in
&inputfil
  dyn ='Si.dynG',
  filxsf = 'dynmatG.axsf'
  asr ='simple',
  lperm = .true.,
  q(1)=1.0,
  q(2)=0.0,
  q(3)=0.0
/

実行は次のようにします。

$ dynmat.x < Si.dynmatG.in > Si.dynmatG.out

すると dynmatG.axsf というファイルができるので、以下の手順で変位ベクトルを表示します。

  1. XCrysDenを起動して、[File] → [Open Structure] → [Open AXSF] よりdynmatG.axsfを開く
  2. ウィンドウが開くので、矢印ボタンを押して変位ベクトルを表示したいフォノンを選ぶ(エネルギーの低い順です)
  3. いったん [Hide] ボタンを押してウィンドウを最小化する
  4. [Display] から [Forces] を選ぶ
  5. このままだと矢印が長すぎるので、[Modify] → [Force Settings] でLength Factorの大きさを調節する(デフォルトは200だが30くらいがちょうどよい)

X点のフォノン

今度はX点(2π/a,0,0)のフォノンを調べます。 手順はさきほどと同じですが、誘電率の計算が不要です。

Si.phX.in
phonons of Si at X
 &inputph
  tr2_ph=1.0d-14,
  prefix='Si',
  outdir='./tmp/',
  fildyn='Si.dynX',
 /
1.0 0.0 0.0
$ ph.x < Si.phX.in > Si.phX.out

結果は Si.dynX に出力されます。

(中略)
 **************************************************************************
     freq (    1) =       4.207901 [THz] =     140.360482 [cm-1]
 ( -0.000000  0.000000 -0.023972  0.000000  0.706700  0.000000 ) 
 ( -0.000000  0.000000  0.706700  0.000000 -0.023972  0.000000 ) 
     freq (    2) =       4.207901 [THz] =     140.360482 [cm-1]
 ( -0.000000  0.000000 -0.706700  0.000000 -0.023972  0.000000 ) 
 ( -0.000000  0.000000 -0.023972  0.000000 -0.706700  0.000000 ) 
     freq (    3) =      12.236850 [THz] =     408.177391 [cm-1]
 ( -0.999882  0.000000  0.000000  0.000000  0.000000  0.000000 ) 
 ( -0.015351  0.000000 -0.000000  0.000000  0.000000  0.000000 ) 
     freq (    4) =      12.236850 [THz] =     408.177391 [cm-1]
 ( -0.015351  0.000000  0.000000  0.000000  0.000000  0.000000 ) 
 (  0.999882  0.000000 -0.000000  0.000000  0.000000  0.000000 ) 
     freq (    5) =      13.746712 [THz] =     458.540957 [cm-1]
 (  0.000000  0.000000 -0.000000  0.000000  0.707107  0.000000 ) 
 ( -0.000000  0.000000 -0.707107  0.000000  0.000000  0.000000 ) 
     freq (    6) =      13.746712 [THz] =     458.540957 [cm-1]
 (  0.000000  0.000000  0.707107  0.000000  0.000000  0.000000 ) 
 (  0.000000  0.000000  0.000000  0.000000 -0.707107  0.000000 ) 
 **************************************************************************

2重に縮退したものが3つあることがわかります。

変位ベクトルを計算する場合は次のファイルを用意して、Γ点と同じように計算してください。

Si.dynmatX.in
&inputfil
  dyn ='Si.dynX',
  filxsf = 'dynmatX.axsf'
/
$ dynmat.x < Si.dynmatX.in > Si.dynmatX.out