技術ドキュメント: vib_irreps.py

プログラムの動作

vib_irreps.py は、指定された分子のXYZ座標ファイルと点群シンボルに基づき、その分子の振動モードの既約表現(irreducible representations, irreps)を計算するPythonプログラムです。

主な機能:

  • 分子座標の読み込み: 標準的なXYZフォーマットから原子座標を読み込みます。

  • 点群の解析: 指定されたSchoenflies記法(例: C2v, Td, Oh)の点群を解析し、その指標表と対称操作を取得します。

  • 指標の計算:

    • 全自由度(Γ_3N)の表現指標。

    • 並進(Γ_T)の表現指標。

    • 回転(Γ_R)の表現指標。

    • 上記を用いて振動(Γ_v = Γ_3N - Γ_T - Γ_R)の表現指標を導出します。

  • 既約表現への分解: 振動表現Γ_vを、点群の既約表現の組み合わせに分解します。

  • 抽象モードのサポート: 複雑な操作行列を持つ一部の点群(例: I, Ih, C3h)に対しては、クラスサイズ情報のみを用いた「抽象モード」で近似的な解析を実行します。

解決する課題: このプログラムは、分子の振動スペクトル(IR、ラマン)の理論的予測や、分子軌道計算、分子動力学シミュレーションにおける対称性の事前分析に役立ちます。実験結果の解釈や、特定のリガンド結合モードの同定など、分子の振動状態に関する深い理解をサポートします。

原理

