# draw_band_fs.py ユーザーマニュアル (v1.1: EF固定機能追加版)

このプログラムは、トイモデル（Tight-Binding, 自由電子, 近自由電子近似）を用いて、電子構造（バンド図、DOS、フェルミ面）を計算・可視化するPythonスクリプトです。

## 1. 動作環境・インストール

以下のライブラリが必要です。

    pip install numpy matplotlib
    pip install scikit-image

※ `scikit-image` は3Dフェルミ面 (`3dfs`) を描画する場合のみ必要です。

## 2. 基本的な使い方

コマンドライン引数でモデルや表示形式を指定して実行します。

    python draw_band_fs.py [オプション]

### 主なオプション引数

| オプション | 説明 | デフォルト |
| :--- | :--- | :--- |
| **`--type`** | 出力タイプ (`1dband`, `2dband`, `3dband`, `1dfs`, `2dfs`, `3dfs`) | `3dband` |
| **`--mode`** | 物理モデル (`tb`: Tight-Binding, `free`: Free Electron, `nfe`: Nearly Free Electron) | `tb` |
| **`--nelec`** | DOS積分からEFを決定する際の単位胞あたりの電子数（スピン込み）。<br>**`--ef_fixed` 使用時は無視されます。** | `1.0` |
| **`--ef_fixed`** | **フェルミ準位 $E_F$ を固定値で指定します。**<br>このオプションを使用すると、**時間のかかるDOS計算（`--ef_res`）を完全にスキップ**します。 | `None` |
| **`--dos`** | バンド図の横にDOS（状態密度）を併記します。 (`--ef_fixed` 使用時は無効) | Off |
| **`--v`** | `nfe` モード時のポテンシャルの強さ（バンドギャップの大きさに関与）。 | `2.0` |
| **`--res`** | バンドパスの分割数、またはFSグリッドの解像度。 | `40` |

---

## 3. 実行例

### A. バンド構造の表示 (高対称点パス)

2D (`--type 2dband`) および 3D (`--type 3dband`) のバンド図は、それぞれ正方格子/単純立方格子の代表的な高対称点パスに沿って描画されます。

#### 1. 2次元 Tight-Binding モデル (DOS計算からEF決定)
$\Gamma \to X \to M \to \Gamma$ パスに沿ってバンドを描画し、DOSも併記します。

    python draw_band_fs.py --type 2dband --mode tb --nelec 1.0 --dos

#### 2. 3次元 NFE モデル (EFを固定値 $E_F=4.5$ で描画)
計算負荷の高いDOSサンプリングをスキップし、高速にバンド図を描画します。

    python draw_band_fs.py --type 3dband --mode nfe --ef_fixed 4.5 --v 1.0 --res 80

#### 3. 1次元 自由電子モデル (直線パス)
有効質量 $m^*$ のグラフを重ねて表示します。

    python draw_band_fs.py --type 1dband --mode free --mstar

---

### B. フェルミ面 (Fermi Surface) の表示

#### 1. 2次元 NFE モデルの第2バンド
`--ef_fixed` を使ってEFを固定し、第2バンドのフェルミ面を描画します。

    python draw_band_fs.py --type 2dfs --mode nfe --ef_fixed 6.0 --v 3.0 --fs_band 1

#### 2. 3次元 Tight-Binding フェルミ面 (要 scikit-image)
nelecからEFを計算し、3Dの等エネルギー面を描画します。

    python draw_band_fs.py --type 3dfs --mode tb --nelec 1.5 --res 50

---

## 4. ヒントと注意点

* **高速化のヒント:**
    * `--ef_fixed` を使用する（最も効果的）。
    * DOS計算が必要な場合（`--ef_fixed`なし）は、`--ef_res` の値を下げる（例: 3Dでは `24` を `16` や `12` に）。

* **3D/NFE の計算量:**
    `--type 3dfs` かつ `--mode nfe` は計算負荷が非常に大きいです。最初は `--res 30` 程度で試すことを強く推奨します。

* **EFの自動決定:**
    `--ef_fixed` を使用しない場合、EFは`--nelec`を埋めるように自動決定されます。トイモデルで定義されたバンドの最大値を超える `nelec` を指定すると、EFがバンドの上限に張り付くという警告が表示されます。