Ansys Lumerical | 采用一維光柵的出瞳擴展器的優(yōu)化

附件下載

聯(lián)系工作人員獲取附件


本文演示了一種仿真方法,并舉例說明了使用一維光柵的出瞳擴張器(EPE)系統(tǒng)的優(yōu)化示例。

在此工作流程中,我們使用 Lumerical 構建光柵模型,并使用 RCWA 求解器模擬其響應。完整的EPE系統(tǒng)內(nèi)置于OpticStudio中,并與Lumerical動態(tài)鏈接,以集成精確的光柵模型。最后,利用optiSLang對光柵模型進行整體控制,實現(xiàn)整個EPE系統(tǒng)所需的光學性能。



概述



設計具有EPE的AR系統(tǒng),可以增加眼盒的尺寸,這對系統(tǒng)級的優(yōu)化來說是一個挑戰(zhàn),因為它需要大量的參數(shù)。在本文中,波導由三個在Lumerical中設計的1D傾斜光柵組成。這些光柵分別用于 OpticStudio 光學系統(tǒng)中的內(nèi)耦合器 (IC)、折疊光柵和外耦合器 (OC),通過動態(tài)鏈路。折疊光柵和超頻光柵都被劃分為幾個區(qū)域,在優(yōu)化過程中分別調(diào)整光柵參數(shù)。


然后,optiSLang 通過 Python 節(jié)點處理優(yōu)化。optiSLang 的使用具有很大的優(yōu)勢,例如能夠在每個優(yōu)化周期內(nèi)執(zhí)行預處理和后處理(例如,使用瞳孔函數(shù)對結果進行卷積)。此外,可以通過在 python 代碼中定義函數(shù)來控制參數(shù),而不是直接使用不同區(qū)域中的所有單個光柵特性,從而減少變量總數(shù),從而縮短優(yōu)化時間。該過程由 Sensitivity 模塊啟動,以便系統(tǒng)在運行優(yōu)化時可以識別影響最大的參數(shù)。


本文分為以下 4 個主要步驟:


第 1 步:使用 Zemax 和 Lumerical 設置光學系統(tǒng)

在本節(jié)中,我們將介紹要優(yōu)化的光學系統(tǒng)。我們可以在文章中找到系統(tǒng)類型相同的增強現(xiàn)實光學系統(tǒng) 。請注意,在原始設計中,能量不會擴散到整個眼盒中,因為大部分光在與折疊光柵和外耦合器進行幾次交互后被外耦合。

第 2 步:在 optiSLang 中設置優(yōu)化

本文的目的是演示如何使用 optiSlang 來控制使用 Zemax 構建的光學系統(tǒng)的優(yōu)化。本節(jié)介紹將用于優(yōu)化的參數(shù),以及用作優(yōu)化目標的指標。

第 3 步:查看優(yōu)化結果

優(yōu)化已經(jīng)設置,結果可用。在本節(jié)中,我們將提供有關 optiSlang 文件結構的信息,并解釋如何可視化來自多個優(yōu)化運行的結果。

第 4 步:使用所需設計更新系統(tǒng)

最后一部分是分步指南,用于從不同的運行中選擇特定設計,并將相應的參數(shù)推送到光學系統(tǒng)。



運行和結果


第 1 步:使用 Zemax 和 Lumerical 設置光學系統(tǒng)

1.在Zemax OpticStudio中打開文件EPE_1D_out-coupler.zar,檢查系統(tǒng)設置。

三個一維光柵以 Lumerical 形式構建為傾斜光柵,但折疊光柵和 OC 光柵被初始化為傾斜角為 1° 的簡單二元光柵。優(yōu)化將使用傾斜角度、深度和占空比作為折疊和超頻光柵的每個部分中的變量。



在OpticStudio內(nèi)置的波導系統(tǒng)中,準直光束入射到IC光柵上,通過波導傳播到折疊光柵,然后將光線重定向到OC。



探測器設置為直接在超頻光柵的輸出端捕獲光線。優(yōu)化的目標是增強朝向眼睛的輻照度圖輸出的均勻性,同時最大限度地提高總功率。


