analyze_symmetry_k.py の技術ドキュメント

プログラムの動作

analyze_symmetry_k.py は、結晶構造における配位子環境の対称性を解析し、中心金属d軌道とのハイブリダイゼーションの可能性を点群対称性の観点から評価するPythonプログラムです。さらに、指定された波数ベクトル (\(k\) 点) ごとに、Bloch位相を考慮した対称適応線形結合 (Symmetry Adapted Linear Combinations, SALC) を抽出し、そのk互換性を評価して表示します。

主な機能は以下の通りです。

  1. 構造データのロード: JSON形式の入力ファイルから、格子情報、配位子座標、中心金属d軌道タイプ、各種解析設定を読み込みます。

  2. 点群の自動検出: tkpg ライブラリのプラグインを利用し、配位子の幾何学的配置から最も適切な点群を自動で検出します。

  3. 座標のアラインメント: 検出された点群の標準的な軸規約に合うように、配位子の座標を変換・アラインします。

  4. 簡約表現の分解: 配位子上の軌道(mode 設定に基づく)が形成する簡約表現を構築し、検出された点群の既約表現へと分解します。

  5. ハイブリダイゼーションの評価: 中心金属d軌道に対応する既約表現が配位子軌道の簡約表現の分解結果に含まれるかを判定し、点群対称性に基づくハイブリダイゼーションの可否を診断します。

  6. k点ごとのSALC抽出: 検出された点群のSALCを抽出し、さらに指定された各波数ベクトル \(k\) に対してBloch位相を適用し、k-compatibleなSALCを特定してその構成成分と位相情報を出力します。

本プログラムは、周期的な配位子環境における電子状態の対称性を深く理解し、中心金属軌道との相互作用(ハイブリダイゼーション)や、特定のk点における軌道のBloch性を解析するための基盤を提供します。

原理

点群対称性の自動検出と簡約表現の分解

プログラムは、与えられた配位子のデカルト座標に基づいて、最も適切な点群を自動で検出します。これは tkpg ライブラリが提供する各点群プラグインの align_guesssymmetry_hit_rate メソッドを利用し、幾何学的配置に対する対称操作の一致率を評価することで行われます。最も高い一致率を示す点群が採用されます。

検出された点群の既約表現とその指標(キャラクター)を用いて、配位子軌道が形成する簡約表現 \(\Gamma\) を既約表現に分解します。簡約表現の多重度 \(n_i\) (すなわち、既約表現 \(i\) が簡約表現 \(\Gamma\) に含まれる回数) は、以下の公式によって計算されます。

\[ n_i = \frac{1}{|G|} \sum_R \chi(R) \chi_i(R)^* \]

ここで、

  • \(|G|\) は点群の位数(操作の総数)

  • \(R\) は点群の各対称操作

  • \(\chi(R)\) は操作 \(R\) に対する簡約表現の指標

  • \(\chi_i(R)^*\) は操作 \(R\) に対する既約表現 \(i\) の指標の複素共役

tkpg.core.build_reducible_characters 関数が簡約表現の指標を構築し、tkpg.core.decompose_generic 関数が上記の公式を用いて多重度を計算します。

中心金属d軌道とハイブリダイゼーション

中心金属の特定のd軌道(例: \(d_{xy}, d_{z^2}\) など)は、特定の点群の既約表現に対応しています。プログラムは、入力ファイルで指定されたd軌道が、配位子軌道の簡約表現の分解結果に含まれるかどうかを確認します。もし対応する既約表現の多重度がゼロよりも大きい場合、点群対称性の観点からハイブリダイゼーションが許容されると判断されます。

対称適応線形結合 (SALC) と Bloch 位相

SALCは、対称操作によって既約表現の基底に変換される軌道の線形結合です。プログラムは tkpg.core.extract_salc 関数を用いて、各既約表現に対応する点群のSALCを抽出します。

周期的な結晶構造においては、電子状態はBlochの定理に従い、並進操作に対して波数ベクトル \(k\) に依存する位相因子 \(e^{i k \cdot T}\) を持ちます。

\[ \Psi_k(r + T) = e^{i k \cdot T} \Psi_k(r) \]

ここで、

  • \(\Psi_k(r)\) は波数ベクトル \(k\) を持つBloch関数

  • \(T\) は結晶の並進ベクトル

analyze_symmetry_k.py は、入力で与えられた各 \(k\) 点について、抽出された点群SALCにBloch位相因子を適用し、k-compatible な SALCをフィルタリングします。tkpg.core.filter_salcs_by_k 関数は、サイトの周期性情報 (site_id, cell_T) を利用してこのフィルタリングを行います。最終的に出力されるSALCは、このBloch位相因子を考慮した複素係数を持つことになります。これにより、特定のk点における周期構造の対称性をより正確に記述することができます。

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

analyze_symmetry_k.py は以下の非標準ライブラリに依存しています。

  • numpy: 数値計算、特に配列操作に必要です。

  • tkpg: 対称性解析の主要な機能(点群検出、既約表現、SALC抽出など)を提供します。

