Yee網格

Yee grid

裡面有分為 None,x,y,z,xyz分別是

None 不畫結構

Fast 畫x,y,z三方向矩陣中重疊之結構,為粗略式快速畫法

x 畫x方向的結構,如epsrx

y 畫y方向的結構,如epsry

z 畫z方向的結構,如epsrz

xyz 同時畫x,y,z三方向的結構,真實反應Yee grid的格子位置,如epsrx,epsry,epsrz,耗費記憶體大且速度較慢,小心使用

有限差分時域法是以Yee網格法作為基礎,要對Yee網格做觀察解釋,我們利用二維單狹縫的例子來解釋這個會比較清楚

首先先設定一個網格數為X=60;Z=60;dx=5e-9;四邊皆為PML=5格的模擬空間

再來給予設計一高度100 nm;寬度50 nm的單狹縫結構

%=================狹縫 Slit===========================

lengthx=50e-9;

lengthz=100e-9;

nindex=1^2;

sigma=0;

choice='PEC'; %E_Iso,PEC,M_Iso,PMC,E_Model1,M_Model1,EM_Model1

gridtype=-1; %

xposition=icenter*gdx;

yposition=jcenter*gdy;

zposition=kcenter*gdz;

Iso_Slit(choice,gridtype,nindex,sigma,xposition,zposition,lengthx,lengthz)

%=================狹縫 Slit===========================

我們使用完美導體(PEC)做為材料。gridtype為-1

在此我們先解釋為什麼要有gridtype這個分別

gridtype=-1 為電性材料填充對應的網格;

gridtype=1 為磁性材料填充對應的網格;

gridtype=0 則不做網格對應

這是因為在FDTD裡,電性材料"各分量"與電場"各分量"所對應"各分量"的網格之間一致的,相互之間會有0.5格網格差,而磁性材料與磁場亦同。而電場與磁場間則亦會錯開0.5個網格,即Ex,Ey,Ez,Hx,Hy,Hz六個場相互之間都有0.5個格子差異,即Yee網格的理論。

下方是我們比較用【Yee grid => Fast】與【Yee grid => xyz】(真實反應Yee grid的格子位置)兩者的不同

Yee grid => Fast

□H grid

Yee grid => xyz

可以看出【Yee grid => xyz】在狹縫口端有些許不一樣,這是因為在真實的模擬空間上,x,y,z三個分量彼此間都是錯開0.5格的。那麼我們講電場與磁場的網格放出來一併對比,看起來會容易的多,下面是開啟電磁場網格的方法

在【設計分析圖形介面】裡的輔助顯示中,這兩個勾選且選擇 (只有在【Yee grid => xyz】勾選才有作用,因為這是反應真實網格)

□E grid

(這兩個功用是專為學習FDTD理論而寫的,平時不會用到。而當模擬的結構格子數太多會因為過於密集而造成閱讀困難,且若是三維且結構大小的網格過多記憶體會用量非常可觀,因為每個網格都會畫出來,因此要學習時,請用小尺寸(網格數少)來學習就好)

gridtype = -1 (電性材料網格)

(Yee grid => xyz, E grid, H grid 皆勾選)

完美電性導體單狹縫 (PEC Single Slit)

紅色箭頭為電場Ex(x方向),Ez(z方向)網格。藍色為Hy(y方向) (gridtype=-1)

完美電性導體單狹縫 (PEC Single Slit)

gridtype = -1 (電性材料網格)

(由上圖左可看出,用X=60; Z=60; 所畫出來的真實網格已經很密集了,因此若要開啟此功能學習者記得不要用太大的網格)

上圖右我們將結構拉近,我們可看出完美導體電性材料在轉角的時候都有在對應電場的方向將材料填進去。這是gridtype=-1時代表電性材料的用法

那麼同樣來比較看看,當我們選擇gridtype=0時及gridtype=1時又會是如何

