AR光波導:空間漸變光柵設計
1. 簡介
此前,OpticStudio 為一維光柵仿真提供了一維 RCWA 插件。本文介紹了一種類似但功能強大得多的工作流程,該流程基于 Zemax OpticStudio 與 Lumerical RCWA 之間的動態鏈接。
在這一工作流程中,設計人員在 Zemax OpticStudio 中構建宏觀光學系統,并在 Lumerical 中構建光柵的微結構。兩款軟件中的仿真可無縫連接。在 Zemax OpticStudio 的光線追跡過程中,如果某條光線打到光柵上,系統會自動調用 Lumerical RCWA 來求解電磁場響應,并返回相應數據。
該工作流程具有以下幾個優勢:
1.復雜的一維/二維光柵建模:借助強大的幾何編輯器,用戶可以輕松構建并仿真任意的一維或二維光柵。
2.快速原型設計:Lumerical 中的參數會暴露給 OpticStudio。在 OpticStudio 中所做的任何修改,都可以自動觸發 Lumerical 針對新的光柵結構計算更新后的數據,并返回新結果,無需進行數據導入和導出。
3.優化能力:用戶可以在 Lumerical 中方便地定義自定義參數化模型,并結合整個系統的性能對光柵形狀進行優化。
4.光柵結構的導入與導出:該工作流程支持以 STEP、STL 和 GDS II 文件格式對光柵幾何結構進行標準導入與導出。
5.空間變化:用戶可以定義光柵參數在光柵不同位置處的變化方式。
1.1 靜態工作流程與動態工作流程
值得一提的是,目前 Lumerical 與 OpticStudio 之間已有兩種數據交換工作流程。其中一種是本文將要介紹的動態工作流程;另一種是以不同方式運行的靜態工作流程。這兩種工作流程在靈活性方面各有特點,并不存在絕對優劣之分。用戶應根據具體的設計案例來選擇使用哪一種工作流程。
2. 系統要求
要使用這一動態工作流程,Zemax OpticStudio 和 Lumerical 必須安裝在同一臺以 Windows 為操作系統的電腦上。
Zemax OpticStudio 的版本必須為 Ansys Zemax OpticStudio Premium 或 Ansys Zemax OpticStudio Enterprise。不支持 Legacy Zemax OpticStudio。Lease 和 Paid-Up 兩類 Ansys Zemax 許可證均可用于使用該工具。
Lumerical 必須具備 FDTD 許可證,且版本必須為 2023 R1.0 或更高版本。
3. Lumerical:準備光柵文件(.fsp)
附件中提供了 6 個簡單的光柵文件。用戶可以將這些文件保存到 \Zemax\DLL\Diffractive\ 路徑下,以便讀取。下表對各個文件進行了說明。
文件名 |
描述 |
lswm_1D_slant_221210.fsp |
這是一個具有傾斜矩形結構的一維光柵。它包含 10 個參數,允許用戶對細節變化進行定義。參數的定義見附錄中的圖示。 |
lswm_2D_hex_cylinder_221210.fsp |
這是一個二維光柵,其中圓柱結構以六邊形排布方式進行周期性重復。 |
lswm_2D_hex_polygon4_221210.fsp |
這是一個二維光柵,其中四邊形柱結構以六邊形排布方式進行周期性重復。 |
lswm_2D_hex_rectangular_ pillar_221210.fsp |
這是一個二維光柵,其中矩形柱結構以六邊形排布方式進行周期性重復。 |
lswm_2D_hex_rhombus_221210.fsp |
這是一個二維光柵,其中矩形柱結構以六邊形排布方式進行周期性重復。這是一個二維光柵,其中菱形柱結構以六邊形排布方式進行周期性重復。 |
lswm_2D_rec_cylinder_221210.fsp |
這是一個二維光柵,其中圓柱結構沿 x 和 y 方向進行周期性重復。 |
3.1 提示
? 對于六邊形二維光柵,在搭建系統時,用戶需要手動確保 period_y = sqrt(3) * period_x,這樣才能形成六邊形晶格。
? 對于折射率參數,例如 p4_slab_index,如果其值為 0,則使用 n_pos 的值;如果其值為 -1,則使用 n_neg 的值。這是通過在 Lumerical 文件中編寫腳本來實現控制的。
如果這 6 種結構不能滿足用戶需求,用戶可以按照附錄中的說明自定義自己的光柵。
4.空間變化參數
空間變化功能自 2026R1.1 起可用。可通過將參數 “Spatial Vary File#” 設置為正整數來啟用。插件將從 \Document\Zemax\DLL\Diffractive\ 中加載一個 spatial_vary_#.txt 文件,其中 # 就是參數 “Spatial Vary File#” 所設置的正整數。用戶需要在 spatial_vary_#.txt 文件中定義參數如何變化的方程以及相應邊界。
注意:該文件只會被加載一次。如果用戶在文件加載后又對其進行了編輯,這些更改將不會生效。
4.1 輸入文件 spatial_vary_#.txt 的格式
在 spatial_vary_#.txt 文件中,任何以 # 符號開頭的行都會被忽略,所有空白字符也都會被跳過。
用戶可以定義如下形式的方程,例如:p# = v0 * (1 + y/150 + v1),其中 p# 是需要進行空間變化的參數。變量 v0、v1、v2……對應于 DLL 插件界面中定義的數值,這些數值可以手動調整,也可以在優化過程中調整。變量 x 和 y 表示應用該 DLL 插件的對象的局部坐標。除基本算術運算符(+、-、*、/)外,解析器還支持三角函數(sin、cos、tan、asin、acos、atan)、高級函數(log、log10、sqrt、abs),以及常數π(pi)和e(e)。
Spatial Vary Mode = 0 —— 在 XY 空間中采樣
當 Spatial Vary Mode 設置為 0 時,DLL 插件會在 x–y 位置空間中進行采樣。
此時,spatial_vary_#.txt 文件中必須包含一行,格式如下:
xmin, xmax, xinterval, ymin, ymax, yinterval
其中,xmin/xmax 和 ymin/ymax 定義空間邊界(單位為毫米),xinterval 和 yinterval 定義采樣間隔。
如果某條光線在這些邊界之外與光柵相交,則該光線會報錯并停止。如果光線在邊界之內與光柵相交,則 RCWA 只會在由上述六個數值定義的離散網格點上進行評估。
參數 Spatial Vary Interp 對采樣的影響如下:
? 如果 Spatial Vary Interp = 0,則使用距離最近的采樣網格點處的 RCWA 數據。
? 如果 Spatial Vary Interp ≠ 0,則使用最近四個網格點處的數據進行插值。
Spatial Vary Mode = 1 —— 在參數空間中采樣
當 Spatial Vary Mode 設置為 1 時,DLL 插件會在參數空間中進行采樣。
此時,spatial_vary_#.txt 文件中的每個方程后都必須跟隨如下內容:
; min, max, interval
這些數值分別指定該參數的下限、上限和采樣間隔。
示例:
p# = v0*(1 + y/150 + v1); -10, 10, 2.5
當一條光線打到光柵上時,系統會先根據所定義的方程計算交點處的參數值。如果某個參數超出了其定義的范圍,則該光線會報錯并停止。否則,RCWA 只會在由 min、max 和 interval 所定義的參數空間采樣點上進行評估。
參數 Spatial Vary Interp 對采樣的影響如下:
? 如果 Spatial Vary Interp = 0,則使用最近的參數空間采樣點。
? 如果 Spatial Vary Interp ≠ 0,則在最近的參數采樣點之間執行線性插值。
示例
1 個變化參數 → 2 個點
2 個變化參數 → 4 個點
3 個變化參數 → 8 個點
注意:由于采樣點數量會隨著發生空間變化的參數數量增加而呈指數增長,因此當存在較多參數發生空間變化時,建議用戶使用 Spatial Vary Mode 0,以避免計算量過大。
5. 示例
在 OpticStudio 中打開附件 “Demo_simple_grating_test.zar”。然后進入該對象的 Diffraction 屬性設置。將 Link Lumerical 參數改為非零值,并更新系統中的 3D Layout。
Lumerical FDTD 窗口會自動建立鏈接,隨后 3D Layout 將如下圖所示:
如果進行光線追跡,我們可以在探測器中看到如下所示的結果:
此外,在附件文件中,用戶還可以找到更多應用示例,包括 AR 波導、Flash LiDAR 以及曲面上的光柵。
Appendix - 自定義你的光柵
請注意,如果光柵文件(.fsp)設置不正確,可能會導致仿真失敗。我們已提供故障排查步驟,用于檢查 .fsp 文件中可能存在的問題。
每個周期單元中的光柵幾何結構都需要在 Lumerical 的 .fsp 文件中進行定義。在動態工作流程中,OpticStudio 會自動調用該 Lumerical .fsp 文件,應用由 OpticStudio 傳入的參數,然后計算電場響應。建議 .fsp 文件名長度小于 50。
如果用戶遵循以下規則,也可以自定義自己的參數化模型。
A.1 topcell
必須在 .fsp 文件中定義一個名為 “topcell” 的結構組。
Structure group 是 Lumerical 中一種對象組類型。簡單來說,structure group 可以看作一個復合對象,它由多個基本結構構成,例如 Polygon 和 Rectangle。當兩個結構發生重疊時,其優先級由對象的 mesh order 決定。更多信息可參見 Lumerical 知識庫中的以下內容:
Structure Groups - Simulation object
Understanding mesh order for overlapping objects
在 Lumerical 的 structure group 中,我們可以定義 “Properties” 和 “Script”。其中,Properties 類似于對象的參數。我們可以編寫腳本,使其讀取這些屬性值,并更新組內的基本結構。該腳本非常靈活,甚至可以在組內添加或刪除結構。這使得 structure group 本身就像一個新對象一樣,你可以通過 Properties 來設置它的形狀和材料。
A.2 topcell 中的結構
在 topcell 組中,除了光柵結構本身之外,還必須定義兩個 Rectangle 對象,用于表示正側和負側的材料。
這兩個對象應以 (x=0, y=0) 為中心,其 x 和 y 尺寸應大于 period_x 和 period_y。如下面的示意圖所示,它們應位于“仿真區域”之外的頂部(+z)和底部(-z)。
這兩個 Rectangle 對象的名稱可以任意指定。為了便于閱讀并保持中性,在我們提供的示例中,分別使用了 “negative_z_material” 和 “positive_z_material”。
需要注意的是,這里所說的 “simulation region”,是指在 RCWA 對象設置中,由最上層和最下層所定義的區域。這是我們在 RCWA 計算中考慮結構的區域。
還需要特別注意,實際的 RCWA 對象尺寸必須略大于 simulation region。在動態鏈接中,RCWA 對象區域始終會比 simulation region 大 0.1 μm。因此,我們建議將 positive_z_material 和 negative_z_material 在 z 方向上的尺寸設置為 0.2 μm。
下圖展示了 positive_z_material、negative_z_material 以及 RCWA 對象區域的三維視圖。simulation region 應位于 positive_z_material 與 negative_z_material 之間。RCWA 對象區域則應始終略大于 simulation region。
A.3 topcell 的屬性
我們必須定義如下紅框所示的 4 個用戶屬性。這些用戶屬性將由動態鏈接進行設置。在腳本中,我們會讀取這些屬性的值,以修改該組中的結構。需要使用的 4 個屬性如下:
?period_x、period_y:x 和 y 方向上的周期
?n_neg、n_pos:基底(n_neg)和超基底(n_pos)的折射率
還可以定義更多屬性。如果將它們的名稱寫成 p#_* 的形式,其中 # 為數字,*** 為任意字符串,那么這些參數就會被動態鏈接讀取,并顯示在 OpticStudio 的界面中。
A.4 topcell 的腳本
我們可以像下圖所示那樣,在 topcell 中定義腳本。
腳本定義不是可選項,有一些必須編寫的必要腳本。我們建議用戶打開本文提供的示例文件,并將其中的腳本作為模板使用。
以下是必須包含的腳本內容:
- 我們必須使用變量 n_pos 和 n_neg 來設置 positive_z_material 和 negative_z_material 的折射率。需要注意的是,這正是用戶在自定義光柵時最常見的首要問題之一:忘記加入這一設置。
- 如果光柵在 z 方向上的尺寸發生變化,也就意味著 simulation zone 會隨之變化,那么我們還需要同時修改 positive_z_material 和 negative_z_material 的位置。這兩個對象的厚度(即 z 方向尺寸)必須大于 200 nm。
- 腳本必須確保在 x = -period_x/2 ~ period_x/2 和 y = -period_y/2 ~ period_y/2 的范圍內生成完整的光柵幾何結構。需要注意的是,這有時意味著為了在該周期范圍內得到完整幾何,我們需要將同一結構重復兩次或更多次。
- 最后,用戶也可以選擇性地定義更多用戶屬性,并在腳本中利用這些屬性對應的數值,動態改變光柵幾何結構。如下圖所示,就是我們在附件中同樣提供的一個示例。
A.5 RCWA 對象
這里僅說明 RCWA 對象中必須設置的內容。關于該求解器對象的更多細節,可參見這篇文章:RCWA Solver - Simulation Object – Ansys Optics。
對這個 .fsp 文件的最后一項要求是:必須定義一個 RCWA 區域。該區域可通過點擊 “Simulation > Add RCWA” 來添加。
用戶唯一必須仔細檢查的設置是 interfaces。該設置與 z 方向上的網格數量有關。如果用戶未正確設置該值,仿真結果可能會不準確。可以通過右鍵單擊 RCWA 對象并選擇 Edit object 來訪問 RCWA 的相關設置。
在編輯 interfaces 之前,請先確保你已經打開了 simulation region 的網格視圖。
interfaces 的設置有兩種方式。用戶可以直接定義其絕對位置,但這意味著光柵的最高和最低位置不能發生變化。另一種方式是使用參考位置(reference positions)。采用這種方式時,當你在 OpticStudio 界面中修改光柵參數、導致光柵形狀發生變化時,界面位置也會自動更新。
用戶可以嘗試調整 interfaces 的取值;一般來說,interfaces 的數值越大,也就意味著網格數量越多。
A.6 可忽略的參數
以下參數會由動態鏈接自動控制,用戶無需在 .fsp 文件中修改它們的取值。
- topcell 結構中的 p#_** 參數**。
- topcell 結構中的 period_x、period_y、n_neg、n_pos。其中,period_x 和 period_y 會跟隨 OpticStudio 界面中的設置;n_neg 和 n_pos 則由 OpticStudio 中的 Material 設置決定。
- RCWA 對象的 x、y、z 尺寸。其中,x 和 y 尺寸跟隨 OpticStudio 界面中的 period_x 和 period_y 設置;z 尺寸則通過在 RCWA 對象中最上層和最下層設置的基礎上額外增加 0.1 μm 的裕量來確定。
- RCWA 對象中 excitation(入射光) 的全部設置。這些設置將基于 OpticStudio 中入射光線的數據自動確定。
- RCWA 對象中的 k 空間離散化(k-space discretization) 設置。關于這一點,請參見下文 “Max Order” 的說明。
A.7 如何修改 x/y 方向網格
我們無法直接編輯 x/y 方向的網格,而且通常也沒有必要修改 x/y 方向的網格。不過,如果用戶確實希望改變網格尺寸,那么這些數值實際上是由 k 矢量域(k vector domains) 的數量自動決定的。如果用戶增加 k 的數量,那么網格數量也會隨之增加。
A.8 如何在光柵中支持色散(折射率隨波長變化)
如下圖所示,本文提供的示例 .fsp 文件,例如 lswm_2D_hex_cylinder_221210.fsp,其設計方式是讓用戶能夠精確指定柱體的折射率,并且該折射率不隨波長變化。
不過,用戶也可以對這些 .fsp 文件進行修改,使折射率能夠根據波長自動變化。下面給出實現這一修改的簡要說明。
1.首先,需要從 topcell 對象中刪除對應的屬性,例如 “p4_pillar_index”。
2.然后,需要從 topcell 的腳本中刪除相關代碼。例如,如果我們從 topcell 中刪除了屬性 “p4_pillar_index”,那么也需要從 topcell 腳本中刪除下面這一行:
setnamed("circle_"+lbls{j},"index",p4_pillar_index);
3.最后,需要將 topcell 組中對應的對象修改為使用正確的材料,如下所示。
A.8 如何考慮切向矢量(tangential vector)
為了使 .fsp 文件支持 lattice vector angle,需要在 topcell 對象中添加一個名為 “lattice_vector_angle” 的參數。
腳本還應正確考慮該角度變化,并相應修改光柵結構。下面僅給出一段示例代碼,用于說明如何修改上方和下方的塊結構。這只是一個示例。作為一種省事的方法,設計人員也可以直接將上方和下方的塊尺寸做成原來的 2~3 倍,這樣通常可以覆蓋大多數可能的 lattice vector angle 設置。
設計人員還需要特別注意一點:當在 RCWA 設置中修改 lattice vector angle 時,RCWA 區域會以左下角錨點為基準發生傾斜。因此,RCWA 區域看起來會像是在 x 方向上發生了偏移。
為方便起見,當動態鏈接插件修改 RCWA 設置中的 lattice vector angle 時,它還會像下面這樣為 RCWA 區域設置一個 x shift,使其在 x 方向上始終保持“居中”:
setnamed('RCWA', 'x', -tan((90-latticeVectorAngle)/180*pi) * period_y / 2);
換句話說,如果 lattice vector 是通過動態鏈接插件來設置的,那么 RCWA 區域將會如下圖所示。
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















