# 幾何解析

すべての分子物性が電子密度から来るわけではありません。この最後の物性章は `qc.prop` の純粋に**幾何学的**な記述子
— 核位置（一部は van der Waals 半径も）だけから計算でき、波動関数にまったく触れない量 — を扱います。これらは
qc-rs を回転分光学、充填/溶媒接触可能表面の推論、動径構造解析に結びつけます。

## 理論:慣性モーメントから回転定数へ

剛体分子の回転エネルギー準位 — マイクロ波/回転スペクトルが測るもの — は、質量中心に対する核の質量と位置だけ
から作られる**慣性モーメントテンソル**で決まります:

$$
I_{\alpha\beta} = \sum_A m_A\big(|\mathbf r_A|^2\delta_{\alpha\beta} - r_{A,\alpha}r_{A,\beta}\big).
$$

$\mathbf I$ を対角化すると 3 つの**主慣性モーメント** $I_a\le I_b\le I_c$（$\text{amu}\cdot\text{Å}^2$）が
得られ、各々が**回転定数**に変換されます:

$$
X = \frac{h}{8\pi^2 c\,I_X}, \qquad X \in \{A,B,C\},
$$

慣習的に GHz か cm⁻¹ で報告します。**線形**分子は自身の軸周りの慣性モーメントが $I_a=0$ で、独立な回転定数は
2 つだけ;**非対称コマ**（一般の場合、例えば水）は 3 つとも異なり;**対称コマ**は 2 つが等しい。これらの定数は
まさに回転/マイクロ波スペクトルが直接測るもので、qc-rs の構造から計算することは「計算した構造」から「予測
される回転スペクトル」への橋であり、（[Hessian と熱化学](../hessian-frequencies-thermo.md) と類似の質量重み
付き機構を使って）熱化学に入る回転分配関数でもあります。

## 使い方

```python
import qc
water = "O 0 0 0.117; H 0 0.757 -0.469; H 0 -0.757 -0.469"
m = qc.chk.new(atom=water, ao="sto-3g", unit="angstrom").scf(ref="r").run()

rc = qc.prop.geom.rotational_constants(m)
rc["constants_ghz"]           # [822.15, 437.53, 285.56]  A, B, C（GHz）
rc["moments_amu_angstrom2"]   # [0.615, 1.155, 1.770]      I_a, I_b, I_c
```

水の 3 つの異なる回転定数は、それを**非対称コマ**として確認します — 屈曲した低対称の形と整合します。これは
収束した構造だけを必要とし波動関数は不要なので、最適化した構造でも打ち込んだままの構造でも同じように動きます
（もっとも前者だけが本物の平衡スペクトルに対応します）。

## その他の幾何記述子

さらに 3 つの leaf が `qc.prop.geom` を締めくくり、いずれも波動関数ではなく核位置と van der Waals 半径から
作られます:

- **`surface_area(mychk)`** — スケールした van der Waals 球の和集合から求めた分子（溶媒接触可能面様）表面積、
  原子ごとの内訳つき。埋もれた面と露出した面が重要な [分散](../solvation-dispersion.md)/溶媒和の推論に有用です。
- **`free_volume(mychk)`** — バウンディングボックスを（いずれかの原子の vdW 球の内側の）*占有*体積と*自由*
  体積に分割し、自由分率を報告します — 結晶や空洞に関連する充填密度記述子です。
- **`rdf(mychk)`** — 選んだ中心の周りの原子の動径分布を、距離でビン分けします:クラスタや乱れた/拡張系で
  「各種類の最近接原子までの距離」が自然な最初の問いになる場合に有用な構造フィンガープリントです。

```python
sa = qc.prop.geom.surface_area(m)
sa["area_angstrom2"], sa["per_atom_angstrom2"]     # 全体 + 原子ごとの表面積

fv = qc.prop.geom.free_volume(m)
fv["free_fraction"]                                 # バウンディングボックスのうち空の割合
```

## 総合例

```python
import qc
water = "O 0 0 0.117; H 0 0.757 -0.469; H 0 -0.757 -0.469"
m = qc.chk.new(atom=water, ao="sto-3g", unit="angstrom").scf(ref="r").run()

rc = qc.prop.geom.rotational_constants(m)
print("A, B, C (GHz):", [round(x, 2) for x in rc["constants_ghz"]])
print("I_a, I_b, I_c (amu·Å²):", [round(x, 4) for x in rc["moments_amu_angstrom2"]])
# A, B, C (GHz): [822.15, 437.53, 285.56]
# I_a, I_b, I_c (amu·Å²): [0.6147, 1.1551, 1.7698]
```

:::{exercise}
:label: ex-geom

1. 線形の CO₂ と屈曲した SO₂ はどちらも三原子分子です。何も計算せずに、それぞれいくつの*異なる*回転定数を
   持つか予想し、理由を述べなさい。
2. `rotational_constants` は幾何だけを必要とします — SCF も、構造最適化に既に使った以上の基底選択も不要です。
   なぜ波動関数をまったく必要としないのですか。
3. 分子結晶の単位格子の内部がどれだけ「混み合っている」か知りたいです。それを表す単一の記述数値を与える
   `qc.prop.geom` の leaf はどれですか。
:::

:::{solution} ex-geom
:class: dropdown

1. **線形の CO₂**:自身の軸周りで $I_a=0$ なので、異なる回転定数は**2 つ**だけです（2 つの等しい垂直
   モーメントから $B=C$）。**屈曲した SO₂**:真の非対称コマで 3 つのモーメントすべてが異なるので、
   **3 つ**の異なる定数を持ちます — まさに本章の水のパターンです。
2. 慣性モーメントテンソルは純粋に**核の質量と位置**だけから作られます — 電子密度や軌道は式にまったく入り
   ません。与える*幾何*は完全な SCF 最適化から来たものかもしれませんが、回転定数の計算自体は点質量の古典
   力学です。
3. **`qc.prop.geom.free_volume(mychk)`** — その `free_fraction` は、境界領域のうちどれだけが空か対原子体積に
   占有されているかを要約する単一の数そのものです。
:::

これで分子物性スイートの巡回は完結です — 電荷と結合から、トポロジーと弱い相互作用、反応性、軌道局在化、
静電気、そして今や幾何まで。Part III のこれまでの SCF・相関・勾配・環境の章と合わせて、日常の qc-rs
ツールキット全体が揃いました。