(Yee grid => xyz, E grid, H grid 皆勾選)

gridtype = 1 (磁性材料填充網格)

完美電性導體單狹縫 (PEC Single Slit)

(Yee grid => xyz, E grid, H grid 皆勾選)

gridtype = 0

完美電性導體單狹縫 (PEC Single Slit)

上圖左為同樣使用電性完美導體做為材料的單狹縫,而填進去的網格使用【gridtype=1】磁性材料填充對應的網格,可看到畫出的單狹縫已經不左右對稱。且我們看狹縫中右邊的位置,PEC電性完美導體材料並沒有正確的填充進z方向的位置,而變成以x方向做為邊界

上圖右為同樣使用電性完美導體做為材料的單狹縫,而填進去的網格使用【gridtype=0】的網格,即不做任何對應。也可看出左右兩邊狹縫不對稱,且在狹縫中右邊的位置,也是以x方向做為邊界

我們來看看用這三種不同的gridtype所填充的完美電性導體單狹縫其結果會如何

gridtype = -1

gridtype = 0

gridtype = 1

我們可以看出gridtype=-1完美的對應與模擬。而gridtype=0時,可看到脈波在狹縫中傳播時會有些許不對稱。而gridtype=1時,則不對稱的情況更加明顯。這是因為原本狹縫是完美電性材料(PEC)做為邊界的、但因為填充材料時,網格沒有對應好。而以錯誤的邊界造成的誤差。而這也是FDTD的主要誤差來源之一。

當我們所要模擬的結構為非矩形時,如圓形,由於傳統FDTD網格是在直角座標網格系統所做,因此這種誤差就會存在。因此另外有許多不同網格形狀的FDTD技術,例如:Hexagonal Grids,Nonuniform Orthogonal Grids, Curvilinear Coordinates, Structured Nonorthogonal Grids, Irregular Nonorthogonal Unstructured Grids, Bodies of Revolution (Cylindrical Coordinates)等等。

那麼,這種誤差會對結果造成怎麼樣的誤差。我們下面來做個測試

第一個,還是使用二維TM完美導體單狹縫穿透率計算範例,這裡我們將網格調大一點解析度高一點

下面為參數設定圖

結構設計裡單狹縫的函數是

%=================狹縫 Slit===========================

lengthx=100e-9;

lengthz=400e-9;

nindex=1^2;

sigma=0;

choice='PEC'; %E_Iso,PEC,M_Iso,PMC,E_Model1,M_Model1,EM_Model1

gridtype=-1; %

xposition=icenter*gdx;

yposition=jcenter*gdy;

zposition=80*gdz;

Iso_Slit(choice,gridtype,nindex,sigma,xposition,zposition,lengthx,lengthz)

%=================狹縫 Slit===========================

參數設定圖,由於是觀察單狹縫穿透率,因此我們必須觀察X-,X+,Z+三個方向,而這所圍成的範圍顯示於下圖

黃色的線即是穿透頻譜的積分位置,而箭頭的方向波印亭積分為正。

下圖為三種不同的gridtype穿透率頻譜圖,正確的為gridtype = -1 (電性材料填充進電性材料的位置)。而gridtype =1則因為是電性材料填充入磁性材料的網格位置,因此出現較大的錯誤。而gridtype=0;從前面的例子可知,狹縫中右邊的電性材料並沒有準確的填充入z方向,因此狹縫寬度更寬,整個頻譜就更紅移一些。

接著,我們將解析度調高,delta使用2.5nm

%=================狹縫 Slit===========================

lengthx=100e-9;

lengthz=400e-9;

nindex=1^2;

sigma=0;

choice='PEC'; %E_Iso,PEC,M_Iso,PMC,E_Model1,M_Model1,EM_Model1

gridtype=-1; %

xposition=icenter*gdx;

yposition=jcenter*gdy;

zposition=110*gdz;

Iso_Slit(choice,gridtype,nindex,sigma,xposition,zposition,lengthx,lengthz)

