はじめに#

PostPhononBandFeature
では、 ForceConstantFeature で計算された力定数からフォノン分散を求めることができます。

計算手法#

ForceConstantFeature ( 計算手法 参照)では、 結晶構造のスーパーセルから力定数を計算する方法を紹介しました。
primitiveセルに (N) 原子を含む結晶では、力定数は (3N times 3N times M) のテンソルになります
( (M) : 力定数の計算に用いられたprimitive cell の繰り返しの回数)。
フォノン分散は力定数を解析することで求めることができます。

フォノン振動数#

まず、与えられた波数 (vec{q}) に対するフォノン振動数が計算されます。
力定数を用いて、次の式から dynamical matrix を計算します。

[tilde{D}_{vec{q}}[kalpha, k’beta] = frac{1}{sqrt{M_k M_{k’}}} tilde{C}(vec{q})[kalpha, k’beta]]
[tilde{C}(vec{q})[kalpha, k’beta] = sum_{b} {left( frac{partial ^{2} E}{partial{u_{k}^{aalpha}} partial{u_{k’}^{bbeta}}} right) e^{ivec{q}(vec{R_b} – vec{R_a})}} = sum_{b} {C^{0,b}[kalpha, k’beta] e^{ivec{q}(vec{R_b} – vec{R_a})}}]

ここで登場するベクトル (vec{q}) は波数と呼ばれ、dynamical matrixは波数に依存します。
dynamical matrix の次元は (3N times 3N) となります。

この行列を対角化することで、 (3N) の固有値と固有ベクトルを得ることができます。
固有値は波数 (vec{q}) でのフォノン振動数であり、固有ベクトルはそのフォノンモードでの原子の変位に相当します。

ブリルアンゾーン#

フォノン計算において波数 (vec{q}) が導入されました。波数は物理的には振動モードの伝播方向を表しており、これは第一ブリルアンゾーンに限定されます。

matlantis-features では、入力された結晶の第一ブリルアンゾーンを可視化する機能を提供しています。
PostPhononBandFeature 実行後、
PostPhononBandFeatureResult がアウトプットされます。
visual_k_path 関数を用いることで、第一ブリルアンゾーンを可視化できます。

../_images/brillouin.png

visual_k_path 関数を用いて描画されたシリコン結晶の第一ブリルアンゾーン。#

ブリルアンゾーン中のいくつかの高い対称性を持つ地点はspecial k-pointと呼ばれます
(このページでは波数を表すのに (q) を用いていますが、電子のバンド理論との対応のためあえてk-pointと呼ぶことにします。)
上の図では、全special k-pointが緑色にマークされています。
各ブラべー格子には固有ののspecial k-pointがあり、 (Gamma)(K) のような文字でラベル付けされています。例えば、FCC格子のブリルアンゾーンには (Gamma, K, W, X, U, L) の6つのspecial k-pointがあります。

k-point path#

全フォノン振動数を取得するためには、ブリルアンゾーン内のすべての (vec q) 点について計算を行う必要があります。しかし、実際にはいくつかの対称性の高い経路上の (vec q) 点を代表的に用いることがよくあります。
上の図で表示されている経路はspecial k-pointを繋いでいます。フォノン振動数を対象性の高い経路(k-point path)に沿ってプロットしたものを、フォノン分散と呼びます。

k-point path には標準的に使われる経路があります (後述しますが、任意に定義することもできます)。
たとえば、FCC格子では
(Gamma rightarrow X rightarrow W rightarrow K rightarrow Gamma rightarrow L rightarrow U rightarrow W rightarrow L rightarrow K)
および
(U rightarrow X)
がよく用いられます。

../_images/phonon_band.png

標準的に用いられるk-point pathに沿った、シリコン結晶のフォノン分散。#

フォノン分散#

設定されたk-point path上でフォノン振動数を計算することで、上図にプロットされたようなフォノン分散を得ることができます。

1つの k-pointには (3N) 個の振動数があるため、フォノン分散には (3N) 本の枝分かれがあります。しかし、特定の (vec{q}) 点では枝分かれが重なることがあります。

PostPhononBandFeature を用いてフォノン分散を計算するコードの例です:

# The variable "force_constant" is obtained from `ForceConstantFeature`.
# Please see `Matlantis-features: Phonon` on the launcher page.
from matlantis_features.features.phonon import PostPhononBandFeature

band = PostPhononBandFeature()
band_results = band(
  force_constant,
  labels = ['Gamma', 'X', 'W', 'K', 'Gamma', 'L', 'U', 'W', 'L', 'K', '|', 'U', 'X'],
  special_kpts = np.array([
    [0.000, 0.000, 0.000], # Gamma
    [0.500, 0.000, 0.500], # X
    [0.500, 0.250, 0.750], # W
    [0.375, 0.375, 0.750], # K
    [0.000, 0.000, 0.000], # Gamma
    [0.500, 0.500, 0.500], # L
    [0.625, 0.250, 0.625], # U
    [0.500, 0.250, 0.750], # W
    [0.500, 0.500, 0.500], # L
    [0.375, 0.375, 0.75 ], # K
    [0.625, 0.250, 0.625], # U
    [0.500, 0.000, 0.500], # X
  ]),
)

# visualize of Brillouin zone and k-point path
brillouin = band_results.visual_k_path()

# visualize of Phonon dispersion
dispersion = band_results.plot()

Tips#

  • 標準的なk-point path以外の経路を用いたい場合、 special_kpts 引数にk-pointのラベルと座標を格納したリストを渡すことで独自のk-point pathを設定することができます。

  • labelsspecial_kpts のどちらも定義されていない場合、デフォルトのk-point pathが使用されます。その場合、 style='ase' とすればASE方式、 style='phonondb' とすれば Phonon Database 方式のk-point pathを参照します。

  • k-point path を定義する際、いくつかの不連続な経路を組み合わせることができます。各経路を | で区切ってください。

Examples#

Launcherからアクセスできる Matlantis-features: Phonon および Matlantis-features: Phonon Advanced Usage をご覧ください。