為了準備優(yōu)化,折疊和超頻光柵被分成多個部分。這些部分的數(shù)量和形狀可以根據(jù)用戶的需要輕松定制。在本例中,波導上的光柵區(qū)域形狀為圓形(耦合光柵)、矩形(耦合光柵)和多邊形(折疊光柵)。


第 2 步:在 optiSLang 中設置優(yōu)化

2.在 optiSLang 中打開 EPE_1D_optimization.opf 文件以檢查優(yōu)化設置。

3.雙擊 Python 圖標“EPE_1D_for_OptiSlang.py”以可視化代碼。

在附件中,準備了一個python文件EPE_1D_for_OptiSlang.py,用于將optiSLang鏈接到OpticStudio。


在本文中,我們希望控制折疊光柵和超頻的光柵高度、占空比和傾斜角度。不是在每個部分中單獨設置所有這些參數(shù),而是使用定義如下的參數(shù)函數(shù)來控制給定光柵的多個區(qū)域的光柵參數(shù):



其中 i 是區(qū)域編號,N 是光柵中的區(qū)域總數(shù)。



這些參數(shù)通過optiSlang按照預定義的優(yōu)化算法(例如進化算法)進行變化。不同的參數(shù)值被設置到python代碼中,并將其向下傳輸?shù)絆pticStudio中的每個光柵部分。在這個過程中,Python代碼在OpticStudio中將這些變量轉換為確切的參數(shù)。只有當我們使用optiSLang而不是OpticStudio中的內(nèi)置優(yōu)化器來優(yōu)化系統(tǒng)時,才能使用Python中定義的函數(shù)進行這種預數(shù)據(jù)處理。通過這種方式,optiSLang可以基于一些在OpticStudio UI中沒有直接公開的虛擬或高級變量來優(yōu)化系統(tǒng)。

設置好參數(shù)后,代碼的其余部分包括調(diào)用OpticStudio來追蹤光線并從探測器收集結果。使用 optiSLang 優(yōu)化系統(tǒng)的另一個好處是后數(shù)據(jù)處理。在這個優(yōu)化過程中,我們不直接優(yōu)化眼盒上的輻照度分布。取而代之的是,我們首先使用瞳孔函數(shù)對輻照度分布進行卷積,然后根據(jù)這個卷積結果設置優(yōu)化目標。在此示例中,優(yōu)化目標是對比度、總功率和均勻性,定義如下:



Python 代碼的最后一部分是繪制眼框處的輻照度結果,以及其卷積結果,然后導出圖片。這對于用戶直接在optiSLang后處理中檢查每個優(yōu)化系統(tǒng)的輻照度很有用。


第 3 步:查看優(yōu)化結果

4.雙擊“optiSLang (1)”圖標以可視化優(yōu)化結果。

優(yōu)化開始時,首先執(zhí)行靈敏度分析以確定最重要的參數(shù)。使用此輸入,進化算法運行并生成一系列結果。這些結果可以直接在帕累托圖中的optiSLang中可視化。

下圖中紅色標記的設計稱為帕累托前。帕累托前沿說明了多個目標之間的權衡,其中沒有一個設計在性能方面主導另一個目標。這意味著所有這些設計都顯示了多個標準(例如均勻性與總功率)的不同平衡。我們收集了 2 個結果并在下面顯示它們。對于每個設計點,對應一對圖,分別顯示眼框內(nèi)的對比度和均勻性。



第 4 步:使用所需設計更新系統(tǒng)

5.將“敏感度”塊復制/粘貼到頁面中,然后雙擊塊標題“敏感度 (1)”進行編輯。

a.在“動態(tài)采樣”選項卡中,取消選中“動態(tài)采樣”選項

b.在“其他”選項卡中,選中“隱藏評估設置”菜單中的“再次求解開始設計”選項

