パート D:ソルバー安定性/メッシング
このセクションでは、ソルバー安定性とメッシュ選択に焦点を当てます。一次元(1D)シミュレーションは一般に非常に 安定で、高速に実行されます。次元を 1D から 2D、3D へと増やすと、方程式の数とそれらを結び付ける項の数が増加し、 数値的不安定性が起こりやすくなります。2D または 3D シミュレーションの設定が慎重に選ばれていない場合、 シミュレーションは収束に失敗することがあります。
ここでは、いくつかの簡単な設定を意図的に極端にして非収束を引き起こし、その後でなぜそうなるのか、どのように 修正するかを診断します。これらの一般的な失敗モードを自分で再現することで、症状を認識し、安定した解を 回復するために適切な対策(例:メッシュの調整、バイアスステップサイズの縮小、極端な材料パラメータの緩和)を 適用する方法を学べます。
1. 非現実的に低い値
多くの場合、収束問題は 非物理的な入力値 から生じます。これを示すために、キャリア移動度を 0 に設定し、その結果生じる誤差を調べます。もちろん、実材料で移動度が本当にゼロになることはありません。常に有限の値を持ちます。しかし、この例は、ソルバーに非現実的なパラメータを与えたときに何が起こるかを示しています。
Electrical Parameters エディタ(メインウィンドウ → Device タブ)を開き、?? に示すように、移動度を 0 に設定します。次にシミュレーションを実行します。?? に類似したエラー画面が表示され、2 つの赤い枠、すなわち残差要約の周囲の縦長の枠と、クラッシュメッセージ付近の横長の枠が見えるはずです。
縦長の赤枠を見ると、f()=2.54e2 が表示され、その後に f() が非常に大きい他の行(例:
1e15、1e5、1e8、1e7)が続いているのが分かります。ここで、f() はソルバーの
残差誤差です。これは結合方程式が現在どれだけ満たされているかを示す尺度です。理想的には、ソルバー残差は
正確にゼロであるべきですが、実際にはこれは達成できません。1e−10 から 1e−8 の範囲の残差は非常に良好な収束を示し、
1e−1 程度の値でもなお許容範囲です。
これに対し、数百の残差(例:2.54e2)は、特に 1e15 のような大きな成分値を伴う場合、
ソルバーが苦戦しており、系が不安定になっていることを示す明確な兆候です。
横長の赤枠は通常、実行が最終的に中断する理由を報告します:Holes asking for 。これは、計算された準フェルミ準位が テーブル化された範囲外 に出たことを意味します。開始前に、モデルは準フェルミ準位とキャリア密度の関係などを広いエネルギー範囲にわたって事前にテーブル化します。実際、その範囲はデバイスで通常予想されるよりもはるかに広く取られています。ソルバーが不安定になると、モデルはその範囲をはるかに超える非現実的な値を要求することがあり、その時点でソルバーは必要な量を評価できなくなり停止します。 3e5 but only defined in range [min, max].
要するに、移動度を非物理的な値(μ = 0)に設定することで、方程式を物理的意味を持たない領域へ押し込んだため、数値法は失敗します。すなわち、大きな残差、続いて事前計算テーブルの範囲外の値の要求、そしてクラッシュです。
この結果は、モデルの弱点やソフトウェアバグではないことに注意することが重要です。
非物理的パラメータを入力すると、ソルバーは数学的にも物理的にも有効な解が存在しない領域へ押し込まれ、そのため意味のある結果を提供できません。
2. 非現実的に高い値
この例では、キャリア移動度を μ = 1×106 m²·V⁻¹·s⁻¹ に設定します。これは
半導体 drift–diffusion モデルとして意図的に 非物理的 な値です。このような大きさは、
有機半導体や一般的な半導体におけるホッピング輸送/バンド輸送ではなく、金属伝導のような領域と
関連付けられるかもしれません。実際には、OFET シミュレーションでこれほど大きな値を使うことはありません。
この設定でシミュレーションを実行すると、ソルバーが収束に苦戦する様子を観察できます。残差表示
(f() を報告する枠)では、1e24、1e19、1e21 のような
非常に大きな誤差が減衰しないまま現れます。ソルバーが整合した状態を見つける最初の数回の反復で残差が
高くなるのは普通ですが、その後すぐに小さな値へ落ち着くべきです。残差が持続的に巨大であることは、
選択したパラメータのために系が数値的に硬くなっている、または非物理的になっていることを示す明確な兆候です。
要点:非現実的に高い移動度は避けてください。過大な輸送係数は PDE 系を非常に 硬くし、条件数の悪化と非収束を引き起こします。材料系に対して物理的に妥当な μ 値を使用し、 バイアスステップを控えめにして再実行することで、安定な挙動を回復できます。
3. 悪いデバイス構造
この例では、接点エディタを開いて、Source の接点幅を非常に小さい値(?? を参照)、すなわち 1 ミクロンに設定します。一見するとこれは問題なさそうに見えますが、微妙な問題を作り出します。シミュレーションは有限差分メッシュに基づいており、電場やキャリア密度のような量は定義されたメッシュ点でのみ計算されるからです。
Electrical Mesh Editor(Electrical タブの下にあります)を確認すると、この極薄の 1 ミクロン接点がメッシュ点の間に落ちていることが分かります(?? を参照)。その結果、接点は有限差分グリッドによって事実上「見落とされ」、デバイス構造に正しく適用されません。これにより、定義された形状と数値メッシュの間に不一致が生じ、シミュレーションは収束できなくなります。
これを修正するには、接点の厚さを増やして少なくとも 1 つのメッシュ点と重なるようにするか、有限差分グリッドのメッシュ密度(すなわち点数)を増やして、接点が正しく捉えられるようにします。
4. メッシュ点が多すぎる
有限差分モデルを始めたばかりのときによくある先入観は、メッシュ点が多いほど自動的に より正確な結果が得られる というものです。考え方としては、「5 点では悪いはずだが、1000 点なら 素晴らしいはずだ」というものです。実際には、そうではありません。
OghmaNano は Scharfetter–Gummel スキーム と呼ばれる離散化法を使用しており、 キャリア密度やポテンシャルのような量をメッシュ点間で正確に補間します。ソルバーは単に節点間で 直線挙動を仮定するのではなく、比較的粗いメッシュでも高精度で輸送物理を捉える指数フィッティング法を用います。 これは、驚くほど少ない点数でも十分な精度が得られることを意味します。
メッシュ密度を増やすことは、単に実行時間を増やすだけではなく、実際には 安定性と精度を低下させる ことがあります。 より細かいメッシュはより大きな方程式系を生成し、数値問題を解くことをより困難にします。その結果、 行列はより硬くなり、残差が増加し、ソルバーは収束に苦労することがあります。
物理を捉えること、シミュレーション時間を妥当なまま保つこと、不要な数値誤差を避けることの間には常に
トレードオフがあります。以下の図はこれを示しています。デバイス全体にわたって 100 メッシュ点 を用いると、
ソルバーは最初に非常に大きな残差(例:1e6、1e5)を報告します。その後、
多くの反復を経て初めて妥当な f() 値に落ち着きます。この不安定性は、
メッシュが過度に細かく、ソルバーにとって扱いにくい系になっているために生じます。