SPICE 過渡解析フローチャート 解説

# SPICE 過渡解析フローチャート 解説
本記事では、SPICE 過渡解析(Transient Analysis)のフローチャートと各ステップの解説をまとめています。  
各ステップの流れを把握することで、過渡解析の仕組みがより明確になるはずです。  
過渡解析の要点は、「ネットリスト入力」「初期条件の決定」「数値積分法の選択・行列解法」「ステップ幅調整と誤差評価」を繰り返す点にあります。  

```mermaid
flowchart TB
    A((開始)) --> B[ネットリスト読込<br>解析条件設定]
    B --> C[モデルパラメータ/素子の読込<br>初期条件設定]
    C --> D[動作点解析 -DCOP-<br>または強制初期値適用]
    D --> E[数値積分法の選択・初期化<br> Backward Euler,Trapezoidal,Gear...]
    E --> F[t=0 の初期状態確定<br> DC解 or ユーザ指定IC ]
    F --> G{シミュレーション終了?<br>t >= Tstop ?}
    G -- いいえ --> H[タイムステップ Δt の決定 Adaptive ]
    H --> I[回路方程式 MNA の構成<br>コンパニオンモデル更新]
    I --> J[ニュートン反復<br> 行列A,ベクトルb更新]
    J -- 収束 --> K[収束解に基づき<br>トランケーション誤差 LTEを評価]
    J -- 未収束 --> O[ステップ縮小して<br>再度試行 or 安定化策]
    K --> M{局所誤差 < 許容誤差?}
    M -- いいえ --> P[Δt をさらに縮小<br>→ 行列再構成 → 再度ニュートン反復]
    M -- はい --> L[結果出力<br>電圧・電流を記録]
    P --> H   
    L --> N[時刻 t ← t + Δt]
    N --> G
    O --> H
    G -- はい --> Q(解析終了)
```

---

