ホーム スクリーンショット ユーザーマニュアル Blueskyロゴ YouTube
OghmaNano 有機/ペロブスカイト太陽電池、OFET、OLEDをシミュレーション ダウンロード

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 iterationLater iterationsVoltage ramp、および Exit strategy に分かれています。すべての段階での基本的な考え方は同じです: 初期推定から始め、Newton ステップで未知数を更新し、グローバル誤差が十分小さくなったら停止します。 clamp は 1 ステップあたりの最大更新量を制限し、ソルバが非物理的領域へ飛び込むのを防ぎます。 clamp が小さい → 遅いが非常に安定、大きい → 速いが不安定化する可能性があります。

最初の反復

後続反復

電圧ランプ

初期バイアス(たとえば 0 V)から目標動作点(高電圧の可能性あり)へランプするとき、 中間解法はしばしば単なる通過点です。このブロックでは、より緩い許容値や異なる clamp を用いて ランプをより速く進みつつ、最終動作点の解法では厳しい条件を維持できます。

終了戦略

ソルバ種別とツール

実践的ガイダンス

ケースが扱いづらい場合(高ドーピング、極端な電場、強注入など)は、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\))を使用し、 数値不安定性を防ぎつつ「ほぼゼロ」を近似してください。

バンドギャップ内での非常に大きなステップ

バンドギャップ内の大きなエネルギーステップは、 極端に小さいか極端に大きいキャリア密度を生じさせ、 非常に大きい数と非常に小さい数を避ける で説明したのと同じ精度問題を直接引き起こします。 非物理的な飛びを避けるため、エネルギー離散化は十分細かく保ってください。

🔍 メッシュを確認する

バンドギャップの離散化が粗すぎると、 非物理的なキャリア密度が生成される可能性があります。数値的に安定な範囲に 値を保つため、メッシュを細かくしてください。