c.在“開始設計”選項卡中,選擇“從系統(tǒng)導入起始值”選項,然后選擇在帕累托圖上標識的所需設計(例如#449)。

6.在OpticsStudio中,點擊編程選項卡中的“交互式擴展”按鈕,然后運行OptiSlang仿真。

優(yōu)化已經(jīng)在附件中完成,打開文件時可以可視化優(yōu)化結果。有時,我們可能想選擇一個優(yōu)化的設計,并在OpticStudio中進行研究。但是,optiSLang 僅將輸入?yún)?shù)保存在表格中。我們不保留OpticStudio系統(tǒng)。為了在optiSLang中選擇特定的設計,并將參數(shù)推送到OpticStudio的光學系統(tǒng)中,我們可以復制靈敏度模塊,并將其起點定義為所需的設計。通過禁用動態(tài)采樣,運行該模塊將簡單地從所選設計中讀取參數(shù)值,并將相應的數(shù)據(jù)推送到OpticStudio中。然后,用戶可以手動將新系統(tǒng)保存為其他名稱。在optiSLang中獲取具有任何設計外觀設計的OpticStudio系統(tǒng)的另一種選擇是在python代碼中添加一個命令,以便在optiSLang中運行優(yōu)化時直接將系統(tǒng)保存為.zmx文件(例如TheSystem.SaveAs('design_optimized.zmx')。請注意,第二種方法僅在我們在 optiSLang 中運行優(yōu)化之前在 Python 中進行更改時才有效。



重要模型設置

·由于系統(tǒng)依賴于 Python 代碼,因此假定已安裝 Python 以及腳本中調(diào)用的所有其他模塊。

·在optiSLang中運行任何內(nèi)容之前,確保“交互式擴展”在OpticStudio(編程選項卡)中處于活動狀態(tài)非常重要。


使用參數(shù)更新模型

·本例中的光學系統(tǒng)呈現(xiàn)的是具有兩個一維光柵的 EPE,這些光柵分為幾個區(qū)域。由用戶自定義光柵的形狀、性質(zhì)和位置。每個部分的形狀和數(shù)量也可以直接在光學系統(tǒng)中定制。

·變量和優(yōu)化目標在設置 optiSLang 時定義,并且可以自定義。

·在本文中,變量是使用函數(shù)間接定義的。在示例的 Python 代碼中,它的名稱為“l(fā)insp”。任何自定義函數(shù)也可以由用戶使用,定義可以簡單地在Python代碼中更新。


進一步發(fā)展模型

·在這個演示中,我們只考慮中心場,即通常入射到波導上的準直光束。為了進行更全面的優(yōu)化,可以添加更多視場以覆蓋全視場的均勻性。

·同樣,該系統(tǒng)僅針對單個波長而設計。根據(jù)系統(tǒng)設計,優(yōu)化可以包括多個波長。

·一些輻照度分布看起來更均勻,但會導致更高的對比度??梢酝ㄟ^修改 Python 代碼來改進標準。


準備 Python 代碼

Python 代碼的基本結構可以通過轉到 OpticStudio > 編程> Python > 交互式擴展來啟動。還有一些模塊被導入到樣板中,例如 numpy、scipy 和 matplotlib。



通過嘗試讀取變量OSL_WORKING_DIR,我們可以知道這個Python代碼是由optiSLang調(diào)用的還是手動執(zhí)行的。在靈敏度分析或優(yōu)化過程中,optiSLang會自動改變定義的變量的值。另一方面,如果我們直接運行這段Python代碼而不使用optiSLang,那么這些變量的值將是常數(shù)。

可以完成代碼以將變量值鏈接到光學系統(tǒng)的參數(shù),跟蹤光線,從探測器收集數(shù)據(jù)并處理結果。例如,在此示例中,我們先使用瞳孔函數(shù)對檢測器輸出進行卷積,然后再計算均勻性和對比度等關鍵參數(shù)。


在 optiSLang 代碼中設置變量和優(yōu)化目標

Python代碼準備好后,我們就可以開始在optiSLang中規(guī)劃優(yōu)化了。第一步是打開一個空文件,將“求解器”向導拖動到場景中,然后選擇“Python 集成”以選擇事先準備好的代碼。

在求解器向導窗口中,可以通過瀏覽 python 代碼來選擇變量。突出顯示變量名稱,右鍵單擊它,然后選擇“用作參數(shù)”。



參數(shù)設置好后,我們應該測試 Python 代碼是否可以成功運行。為此,我們打開OpticStudio并打開交互式擴展模式,如下所示。然后在求解器向導中,我們可以單擊向下箭頭并選擇“使用輸入測試運行”,如下所示。如果效果良好,您應該會在OpticStudio中看到交互式擴展對話框,指示“已連接”。



計算完成后,可以按照與設置變量相同的方式選擇響應參數(shù)。在此示例中,我們右鍵單擊 Python 代碼中的變量“Uniformity”、“Contrast”和“TotalPower”,然后選擇“用作響應”。然后 3 個變量將顯示在右側列中。

向導的下一頁將要求用戶定義每個參數(shù)的參考值和范圍。參考值將遵循我們在上一步中設置參數(shù)時的設置。范圍由設計師決定,沒有標準答案。請注意,此范圍是絕對的。在優(yōu)化過程中,參數(shù)不會突破邊界。這與我們通常對Zemax OpticStudio優(yōu)化器的期望不同。

在向導的下一頁中,我們需要根據(jù)給定的響應設置優(yōu)化標準。如下圖所示,我們只需將響應拖動到底部即可設置約束或目標。在這種情況下,我們設定了 3 個目標:最小化對比度、均勻性和最大化總功率。我們還可以為對比度和總功率設置 2 個額外的約束,以避免一些極端情況,即結果均勻而總功率極低,或相反的情況。



(可選)設置并行計算

這不是絕對必要的,但可以為 OptiSLang 設置并行計算以加快優(yōu)化速度。如果用戶擁有多個Lumerical FDTD求解器許可證,則可以考慮這樣做。要進行設置,第一步是右鍵單擊參數(shù)化系統(tǒng)模塊,選擇“編輯”,然后在窗口底部并行設置最大限制。將該數(shù)字設置為不大于 8 的任何數(shù)字,或 Lumerical FDTD 求解器許可證總數(shù)的編號。

應直接在 Python 節(jié)點上執(zhí)行相同的操作,如下圖所示。右鍵單擊 Python 節(jié)點,然后選擇“編輯”。要設置詳細信息,我們需要首先單擊右上角的漢堡包狀標記,選中“屬性和占位符”,然后單擊“確定”按鈕。然后我們可以將“MaxParallel”設置為所需的數(shù)字,如下所示(為了說明,我們將其設置為 6)。還需要在窗口底部將“最大并行”選項設置為所需的數(shù)字。如果先設置此參數(shù),則上面的 MaxParallel 也會自動更改,但仔細檢查它是否按預期設置會更安全。

最后,建議勾選“重試執(zhí)行”,將“重試次數(shù)”設置為20,將“嘗試之間的延遲”設置為1000毫秒。此設置避免了 OptiSLang 嘗試訪問具有 1 個以上線程的同一 OpticStudio 實例的競爭情況。



請注意,如果并行設置設置為大于 1 的數(shù)字,則還需要打開相同數(shù)量的 OpticStudio 實例,以便 OptiSLang 可以為每個實例創(chuàng)建一個線程。


靈敏度和優(yōu)化設置

可以通過將向導拖動到參數(shù)化系統(tǒng)模塊來設置靈敏度系統(tǒng)。參數(shù)和條件將被復制,我們不需要再次設置它們。默認情況下,它將建議 AMOP 模型,我們可以保留此設置。AMOP 是一種迭代抽樣方法,它將設計采樣到設計空間中,直到達到目標標準(設計的最大值或模型質(zhì)量)。

同樣,可以通過將優(yōu)化向導的實例拖動到 AMOP 模塊來設置優(yōu)化。請注意,當它詢問優(yōu)化方法時,我們應該選擇 Real Run,因為這個系統(tǒng)永遠不會有高質(zhì)量的最佳預后元模型 (MOP)。MOP 是在 (Most and Will 2008) 中提出的,它基于對最佳輸入變量集和最合適的近似模型(多項式或具有線性或二次基礎的 MLS)的搜索。對于優(yōu)化算法,建議使用進化算法,該算法適用于非常不均勻和不連續(xù)的解空間。

一切設置完成后,轉到OpticStudio以激活編程選項卡中的“交互式擴展”,然后單擊OptiSlang中的“運行”按鈕。