vib_irreps プログラム仕様
点群の指標表を用いて分子の振動既約表現を計算するスクリプト。
- 概要:
指定されたXYZファイルと点群シンボルに基づき、分子の振動モードの既約表現を決定します。
- 詳細説明:
本スクリプトは、分子の対称性を表す点群(Schoenflies表記、例: C2v, D3d, Td, Oh, C3h, C4h, Ch, I, Ih)と 分子の構造情報を含むXYZファイルを引数として受け取ります。 pymatgen が利用可能な環境では、ヘルマン・モーガン表記を内部で使用することがありますが、 それ以外の場合や特定の点群(I, Ih, C3hなど)については、既知のクラスサイズと一般位置の仮定に基づく 「抽象モード」にフォールバックします。
計算は、まず全自由度に対応する指標 (Γ_3N) を、固定された原子のカウント(サイトベース)または 一般位置の仮定から構築します。その後、分子の並進運動 (Γ_T) と回転運動 (Γ_R) の指標を差し引き、 純粋な振動モードに対応する指標 (Γ_v) を導出します。 最終的に、このΓ_vを指標の直交性定理を用いて、各既約表現への分解係数(多重度)を決定します。
- 関連リンク:
- 使用例:
python vib_irreps.py --pg Td --xyz CH4.xyz python vib_irreps.py --pg Oh --xyz SF6.xyz python vib_irreps.py --pg D6h --xyz C6H6.xyz python vib_irreps.py --pg I --xyz C60.xyz
- crystal.vib_irreps.load_coords_from_xyz(path: str) ndarray[ソース]
指定されたXYZファイルから原子の座標を読み込みます。
- 概要:
XYZファイルから原子の座標をNumPy配列として読み込みます。
- 詳細説明:
ファイル内の空行やコメント行、または座標情報を含まない行をスキップし、 数値データのみを解析してNumPy配列として返します。 最初の数行はヘッダー(原子数、コメント行)であると想定し、 適切な行から座標の読み込みを開始します。 もし最初の行が整数でない場合(例えばコメント行で始まる場合)は、 行の読み込み開始位置を自動的に調整します。
- パラメータ:
path -- str: 読み込むXYZファイルのパス。
- 戻り値:
numpy.ndarray: 読み込まれた原子座標の配列 (N, 3)。ファイルが空の場合、空の配列を返します。
- crystal.vib_irreps.main()[ソース]
スクリプトの主処理を実行し、分子の振動既約表現を計算して表示します。
- 概要:
コマンドライン引数から点群とXYZファイルパスを受け取り、 分子の振動モードの既約表現を計算して結果を表示します。
- 詳細説明:
コマンドライン引数(点群シンボル、XYZファイルパス、許容誤差)を解析します。
指定された点群シンボルを正規化し、サポートされている点群であることを確認します。
XYZファイルから原子座標を読み込み、座標が解析できなかった場合はエラーで終了します。
点群の特性表と、点群が「抽象モード」(例: I, Ih, C3h など、操作行列が直接定義されていない高対称点群) であるかどうかに応じて、処理を分岐します。
- 通常モードの場合:
実際の対称操作行列 (ops) を取得します。
各操作の分類 (raw_labels) とクラスへの集約 (class_map) を行います。
Γ_3N(全自由度)、Γ_T(並進)、Γ_R(回転)の指標を計算します。
これらの指標を各対称クラスごとに集約し、Γ_v(振動)の指標を導出します。
最終的に、Γ_vを既約表現に分解します。
- 抽象モードの場合:
事前に定義されたクラスサイズ (pg.ABSTRACT_CLASS_SIZES) を使用して、 Γ_3N、Γ_T、Γ_Rの指標(特にΓ_3Nは'E'クラスで3N、他は0)を計算します。
これらからΓ_v(振動)の指標を導出します。
Γ_vを既約表現に分解します。この際、クラスサイズと群の位数をオーバーライドして使用します。
計算された各指標のキャラクターと最終的な振動既約表現の結果を標準出力に整形して表示します。
- 戻り値:
None: 計算結果を標準出力に表示します。