1.メッシング
1. メッシングとは何か?
メッシングとは、連続した物理領域を、コンピュータで扱える離散点の集合へ分割する過程です。 たとえば、一端にろうそくの炎、もう一端に氷の塊がある金属棒に沿って熱が流れる様子を考えてみてください。 現実には温度は棒に沿って連続的に変化しますが、シミュレーションでは無限個の値を保持することはできません。 代わりに、棒は有限個のサンプル点(メッシュ)で表現され、計算はそれらの位置でのみ実行されます (?? を参照)。 メッシュを用いることで、本来は連続的な問題を、数値手法で解ける離散問題へ変換します。 この原理は、物理学と工学で広く用いられている有限差分法、有限要素法、およびその他の計算手法の基礎となっています。
2. 異なる問題に対する異なるメッシュ
OghmaNano では、3 つの中核的な物理モデルが解かれます: 光学モデル(光吸収と伝搬)、 熱モデル(熱生成と熱流)、および 電気モデル(電荷輸送と再結合)です。 これらの過程は通常、非常に異なる長さスケールで起こるため、それぞれに専用のメッシュが必要です。たとえば:
- 有機太陽電池: 電気的に重要な効果は活性層 (厚さ ≈100 nm)に集中しているため、ドリフト–拡散方程式はそこだけで解けば十分です。 しかし、光はデバイススタックの すべて の層(厚さ ≈1 µm)と相互作用するため、光学問題は デバイス全体で解かなければなりません。この場合、光学メッシュはスタック全体に広がり、電気メッシュは 活性層に集中します。
- 量子井戸レーザーダイオード: デバイスは量子井戸 (厚さ ≈30 nm)および導波路層(厚さ ≈1 µm)で大きな熱を生成する可能性がありますが、この熱は最終的に センチメートル厚の大きな銅ヒートシンクを通じて放散されます。ここでは、電気的効果は デバイス内部のナノメートル〜マイクロメートルスケールでモデル化する必要がある一方で、熱効果には ヒートシンクのセンチメートルスケールまで広がるメッシュが必要です。
実際には、これは異なる物理効果を異なる長さスケールでシミュレーションしなければならないことを意味します。 さらに、デバイス構造には数ナノメートルしかない非常に薄いコンタクト層または界面層が含まれることがあります。 光学的には、そのような層は光の波長よりはるかに小さいため、しばしば無視できますが、 電気的にはデバイスの電流–電圧特性を決定するため極めて重要です。 これらの効果を捉えるには、そのような領域では非常に細かい電気メッシュを使用し、 光学メッシュはより粗いままでそれらをまたぐようにできます。
OghmaNano は、モデルを結合するときに メッシュ間で自動的に補間 します。 たとえば、thermal メッシュ上で熱分布を定義していても、電気ソルバーが局所的な 温度値を必要とする場合、それらは補間によって転送されます。 同様に、キャリア生成率のような光学量も、必要に応じて optical メッシュから electrical メッシュへ補間されます。 ユーザーがこれらの転送を手動で管理する必要はありません。
3. OghmaNano の 3 つのメッシュ
OghmaNano には、解く問題に応じて個別に定義できる 3 つの独立したメッシュ — thermal、optical、 および electrical — があります。 各メッシュには対応するリボンタブからアクセスします。これは図 ?? に示されています。
3.1 Electrical mesh
Electrical リボンの Electrical mesh ボタンをクリックすると、mesh editor window が開きます (??)。 このウィンドウの上部には X、Y、および Z ボタンがあります。 これらは、シミュレーション内でどの空間次元を有効にするかを切り替えます。 たとえば、Y のみを有効にすると 1D シミュレーションになり、X と Y を同時に有効にすると 2D シミュレーションが設定されます。表示されている例では、X と Y の両方が有効であるため、 メッシュは 2D OFET シミュレーション用に設定されています。中央の表はスプレッドシートのように機能し、 各有効次元に対するメッシュ構造を定義します。その主な列は次のとおりです:
- Thickness: 各メッシュ領域の物理的厚さ。
- Mesh points: その領域における離散化点数。
- Step multiply: その領域内でグリッド間隔がどれだけ増加するか。
たとえば、
1.1の値は、各ステップが前のステップより 10% 大きくなることを意味します。 - Left/Right: デバイスのどちら側からメッシュを生成するかを設定します。
得られたメッシュはウィンドウ下部のグラフにプロットされ、 点間隔と分布に関する即時のフィードバックが得られます。Import from layer editor ボタンは、複雑なデバイスのためのショートカットです。 これは Y-mesh をクリアし、Layer Editor からすべての層を自動的にインポートして、各層に 4 つのメッシュ点を割り当てます。 これは、レーザーダイオードのように多層構造を持つ場合に特に便利です。
Electrical mesh の詳細: ?? は、electrical mesh がどのように構築されるかを示しています。メッシュは デバイス境界そのものから始まるのではなく、代わりにデバイス内部へ半メッシュ間隔だけ入った位置から始まります。 これにより、最初の計算ノードがアクティブなシミュレーション領域の内側に配置され、 境界条件(たとえば電気コンタクト)をメッシュのすぐ外側の 明確に定義された位置に適用できるようになります。同じ慣例が デバイスの反対側にも適用されるため、メッシュは最後の物理点を 半ステップだけ越えて広がります。
- これにより、境界上で直接微分を評価しようとしたときに生じる数値的問題が回避されます。
- これにより、最初と最後のメッシュ点が 物理デバイス内部を最もよく表す位置に置かれつつ、外部条件を 一貫して課すことが可能になります。
Automatic meshing: 層厚は layer editor で定義されます。物理デバイス構造を 定義した後、メッシュ形状がデバイスの物理寸法に一致するように ユーザーは electrical mesh を更新する必要があります。 実際には、新しいユーザーは electrical mesh も他の CAD 表現と同様に、物理オブジェクトサイズと一致していなければならないことに 気づかないことがよくあります。
設定ミスを減らすために、OghmaNano は実行時に自動メッシングの仮定を適用します。 シミュレーションは、layer editor で指定された層幅および高さが正しいと仮定し、これらの寸法を electrical mesh へ 自動的にマッピングしようとします。たとえば、デバイスが単一層で構成されており、 対応するメッシュ高さが不正な場合、シミュレーションはメッシュ構築時に 内部的に layer editor からの層厚を使用します。
デバイス層数が垂直メッシュ層数と一致する場合、各 メッシュ層は対応するデバイス層厚へ自動的に関連付けられます。 これらの調整はシミュレーション中に内部的に適用され、 エディタ内の表示メッシュパラメータ自体は変更されません。メッシュ 層数がアクティブなデバイス層数と一致しない場合、またはマッピングが あいまいな場合、自動メッシングは適用されず、シミュレーションは メッシュ定義がデバイス構造と整合していないことを示すエラーで終了します。
3.2 Optical mesh
Optical mesh editor(??)は、 レイアウトの点では electrical mesh editor と似ていますが、 wavelength mesh を定義するための追加パネルが含まれています。ウィンドウ上部では、X、Y、および Z ボタンがどの空間次元を有効にするかを切り替え、λ (Wavelength) ボタンがスペクトルグリッドを有効にします。
左側パネルはナノメートル単位の空間離散化を指定し、electrical mesh と同じ列 (Thickness、Mesh points、Step multiply、および Left/Right)を使用します。右側パネルは Start および Stop 波長、points 数、および ステップ倍率を設定することでスペクトル範囲を定義します。これらの波長点は、 ray tracing、FDTD、および transfer matrix シミュレーションを含む すべての光学ソルバーで一貫して使用されます。
Automatic meshing: 光学シミュレーションでは、ソフトウェアは optical mesh の寸法が光学問題と整合するように自動的に調整しようとします。 より複雑な二次元または三次元シミュレーションでは、optical と electrical mesh が一致しない場合、ソルバーはそれらを 自動的に更新しようとします。これが不可能である場合、または意図された メッシュ構成を一意に決定できない場合、シミュレーションは メッシュ定義が不整合であることを示す明確なエラーで終了します。
3.3 Thermal mesh
Thermal mesh editor(??)は、 electrical および optical mesh editor と同じように動作し、X、Y、および Z ボタンで空間次元を有効にします。さらに、専用の T (Temperature) mesh も含まれています。
Temperature mesh は、自己発熱を有効にする場合や、 温度範囲にわたって電気特性を評価する場合など、シミュレーションで温度依存性を考慮する必要があるときに使用されます。シミュレーション実行前に、 OghmaNano は、フェルミ準位と温度に対するキャリア密度、 あるいは Fermi–Dirac 積分のような量を事前計算して表にまとめます。これらのテーブルにより、ソルバーは実行中に 値を素早く参照でき、毎回繰り返し計算する必要がなくなります。
ほとんどの場合 thermal mesh は自動的に処理されますが、高度なユーザーは、 温度依存性が強い問題に対して十分な精度を確保するために範囲と分解能を調整できます。
4. OghmaNano でいつメッシングを気にする必要がありますか?
Electrical mesh: Layer Editor はデバイスを異なる材料の層へ分割します (セクション 3.1.3 を参照)。 active とマークされた層は、電気モデルが適用される層です。 これらの層には有限差分メッシュを定義しなければなりません。 メッシュ長は active 層長と正確に一致しなければならず、そうでないとエラーが発生します。 OghmaNano は通常、適切なメッシュを自動生成するため、単純なデバイスのほとんどでは 手動介入は不要です。しかし、複数の active 層が存在する場合や、 シミュレーションを高速化するためにメッシュ点数を減らす必要がある場合(または より高い精度のために増やす場合)には、electrical mesh を手動で設定する必要があることがあります。
Optical mesh: Optical mesh は、空間サンプリングと波長サンプリングの両方を制御します。 シミュレートする波長範囲を変更したり、光がデバイスの異なる層とどのように相互作用するかを より細かく表現したりするために、調整が必要になることがあります。メッシュ点数を増やすと 光学精度は向上しますが、シミュレーション時間も増加します。
Thermal mesh: Thermal mesh は、自己発熱が有効な場合にのみ関係します。 この場合、デバイス全体の温度変動と、 熱効果のトラップおよび再結合過程への結合をモデル化するために必要な分解能を提供します。 それ以外の場合は、OghmaNano によって自動的に処理されます。
5. メッシングのヒント
1D、2D、3D のどれでシミュレーションすべきですか?
正しい次元数を選ぶことは、シミュレーション設定において最も重要な判断のひとつです。 常に、関心のある物理を捉えるのに必要な最小の次元数を使ってください。これにより時間と計算資源を節約できます。
- 太陽電池: 通常は 1D メッシュだけで十分です。変化は主に垂直方向(厚さ方向)で起こるためです。
- 光学フィルタ: これも通常は 1D です。重要な光学干渉はスタック方向で起こるためです。
- OFETs: 2D が必要です。半導体を通る垂直電流と、ソース–ドレイン間の横方向電流の両方を解像する必要があるためです。
速度と精度
メッシュ点を増やせば常に精度が向上すると考えたくなるものです。実際には、点数を増やすことはある程度までは有効ですが、 シミュレーションを より不正確 に、あるいはより不安定にすることもあります。制限要因はしばしば単純な計算能力ではなく、 数値条件性です。多くのデバイスシミュレーションには、 非常に小さな密度や再結合率と、非常に大きな電場、電流、ドーピングといった、 桁が大きく異なる量が共存しています。 コンピュータは有限精度演算を使用するため、極端に大きな数と極端に小さな数が関わる演算では 有効桁が失われることがあります。この精度損失が誤差予算を支配し、見かけの振動、ノイズの多い電流、 あるいは収束不良を引き起こすことがあります。
メッシュ密度を増やすと、この問題は改善するどころか悪化することがあります。細かいメッシュはしばしばより急峻な局所勾配、 より大きな微分項、そして隣接ノード間のより強い結合を導入し、 解かなければならない線形系の中で最小値と最大値の広がりを大きくすることがあります。その結果、より悪条件化された問題となり、 ソルバーが実際の物理と数値ノイズを区別しにくくなります。そのような場合には、やや粗いメッシュの方が より滑らかな場、より良い条件性をもたらし、したがって 点数が少なくても より信頼できる 結果を与えることがあります。
良いワークフローは、まず粗いメッシュから始めて設定を検証し、定性的な挙動が正しいことを確認し、 その後に必要な分だけ細かくすることです。メッシュ細分化は証拠に基づいて行うべきです。重要な出力(たとえば JV 曲線、キャリア分布、 光生成)が点数を増やしても意味のある変化を示さなくなったなら、それ以上細かくしても精度が向上する可能性は低いです。
OghmaNano でデバイスを設定する際には、次の指針を念頭に置いてください:
- 最小の次元数を使う: 可能であれば 1D を使い、物理が必要とする場合にのみ 2D/3D へ進んでください。
- 可能な限りメッシュ点数を最小化する: 本質的な物理を捉えられる最小限の点数を目指してください。これにより高速化され、数値的頑健性も向上することがあります。
- 点数が多い ≠ 常に良い: メッシュ密度を上げることで電流がノイジーになったり、収束問題や不安定な分布が生じたりする場合は、点数を減らすか、重要な領域だけを細かくしてみてください。
- 探索には粗いメッシュを使う: フィッティングを試したり、一般的なデバイス挙動を調べたりする場合には、メッシュ密度を下げて迅速なフィードバックを得て、その後で必要な箇所だけ精度向上のために細かくしてください。
- 目的を持って細かくする: 点を追加するのは、勾配が実際に存在する場所(界面、空乏層、薄層)に限ってください。全面一様細分化はしばしば最も非効率な選択です。