Siを例に、フォノンの簡単な計算を実行してみます。
===== SCF計算 =====
事前にpw.xによるSCF計算を行います。
&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
* 金属の場合はsmearingを指定する必要がありますが、テトラヘドロン法はフォノン計算に使えません(以下のph.x実行時にエラーが出ます)。
$ pw.x < Si.scf.in > Si.scf.out
===== Γ点のフォノン =====
電子状態の計算が終われば、フォノンの振動数を計算できるようになる。 まず、k=(0,0,0)のΓ点におけるフォノンを計算してみる。 以下のファイルを用意する。
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_ph|1.0d-12|フォノンの計算の収束条件。経験的に1.0d-14を使ったほうがよい|
|prefix|pwscf|SCF計算で使用したプレフィックスと同じにする|
|epsil|.false.|誘電率を計算する。Γ点の計算に必要。ただし.true.にする場合は、半導体かつΓ点の計算でないとエラーが出る|
|outdir|./|出力ファイルの場所。SCF計算のものと同じにする|
|fildyn|matdyn|結果であるdynamical matrixを出力するファイル名|
* 金属の場合は、epsil=.false.として、計算するk点を 0.01 0.0 0.0 のようにΓ点から少しずらしてやるとうまくいきます。
実行は次のようにします。
$ ph.x < Si.phG.in > Si.phG.out
結果はfildynで指定したもの(今の場合は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 )
**************************************************************************
* 6つの振動モードがあって、それぞれのΓ点における振動数がわかる。
* 音響モード(-0.170404 THz とあるが、これは0と見てよい)と光学モード(15.296893 THz)がそれぞれ三重に縮退している。
* 音響モードの振動数を0にしたければ構造緩和を行うとよい。
* 原子の変位ベクトルは、例えばfreq 4であれば1番目のSiが(-0.463984, 0.270574, 0.459900)方向、2番目のSiが(0.463984, -0.270574, -0.459900)である(デカルト座標)。
* 振動モードの既約表現はSi.phG.out内に出力されている。
フォノンの振動に対応する変位ベクトルはXcrysDenを使って見ることができます。
次のファイルを用意します。
&inputfil
dyn ='Si.dynG',
filxsf = 'dynmatG.axsf'
asr ='simple',
lperm = .true.,
q(1)=1.0,
q(2)=0.0,
q(3)=0.0
/
* Γ点のフォノンは q->0 の極限で定義されます。lpermは q=(q(1), q(2), q(3)) に沿って q->0 の極限をとることを指定します。
* Si.phG.inで波数を 0.01 0.0 0.0 とした場合はasrおよびlpermの行を削除して q(1) = 0.01 としてください。
* asrはacoustic sum ruleの略で、'simple'にするとΓ点で音響フォノンの振動数がゼロになるようにします。デフォルトは'no'(何もしない)です。このほか、次のものが指定できます
* zero-dim ... 分子の計算で使います
* one-dim ... 1次元系の計算(カーボンナノチューブなど)に使います
* crystal ... simpleよりも計算精度があがりますが、その分コストも増えます。simpleでうまく行かない場合はこちらにします。
実行は次のようにします。
$ dynmat.x < Si.dynmatG.in > Si.dynmatG.out
すると dynmatG.axsf というファイルができるので、以下の手順で変位ベクトルを表示します。
- XCrysDenを起動して、[File] -> [Open Structure] -> [Open AXSF] よりdynmatG.axsfを開く
- ウィンドウが開くので、矢印ボタンを押して変位ベクトルを表示したいフォノンを選ぶ(エネルギーの低い順です)
- いったん [Hide] ボタンを押してウィンドウを最小化する
- [Display] から [Forces] を選ぶ
- このままだと矢印が長すぎるので、[Modify] -> [Force Settings] でLength Factorの大きさを調節する(デフォルトは200だが30くらいがちょうどよい)
===== X点のフォノン =====
今度はX点(2π/a,0,0)のフォノンを調べます。
手順はさきほどと同じですが、誘電率の計算が不要です。
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つあることがわかります。
変位ベクトルを計算する場合は次のファイルを用意して、Γ点と同じように計算してください。
&inputfil
dyn ='Si.dynX',
filxsf = 'dynmatX.axsf'
/
$ dynmat.x < Si.dynmatX.in > Si.dynmatX.out