このプログラムは、群論における指標理論と直交性定理を利用して分子の振動モードを既約表現に分解します。

  1. 全自由度表現 (Γ_3N) 分子を構成する \(N\) 個の原子はそれぞれ \(x, y, z\) の3方向の自由度を持つため、全体で \(3N\) 個の自由度があります。点群の各対称操作 \(R\) に対して、この \(3N\) 個の自由度がどのように変換されるかを示す表現がΓ_3Nです。その指標 \(\chi_{3N}(R)\) は、操作 \(R\) によって位置が固定される原子の数 \(N_R\) と、操作 \(R\) の3x3回転行列のトレース \(\text{Tr}(R)\) を用いて以下のように計算されます。

    \[ \chi_{3N}(R) = N_R \times \text{Tr}(R) \]

    \(\text{Tr}(R)\) は、操作 \(R\) が純粋な回転であれば \(1 + 2 \cos \theta\)、鏡映であれば \(1 + 2 \cos \theta'\)、反転であれば \(-3\) となります。

  2. 並進表現 (Γ_T) 分子全体の並進運動(\(T_x, T_y, T_z\) の3自由度)に対応する表現です。その指標 \(\chi_T(R)\) は、操作 \(R\) の3x3回転行列のトレースに等しくなります。

    \[ \chi_T(R) = \text{Tr}(R) \]
  3. 回転表現 (Γ_R) 分子全体の回転運動(\(R_x, R_y, R_z\) の3自由度、ただし直線分子の場合は2自由度)に対応する表現です。その指標 \(\chi_R(R)\) は、並進表現から回転の寄与を差し引くことで計算されます。非直線分子の場合、恒等操作 \(E\) に対しては3、それ以外の操作に対しては \(1 + 2 \cos \theta\) で表される回転成分から軸に沿った並進成分を引いたものなど、点群の性質と操作の種類によって異なる形で計算されます。具体的には tkpointgroup ライブラリがこれらの計算を内部で処理します。

  4. 振動表現 (Γ_v) 分子の \(3N\) 個の全自由度から、分子全体の並進運動と回転運動を除いたものが、純粋な分子振動の自由度に対応します。したがって、その指標 \(\chi_v(R)\) は以下の関係式で与えられます。

    \[ \chi_v(R) = \chi_{3N}(R) - \chi_T(R) - \chi_R(R) \]
  5. 既約表現への分解 振動表現Γ_vは、点群の既約表現の線形結合として表すことができます。各既約表現 \(\Gamma_i\) の多重度 \(n_i\) は、群論における直交性定理を用いて計算されます。

    \[ n_i = \frac{1}{h} \sum_k g_k \chi_v(C_k) \chi_i(C_k)^* \]

    ここで、\(h\) は点群の位数(対称操作の総数)、\(C_k\)\(k\) 番目の対称クラス、\(g_k\) はクラス \(C_k\) に含まれる操作の数(クラスサイズ)、\(\chi_v(C_k)\) は振動表現のクラス \(C_k\) における指標、\(\chi_i(C_k)^*\) は既約表現 \(\Gamma_i\) のクラス \(C_k\) における指標の複素共役です(多くの場合、実数)。この計算も tkpointgroup ライブラリが実行します。

  6. 抽象モード 一部の点群(例: I, Ih, C3h)では、具体的な3x3対称操作行列を生成することが困難であるか、非常に複雑になります。このような点群に対しては、「抽象モード」が使用されます。このモードでは、クラスのサイズ情報のみを利用し、Γ_3Nの指標は恒等操作 E においてのみ \(3N\) とし、その他の操作では0と仮定することで計算を簡略化します。これにより、これらの特殊な点群でも振動表現の分解が可能になりますが、精度は通常のモードより劣る可能性があります。

必要な非標準ライブラリとインストール方法

このプログラムは以下の非標準ライブラリを使用します。

  • numpy: 数値計算(特に配列操作)に使用されます。

    • インストール方法:

      pip install numpy
      
  • tkpointgroup: 点群の特性表、対称操作、指標計算、既約表現分解などの群論計算を実行するための共通ライブラリです。

    • インストール方法: このライブラリは標準のPython Package Index (PyPI) に登録されていません。プログラムのコメントに「共通ライブラリ」と記載されていることから、利用環境に事前に提供されているか、別途入手・インストールする必要があるカスタムライブラリであると想定されます。具体的なインストール手順は、tkpointgroup の提供元にお問い合わせください。

必要な入力ファイル

プログラムは、解析対象の分子構造を記述したXYZ形式のファイルが必要です。

  • ファイル形式: 標準的なXYZフォーマット。

  • ファイル名: 任意のファイル名(例: molecule.xyz)。

  • データ構造: 1行目 (オプション): 原子数。プログラムはこの行が存在しない場合や数値として解析できない場合も対応します。 2行目 (オプション): コメント行。 3行目以降: 各原子のデータ行。 原子シンボル X座標 Y座標 Z座標 各行は少なくとも4つのトークン(原子シンボルと3つの座標)を含み、最後の3つのトークンが浮動小数点数としてX, Y, Z座標として解釈されます。

XYZファイルの例 (CH4.xyz):

5
Methane molecule
C 0.000000 0.000000 0.000000
H 0.629000 0.629000 0.629000
H 0.629000 -0.629000 -0.629000
H -0.629000 0.629000 -0.629000
H -0.629000 -0.629000 0.629000

生成される出力ファイル

vib_irreps.py は、実行によってファイルを出力することはありません。すべての結果は標準出力(コンソール)に表示されます。

出力内容:

  1. 点群情報: 解析対象の点群シンボル(Schoenflies)、Hermann–Mauguin表記、および解析モード(normalまたはabstract)。

  2. 対称クラス: 点群に属するすべての対称クラスの名称。

  3. 指標のサマリー:

    • Γ_3N chars: 全自由度表現の各対称クラスにおける指標。

    • Γ_T chars: 並進表現の各対称クラスにおける指標。

    • Γ_R chars: 回転表現の各対称クラスにおける指標。

    • Γ_v chars: 振動表現の各対称クラスにおける指標。

  4. 振動既約表現: 最終的に分解された振動モードの既約表現のリストと多重度(例: 3A1 + 2B1 + ...)。

コマンドラインでの使用例 (Usage)

vib_irreps.py をコマンドラインから実行する際の基本的な構文は以下の通りです。

python vib_irreps.py --pg <point_group_symbol> --xyz <xyz_file_path> [--tol <tolerance>]
  • <point_group_symbol>: 解析する点群のSchoenflies記法シンボル(例: Td, Oh, C2v)。サポートされている点群はプログラムのヘルプメッセージで確認できます。

  • <xyz_file_path>: 分子構造を記述したXYZファイルへのパス。

  • --tol <tolerance> (オプション): 原子が対称操作によって「固定されている」と見なす際の許容誤差(単位: オングストローム)。デフォルト値は 1e-5 です。

コマンドラインでの具体的な使用例

例1: メタン分子 (CH4, 点群 Td)

準備: CH4.xyz ファイルの作成

以下の内容で CH4.xyz ファイルを作成します。

5
Methane molecule
C 0.000000 0.000000 0.000000
H 0.629000 0.629000 0.629000
H 0.629000 -0.629000 -0.629000
H -0.629000 0.629000 -0.629000
H -0.629000 -0.629000 0.629000

実行コマンド:

python vib_irreps.py --pg Td --xyz CH4.xyz

実行結果の例:

Point group: Td  (HM = -43m)  mode=normal
Classes   :       E      8C3     3C2      6S4      6sd
Γ_3N chars:    15.0     0.0     -1.0      -1.0      3.0
Γ_T  chars:     3.0     0.0      -1.0      -1.0      1.0
Γ_R  chars:     3.0     0.0      -1.0       1.0      1.0
Γ_v  chars:     9.0     0.0      -3.0      -3.0      1.0

Vibrational irreps: 1A1 + 1E + 2T2

Press ENTER to terminate>>

結果の説明: メタン分子 (\(CH_4\)) の振動モードが 1A1 + 1E + 2T2 と分解されました。これは、\(A_1\) 型の非縮重振動が1つ、\(E\) 型の二重縮重振動が1つ、\(T_2\) 型の三重縮重振動が2つ存在することを示しています。これは一般的なメタンの振動解析結果と一致します。

例2: 六フッ化硫黄分子 (SF6, 点群 Oh)

準備: SF6.xyz ファイルの作成

以下の内容で SF6.xyz ファイルを作成します。

7
Sulfur Hexafluoride
S 0.00000000  0.00000000  0.00000000
F 1.56400000  0.00000000  0.00000000
F -1.56400000  0.00000000  0.00000000
F 0.00000000  1.56400000  0.00000000
F 0.00000000 -1.56400000  0.00000000
F 0.00000000  0.00000000  1.56400000
F 0.00000000  0.00000000 -1.56400000

実行コマンド:

python vib_irreps.py --pg Oh --xyz SF6.xyz

実行結果の例:

Point group: Oh  (HM = m-3m)  mode=normal
Classes   :       E      8C3     6C2      6C4      3C2'     i      6S4      8S6      3sigmaH      6sigmaD
Γ_3N chars:    21.0     0.0     -1.0      1.0      -1.0     -3.0     -1.0      0.0      3.0      3.0
Γ_T  chars:     3.0     0.0     -1.0      1.0      -1.0     -3.0     -1.0      0.0      1.0      1.0
Γ_R  chars:     3.0     0.0     -1.0      1.0      -1.0      3.0      1.0      0.0     -1.0     -1.0
Γ_v  chars:    15.0     0.0      -1.0     -1.0      -1.0     -3.0     -1.0      0.0      3.0      3.0

Vibrational irreps: 1A1g + 1Eg + 2T1u + 1T2g + 1T2u

Press ENTER to terminate>>

結果の説明: 六フッ化硫黄分子 (\(SF_6\)) の振動モードが 1A1g + 1Eg + 2T1u + 1T2g + 1T2u と分解されました。この結果も、\(Oh\) 点群の分子に期待される振動モードと一致します。