この記事では、光学系全体の1D/2Dグレーティングを正確にシミュレートするために、Zemax OpticStudioとLumerical RCWAを使用した動的な連携ワークフローを紹介します。まず、方法論を簡単に紹介し、次に光学系のセットアップ方法の詳細を説明します。
注記 : この記事で使用する機能を実行するには OpticStudio の Enterprise または Premium 版のライセンスが必要となります。
著者:Michael Cheng, Yihua Hsiao
ダウンロード
Zemax - Lumerical RCWA dynamic linking updates & known bugs
また、DLLの最新版のダウンロードは、以下のポストを参照してください。
DLL: Dynamic Link RCWA
はじめに
以前から、OpticStudio は 1 次元回折グレーティングシミュレーション用の 1 次元 RCWA プラグインを「 表面レリーフ型グレーティングの回折効率を RCWA 法でシミュレーションする」という記事を通して提供していましたが、この記事では、Zemax OpticStudioからLumerical RCWAへの動的な連携に基づく、より強力なワークフローを紹介します。
このワークフローでは、ユーザは Zemax OpticStudioでマクロな光学系を構築し、Lumerical でグレーティングの微細構造を構築することができます。両方のソフトウェアのシミュレーションはシームレスに接続されています。Zemax OpticStudio での光線追跡の処理中、光線がグレーティングに当たると、Lumerical RCWA が自動的に呼び出され、応答を解いてデータを提供します。このワークフローにはいくつかの利点があります:
- 複雑な1D/2Dグレーティングのモデリング: 強力なジオメトリエディタにより、任意の1次元または2次元グレーティングを簡単に作成し、シミュレーションすることができます。
- 高速プロトタイピング: LumericalのパラメータはOpticStudioを通じて表示されます。OpticStudio での変更は、自動的に Lumerical に受け渡され、Lumerical で新しいグレーティング形状の更新データを計算し、新しいデータを返します。データをインポート、エクスポートする必要はありません。
- 最適化 : ユーザはLumericalでカスタマイズしたパラメータを用いてモデルを簡単に定義することができるので、光学系全体の性能を考慮してグレーティング形状を最適化することができます。
- グレーティング形状のインポートとエクスポート : このワークフローは、グレーティング形状の標準的なインポートとエクスポートをSTEP、STL、GDS IIのファイルフォーマットでサポートしています。
静的な連携ワークフローと動的な連携ワークフロー
LumericalとOpticStudioの間でデータを交換するための既存のワークフローは2つあります。一つは今回紹介する動的な連携ワークフロー。もう一つは静的な連携ワークフローで、これは異なる方法で動作する。この2つのワークフローは柔軟性が異なり、どちらが優れているということはありません。ユーザは、設計ケースに応じてどちらを使用するかを検討する必要があります。
システム要求
この動的な連携ワークフローを使用するには、Zemax OpticStudio と Lumerical の両方を同じ PC にインストールし、Windows をオペレーティングシステムとして使用する必要があります。
Zemax OpticStudio のエディションは、Ansys Zemax OpticStudio Premium または Ansys Zemax OpticStudio Enterprise である必要があります。レガシー版の Zemax OpticStudio では使用できませんが、Ansys Zemax バージョンのライセンスであれば、リース版、永久版関係なく有効です。
Lumerical には FDTD ライセンスが必要で、エディションは 2023 R1.0 以降でなければなりません。
2022年にビルドされた古いバージョンのDLLを使用している場合は、記事の最後にある「レガシーバージョンのDLL」のセクションを参照してください。
Lumerical: グレーティングファイルの準備 (.fsp)
添付ファイルには、6つの簡単なグレーティングファイルがあります。これらのファイルを読み込むためには、Zemax フォルダ/DLL/Diffractive フォルダ内に保存してください。各ファイルの説明は以下の通りです。
ファイル名 | 詳細 |
lswm_1D_slant_221210.fsp |
斜めに傾いた矩形の1次元回折グレーティングで、10個のパラメータを用いて、ユーザが詳細な変化を定義できるようになっています。パラメータの定義は appendix の図を参照してください。 |
lswm_2D_hex_cylinder_221210.fsp | 円柱が周期的な六角形配列で繰り返される2次元回折グレーティングです。 |
lswm_2D_hex_polygon4_221210.fsp | 4辺を持つポリゴンが周期的な六角形配列で繰り返される2次元回折グレーティングです。 |
lswm_2D_hex_rectangular_pillar_221210.fsp | これは、長方形柱が六角形の配列で周期的に繰り返される2次元回折グレーティングです。 |
lswm_2D_hex_rhombus_221210.fsp | これは、ひし形の柱が六角形の配列で周期的に繰り返される2次元回折グレーティングです。 |
lswm_2D_rec_cylinder_221210.fsp | これは、円柱がx方向とy方向に周期的に繰り返される2次元回折グレーティングです。 |
<ヒント>
- 六角形の2Dグレーティングの場合、システムをセットアップする際に六角配置となるように、period_y = sqrt(3) * period_x となっていることをユーザーが手動で確認する必要があります。
-
p4_slab_index "のような屈折率パラメータは、0であればn_posの値を使用し、-1ならn_negの値を使用します。これは、Lumericalファイルにスクリプトを書いて制御することで実現できます。
これらの6つの形状がユーザの要求を満たさない場合、ユーザは付録に従って独自のグレーティングをカスタマイズすることができます。
Zemax OpticStudio (光学系の設定)
OpticStudioでグレーティングを設定するには、以下の3つのオブジェクトのいずれかを使用することをお勧めします。
回折グレーティングオブジェクト、ユーザ定義オブジェクト(DiffractionGrating.DLL)、ユーザ定義オブジェクト(Polygon_grating.DLL)の3つです。
Polygon_grating.DLL のファイルは、デフォルトではインストールフォルダに含まれていませんが、以下の記事でダウンロードできます。拡張現実 (AR) 光学系用回折光学系を備えた射出瞳拡張光学系 (EPE) を OpticStudio でシミュレートする方法 : 第 4 部.
なお、これらのオブジェクトでは、グレーティングがフェイス1にあることに注意してください。
上記の3つのオブジェクトのいずれかを追加したら、オブジェクトプロパティの回折タブにて、回折オブジェクト用のプラグイン DLLファイル "Lumerical_RCWA_dynamic_link.dll" (または "Lumerical_sub_wavelength_dynamic_link.dll")を定義します。この DLL ファイルは Lumerical へのリンクを作成し、次のセクションで説明するパラメータを設定できるようになっています。
<Zemax OpticStudio でのパラメータ>
以下がこの DLL ファイルが提供するすべてのパラメータについての表になります。
パラメータ名 |
詳細 |
推奨設定 |
File Name |
グレーティングの構造ファイル |
|
+Period/-Freq X (µm), +Period/-Freq Y (µm) |
X と Y 方向のグレーティング周期 |
|
Max Order X Max Order Y |
RCWA ソルバーで考慮する回折次数(高調波) |
経験上 : 3*周期/波長 |
Link Lumerical |
0: Lumercial に接続せずウィンドウも開かない 99: Lumercial に接続しウィンドウも開く 0 と 99 以外 : Lumercial に接続するが、ウィンドウは開かない。 |
|
p1~p20 |
グレーティング (.fsp) ファイルで定義されたパラメータへのダイナミックリンク |
|
# Layer |
廃止中 |
|
Rotate Grating |
グレーティング周期方向の変更 |
|
Interpolation |
|
1 |
Error Log |
1に設定すると、プラグインがログデータをエクスポートする |
|
Order Filter # |
光線追跡する回折光線の次数 |
|
Stochastic Mode |
1 に設定すると、グレーティングで光線が分割されず、確率により1本の入力光線に対して1本の回折光線を射出 |
光線が光学系内で何回も分割される場合に使用 |
Interp. Pre-sampling |
プラグインファイルが各呼び出しに対してリクエストする入射角の数 |
10以下 |
Fast 2D out-coupler |
AR導光板用 2D アウトカプラの計算を高速化するためのフラグ |
|
Start Order X, Y と Stop Order X, Y について
DLLは、-Max Order ~ +Max Order の範囲内の回折次数のみを考慮します。この値は、対象となるすべての次数を含むのに十分な大きさでなければなりません。また、X/Y Start/Stop Order の範囲を -Max Order X/Y ~ +Max Order X/Y で定義された範囲外にすることは意味がないことに注意してください。ユーザがこのように設定した場合、OpticStudio は Max Order よりも高い次数の光線データを DLL に要求しようとしますが、DLL からは単にパワーが存在しないデータを返します。
File Name
グレーティング形状を読み込むファイルを指定します。Zemaxフォルダ/DLL/Diffractive フォルダにファイルがないとリストに表示されないので注意してください。
+Period/-Freq X/Y (µm)
回折格子の X 方向と Y 方向の周期をミクロン単位で表します。負の値である場合は、DLL によって周波数として解釈され、単位は(1/µm)となります。
Max Order X, Y
RCWAソルバーで何次高調波を考慮するかを指定します。X,Y の両方が0 以上である場合、最大次数 Y は無視され、左側の下図に示すように、高調波空間(回折次数)の円形領域がサンプリングされます。X < 0 または Y < 0 のときは、調和空間内の矩形領域がサンプリングされるます。矩形領域の X、Y 方向の半値幅は、下図右側のように、Max Order X、Y の絶対値となります。
Link Lumerical
このパラメータが 0 の場合、OpticStudio は光線追跡データの Lumerical へのアクセスを停止して、以下の様になります。
- 光線はグレーティング面で停止します。
- ユーザ定義のパラメータ名は UI に表示されなくなります。
このパラメータが 0 および 99 以外の場合、OpticStudio は Lumerical への呼び出しを実行し、Lumerical ウィンドウは開きません。
このパラメータが 99 の場合、OpticStudio は Lumerical への呼び出しを実行し、Lumerical ウィンドウが開きます。
このパラメータ設定は、Lumerical へのリンクを一時的に停止し、ダイナミックリンクによるユーザーインターフェースの更新遅延を回避できるため、ユーザがシステムをセットアップする場合に便利です。
p1 ~ p20
これらは、Lumerical .fsp ファイルのユーザプロパティにマッピングされるパラメータです。これらのパラメータの値を変更すると、対応するユーザプロパティの値が Lumerical ファイルの中で自動的に更新されます。
Order Filter File#
このパラメータにより、光線追跡に考慮する次数を定義できます。物理的には、光線がグレーティングに当たったとき、すべての可能な回折光線が発射されるはずです。しかし、効率化のために一部の次数のみを発生させたい場合もあります。
このパラメータを正の整数に設定すると、Zemaxフォルダ\DLL\Diffractive フォルダ内の定義済みテキストファイルを読み込みます。例えば、8に設定すると、DLLはfilter_8.txt を検索します。
このテキストファイルの書式は以下の通りです。
* 最初の行は奇数 n
* 次の行は、反射と透過の回折次数のための2つの n×n ブロック
* 1 = 発生させる次数、0 = 発生させない次数
* ファイル番号が負の場合は、常にフィルターファイルを読み直すことを意味する。それ以外の場合、フィルターデータは読み込まれ、情報は以後のアクセスのために RAM に保存される。
# Layer
このパラメータは廃止されました。レイヤーの数は、.fsp ファイル内の RCWA オブジェクトで設定する必要があります。
Rotate Grating
このパラメータは、回折グレーティングの開口形状ではなく、方向のみを回転したい場合に便利です。
Interpolation & Interp. Pre-sampling
Interpolation を 1 に設定すると、効率化のために、OpticStudio は計算データをメモリにキャッシュして、同じ入射角の同じデータに対して Lumerical を呼び出さなくなります。
Interp. Pre-sampling は、Lumerical を呼び出すたびに、より多くの計算データを Lumerical から取得するようにダイナミックリンクに指示します。どれくらいの大きさにするべきか、標準的な答えはありません。通常は5~10程度が最も有効ですが、光学系ごとにどの値がより適切かを理解するには、実験が必要です。
Stochastic mode
このパラメータを 0 以外に設定すると、光線は表面に当たっても分割されません。その代わり下図のようにランダムに1つの次数に固定されてに回折されます。この設定は 1 本の光線が回折面に何度も当たって分割されすぎる場合に便利です。
Error Log
このパラメータを 1に 設定すると、DLL は下図のように Zemaxフォルダ\DLL\Diffractive フォルダ内にログファイルを出力します。この設定は、Lumerical Dynamic Link DLL 起因の形状エラーを確認する際に便利です。
Fast 2D out-coupler
このパラメータを 0 以外に設定すると、六角配置のグレーティングを仮定します。下図のように、k 空間上のオレンジ色の領域で光線がグレーティングに当たると、関連するすべてのオレンジ色の領域のデータを計算しようとします。
使用上のヒントと注意
<[更新 : なし] (Update: None) >
ノンシーケンシャルコンポーネントエディタで [更新 : なし] (Update: None) を設定することを推奨します。これにより、パラメータ変更時にクラッシュすることを避けることができます。
<Lumerical FDTD のウィンドウについて>
このワークフローを使用すると、Lumerical FDTDウィンドウが常に自動的に開きます。誤って閉じないように注意してください。プログラムがクラッシュします。
<Use same .fsp file>
グレーティングの構造が類似している場合、複数のグレーティングオブジェクトに同じ .fsp ファイルを使用するのが最も効率的です。これは、下の図の上側の光学系で実証されています。この効果は、すべてのグレーティングオブジェクトが、回折タブで異なるパラメータを持つ場合でも同じ様にあります。.fsp ファイルを複製したり、同じグレーティングにもかかわらず、異なるグレーティングオブジェクトに異なる名前の .fsp ファイルを適用しないでください。プラグインは .fsp ファイルごとに計算キャッシュを作成します。.fsp ファイルを複数回複製すると、プラグインはそれらが同じ元ファイルから派生した .fsp ファイルであることを認識できず、最も効率的な方法でデータを整理することができません。
<Zemax OpticStudio での最適化>
OpticStudioの機能を使用して最適化を行う場合、まずローカル最適化を一度実行し、その後ハンマーを使用してグローバル最適化を行う必要があります。また、DLS (減衰最小二乗) 法ではなく、OD (直交降下) 法を使用することをお勧めします。
<OptiSLang を使った最適化>
以下の2本の記事は OptisLang を使用した最適化の例です。
Optimization of Exit Pupil Expander with 2D out-coupler – Knowledgebase (zemax.com)
Optimization of an Exit Pupil Expander with 1D gratings – Ansys Optics
<どのようにオブジェクトにグレーティングが配置されているか>
このセクションは、システムにグレーティングをセットアップする際に、以下のような質問がある場合に役立つと思われます。
「どこに基板と上層があるか」
「なぜ光線追跡後2面の屈折率が交換されるのか」
グレーティングを光学系に正しく設定するには、いくつかの重要なポイントがあります
- グレーティングはオブジェクトのフェイス 1 に配置されます。
- Lumerical と Zemax OpticStudio のオブジェクトは、それぞれリンクされた座標を持っています。
- -z と +z の半無限空間の材質は、OpticStudio によって自動的に決定されます。
- 基板は -z 側にも +z 側にも配置できます。
最初のコンセプトは、グレーティングは常にフェイス 1 にあるということです。例外もあり得ますが、グレーティングは通常フェイス 1 上にあります。必要であれば、ヘルプファイルで特定のオブジェクトの定義を確認することができます。「フェイス」は、基本的に体積のない薄い表面であることに注意してください。このシミュレーションでは、グレーティングは面の特性であると仮定しています。
2つ目の概念は、OpticStudioとLumericalにおける座標についてです。
OpticStudioでオブジェクトの座標を確認するには、オブジェクトプロパティの描画タブにある[ローカル座標の表示] (Draw Local Axis) をチェックします。
一方、Lumerical FDTDにも座標系があります。Lumericalの座標系は、Zemax OpticStudioのオブジェクト座標と正確に一致する必要があり、同じであるように設定されています。
次の図は、Lumerical と Zemax OpticStudio が構造的にどのようにリンクしているかを詳しく説明したものです。OpticStudio では、グレーティングは面 (Face 1) のみで、体積はありません。この面に光線が当たると、Lumerical が呼び出され、物理計算が行われ、結果が返されます。
もう一つ重要なことは、グレーティングの2つの隣材質の屈折率(n_negとn_pos)は、OpticStudio のオブジェクト設定に基づいて動的な連携によって自動的に設定されるということです。次の図に示すように、n_neg と n_pos の値は光学系の設定によって異なります。
以下の図は Lumerical と OpticStudio の座標系をどのように厳密に一致させているかを示しています。また、下の座標は x 軸と z 軸しか示していませんが、このルールは実際には x , y , z のすべての軸において厳密に機能しています。Lumerical の座標系と OpticStudio の座標系が設計者の予想と一致しているかどうかを常にチェックすることは重要です。
記事に添付されている.fspファイルの例では、構造体グループ "topcell "で定義されたLumericalスクリプトによって、n_pos の屈折率は Lumerical の矩形オブジェクト "positive_z_material " に割り当てられ、n_neg の屈折率は "negative_z_material " に割り当てられます。
これまでの議論で、OpticStudio でグレーティングオブジェクトや他のオブジェクトの屈折率と言った場合、以下のように "材質" 列でユーザが割り当てるものを意味します。n_neg または n_pos はどのオブジェクトであっても、環境のデフォルトである 1.0 となります。
<OpticStudio から Lumerical へのダイナミックリンクのロード設定方法>
ここでは、ダイナミックリンクが OpticStudio の UI から設定を読み込み、ユーザの参照用に Lumerical に書き込むまでの流れを説明します。
- OpticStudio の DLL の UI から "period_x"、"period_y"、"p#_****" を Lumerical の構造体 "topcell " の同名のプロパティにコピーします。
- OpticStudio のグレーティング面の2つのサイドの屈折率に基づいて、Lumerical の "topcell" のプロパティ "n_neg " と "n_pos " を設定する。
- RCWAオブジェクトのサイズを設定します。x,y 位置は常に(0,0)です。x,y 幅は OpticStudio の UI 設定に基づく周期 x,y に設定されます。z の最小値と最大値は、100 nm 外側に拡張されたインターフェースの最小位置と最大位置に基づいて自動的に設定されます。例えば、最小と最大の界面位置が -1.0 µm と 5.0 µm の場合、RCWA オブジェクトの z min と z max は-1.1 µmと5.1 µmに変更されます。
- Lumerical の RCWA オブジェクトの General タブlの "propagation direciton" の設定は、OpticStudio で要求された光線の情報に基づいて設定されます。
- OpticStudio で要求された光線の情報に基づいて、RCWA オブジェクトの "Excitation" を設定します。入射角 "は "テーブル "設定され、要求された θ と φ は、ダイナミックリンクDLLの補間法に基づいて設定されます。"sample spacing "は "custom "に設定されますが、この周波数は、OpticStudio の入射光線の波長に設定されます。
- RCWA オブジェクトの "Solver" を設定します。"k vectors domain " と "max number k vectors"/"max number ku/kv " の値は、OpticStudio の Dll UI パラメータ "Max Order X/Y " に基づいて設定します。
- RCWA オブジェクトの "Results" で、"report field amplitudes " がチェックされた状態に設定されます。
トラブルシューティング
<最初にチェックする点>
- DLL と Lumerical のバージョンが一致していることを確認してください。チェックの方法は「DLL のバージョンと Lumerical のバージョン」のセクションを参照してください。
- こちらのフォーラムポストで既知および解決済のバグをチェックしてください。: Zemax - Lumerical RCWA dynamic linking updates
- ソフトウェアのエディションとライセンスの種類を確認してください。
Lumerical は FDTD ライセンスが必要です。OpticStudio は、Ansys バージョンの Premium または Enterprise エディションが使用できるライセンスが必要です。 - パラメータ "Link Lumerical" が 1 または 99 に設定されていることを確認します。
- "Link Lumerical" を 1 に設定しても動作しない場合は、OpticStudio を再起動して "Link Lumerical" を 99 に設定し、Lumerical ウィンドウが開くかどうかを確認します。この動作確認は、ダイナミックリンクがグレーティングを編集するときに何が起こるかをチェックするのにも便利です。
- "Error Log" パラメータを 1 に設定すると、DLL がエラーを Zemaxフォルダ\DLL\Diffractive\lumerical-sub-wavelength-dynamic-link.log に書き出しますので、そちらをチェックします。
- .fsp ファイルのファイル名は56文字以下にしてください。
- シミュレーション結果が正確でない場合は、Lumercial UIのメッシュ数が十分かどうか確認してください。z 方向のメッシュについては Appendix の「RCWA オブジェクト」、x,y 方向のメッシュについては「x/y メッシュの変更方法」を参照してください。
- 収束した結果を得るためには、OpticStudio のダイナミックリンク DLL UI の "Max order" の設定を十分に大きくする必要があります。この X と Y の2つの数値が大きいほど正確な結果が得られますが、シミュレーション時間も長くなります。詳細については、Zemax OpticStudio (光学系の設定)の「Max Order X, Y」のセクションを参照してください。
- RCWA ソルバーで設定できるの "Mesh Refinement" の項目は "Conformal Variant 0" を推奨します。金属の場合は "Conformal Variant 1" が推奨されます
- Lumeriacl において、もし "interfaces reference position" が使用され、2 つのインターフェイスが重なっている場合、ユーザーは "type" に注意する必要があります。"type" は "MAX" か "MIN" のどちらかでなければなりません。間違った参照インターフェースを選択すると、次の図の右側のように何も描画されないことがあります。これらのインターフェース設定の詳細は以下の記事を参照してください。
RCWA Solver - Simulation Object – Ansys Optics. - パラメータ "Rotate Grating "を使用する場合、"x軸からy軸へ "の方向にグレーティングを回転させることに注意してください。TiltXやTiltYでグレーティングオブジェクトを180度回転させた場合。この方向は逆に見えるかもしれません。
- グレーティングファイル(.fsp)をカスタマイズしている場合、Lumerical ウィンドウを表示するために、"Link Lumerical" パラメータを 99 に設定することをお勧めします。以下の "Check grating in Lumerical during linking" の項目を参照してください。
<DLL バージョンと Lumerical バージョン>
以下の表は、DLL と Lumerical のバージョンの関係を示しています。ほとんどが前方互換でも後方互換でもありません。
Dynamic link DLL name | Lumerical ver. |
Lumerical_RCWA_dynamic_link.dll |
2022 R2.3 |
lumerical-sub-wavelength-dynamic-link-2023R1.dll | 2023 R1 |
lumerical-sub-wavelength-dynamic-link-2023R1-2.dll |
2023 R1.2 |
lumerical-sub-wavelength-dynamic-link-2023R1-3.dll |
2023 R1.3 |
lumerical-sub-wavelength-dynamic-link-2023R2.dll |
2023 R1.3 |
Lumerical のバージョンは、以下のようにソフトウェアのタイトルに記載されています。
DLL のバージョンはファイル名に直接表示されます。ユーザーは UI を見れば、どの DLL が使用されているかが明確にわかります。OpticStudio 自体のバージョンは重要ではありません。ただし、最新バージョンの DLL を入手するには、最新の OpticStudio をダウンロードしてインストールする必要があります。例えば、"lumerical-sub-wavelength-dynamic-link-2023R1-2.dll" を入手するには、support.ansys.com または www.zemax.com から Ansys Zemax OpticStudio 2023 R1.02 をダウンロードしてインストールする必要があります。
<Lumerical でリンク中のグレーティングをチェック>
この項目では光学系が期待通りに動作しない場合に、ユーザが確認できる手順を説明しています。
- リンクを有効にする際、"Link Lumerical" を 99 に設定すると、Lumerical のウィンドウが表示され、グレーティングをチェックすることができます。
- Lumerical のウィンドウ上で形状が、パラメータに設定した値と一致しているかどうかをチェックします。特に "negative_z_material" と "positive_z_material" が RCWA 領域の上側と下側をカバーしているかどうかを Appendix - グレーティングのカスタマイズ で説明されている通りチェックする必要があります。
- オブジェクトが重なっていて確認しにくい場合は、オブジェクトを右クリックして "Edit object" を選択し、"Graphical redering" タブで透明度を変更して確認してください。
- "Material" タブで屈折率が期待している値と一致しているかどうかを確認することができます。特に、"negative_z_material" と "positive_z_material" の屈折率設定をチェックする必要があります。使用上のヒントと注意 の <どのようにオブジェクトにグレーティングが配置されているか> のセクションを参照してください。
- OpticStudio にて Lumerical での計算を作動させるために、グレーティング表面 (回折オブジェクトの Face 1) を通る少なくとも1本の光線を追跡する必要があります。この光線追跡の間、[NSC光線の分割] (Split NSC Rays) の設定をオンにする必要があります。これは [描画光線本数] (#Layout Rays) = 1 とした光源オブジェクトを設定し、NSC 3D レイアウトを更新することで可能です。
- Lumericalに 移動し、RCWA オブジェクトを選択し、結果ビューで "substrate" を右クリックし、"Send to script" を選択します。
- コマンドウィンドウで、RCWA ソルバーが実際にグレーティングの両側でどのように屈折率を考慮しているかを確認することができます。"n_lower" は "negative_z_material" の屈折率と全く同じでなければならず、"n_upper" は "positive_z_material" の屈折率と全く同じでなければなりません。
光学系設定支援ツール
添付のダウンロードファイルには、DLL パラメータをより便利な方法で設定するためのツールが含まれています。これは主に、複数のオブジェクトやパラメータを設定する必要がある場合に利用できます。Diffractive_DLL_Setup_Assistant.exe を Zemaxフォルダ\ZOS-API\Extensions フォルダに保存し、OpticStudio の プログラミング → ユーザー拡張機能 からこのツール (Diffractive_DLL_Setup_Assistant.exe) を開いてください。
このツールの簡単な使い方を説明します。
- "From Obj" は、DLL パラメータ設定をロードするオブジェクト番号を 1 つの整数で指定します。
- "par#" は整数、カンマ、ダッシュ、スペースを含む文字列のみ入力できます。整数はカンマで区切り、ダッシュは整数の範囲を表すのに使われます。
- "Load Par#" ボタンをクリックすると、"From Obj" で定義されたオブジェクトのパラメータ番号がすべて "Par#" セルに書き込まれます。
- "Par Val" は数字、カンマ、スペースを含む文字列のみ入力できます。数字は整数である必要はなく、カンマで数字を区切ります。
- "Load Values" ボタンをクリックすると、"From Obj" セルで定義されたオブジェクトの、"Par#" セルで定義されたパラメータ番号の値が収集され、"Par Values" セルに書き込まれます。
- "To Objs" は "Par#" と同様の文字列を入力できます。後に説明します、"Set MCE"、"Set paraemters"、"Copy paraemters" の 3 つのボタンがターゲットとするオブジェクトを 1 つまたは複数定義することができます。
- "Auto Detect" ボタンをクリックすると、"From Obj" セルで定義されたオブジェクトと同じ DLL を使用するすべてのオブジェクトを自動的に収集し、"To Objs" セルに書き込みます。
- "Set MCE" ボタンをクリックすると、"To Objs" で定義されたオブジェクトと "Par#" で定義されたオブジェクトの回折 DLL パラメータをロードする一連のマルチコンフィグオペランドを作成できます。
- "Set paraemters" ボタンをクリックすると、"Par#" とそれに対応する "Par Val" の設定を使用して、"To Objs" で定義されたオブジェクトの DLL パラメータを設定します。
- ”Copy parameters" ボタンをクリックすると、"From Obj" のオブジェクトから "To Objs" のオブジェクトに、"Par#" で定義された DLL パラメータがコピーされます。
- デフォルトでは、上記のすべての操作は、反射側の DLL パラメータのみを考慮します。"Also Set Transmission" にチェックを入れると、透過側のパラメータも設定されます。
- ステップ 1 ブロックの右側に3つのショートカットがあります。3 つとも "Par#" を 5 に設定して、"Link Lumerical" のパラメータを変更します。 "Link Lum On(1)" は "Par Val" を 1 に設定し、"Link Lum On(99)" で99に、"Link Lum Off" で 0 に設定して Lumerical とのダイナミックリンクの方法を切り替えます。
この拡張機能を実行できない場合は、こちらのフォーラムポストを参照してください。: Why I got the message Failed to locate OpticStudio when trying to run an extension | Zemax Community
例題
添付の Demo_simple_grating_test.zar を OpticStudio で開きます。次に、オブジェクトのプロパティ設定の回折タブを開きます。"Link Lumerical" パラメータをゼロ以外の値に変更し、システムの 3D Layout を更新します。
The Lumerical FDTD window is automatically linked, and the 3D Layout will look like the below:
光線追跡すると、ディテクタの結果は以下のようになります。
ここから、他のグレーティングファイルを使ってみたり、ユーザパラメータを変更したりして、結果が自動的にどのように変更されるかを確認することができます。
Appendix - グレーティングのカスタマイズ
グレーティングファイル (.fsp) の設定を誤ると、シミュレーションに失敗することがありますのでご注意ください。.fsp ファイルで起こりうる問題をチェックするためのトラブルシューティングを用意しました。
各周期ボックスのグレーティング形状は、Lumericalにおいて .fsp ファイルで定義する必要があります。今回のダイナミックワークフローでは、OpticStudio は自動的にLumerical で .fsp ファイルを呼び出し、OpticStudioから送られたパラメータを適用し、電界応答を計算します。.fsp ファイルの名前の長さは 50 文字以下を推奨します。
また、以下のルールに従えば、ユーザーが独自のパラメトリックモデルをカスタマイズすることも可能です。
topcell
.fsp ファイルには "topcell" という構造グループを定義する必要があります。
構造体グループとは、Lumerical のオブジェクトグループの一種です。簡単に説明すると、構造体グループは Polygon や Rectangle のような多くの基本構造体によって構成される複合オブジェクトと考えることができます。2 つの構造体が重なった場合、優先順位はメッシュの順番やオブジェクトによって決まります。より詳しい情報は例えば以下の Lumerical ナレッジベースにあります。
Structure Groups - Simulation object
Understanding mesh order for overlapping objects
Lumerical の構造グループでは、"Properties" と "Script" を定義することができます。プロパティはオブジェクトのパラメータのようなもので、スクリプトを書くことでプロパティの値を読み取り、グループ内の基本構造体を更新することができます。スクリプトは非常に柔軟で、内部の構造体を追加したり削除したりすることもできます。これにより、構造体グループ自体が新しいオブジェクトのようになり、プロパティで形状や材質を設定することができます。
topcell の構造
topcell グループでは、回折グレーティング構造に加えて、プラス側とマイナス側の材料を表現するために2つの Rectangle オブジェクトを定義する必要があります。これらの Rectangle オブジェクトは (x=0,y=0) を中心とし、x と y のサイズは period_x と period_y より大きく、以下の図に示すように「シミュレーション領域」の外側の上部 (+z) と下部 (-z) に配置されなければなりません。
これら 2 つの Rectangle オブジェクトの名前は任意ですが、この記事では、"negative_z_material" と "positive_z_material" とします。
なお、「シミュレーション領域」とは、RCWA オブジェクト設定にて最上位層と最下位層で定義される領域を意味します。RCWA ソルバーが計算で構造を考慮する範囲です。実際の RCWA オブジェクトのサイズは、シミュレーション領域よりも若干大きくなければならないことを知っておくことが重要です。この記事の動的な連携では、RCWA オブジェクト領域は常にシミュレーション領域より 0.1μm 大きくなります。したがって、"positive_z_material" と "negative_z_material" の z サイズを 0.2μm に設定することを推奨します。
下図は "positive_z_material"、"negative_z_material"、RCWA オブジェクト領域の 3D ビューです。シミュレーション領域は "positive_z_material" と "negative_z_material" の間になければなりません。RCWA オブジェクト領域はシミュレーション領域よりも常に少し大きくする必要があります。
topcell のプロパティ
以下の赤枠のように、4つのユーザープロパティを定義する必要がありますが、これらのプロパティはダイナミックリンクによって設定されます。そしてスクリプトではそれらの値を読み込んでグループ内の構造を変更します。使用する4つのプロパティは以下の通りです。
* period_x, period_y: x 方向と y 方向の周期。
* n_neg, n_pos: 基板 (n_neg) と上層 (n_pos) の屈折率。
プロパティは他にもあります。"p#_***"(# は数字、*** は任意の文字列)の形式で名前を付けると、これらのパラメータはダイナミックリンクによって読み込まれ、OpticStudio の UI 上で表示されます。
topcell のスクリプト
以下の様に topcell にスクリプトを定義することができます。
スクリプトの定義はオプションではなく、必ず書かなければならないスクリプトもあります。この記事で提供されているサンプルファイルを開き、スクリプトをテンプレートとして使用することを推奨します。
以下に必要なスクリプトを示します。
- "positive_z_material" と "negative_z_material" の屈折率を変数 "n_pos" と "n_neg" で必ず設定しなければなりません。
- グレーティングの z 方向のサイズが変わる場合、つまりシミュレーションゾーンが変わる場合は、"positive_z_material" と "negative_z_material" の位置も変更する必要があります。2 つのオブジェクトの厚さ (z方向のサイズ) は 200nm より大きくなければなりません。
- スクリプトは、x = -period_x/2 ~ period_x/2、y = -period_y/2 ~ period_y/2 の範囲でグレーティングの完全なジオメトリを生成する必要があります。これは、周期範囲内の完全な形状を得るために、同じ構造を2回以上繰り返す必要があることを意味します。
- 最後に、オプションとして、ユーザがさらにプロパティを定義することができます。このプロパティは、スクリプトによって使用され、対応する値に基づいてグレーティングの形状を動的に変更します。以下に示すのは、添付ファイルで提供した例です。
RCWA オブジェクト
ここでは、RCWA オブジェクトに必要な設定のみを説明します。このソルバーオブジェクトの詳細については、こちらの記事をご覧ください: RCWA Solver - Simulation Object – Ansys Optics
この .fsp ファイルに必要な最後の要件は、RCWA 領域を定義することです。これは Simulation アイコンから Add RCWA をクリックして追加できます。
ユーザが注意深くチェックしなければならない唯一の設定はインターフェースです。この設定は Z 方向のメッシュ数に関係します。この値を正しく設定しないと、シミュレーション結果が不正確になる可能性があります。RCWA の設定は、オブジェクトを右クリックして、"Edit object" を選択することで行えます。
インターフェイスを編集する前に、シミュレーション領域のメッシュビューがオンになっていることを確認してください。
インターフェースの設定には2つの方法があります。ユーザーが直接絶対位置を定義することもできますが、この場合、グレーティングの最高位置と最低位置は変更できません。もう1つの方法は、参照位置を使用する方法です。この方法では、OpticStudio の UI からグレーティングのパラメータを編集すると、グレーティングの形状が変化したときにインターフェースの位置が自動的に更新されます。
ユーザはインターフェイスの値を設定することができ、インターフェイスの値が大きいほど、メッシュ数も多くなります。
無視できるパラメータ
以下は、ダイナミックリンクによって自動的に制御されるため、ユーザが .fsp ファイルで値を変更する必要のないパラメータのリストです。
- p#_**** : topcell の構造のパラメータ
- topcell 構造の period_x, period_y, n_neg, n_pos in : これらはOpticStudio の UI の設定と材質の設定に従います。
- RCWA オブジェクトの x, y, z のサイズ : xとyのサイズはOpticStudio の UI 上の "period_x" と "period_y" の設定に従います。z のサイズは、RCWA オブジェクトの最上層と最下層の設定に 0.1μm のマージンを追加して決定されます。
- RCWA オブジェクトの励起(入射光線)のすべての設定 : OpticStudio の入射光線のデータに基づきます��
- RCWA オブジェクトの K 空間離散化設定 : Zemax OpticStudio (光学系の設定) の "Max Order" の説明を参照してください。
x/yメッシュの変更方法
この値は直接編集することはできないし、一般的には x/y 方向のメッシュを変更する必要はありません。しかし、もしユーザーがメッシュサイズを変更したい場合、この値は k ベクトル領域の数によって自動的に決定されます。ユーザーが k の数を増やせば、メッシュ数も増えます。
グレーティングの分散 (屈折率対波長) をサポートする方法
以下に示すように、この記事で提供するサンプル .fsp ファイル、例えば lswm_2D_hex_cylinder_221210.fsp は、波長に依存しないピラーの屈折率を正確に指定できるように設計されています。
しかし、これらの .fsp ファイルを波長に応じて自動的に屈折率が変化するように変更することも可能です。この変更を行うための簡単なガイダンスを以下に示します。
- まず、 topcell オブジェクトの対応するプロパティ、例えば "p4_pillar_index" を削除する必要があります。
- 次に、topcell のスクリプト内の関連コードを削除する必要があります。例えば、topcell からプロパティ "p4_pillar_index" を削除する場合、topcell のスクリプトから以下の行も削除する必要があります。
setnamed("circle_"+lbls{j},"index",p4_pillar_index);
- 最後に topcell グループ内の関連オブジェクトを以下のように修正します。
コメント
記事コメントは受け付けていません。