はじめに#

VibrationFeature
では、分子振動の各モードの振動数を計算します。

分子振動とは、分子内部の原子の周期的な運動であり、物質の熱容量、エントロピー、内部エネルギーなどに寄与しています。
実験では赤外吸収分光法やラマン分光法により振動数を測定することができます。
一方、数値計算ではDFPTや有限差分法などから分子振動を求めることができます。
VibrationFeature では有限差分法を採用しています。

計算手法#

分子のポテンシャルエネルギー(V)は、安定構造付近では次のように近似できます。

[V(mathbf{r}) approx V(mathbf{r_0}) + frac{1}{2} sum_{ijalphabeta} frac{partial^2 V(mathbf{r_0})}{partial r_i^{alpha} partial r_j^{beta}} Delta mathbf{r}_i^{alpha} Delta mathbf{r}_j^{beta}]

(alpha) および (beta) はx, y, zです。
第2項 (frac{partial^2 V(mathbf{r_0})}{partial r_i^{alpha} partial r_j^{beta}}) は力定数行列(force constant matrix)と呼ばれています。

N個の原子からなる分子の力定数行列は3N×3Nの大きさになり、対角化すると3N個の固有値と固有ベクトルが得られます。各固有ベクトルは振動モードに、固有値は振動数に対応します。

力定数行列は有限差分法により次のように近似して求めます。

[frac{partial^2 V(mathbf{r_0})}{partial r_i^{alpha} partial r_j^{beta}} = -frac {F_i^{alpha}(Delta r_j^{beta}) – F_i^{alpha}(-Delta r_j^{beta})} {2Delta r_j^{beta}}]

ここで、(F_i^alpha(Delta r_j^{beta})) は、
原子 (j) を平衡位置から (beta) 方向へ距離 (Delta r_j^{beta}) だけ変位させたときの、
原子 (i) にかかる (alpha) 方向の力を表します。
VibrationFeature 内部では、各原子をx,y,zの3方向に (Delta r_j^{beta}) だけ変位させ、変位に伴って発生する力をPFPを用いて計算しています。

並列計算による高速化#

振動数計算時間は力の計算が支配的で、マルチスレッドによる並列計算が有効です。
VibrationFeaturenum_threads 引数でスレッド数を指定することで並列度の指定ができます (デフォルト値: 20)。

小さなシリコン結晶(64原子)において、振動数計算において支配的である力の計算時間をスレッド数を変えて比較した実験結果を以下の表に示します。
表が示すように20スレッドを使用した計算は1スレッドと比べて3.6倍速いことがわかります。

../_images/test_parallel_calc.png

力の計算時間#

ただし、適切なスレッド数はテナント全体の計算負荷やご契約プランによって異なることにご注意ください。
さらに、入力データサイズが大きすぎたりスレッド数が多すぎる場合には Too big for memory エラーが発生することがあります。
例えば、55スレッドで2048原子のシリコン結晶の力を並列計算するとエラーが発生しますので、利用条件に合わせて調整していただく必要があります。

VibrationFeature だけでなく VibrationFeature を内部で使用している ComplexGasFormationEnthalpy , GasStandardFormationEnthalpy でも並列計算による高速化の恩恵があります。

Tips#

  • 前述したように、振動解析には安定構造を使用する必要があります。構造が安定ではない場合、振動数が虚数になることがあります。

  • N個の原子からなる分子には、3N個の振動モードがあります。しかし、線形分子では最初の5個(非線形分子では最初の6個)の振動モードは分子全体の並進および回転運動に相当するため、振動数は0となります。

  • もし、想定よりも多くの振動モードが虚数振動となってしまう場合は、計算条件をよく確認してください。よくある原因として、次のようなものが挙げられます。
    • 入力された構造が十分に最適化されていない。

    • (Delta) の設定が適切ではない。

  • 並列度は num_threads 引数 (デフォルト値: 20)で指定することができます。しかし、入力が大きい場合は Too big for memory エラーを避けるために小さな値を num_threads に指定してください。

Post-calculation Features#

  • PostVibrationGasThermoFeature

Examples#

Launcherから開ける Matlantis-features: ガス分子の熱的性質と生成エンタルピー をご参照ください。