# クイックスタート: 最初の計算

この章では、空の Python プロンプトから数行で本物の量子化学の結果までたどり着きます。**水分子**のエネルギーを
計算し、手法を DFT に切り替え、原子電荷の物性を読み出します — qc-rs の計算の全体像をつかむのに十分です。

:::{note} 始める前に
qc-rs がインストールされ、インポートできる（`import qc` が通る）必要があります。まだなら先に
[インストールとビルド](installation-and-make-setup.md) を行ってください。
:::

## 最初の計算を実行する

これを Python セッション（またはスクリプト、Jupyter ノートブックのセル）に入力します:

```python
import qc

# 1. チェックポイントを作る:水、cc-pVDZ 基底、座標はオングストローム。
mychk = qc.chk.new(
    atom="O 0.0000 0.0000 0.1173; H 0.0000 0.7572 -0.4692; H 0.0000 -0.7572 -0.4692",
    ao="cc-pvdz",
    unit="angstrom",
)

# 2. 制限 Hartree–Fock（RHF）ステップを追加して実行。
mychk = mychk.scf(ref="r").run()

# 3. 結果を読む。
print(f"energy    = {mychk.scf.energy:.6f} hartree")
print(f"converged = {mychk.scf.converged}")
```

次のように表示されるはずです:

```text
energy    = -76.026772 hartree
converged = True
```

これで Hartree–Fock 計算が完結です。おめでとうございます — たった今、水について電子シュレディンガー方程式を
（近似的に！）解きました。

## いま何が起きたのか？

3 つの考え方、1 行につき 1 つ:

1. **`qc.chk.new(...)` が*チェックポイント*を作る** — 分子と、のちに全結果を保持するオブジェクト。ここでは
   構造（`atom=`）、基底関数（`ao="cc-pvdz"`）、座標の単位（`unit="angstrom"`）を渡しました。
2. **`.scf(ref="r")` がステップを追加する** — 自己無撞着場計算です。`ref="r"` は*制限*（閉殻）Hartree–Fock の
   意味。ステップの追加ではまだ重い計算は**行いません**。何をしたいかを記録するだけです。
3. **`.run()` が実際に計算し**、その後 **`mychk.scf.energy`** で結果を読み出します。

この「組み立ててから実行する」パターンが qc-rs の核心です。[中核概念](concepts.md) できちんと見ていきます。

:::{tip} 実況を見る:`run(log=...)`
既定では `.run()` は**沈黙**します — 計算するだけです。**`run(log="stdout")`** を渡すと、代わりに実況の
量子化学風トランスクリプトを流します:システム要約、SCF のサイクルごとのエネルギー表、収束チェック。早い段階で
手を伸ばすオプション少数 — `log_style="modern"`/`"orca"` は見た目のスタイル、`plot=True` は SCF 収束曲線を
インライン描画（ノートブックで `%matplotlib inline`）。実行後は `mychk.log()` で再計算なしにトランスクリプトを
再表示できます。全体は [エディタ設定](editor-vscode.md) と [ログと出力の章](../20-guide/logging-output.md) に
あります。
:::

:::{tip} 速くする:`nthread=`
既定では計算は **CPU コア 1 つ**で走ります。**`run(nthread=8)`** を渡すと、マシンの 8 コアに仕事を分散できます —
ノート PC や単一ノードでほぼすべての実行を速くする、共有メモリの**スレッド**並列で、追加のセットアップは要りません。
（*複数のマシン*にまたがる **MPI プロセス**並列 `nmpi=` はもっと高度で、後の
[並列計算と HPC](../30-hpc/index.md) で導入します。今は `nthread=` だけで十分です。）
:::

結果はエネルギー以外もはるかに多く持ちます。例えば `mychk.scf.ncycle` は収束までの SCF 反復回数、
`mychk.scf.energy_components` は全エネルギーを物理的な内訳（運動・核引力・クーロン・交換 …）に分解します。
必要になったところで登場します。

:::{tip} Python メモ
`f"...{mychk.scf.energy:.6f}..."` は **f-string** です — Python が `{...}` 内の式の値をテキストに埋め込み、
`:.6f` は小数点以下 6 桁で整形します。
:::

## DFT に切り替える

Hartree–Fock でなく密度汎関数理論を使いたい？ **1 か所**だけ変えます — `xc=` で汎関数を指定:

```python
mydft = qc.chk.new(
    atom="O 0.0000 0.0000 0.1173; H 0.0000 0.7572 -0.4692; H 0.0000 -0.7572 -0.4692",
    ao="cc-pvdz", unit="angstrom",
).scf(ref="r", xc="b3lyp").run()

print(f"{mydft.scf.energy:.6f} hartree")   # -76.420369
```

B3LYP のエネルギー（`-76.420369`）が Hartree–Fock より低いのは、電子*相関*を取り込んでいるからです — これは
[基礎](../10-foundations/dft-kohn-sham.md) で展開する概念です。

## 最初の物性

エネルギーは始まりにすぎません。同じ収束計算から、数百の物性を求められます。ここでは **Mulliken 原子電荷**を:

```python
q = qc.prop.chrg.mulliken(mychk)
print(q["charges"])       # [-0.3060, 0.1530, 0.1530]
print(q["atom_labels"])   # ['O', 'H', 'H']
```

酸素が部分**負**電荷、各水素が部分**正**電荷を帯びています — まさに水に期待される極性です。物性スイート全体は
[分子物性](../20-guide/properties/index.md) にあります。

## 開殻分子（ラジカル）

すべての分子が閉殻ではありません。ラジカル — 電子数が奇数、または不対スピンがある — には**非制限** Hartree–Fock
（`ref="u"`）を使い、スピンを設定します。メチルラジカル（CH₃•、ダブレット）の例:

```python
ch3 = qc.chk.new(
    atom="C 0 0 0; H 0 1.079 0; H 0.934 -0.539 0; H -0.934 -0.539 0",
    ao="cc-pvdz", unit="angstrom",
    spin=2,                       # スピン多重度 2S+1: 2 = ダブレット（不対電子 1 個）
).scf(ref="u").run()              # ref="u" = 非制限

print(f"{ch3.scf.energy:.6f} hartree")     # -39.563802
print(qc.prop.spin.s_squared(ch3))         # 0.7612   (理想ダブレット: 0.75)
```

:::{tip} スピンについて
`spin` は**多重度** `2S+1`:`1` = シングレット（全対）、`2` = ダブレット（不対 1）、`3` = トリプレット
（不対 2）。閉殻には `ref="r"`、開殻には `ref="u"`（非制限）または `ref="ro"`（制限開殻）を使います。
:::

ここでの `⟨S²⟩ ≈ 0.76` は純粋なダブレットの理想値 `0.75` に近い値です。わずかな超過は*スピン汚染*を表し、
[SCF の章](../20-guide/scf.md) で説明します。

## 次はどこへ

- 構造を緩和してから解析するには、[チュートリアル: DFT 構造最適化 → 物性](tutorial-dft-to-properties.md) を
  進めてください。
- チェックポイント/ステップ/実行のパターンが*なぜ*この形なのかを理解するには、[中核概念](concepts.md) を。
- Hartree–Fock と DFT が実際に*何を*計算しているのかを理解するには、[基礎](../10-foundations/index.md) を。