%=================狹縫 Slit===========================

我們再比較一次三者個結果

在這裡我們發現,三者之間的差異變小了,且gridtype = 1的頻譜變形情況也沒有之前解析度較差時那麼嚴重

(delta=5e-9,解析度的大小要跟您所模擬的結構來做比較才能決定好或壞,例如我們這次模擬的結構狹縫開孔寬度是100e-9,狹縫厚度是400e-9。這樣我們描述狹縫寬度的格數則是

100e-9/5e-9 = 20格

100e-9/2.5e-9 = 40格 (解析度較高)

FDTD在描述入射波長、結構時,記得我們所設定的delta大小,至少要小於欲模擬的結構10倍以上。前面這兩種不同的單狹縫例子解析度都是夠的,我們將兩個解析度的穿透率頻譜放在一起並做歸一化來比較(因為不同的模擬系統大小,開孔寬度"網格數量"不同,其做歸一化Normalized的值也會有不同,但不影響頻譜,頻譜預設的縱軸單位都是自由單位arbitrary unit)

之所以選擇單狹縫來做例子,是因為單峽的穿透頻譜會有類似Fabry-Perot共振的現象。在單狹縫厚度夠厚的情況下會有多階峰值模態的存在。單狹縫的厚度、及狹縫開孔寬度對頻譜的影響非常敏感,因此比較起來容易看出差別。

下面我們再舉一個二維TM圓柱形結構的範例,且與理論解析解做比較

參數設定為

輸入一半徑150e-9; 折射率(refractive index)為 2的柱形

%=================球 sphere===========================

radius=150e-9; %diameter=2*radius

nindex=2^2;

sigma=0;

choice='E_Iso'; %E_Iso,PEC,M_Iso,PMC,E_Model1,M_Model1,EM_Model1

gridtype=-1; %electric material -1; magnetic material 1; other 0

xposition=icenter*gdx;

yposition=jcenter*gdy;

zposition=kcenter*gdz;

Iso_Sphere(choice,gridtype,nindex,sigma,xposition,yposition,zposition,radius)

%=================球 sphere===========================

結構如下,可看出柱形結構並沒有非常圓,仍然可以看到些凌角,這會有階梯式誤差的存在(staircase)

我們可以看到gridtype在這個範例下影響甚微,所造成的誤差很難分辨出來。單狹縫(窄又厚的情況)因為狹縫中共振腔Q值很高,對於峰值的變化才會如此敏感,因此算是特別的例子。一般的情況,其實就算選錯gridtype,也不會造成太大的誤差。

接著,我們一樣的將解析度提高,參數設定如下

結構如下,可看出解析度提高後,柱形結構變的更加圓滑了,階梯式誤差變小了(staircase error)。

我們再次比較FDTD模擬計算的結果與理論解析解(Mie theory)的結果,如下圖

基本上數值計算的結果與理論解析解間,已經幾乎相同了。提高解析解會增加記憶體的使用、計算時間也會拉長。這之間誤差的容許取捨,就得由您自己考量了。

市售軟體通常已有許多逼近、修正方法去盡量避免結構描述的不完美所造成的誤差、特定的方法處理特定的結構,如圓柱形就使用圓柱形座標、六角晶格使用六角形網格等。如前面所提的Hexagonal Grids,Nonuniform Orthogonal Grids, Curvilinear Coordinates, Structured Nonorthogonal Grids, Irregular Nonorthogonal Unstructured Grids, Bodies of Revolution (Cylindrical Coordinates)等等眾多方法。

例如Lumerical套裝軟體的說明。

對照引用 Comparison & Reference:

Lumerical FDTD Solutions

Conformal Mesh Technology

https://www.lumerical.com/support/whitepaper/fdtd_conformal_mesh_whitepaper.html

本軟體未支援這些技術,因此若要克服誤差,只能以提高解析度,來減少這些誤差。