Drift–Diffusion ソルバ設定
Drift–Diffusion ソルバは、Electrical リボンから Configure を選択することで設定できます。 これによりソルバ設定ウィンドウが開き、反復回数上限、誤差許容値、 収束戦略などの数値特性を調整できます。これらのオプションにより、ユーザーは異なるデバイスシミュレーションに対して ソルバの性能と安定性を制御できます。
電気ソルバの設定
OghmaNano の電気エンジンは、強く結合した非線形方程式系(Poisson + drift–diffusion、 さらに有効化された任意のキネティクス)を解きます。これらの方程式には指数関数と強い結合が含まれるため、 単一のグローバル Jacobian に対する Newton–Raphson 法を用いて反復的に解かれます。通常は デフォルト値を変更する必要はありませんが、この設定パネルを使えば難しいケースを安定化し、 簡単なケースを高速化し、あるいは数値計算の挙動を確認できます。
設定を開くには、Electrical タブへ移動し、Drift–diffusion を選択してから Configure を選びます — DD Solver Open を参照してください。これにより、 DD Solver Window に示すウィンドウが開き、ソルバの 反復方法と収束方法を調整できます。
各セクションが制御するもの
このパネルは、実行の異なる段階を支配する 4 つの主要ブロック、すなわち First iteration、 Later iterations、Voltage ramp、および Exit strategy に分かれています。すべての段階での基本的な考え方は同じです: 初期推定から始め、Newton ステップで未知数を更新し、グローバル誤差が十分小さくなったら停止します。 clamp は 1 ステップあたりの最大更新量を制限し、ソルバが非物理的領域へ飛び込むのを防ぎます。 clamp が小さい → 遅いが非常に安定、大きい → 速いが不安定化する可能性があります。
最初の反復
- Max electrical iterations (first step) — 最初の 解法(多くの場合、暗状態の 0 V)に対する Newton ステップの上限。困難なコールドスタートでは より大きな上限が有効です。
- Electrical clamp (first step) — 最初のステップにおける最大 Newton 更新量を スケーリングします。経験則としては、0.1 は非常に安全(遅い)、1.0 は良いデフォルト、≥2.0 は速いが安定性は下がる可能性があります。
- Desired solver error (first step) — 最初の解法に対する収束目標 (小さいほど高精度ですが遅くなります)。典型的な許容値は \(1\times10^{-5}\) より悪くないことです。堅牢な開始のためには \(1\times10^{-8}\)–\(1\times10^{-9}\) に設定してもよいでしょう。
後続反復
- Max electrical iterations — 最初の解法後のすべての後続解法に対する反復上限。
- Electrical clamp — 上記と同様ですが、最初以外のすべてのステップに適用されます。速度のために、 最初のステップより緩めに設定できることが多いです。
- Desired solver error — 通常ステップの収束目標。必要な 精度に合わせて一貫性を保ってください。\(1\times10^{-6}\)–\(1\times10^{-8}\) が一般的です。
電圧ランプ
初期バイアス(たとえば 0 V)から目標動作点(高電圧の可能性あり)へランプするとき、 中間解法はしばしば単なる通過点です。このブロックでは、より緩い許容値や異なる clamp を用いて ランプをより速く進みつつ、最終動作点の解法では厳しい条件を維持できます。
- Max electrical iterations (ramp) — 各ランプステップに対する上限。
- Electrical clamp (ramp) — ランプ中のステップサイズ制御。
- Desired solver error (ramp) — ランプステップにのみ使用される収束目標。
- Newton minimum iterations — 最低でもこの回数だけステップを実行するよう強制し、 初期残差がたまたま小さいだけでソルバが早期終了しないようにします。
終了戦略
- Newton solver clever exit — 残差が「ノイズの中で跳ねる」 (上がったり下がったりして傾向がない)場合、そこで反復を停止し、それまでで最良の状態を受け入れます。
- Solve Kirchhoff’s current law in Newton solver — KCL 制約を Jacobian に直接含めて、より厳密な電流連続性を実現します。
- Quit on convergence problem / Quit on inverted Fermi-level — 明らかに不適切な状態に対する 強制停止ガード。
ソルバ種別とツール
- Newton solver to use — アルゴリズムを選択します:
none— 電気解法なし(光学/熱のみ)。newton— 標準 1D Newton ソルバ。
- Matrix solver / Complex matrix solver — 線形ソルバのバックエンドを選択します。
- Slotboom T0 / D0 / n0 —
newtonnorm用パラメータ。 - Use newton cache (experimental) — 大きな中間データをディスクへ退避してメモリ圧力を下げます(実験的機能)。
- Solver output verbosity — 出力される進行情報の量を制御します。
実践的ガイダンス
ケースが扱いづらい場合(高ドーピング、極端な電場、強注入など)は、clamp を下げ、 最初のステップの許容値を厳しくしてください。簡単で挙動の良いケースでは、clamp を上げて 速度を向上させます。ランプブロックを使って動作点まで素早く移動し、その後その動作点で より厳しい許容値を適用してください。
関連項目: DD Solver Open に示した設定入口と、 DD Solver Window に示した完全なダイアログを参照してください。
ソルバ安定性
OghmaNano は、電荷、ポテンシャル、および再結合に関する強く結合した微分方程式系を解く 数値シミュレータです。他のあらゆる数値ソルバと同様に、正常に収束するには 物理的に現実的な入力パラメータが必要です。値が厳密にゼロであったり、無限大に大きかったり、 あるいは桁数差が大きすぎたりすると、基礎となる行列演算が不安定になる可能性があります。これらの問題を避けるために、 このセクションではシミュレーション設定時の実践的な注意点をいくつか示します。
非常に大きい数と非常に小さい数を避ける
MATLAB(Linux では Octave)を開いて、次の式を入力してください: \(((1e-1+1e1)-1e1)/1e-1\)。 Enter を押す前に、頭の中で評価してみてください: \(1e1\) と \(-1e1\) は打ち消し合い、 \(\frac{1e-1}{1e-1}=1\) が残ります。 次に、10 の指数を 19 に置き換えて試してみてください: \(((1e-19+1e19)-1e19)/1e-19\)。 これも紙の上では結果は \(1\) になるはずです。
しかし、コンピュータにこれを評価させると、答えは \(1\) ではなく \(0\) になります。 これは、コンピュータが数値を有限精度で保存しているためです (現代のマシンでは約 15–16 桁)。 \(1e-19\) を \(1e19\) に加えると、 小さい方の項は丸めによって失われるため、コンピュータには \(1.0000000000000000001e19\) ではなく \(1.000000000000000e19\) と見えます。 その後 \(1e19\) を引くと厳密にゼロとなり、 \(1e-19\) の寄与は消えてしまいます。
数値精度は重要です
シミュレーションに非常に多くの桁差にわたるパラメータが含まれる場合、 ソルバは精度を失う可能性があります。 特に移動度や状態密度において極端な比を避けるようにし、 安定性を確保してください。
すべてのコンピュータがこの影響を受けます。どれほど高性能でも同じです。 デバイスシミュレーションにおいては、これは 非常に大きい数と非常に小さい数が同じ行列内に並ぶような パラメータ範囲を避けるべきであることを意味します。 たとえば、移動度が \(1e-19\) である一方、 \(1e5\) であるような場合は数値的困難を引き起こします。 これは特に絶縁体をシミュレーションする際に重要です。
ゼロを避ける
ゼロ値はゼロ除算エラーを引き起こします。 移動度、捕獲断面積、テール傾き、 または状態密度を厳密にゼロに設定しないでください。 再結合定数にゼロを使用するのは問題ありません。
⚠️ 厳密なゼロを避ける
ゼロの代わりに非常に小さい値(たとえば \(1e-30\))を使用し、 数値不安定性を防ぎつつ「ほぼゼロ」を近似してください。
バンドギャップ内での非常に大きなステップ
バンドギャップ内の大きなエネルギーステップは、 極端に小さいか極端に大きいキャリア密度を生じさせ、 非常に大きい数と非常に小さい数を避ける で説明したのと同じ精度問題を直接引き起こします。 非物理的な飛びを避けるため、エネルギー離散化は十分細かく保ってください。
🔍 メッシュを確認する
バンドギャップの離散化が粗すぎると、 非物理的なキャリア密度が生成される可能性があります。数値的に安定な範囲に 値を保つため、メッシュを細かくしてください。