Also available in English
更新: 2026年3月26日
この記事では、光学系全体の1D/2Dグレーティングを正確にシミュレートするために、Zemax OpticStudioとLumerical RCWAを使用した動的な連携ワークフローを紹介します。まず、方法論を簡単に紹介し、次に光学系のセットアップ方法の詳細を説明します。
注記 : この記事で使用する機能を実行するには OpticStudio の Enterprise または Premium 版のライセンスが必要となります。
著者:Michael Cheng, Yihua Hsiao
はじめに
以前から、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 以降でなければなりません。
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 | グレーティングの構造ファイル Zemax フォルダ\DLL\Diffractive フォルダ内のすべての .fspファイルから選択 |
|
| +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 アウトカプラの計算を高速化するためのフラグ | |
| Has metal in grating | この値を1に設定すると、エネルギー保存チェックを無効にします。 | 虚数屈折率がゼロでない材料が存在する場合は、1に設定してください。 |
| Lattice vector angle | この値は、2次元回折格子における2つの格子ベクトル間の角度を指定します。 | |
| Reset cache size (MB) | 計算されたRCWAキャッシュデータが指定値を超えると、DLLはすべてのキャッシュデータをクリアします。0に設定した場合は、デフォルト値である2048が使用されます。この値は1TBを超えることも、16MB未満にすることもできません。 | |
|
Spatial Vary File# |
正の整数が指定されている場合、\Document\Zemax\DLL\Diffraction\ から spatial_vary_#.txt が読み込まれます。空間変動については以下の説明を参照してください。 | |
| Spatial Vary Mode | 0 は xy 変動を意味します。1 はパラメータ変動を意味します。 | |
| Spatial Vary Interp | 0以外の値は、補間が有効であることを意味します。 | |
| Variable #1 ~ #10 | 空間変動を使用する際に用いられる変数。 |
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) です。
注意が必要なのは、格子ベクトルの角度が90度でない場合、xおよびyの周期は以下のように定義されることです。
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
効率のために、OpticStudioは計算されたデータをメモリ内にキャッシュします。同じデータと同じ入射角に対して、再度Lumericalを呼び出して計算することはありません。
負の値が指定されている場合、これは正の値と同じですが、エネルギー保存補間が使用されます。
- 0または1の場合、値は201に設定されます。
- 1より大きく51未満の場合、値は51に設定されます。
- 51より大きい場合、ユーザーはサンプリングレートをカスタマイズできます。例えば、101に設定すると、サンプリング配列は101 x 101になります。

Interp. Pre-sampling は、動的リンクに対してLumericalから各呼び出し時により多くの計算データを取得させる設定です。以下の図のように、Pre-sampling=0は4つの隣接点のみを考慮しますが、0より大きい値はさらに多くの点を考慮します。どの値が最適かに関して標準的な答えはありません。通常、5~10程度が最も有用ですが、システムごとにどの値が最適かを理解するためには実験が必要です。
Stochastic mode
これがゼロ以外に設定されている場合、光線は表面に当たっても分割されません。その代わり、光線はランダムに1つの順序に回折されます。下の図のように、これは1つの光線が回折面に複数回当たり、あまりにも多くのセグメントに分割されてしまう場合に便利です。
確率は、Stochasticモードがオンのときにのみ、Start Orderに対して計算されます。ただし、OpticStudioは定義されたすべての順序に対してDLLを呼び出します。そのため、Stochasticモードがオンのときは、Start Order = Stop Order に設定することが推奨されます(例: Start Order = Stop Order = 0 または Start Order = Stop Order = 1)。これにより、DLLへのアクセスが1回だけとなり、関数呼び出しにかかる不必要な時間を避けることができます。

Error Log
このパラメータを 1に 設定すると、DLL は下図のように Zemaxフォルダ\DLL\Diffractive フォルダ内にログファイルを出力します。この設定は、Lumerical Dynamic Link DLL 起因の形状エラーを確認する際に便利です。

Fast 2D out-coupler
このパラメータを 0 以外に設定すると、六角配置のグレーティングを仮定します。下図のように、k 空間上のオレンジ色の領域で光線がグレーティングに当たると、関連するすべてのオレンジ色の領域のデータを計算しようとします。