## 目次
1. [ネットリスト読込・解析条件(過渡解析)設定](#1-ネットリスト読込解析条件過渡解析設定)  
2. [モデルパラメータ/素子の読込・初期条件設定](#2-モデルパラメータ素子の読込初期条件設定)  
3. [動作点解析(DCオペレーティングポイント)または強制初期値適用](#3-動作点解析dcオペレーティングポイントまたは強制初期値適用)  
4. [数値積分法の選択・初期化](#4-数値積分法の選択初期化)  
5. [時刻 $t = 0$ の初期状態確定](#5-時刻-t--0-の初期状態確定)  
6. [シミュレーション終了判定 ($t \geq T_\text{stop}$?)](#6-シミュレーション終了判定-t-gt-t_stop)  
7. [タイムステップ $\Delta t$ の決定 (Adaptive Time Stepping)](#7-タイムステップ-delta-t-の決定-adaptive-time-stepping)  
8. [回路方程式(MNA)の構成 + コンパニオンモデル更新](#8-回路方程式mnaの構成--コンパニオンモデル更新)  
9. [ニュートン反復 (行列 $\mathbf{A}$, ベクトル $\mathbf{b}$ 更新)](#9-ニュートン反復-行列-mathbfa-ベクトル-mathbfb-更新)  
10. [トランケーション誤差 (LTE) の評価](#10-トランケーション誤差-lte-の評価)  
11. [結果出力・時刻更新](#11-結果出力時刻更新)  
12. [解析終了](#12-解析終了)  
13. [補足・より細かいトピック](#13-補足より細かいトピック)  
14. [まとめ](#14-まとめ)  

---

## 1. ネットリスト読込・解析条件(過渡解析)設定
- **ネットリスト読込**  
  回路の素子(抵抗、コンデンサ、インダクタ、半導体デバイスなど)、ノード(接続点)および解析パラメータや制御文を読み込みます。

- **解析条件の設定**  
  過渡解析の基本条件を設定します。たとえば「開始時刻 $0$ から終了時刻 $T_\text{stop}$ まで解析」「許容誤差やニュートン反復の最大回数」などです。

- **初期設定の重要性**  
  適切な初期設定(タイムステップの上限・下限や解析オプション)を行わないと、収束不良や計算時間の増加、もしくは精度の低下を招く可能性があります。

---

## 2. モデルパラメータ/素子の読込・初期条件設定
- **半導体モデルの割当**  
  MOSFET (BSIM, PSP など) や BJT、ダイオードなどのモデルパラメータを読み込み、対応する素子に適用します。  
  たとえば MOSFET であれば、チャネル長やしきい値電圧など多くのパラメータが含まれます。

- **ユーザ指定の初期条件**  
  回路図上で「コンデンサ電圧は 0V から」「インダクタ電流は 0A から」など、ユーザが明示した初期条件を記録しておきます。  
  過渡解析の開始時の状態を正しく再現するために重要なステップです。

- **内部メカニズム**  
  次の DC 解析や強制初期値適用の際にこれらの初期条件が参照されるので、正しく管理されるよう注意します。

---

## 3. 動作点解析(DCオペレーティングポイント)または強制初期値適用
- **動作点解析 (DC アナリシス)**  
  典型的には過渡解析前に DC 解を求め、各ノードの静的な電圧・電流を得ます。コンデンサやインダクタの初期状態をここで設定します。

- **強制初期値の指定**  
  ユーザが「DC 解析をスキップしてコンデンサに 1V を与える」など指定した場合は、それを優先的に適用します。

- **解析方針の分岐**  
  回路が複雑で DC 解析が収束しにくい場合など、ソースステッピングで徐々に電源電圧を増やすなどの手法が使われることもあります。

---

## 4. 数値積分法の選択・初期化
- **積分法の種類**  
  - **Backward Euler**: 安定性が高いが、数値拡散が大きい傾向。  
  - **Trapezoidal (台形則)**: 広く用いられるが、ハイ周波成分が出やすい場合がある。  
  - **Gear 法**: 高次化で安定性が増すが計算コストも増える。  

- **パラメータの初期化**  
  Gear 法なら次数(1次/2次)の設定、台形則ならば補正パラメータなどを最適な値にします。

- **誤差制御の考慮**  
  選択した積分法に応じて誤差評価やステップ幅制御のアルゴリズムが変わります。  
  システムの特性(高速変化/緩慢な変化)を見極めたうえで設定を行います。

---

## 5. 時刻 $t=0$ の初期状態確定
- **初期状態の確定**  
  3. で決定した DC 解、または強制初期値をシミュレーション開始時点($t=0$)の状態として用います。

- **コンパニオンモデルの初期化**  
  コンデンサやインダクタを、選択した数値積分法に合わせて抵抗 + 電源に置き換えた「コンパニオンモデル」を作成します。  
  ここで前の時刻(実際には $t<0$ の仮定)の電圧・電流を設定し、以降の計算に備えます。

- **信号源の初期位相/初期値**  
  正弦波など時間依存のソースがある場合、その開始時刻($t=0$)での振幅や位相を明示的に設定します。

---

## 6. シミュレーション終了判定 ($t \geq T_\text{stop}$?)
- **時間進行の確認**  
  現在のシミュレーション時刻 $t$ がユーザの指定した終了時刻 $T_\text{stop}$ を越えたかどうかをチェックします。  

- **打ち切り条件**  
  特定のノード電圧が閾値を超えた場合にシミュレーションを打ち切るなど、独自に条件を追加することも可能です。

- **継続/終了の分岐**  
  終了条件を満たさない限り、次のステップ計算へ進みます。これを繰り返して最終時刻に到達させます。

---

## 7. タイムステップ $\Delta t$ の決定 (Adaptive Time Stepping)
- **可変ステップのメリット**  
  急峻な立ち上がり(トランジション)などではステップを小さくし、緩やかな領域では大きくして計算コストを抑えます。

- **局所誤差 (LTE) やブレークポイントの考慮**  
  前のステップでの局所誤差や、入力信号の変化タイミングなどを見て、次のステップ幅 $\Delta t$ を決めます。

- **制限事項**  
  最小/最大ステップ幅が設定されている場合が多く、誤差に応じて $\Delta t$ を調整しても、これを越えないように制限されます。誤差が大きくなるとステップをやり直すこともあります。

---

## 8. 回路方程式(MNA)の構成 + コンパニオンモデル更新
- **Modified Nodal Analysis (MNA)**  
  回路全体をノードごとに方程式化し、行列 $\mathbf{A}$ とベクトル $\mathbf{b}$ を組み立てます。  
  各素子がノード電圧や端子電流をどう関係付けるかをまとめたものです。

- **コンパニオンモデルの更新**  
  コンデンサの前ステップ電圧やインダクタの前ステップ電流などを、等価電圧源/電流源に変換して行列に反映します。  
  これにより、数値積分法に基づいた差分方程式が回路方程式として扱われます。

- **スパース行列への最適化**  
  大規模回路では行列が疎(sparse)になるため、専用の疎行列ソルバーを使って高速に方程式を解きます。

---

## 9. ニュートン反復 (行列 $\mathbf{A}$, ベクトル $\mathbf{b}$ 更新)
- **非線形素子への対応**  
  MOSFET、BJT、ダイオードなどの $I$–$V$ 特性は非線形なので、行列 $\mathbf{A}$ とベクトル $\mathbf{b}$ は未知変数 $\mathbf{x}$ に依存します。

- **ニュートン–ラフソン法**  
  ヤコビアン行列を計算し、反復的に $\mathbf{x}$ を更新していきます。  
  収束条件(誤差が十分小さい)を満たすまで計算を継続します。

- **収束対策**  
  収束が困難な場合は、GMINステッピング(微小導通を徐々に減らす)やソースステッピング(電源電圧を少しずつ上げる)を使って安定化を図る手法が一般的です。

---

## 10. トランケーション誤差 (LTE) の評価
- **誤差推定**  
  数値積分法(Backward Euler, Trapezoidal, Gear 法など)において、1ステップ内での局所誤差 (Local Truncation Error) を推定します。

- **許容誤差との比較**  
  許容値を超えてしまった場合、ステップ幅が大きすぎると判断されるため、ステップを再度やり直し(リトライ)します。

- **再計算の流れ**  
  ステップ幅 $\Delta t$ を小さく調整し、再度 8.～9. の行列組み立て・ニュートン反復を行います。  
  これを繰り返すことで最適なステップ幅を動的に確保していきます。

---

## 11. 結果出力・時刻更新
- **解析結果の記録**  
  収束した各ノード電圧や素子電流を波形データとして保存し、後の可視化に備えます。  
  必要に応じて出力間隔を設定して大きなデータ量を抑えることも行われます。

- **時刻の進行**  
  $t \leftarrow t + \Delta t$ として次のステップへ。時間軸に沿ってこの手順を繰り返し、最終的に所望の時刻範囲をカバーします。

- **スナップショット出力**  
  各ステップあるいは指定した時間間隔ごとに出力を行い、シミュレーション結果を保存します。

---

## 12. 解析終了
- **終了処理**  
  $t \geq T_\text{stop}$ となったら解析を打ち切ります。  
  必要なら追加の解析(AC解析など)を続ける場合もあります。

- **結果の検討**  
  最終的に得られたノード電圧・素子電流の時系列データを評価し、回路の設計パラメータや動作の良否を判断します。  
  また、想定外の振る舞いが起きていないか確認します。

---

## 13. 補足・より細かいトピック
- **GMINステッピング**  
  回路全体に微少コンダクタンスを付与し、段階的に小さくしていくことで非線形の収束を助けるテクニックです。

- **ソースステッピング**  
  電源電圧などを 0V から徐々に目標電圧まで上昇させることで、急激な変化を和らげ、収束を容易にします。

- **疎行列ソルバー**  
  大規模回路(数万～数百万素子)では疎行列ソルバーが不可欠です。KLU や PARDISO などの高速ソルバーが代表的です。

- **並列化**  
  マルチコアCPUやGPUを用いて、行列演算の並列化を行う研究も活発です。大規模な IC 解析で計算時間を大幅に短縮できます。

---

## 14. まとめ
SPICE の過渡解析は、以下の手順を繰り返すことで成り立っています。

- **(1) ネットリスト読込・解析条件の設定**  
- **(2) モデル・素子の読込と初期条件設定**  
- **(3) 動作点解析 or 強制初期値適用**  
- **(4) 数値積分法の選択・初期化**  
- **(5) 初期状態の確定**  
- **(6) 終了判定**  
- **(7) タイムステップ $\Delta t$ の決定**  
- **(8) 回路方程式(MNA)の組立 + コンパニオンモデル更新**  
- **(9) ニュートン反復 (収束計算)**  
- **(10) トランケーション誤差(LTE)の評価**  
- **(11) 結果出力・時刻更新**  
- **(12) 解析終了**  

全体の流れを把握することで、過渡解析における収束性の向上や計算効率化、解析精度のコントロールがしやすくなります。  
これらのステップを繰り返し実行することにより、時間とともに変化する回路挙動を正確に把握できるのが SPICE 過渡解析の特徴です。