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

FDTD チュートリアル:緑色光の自由空間伝搬

1. 概要:何をシミュレーションするか

このチュートリアルでは、可能な限り最も単純な 物理系、すなわち自由空間中の電磁波伝搬を用いて、OghmaNano の Finite-Difference Time-Domain (FDTD) エンジンを紹介します。波長 530 nm の 単色の緑色光源が、空の計算領域へ入射されます。そこには 導波路も、共振器も、真空以外の材料も存在しません。目的はデバイスを示すことではなく、 数値計算の仕組みを可視化することです。

FDTD モジュールは、離散的な空間グリッド上で Maxwell の回転方程式を時間領域で直接解きます。各 時間ステップにおいて、電場と磁場はメッシュ全体で更新されます。このアルゴリズムは高度に 並列化可能であるため、OghmaNano は OpenCL を用いて実行し、利用可能な GPU があれば自動的にそれを使用します。このチュートリアルは したがって、物理のデモンストレーションであると同時に、GPU 加速 FDTD バックエンドへの最初の入門にもなります。

このページの終わりまでに、シミュレーションを作成し、ワールドサイズと空間メッシュを確認し、ソルバーを実行し、 緑色光が三次元空間をどのように伝搬するかを可視化できるようになります。

2. Free space シミュレーションの作成

New simulation ウィンドウを開き、FDTD examples カテゴリを選択し、次に Free space というサンプルを選択してください。2 つの選択ウィンドウを以下に示します。

FDTD examples カテゴリを示す New simulation ウィンドウ。
New simulation ウィンドウから FDTD examples を開きます。
Free space シミュレーションを示す FDTD サンプル一覧。
Free space サンプルを選択します。

読み込み後、単純な三次元シーンを含む OghmaNano のメインウィンドウが表示されます。計算ワールド は、光源と検出器領域を除いて最初は空です。3D ビュー内で右クリックし、 Show world box を有効にしてください。赤い境界ボックスが表示され、FDTD 領域の範囲を定義します。

Free space シミュレーションを示す OghmaNano メインウィンドウ。show world オプションをチェックしている。
Free space シミュレーションを示す OghmaNano メインウィンドウ。show world オプションをチェックしている。
Free space シミュレーションを示す OghmaNano メインウィンドウ。シミュレーション領域の範囲を示す world box を表示している。
Free space シミュレーションを示す OghmaNano メインウィンドウ。シミュレーション領域の範囲を示す world box を表示している
FDTD シミュレーション領域の寸法を示す World size エディタ。
Substrate xz-size ボタンからアクセスするワールドサイズエディタ。

ワールド寸法は、左側ツールバーの Substrate xz-size ボタンをクリックすることで確認できます。 これによりワールドサイズエディタが開き、シミュレーション領域の物理サイズが マイクロメートル単位で定義されます。このチュートリアルでは何も変更する必要はありません。領域はすでに 緑色光の複数波長を十分に含むように設定されています。

3. 光学設定とメッシュの確認

次に、ウィンドウ上部の Optical リボンを開いてください。

Optical mesh ボタンを表示する OghmaNano の Optical リボン。
Optical リボン。Optical mesh をクリックして空間離散化を確認します。

Optical mesh をクリックしてメッシュエディタを開いてください。

531 nm から 532 nm の間のメッシュ点数と波長範囲を示す Optical mesh エディタ。
空間分解能および波長範囲(531–532 nm)を含む Optical mesh 設定。

メッシュエディタには、各空間方向に使用されるグリッド点数が表示されます。これらは FDTD 計算の 空間分解能を決定します。波長範囲は 531 nm から 532 nm に設定されており、 緑色光に対応します。このサンプルでは、メッシュエディタに表示される厚さパラメータは自動的に ワールドサイズにスケーリングされており、無視してかまいません。重要なのは、空間グリッドが電磁波長を 十分に分解できるほど細かいことです。

4. GPU 加速 FDTD ソルバーの実行

Run simulation ボタンをクリックするか、F9 を押してシミュレーションを開始します。 Terminal タブにはソルバー情報が表示されます。

FDTD モジュールの初期化と OpenCL デバイス探索を示す Terminal 出力。
実行中の Terminal 出力。FDTD モジュールは初期化され、メッシュ間隔と波長を報告し、 時間ステップループを開始する前に利用可能な OpenCL デバイスを探索します。
検出器データおよび snapshots ディレクトリを含むシミュレーション結果ファイルを示す Output タブ。
完了後の Output タブ。生成されるファイルには検出器トレース、設定エクスポート、 および時間分解場データを含む snapshots/ ディレクトリが含まれます。

Terminal 出力では、Searching for OpenCL devices という緑色のテキストに注目してください。この段階で プログラムは互換性のある GPU をシステム内から探索しています。対応するグラフィックカードを搭載したシステムでは、ソルバーは GPU を選択し、そこで時間ステップループを実行します。示されたサンプルでは、計算は OpenCL デバイスをエミュレートする CPU バックエンド上で実行されていますが、現代的なワークステーションでは、同じシミュレーションは自動的に グラフィックプロセッサを使用して高速化されます。

5. 出力と場スナップショットの確認