Has metal in grating
回折格子に虚数屈折率がゼロでない材料が含まれている場合、このパラメータは1に設定する必要があります。1に設定されていない場合、DLLは電力保存のチェックを行い、計算が誤っていると判断して、光線データの返却を停止します。
Lattice vector angle
この値は、2つの格子ベクトル間の角度を度単位で表します。任意の2次元回折格子において、常に2つの格子ベクトルを見つけることができます。
この値が0に設定されている場合、内部的には90度として扱われます。これにより、このパラメータがDLLに追加される前に作成された .fsp ファイルとの後方互換性が保証されます。
Spatial variation parameters
空間変動機能は、2026R1.1 から利用可能です。この機能は、「Spatial Vary File#」パラメータを正の整数に設定することで有効にできます。プラグインは、\Document\Zemax\DLL\Diffractive\ から spatial_vary_#.txt ファイルを読み込みます。ここで、# は「Spatial Vary File#」パラメータの正の整数です。ユーザーは、パラメータがどのように変動するか、および空間変動の境界を spatial_vary_#.txt ファイル内で定義する必要があります。
注: このファイルは一度のみ読み込まれます。ファイルが読み込まれた後にユーザーがファイルを編集した場合、その変更は反映されません。
spatial_vary_#.txtのファイルフォーマット
ユーザーは、例えば p# = v0 * (1 + y/150 + v1) のように、空間的に変動させるパラメータを定義できます。ここで、p# は空間的に変動させるパラメータであり、v0, v1, v2, … はDLLプラグインのUIで定義された値に対応します。これらの値は手動または最適化中に調整可能です。x と y は、DLLプラグインが適用されるオブジェクトのローカル座標を表します。
また、基本的な算術演算子(+、-、*、/)に加え、以下の関数もパーサーでサポートされています:
三角関数: sin, cos, tan, asin, acos, atan
高度な関数: log, log10, sqrt, abs
定数: π(円周率)、e(ネイピア数)
使用上のヒントと注意
<[更新 : なし] (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 " がチェックされた状態に設定されます。
<シミュレーション速度が遅い場合>
シミュレーションを高速化するための一般的なヒントを以下に示します。異なるシステムにはそれぞれ異なる問題があるため、ここで紹介する提案が全てのユーザーに有効であるわけではありません。しかし、たとえ1つの点を改善しただけでも、見た目で明らかな改善が得られることが多いです。このセクションが問題を解決しようとするすべての方々に役立つことを願っています。
RCWA(回折格子ウェーブアナリシス)のヒント
-
層数の設定
RCWAでは、構造の形状が変化する場合にのみ、より多くの層を設定する必要があります。例えば、ピラミッド形状の場合、z方向の構造変化をより良くサンプリングするために多くの層を設定することを検討できます。しかし、円柱や多角形の柱形状の場合、柱の上部と下部に2層を設定するだけで十分で、それ以上の層数は効果がありません。 -
層数の削減
z方向で構造が変動する領域でも、特に初期設計段階では、層数を少なくすることが有効な場合があります。層数を増やしてシミュレーション結果の変化を観察することで、適切な層数を理解するための収束テストを行えます。 -
高い屈折率と大きな順序番号
構造内に高い屈折率を持つ材料がある場合、収束のために非常に大きな順序番号を使用しなければならないことがあります。その場合、Tangential Vector Field(接線ベクトル場)機能を使用すると、より少ない順序数で収束できることがあります。 -
大きな入射角範囲の光線
回折格子に広範囲の入射角の光線が当たる場合、Interp. Pre-Sampling を非ゼロに設定することを検討してください。このパラメータに関する詳細は前述のセクションで確認できます。 -
特定の回折順をシミュレートする場合
特定の回折順のみをシミュレートする場合、Order Filter 設定を使用して、シミュレーション中にその回折順のみを回折させることができます。 -
Stochasticモードの使用
3つ以上の回折順を同時に考慮する場合、1つの光線が多くの光線に分割され、その後他の回折格子に当たると、光線の数が急速に増え、シミュレーションが不可能になることがあります。このような場合は、Stochasticモード を使用することをお勧めします。 -
Stochasticモードでの注意
Stochasticモードを使用する場合、X/Y Start/Stopをすべてゼロに設定することに注意してください。他の設定を変更するとシミュレーションが遅くなります。これについては前述のセクションを参照してください。 -
補間サンプリングレートの調整
あまり推奨はしませんが、補間のサンプリングレートを低く設定することも可能です。例えば、シミュレーション中に補間を100に設定することができます。このパラメータに関する詳細な説明は、前述のセクションにあります。 -
1次元回折格子の場合
回折格子が1次元の場合、RCWA設定のシミュレーション領域を2Dに設定することができ、これによりシミュレーションが高速化されます。ただし、この場合、Tangential Vector Fieldは機能しません。また、高い屈折率材料や金属が含まれている場合、高いMax Orderが必要です。
<ARウェーブガイドシミュレーションのヒント>
-
最小のX/Y Start/Stop Orderの設定
ARウェーブガイドをシミュレートする場合、最初はできるだけ小さなX/Y Start/Stop Orderを使用します。例えば、インカプラー格子の場合、XまたはY方向で0次と±1次の回折順のみが必要な場合があります。 -
グレーティングを1つずつ確認
初期段階では、システムをコリメートされたビームでグレーティングごとに確認します。エディタでオブジェクトを右クリックし、「オブジェクトを無視して非表示」を選択することで、2番目と3番目のグレーティングを一時的にオフにできます。最初にグレーティング1が問題ないことを確認したら、2番目、3番目のグレーティングを確認します。 -
非ゼロの視野入力を使用する場合
非ゼロの視野入力を使用する場合、広範囲の入射角の光線が回折格子に当たるため、Interp. Pre-Samplingに非ゼロの整数を設定することを検討してください。通常、最適な値をテストして見つける必要がありますが、典型的には5~15程度が適切です。- コリメートされたビームを使用する場合
- 入射ビームがコリメートされている場合、Interp. Pre-Samplingには0または1を使用するべきです。
-
Stochasticモードの使用
多くの場合、Stochasticモードは非常に効果的です。特に、1つの光線が多くのセグメントに分割される場合(波導が薄い、または回折格子の面積が広い場合など)は、Stochasticモードが有効です。-
Diffractive DLL Setup Assistantの使用
すべてのグレーティングに対して迅速に設定を行いたい場合、Diffractive DLL Setup Assistant を使用すると便利です。
-
Diffractive DLL Setup Assistantの使用
-
2Dグレーティングの高速化
ウェーブガイド内に2Dグレーティングがある場合、シミュレーションの高速化のためにFast 2D Couplerを1に設定することを推奨します。 -
最適化の考慮
最適化を行う場合、コリメートされたビームを使用することを検討します。詳細については、「Optimization of Exit Pupil Expander with 2D out-coupler」を参照してください。
トラブルシューティング
<カスタマイズした .fsp ファイルを使用していますか?>
カスタマイズした .fsp ファイルに関する設定ミスは、ユーザーからの質問で最も頻繁に見られる理由です。もし .fsp ファイルをカスタマイズした場合は、付録をよく読んで、何か見落としている点がないか慎重に確認することを強くお勧めします。以下は、一般的な失敗の理由です。
-
topcell スクリプトで n_neg と n_pos の設定がない
これはユーザーからの質問で最も多い問題です。通常、ユーザーは以下のスクリプトを無視して、2つのオブジェクトの屈折率を固定してしまうことがあります。この設定は絶対に無視しないように強くお勧めします。 -
topcell スクリプトで period_x と period_y が適切に考慮されていない
格子のジオメトリを構築する際に、period_x と period_y が適切に設定されていない場合、期待通りの結果が得られないことがあります。 -
topcell が入力されたパラメータでジオメトリをうまく生成できない
入力されたパラメータに基づいてジオメトリがうまく生成されない場合があるため、入力値や設定の確認が必要です。
<最初にチェックする点>
- 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文字以下にしてください。
- .fsp ファイルのファイル名にスペースを含めることはできません。
- シミュレーション結果が正確でない場合は、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 2022 R2.4 |
| 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 2023 R2 |
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" の屈折率と全く同じでなければなりません。
<topcell の n_neg および n_pos データが不正と思われる場合>
<.fsp または .dll ファイルが読み込めない / 見つからない場合>
OpticStudio に動的なリンク DLL を読み込む際、または動的リンク DLL が .fsp ファイルを読み込もうとする際、以下の順番で Zemax フォルダを探します。Zemax サポートに連絡する前に、以下の2つの場所を確認することをお勧めします。
-
レジストリエディタでの確認
「Computer\HKEY_CURRENT_USER\Software\Zemax\Zemax Root」を確認してください。ここに Zemax のインストールパスが正しく設定されていることを確認します。 -
ファイルエクスプローラーでの確認
「%userprofile%\Documents」を検索してエンターを押してください。このパスが空である場合、動的リンク DLL はこのパスを探してさらに読み込もうとします。
さらに、注意点として、もしWindows のユーザー名が非英語文字(例えば、日本語や他の言語)である場合、動的なリンクが .fsp ファイルを正しく見つけられない場合があります。英語のユーザー名を使用するか、パスに非英語文字が含まれないことを確認してください。
<Zemax 内蔵 RCWA と Lumerical の動的なリンクの計算結果の比較>
<Lumerical ウィンドウを手動で閉じないこと>
このワークフローを使用する際、Lumerical FDTD ウィンドウは常に自動的に開かれます。誤ってこのウィンドウを閉じてしまうと、プログラムがクラッシュしたりハングする原因となるので、閉じないように注意してください。
<非ゼロの虚数屈折率を持つ材料があるか>
通常、格子に金属が含まれている場合に発生します。この場合、ユーザーは「Has metal in grating」パラメータを 1 に設定する必要があります。そうしないと、シミュレーションが停止し、回折光線が生成されなくなります。
<チェックすべきマイナーな点>
Mesh refinement は、Tangential Vector Field が使用されている場合にのみ準拠変種となります。
Mesh refinement を行う際、Tangential Vector Field が有効である場合に限り、その設定が準拠変種(conformal variant)になります。それ以外の状況では、メッシュの細分化が正確でない場合がありますので、注意が必要です。
光学系設定支援ツール
添付のダウンロードファイルには、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 グループ内の関連オブジェクトを以下のように修正します。
