項目4.4 Reflection calculation using a dipole source
在此頁面中,我們采用了一種不同于標準平面波源方法的替代模擬設置,使用偶極子源來計算多層堆疊結構的反射。在此情況下,我們使用空氣 - 玻璃界面。這種技術很有吸引力,因為它能夠在單次模擬中計算出所有角度的反射。另一個優點是,所有模擬邊界都設置為 PML,這可以提高臨界角或接近臨界角時的角度性能。
仿真設置
上圖展示了 dipole_2layer.fsp 的仿真設置。空氣 - 玻璃界面清晰可見,還有偶極子源(藍色圓圈)和剖面監視器(黃色線)。在堆疊結構的正下方放置了一個剖面監視器。前向和后向遠場投影均從該監視器計算得出。反射率可通過后向投影除以前向投影得出。每種偏振態都需要進行一次仿真。
優點:
一次模擬即可得到所有角度下的反射率(R)和透射率(T)。
缺點:
此技術僅適用于無圖案的平板,不適用于光柵。隨著堆疊層數的增加,可能需要非常寬的模擬范圍。
結果:
腳本 dipole_2layer.lsf 將運行兩次模擬,然后計算解析解。對于兩種偏振,模擬得到的反射率和透射率與入射角的關系以及解析解均被繪制出來。
代碼分析
這段代碼是 Lumerical 軟件的腳本文件(.lsf),用于計算雙層介質結構的反射和透射光譜,并將 FDTD 仿真結果與理論結果進行對比
# scriptfile: dipole_2layer.lsf
注釋:標識腳本文件名,說明當前文件為dipole_2layer.lsf。
# This file calculates the reflection spectrum for a single dielectric interface. It does both polarizations (TE and TM) and compares to the analytic result.
注釋:說明腳本功能:計算單層介質界面的反射光譜,處理 TE(S 偏振)和 TM(P 偏振)兩種偏振態,并與解析理論結果進行對比。
# Copyright 2012, Lumerical Solutions, Inc.
注釋:版權聲明,屬于 2012 年 Lumerical Solutions 公司(Lumerical 是光子仿真軟件開發商)。
sweepname="2layer";
定義變量sweepname并賦值為字符串"2layer",用于指定后續要讀取的 “掃描仿真”(sweep simulation)的名稱(這里指 “雙層結構” 的掃描仿真)。
# choose to rerun or load simulations previously run
注釋:說明后續代碼的作用:選擇重新運行仿真或加載之前已運行的仿真結果。
#runsweep;
被注釋的命令:runsweep是 Lumerical 中執行掃描仿真的命令。這里被注釋,說明腳本會直接加載已完成的仿真結果,而不重新運行仿真。
f = getsweepdata(sweepname,"f");
調用getsweepdata函數從名稱為sweepname(即 "2layer")的掃描仿真中,提取參數"f"(頻率)的數據,并賦值給變量f。
theta = getsweepdata(sweepname,"theta");
從掃描仿真中提取參數"theta"(入射角,單位通常為度)的數據,賦值給變量theta。
n = getsweepdata(sweepname,"n");
從掃描仿真中提取參數"n"(介質折射率)的數據,賦值給變量n(可能包含多層介質的折射率)。
d = getsweepdata(sweepname,"d");
從掃描仿真中提取參數"d"(介質厚度)的數據,賦值給變量d(可能包含多層介質的厚度)。
Rs_fdtd = pinch(getsweepdata(sweepname,"r"),2,1);
getsweepdata(sweepname,"r"):提取掃描仿真中反射率("r")的原始數據(通常是一個多維數組,包含不同偏振態的結果)。
pinch(...,2,1):pinch函數用于提取多維數組中特定維度的數據,這里表示 “在第 2 個維度取第 1 個元素”,對應 TE 偏振(S 偏振)的反射率。
最終將 FDTD 仿真得到的 S 偏振反射率賦值給Rs_fdtd。
Ts_fdtd = pinch(getsweepdata(sweepname,"t"),2,1);
類似上一句,提取透射率("t")數據中第 2 維度的第 1 個元素,對應 FDTD 仿真得到的 S 偏振透射率,賦值給Ts_fdtd。
Rp_fdtd = pinch(getsweepdata(sweepname,"r"),2,2);
提取反射率("r")數據中第 2 維度的第 2 個元素,對應 TM 偏振(P 偏振)的反射率(FDTD 仿真結果),賦值給Rp_fdtd。
Tp_fdtd = pinch(getsweepdata(sweepname,"t"),2,2);
提取透射率("t")數據中第 2 維度的第 2 個元素,對應 FDTD 仿真得到的 P 偏振透射率,賦值給Tp_fdtd。
RT_Theory = stackrt(n,d,f,theta);
調用 Lumerical 內置函數stackrt計算多層膜結構的理論反射 / 透射率。
參數:n(折射率)、d(厚度)、f(頻率)、theta(入射角)。
返回值RT_Theory是一個結構體,包含理論計算的反射率(Rs、Rp)和透射率(Ts、Tp)。
plot(theta,Rs_fdtd,RT_Theory.Rs,Rp_fdtd,RT_Theory.Rp,"angle (degrees)","Reflection","Reflection vs angle");
繪制反射率隨入射角變化的曲線:
橫軸:theta(入射角,單位 “度”)。
縱軸:反射率。
曲線包括:FDTD 的 S 偏振反射率(Rs_fdtd)、理論的 S 偏振反射率(RT_Theory.Rs)、FDTD 的 P 偏振反射率(Rp_fdtd)、理論的 P 偏振反射率(RT_Theory.Rp)。
圖表標題為 “Reflection vs angle”(反射率與角度的關系)。
legend("S FDTD","S Theory","P FDTD","P Theory");
為上一個反射率圖添加圖例,依次對應曲線的含義:S 偏振 FDTD 結果、S 偏振理論結果、P 偏振 FDTD 結果、P 偏振理論結果。
plot(theta,Ts_fdtd,RT_Theory.Ts,Tp_fdtd,RT_Theory.Tp,"angle (degrees)","Transmission","Transmission vs incident angle");
繪制透射率隨入射角變化的曲線:
橫軸:theta(入射角,單位 “度”)。
縱軸:透射率。
曲線包括:FDTD 的 S 偏振透射率(Ts_fdtd)、理論的 S 偏振透射率(RT_Theory.Ts)、FDTD 的 P 偏振透射率(Tp_fdtd)、理論的 P 偏振透射率(RT_Theory.Tp)。
圖表標題為 “Transmission vs incident angle”(透射率與入射角的關系)。
legend("S FDTD","S Theory","P FDTD","P Theory");
為透射率圖添加圖例,含義同反射率圖的圖例。
總結:整個腳本的核心邏輯是 “加載 FDTD 仿真數據→提取關鍵參數(反射 / 透射率)→計算理論結果→繪圖對比仿真與理論”,用于驗證雙層介質結構的光學特性仿真結果的準確性