完了後、Output タブへ切り替えてください。生成されたファイルがそこに一覧表示されます。

球面波面の伝搬を示す後時刻のスナップショット。
緑色光の波面が外向きに伝搬する様子を示す後時刻のスナップショット。
自由空間で伝搬する緑色光を示す Snapshot viewer。
Snapshot viewer:power density を選択し、スライダを使って時間と空間を確認します。

snapshots ディレクトリをダブルクリックして snapshot viewer を開きます。 ウィンドウ下部のドロップダウンリストから power density を選択してください。色付きの場は 瞬時の電磁エネルギー密度を表します。水平スライダを使って時間を前後に動かし、 空間スライダを使って領域の異なる断面を調べてください。コンピュータによっては、特に 大きなメッシュを実行している場合、各データセットの読み込みに伴ってビューアが応答するまで少し時間がかかることがあります。

時間を追っていくと、波面が領域全体に広がっていく様子が観察されます。自由空間では、 境界や構造がないため、伝搬は一様かつ対称であり、計算ボックス端部の吸収境界 条件によってのみ制限されます。

6. 検出器パワーの表示

メインウィンドウで見える紫色のグリッドは、シミュレーション領域内に配置された検出器平面を表しています。 Output タブ内の detector 0 をダブルクリックして、その記録されたパワートレースを開いてください。

紫色で示された検出器平面を表示するメインウィンドウ。
自由空間領域内の検出器平面(紫色グリッド)。
検出器パワーの時間変化プロット。
時間の関数としての検出器パワー。

結果のプロットは、その平面を横切る電磁パワーを時間の関数として示します。初期には 検出器はゼロ信号を記録します。波面がその平面に到達すると、測定パワーは上昇し、その後ソースの時間プロファイルに 応じて安定します。この単純な構成により、snapshot viewer における波の視覚的 伝搬と、定量的なパワー測定とを容易に結び付けることができます。

これで OghmaNano での最初の FDTD シミュレーションが完了しました。システムには材料も デバイスも含まれていませんでしたが、ワールド定義、メッシュ構築、GPU デバイス選択、 時間ステップ、場の可視化、および検出器抽出という、完全な数値計算パイプラインを実証しました。以後のチュートリアルでは、これらと同じツールが 構造化されたフォトニックおよびオプトエレクトロニクス系に適用されます。

7. 2D (XZ) へ切り替えてシミュレーションを高速化する

多くの場合、構造やデバイスを理解するために完全な三次元シミュレーションは必要なく、特に 物理が一方向に対して本質的に不変である場合にはそうです。そのような場合、問題を二次元へ 減らすことで大幅な高速化が得られます。Free space サンプルでは、3D ワールドから XZ シミュレーションへ切り替えることで、計算グリッドから Y 次元全体が取り除かれます。その結果、 メッシュ点数が減り、場データも少なくなり、実行時間は劇的に短くなります。通常は再実行が 事実上インタラクティブになるほど高速です。

これを行うには、Optical リボンへ戻り、Optical mesh を開いて、 ?? に示す 2D メッシュ設定を選択してください。 重要な変更点は、Y 軸が抑制され、シミュレーションが XZ 平面 計算になることです。

Y 次元を抑制することで 2D XZ シミュレーション用に設定された Optical mesh エディタ。
2D 用に設定された Optical mesh:Y 軸を抑制して XZ シミュレーションを実行します。
XZ 平面内で波が伝搬する様子を示す 2D の Snapshot viewer。
2D の snapshot viewer:XZ 平面における場の時間発展は高速に描画され、簡単にスクラブできます。
Output verbosity to disk が write everything to disk に設定された FDTD エディタ。
より滑らかな再生のために、出力詳細度を Write everything to disk に設定してスナップショット密度を上げます。

メッシュが二次元に縮小されたら、再度シミュレーションを実行してください。ソルバーが 3D の場合と比べてほぼ瞬時に完了することにすぐ気付くはずです。再び snapshots/ ディレクトリを開き、 snapshot viewer で時間をスクロールしてください (??)。 データセットがはるかに小さいため、ビューアは読み込みが速いだけでなく、 時間スライダをドラッグしたり空間断面コントロールを動かしたりするときの応答も速くなります。

注意すべき細部の 1 つは、アニメーションの 見かけ上の 滑らかさが変化する可能性があることです。2D 実行では、 シミュレーションは非常に高速に進行し、通常は記録されるフレーム数も少なくなります。そのため、時間をスクラブすると 時間発展がややぎこちなく見える場合があります。これは単に、ある時間インデックスと次の時間インデックスの間に 記録されたスナップショットが少ないためです。 波の伝搬をより細かい時間分解能で追いたい場合は、ディスクに書き込まれる出力量を増やしてください。

これを行うには、再び Optical タブへ移動し、FDTD simulation ボタンをクリックして FDTD 設定ウィンドウを開き、Output verbosity to diskWrite everything to disk every 8th step から Write everything to disk へ変更します (??)。 これにより、各時間ステップごとにスナップショットが書き込まれます。再び snapshot viewer を開くと、波が 時間とともに伝搬する様子を非常に正確に追うことができ、再生やスクラブ中の時間分解能がはるかに細かくなります。