これらのライブラリは、Pythonのパッケージマネージャー pip を使用してインストールできます。

pip install numpy tkpg

必要な入力ファイル

プログラムは、デフォルトで structure_k.json という名前のJSONファイルを読み込みます。ファイル名はコマンドライン引数 --infile で変更可能です。

入力ファイルは以下の構造を持つ辞書型データを含んでいる必要があります。

キー

タイプ

説明

必須

デフォルト値

lattice

list[list[float]]

3x3の行列で表現される格子ベクトル。行が基底ベクトル。

必須

[[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]

ligands_frac

list[list[float]] (または None)

配位子の分数座標のリスト。ligands_pos と排他的。

いずれか

None

ligands_pos

list[list[float]] (または None)

配位子のデカルト座標のリスト。ligands_frac と排他的。

いずれか

None

d_orbital

str

中心金属のd軌道のタイプ(例: "d_xy", "d_z^2" など)。

任意

"d_xy"

mode

str

SALC構築のモード(例: "full", "s", "p" など)。

任意

"full"

center_ligands

bool

配位子の重心を原点に移動するかどうか。周期系では推奨されません。

任意

False

tolerances

dict

各種許容誤差の設定。

任意

{}

  tol_match_geom

float

幾何学的マッチングの許容誤差。

任意

5e-3

  tol_match_D

float

簡約表現構築時の行列のトレースマッチングの許容誤差。

任意

5e-3

  tol_frac_site

float

周期サイトクラスタリングの分数座標での許容誤差。

任意

1e-6

salc

dict

SALC計算に関する設定。

任意

{}

  salc_eig_tol

float

SALC抽出時の固有値の許容誤差。

任意

1e-6

  coeff_tol

float

簡約表現分解係数表示の閾値。

任意

1e-6

  print_coeffs

bool

簡約表現分解の係数を表示するか。

任意

True

  print_salc_thr

float

SALC係数表示の閾値。この値より小さい係数は表示されない。

任意

1e-3

  max_salc_per_irrep

int (または None)

各既約表現で表示するSALCの最大数。

任意

None (全て表示)

autodetect

dict

点群自動検出に関する設定。

任意

{}

  min_rate_strict

dict

特定の点群に対する厳密なヒットレートの閾値。

任意

{}

  tie_eps

float

点群検出でのタイブレーク時の許容誤差。

任意

1e-12

kpoints_frac

list[list[float]]

解析する波数ベクトル(分数座標)のリスト。

任意

[[0.0, 0.0, 0.0]]

k_tol

float

k点互換性フィルタリングの許容誤差。

任意

1e-6

structure_k.json の例:

{
    "lattice": [
        [3.0, 0.0, 0.0],
        [0.0, 3.0, 0.0],
        [0.0, 0.0, 3.0]
    ],
    "ligands_frac": [
        [0.5, 0.0, 0.0],
        [0.0, 0.5, 0.0],
        [0.0, 0.0, 0.5],
        [-0.5, 0.0, 0.0],
        [0.0, -0.5, 0.0],
        [0.0, 0.0, -0.5]
    ],
    "d_orbital": "d_xy",
    "mode": "full",
    "kpoints_frac": [
        [0.0, 0.0, 0.0],
        [0.5, 0.0, 0.0]
    ],
    "tolerances": {
        "tol_match_geom": 1e-3
    },
    "salc": {
        "print_salc_thr": 0.01
    }
}

この例は、立方晶格子(辺長3.0)の中心に金属原子があり、その周りに正八面体状に6つの配位子が存在する状況を想定しています。解析対象のd軌道は \(d_{xy}\) であり、ガンマ点 (\(\Gamma\), \(k=(0,0,0)\)) とX点 (\(k=(0.5,0,0)\)) でのSALCを評価します。

生成される出力ファイル

analyze_symmetry_k.py は、いかなるファイルも生成しません。全ての解析結果は標準出力(コンソール)に表示されます。

出力される主な情報には以下のものが含まれます。

  • 自動検出された点群: 最も適合する点群の名前、ヒット率、厳密な判定タグ。

  • 点群候補リスト: 他の点群候補とそのヒット率。

  • 中心金属d軌道の情報: 指定されたd軌道のタイプと、それが属する既約表現。

  • 配位子簡約表現の分解: 配位子軌道が形成する簡約表現が、各既約表現にどのように分解されるか(多重度)。

  • ハイブリダイゼーションチェック: 点群対称性に基づく、d軌道とのハイブリダイゼーションの可否判定。

  • k点ごとのSALC情報:

    • 各既約表現ごとに、k-compatibleなSALCの数。

    • 各SALCの具体的な構成(どの配位子のどの軌道から構成されるか)とその複素係数。

    • Bloch位相を考慮した係数で表示されます。

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

基本的な実行コマンドは以下の通りです。

python analyze_symmetry_k.py [OPTIONS]

利用可能なオプション:

  • --infile INFILE: 入力として使用する構造JSONファイルのパスを指定します。デフォルトは structure_k.json です。

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

上記「必要な入力ファイル」セクションで示した structure_k.json を使用する場合の実行例です。

structure_k.json の内容 (再掲):

{
    "lattice": [
        [3.0, 0.0, 0.0],
        [0.0, 3.0, 0.0],
        [0.0, 0.0, 3.0]
    ],
    "ligands_frac": [
        [0.5, 0.0, 0.0],
        [0.0, 0.5, 0.0],
        [0.0, 0.0, 0.5],
        [-0.5, 0.0, 0.0],
        [0.0, -0.5, 0.0],
        [0.0, 0.0, -0.5]
    ],
    "d_orbital": "d_xy",
    "mode": "full",
    "kpoints_frac": [
        [0.0, 0.0, 0.0],
        [0.5, 0.0, 0.0]
    ],
    "tolerances": {
        "tol_match_geom": 1e-3
    },
    "salc": {
        "print_salc_thr": 0.01
    }
}

実行コマンド:

python analyze_symmetry_k.py --infile structure_k.json

実行結果の説明:

上記の例は、正八面体配位子(例:金属錯体、ペロブスカイト構造の酸素八面体など)を模しており、点群 \(O_h\) が検出されることが期待されます。中心金属の \(d_{xy}\) 軌道は、\(O_h\) 点群では\(T_{2g}\) 既約表現に属します。配位子の軌道が \(T_{2g}\) 既約表現を含む場合、ハイブリダイゼーションは対称性的に許容されます。

出力は以下のような形式で表示されます(実際の数値は tkpg の実装や許容誤差によって若干異なる場合がありますが、構造は同様です)。

[Auto-detected point group]  Oh   (hits=48/48, hit_rate=1.000)
[Candidates]
    Oh : hits=48/48  rate=1.000  ok_align=True
    O  : hits=24/24  rate=1.000  ok_align=True
    ... (他の候補点群)

[Central metal d orbital]
  Orbital : d_xy
  Irrep   : T2g

[Ligand reducible rep decomposition (Oh)]
  A1g: 1.000000
  Eg: 1.000000
  T1u: 2.000000
  T2g: 1.000000
  T2u: 1.000000
  A2u: 1.000000
  Eu: 1.000000
  ... (その他の既約表現)

[Hybridization check (symmetry-only)]
  ✔ Allowed by point-group symmetry: ligand contains T2g

[All ligand SALCs with Bloch phase]  point_group=Oh  mode=full

[k-compatibility] irrep=A1g  k_frac=(0.000,0.000,0.000)  compatible=1/1
SALC of A1g (dim=1)
  SALC 1
    0.4082 (0.4082+0.0000i) Ligand 0 (pos: 1.500,0.000,0.000, cell_T: (0,0,0)) px
    0.4082 (0.4082+0.0000i) Ligand 0 (pos: 1.500,0.000,0.000, cell_T: (0,0,0)) py
    0.4082 (0.4082+0.0000i) Ligand 0 (pos: 1.500,0.000,0.000, cell_T: (0,0,0)) pz
    ... (SALCの構成要素と係数)

[k-compatibility] irrep=T2g  k_frac=(0.000,0.000,0.000)  compatible=3/3
SALC of T2g (dim=3)
  SALC 1
    0.4082 (0.4082+0.0000i) Ligand 0 (pos: 1.500,0.000,0.000, cell_T: (0,0,0)) px
    -0.4082 (-0.4082+0.0000i) Ligand 1 (pos: 0.000,1.500,0.000, cell_T: (0,0,0)) py
    ... (T2gのSALCが3つ表示される)

[k-compatibility] irrep=A1g  k_frac=(0.500,0.000,0.000)  compatible=1/1
SALC of A1g (dim=1)
  SALC 1
    0.4082 (0.4082+0.0000i) Ligand 0 (pos: 1.500,0.000,0.000, cell_T: (0,0,0)) px
    ... (k=(0.5,0,0)でのSALC。Bloch位相により複素係数になる場合がある)

[k-compatibility] irrep=T2g  k_frac=(0.500,0.000,0.000)  compatible=3/3
SALC of T2g (dim=3)
  SALC 1
    0.4082 (0.4082+0.0000i) Ligand 0 (pos: 1.500,0.000,0.000, cell_T: (0,0,0)) px
    -0.4082 (0.0000-0.4082i) Ligand 1 (pos: 0.000,1.500,0.000, cell_T: (0,0,0)) py
    ... (k=(0.5,0,0)でのT2gのSALC。Bloch位相の影響が確認できる)

この出力からは、正八面体配位子環境がOh点群として正しく認識され、d_xy軌道に対応するT2g既約表現が配位子軌道に存在するため、ハイブリダイゼーションが許容されることがわかります。また、ガンマ点およびX点における各既約表現のSALCが、それぞれの配位子の軌道の線形結合として、Bloch位相を考慮した係数で詳細に表示されます。