ZEMAX | 利用RCWA方法模擬表面浮雕光柵的衍射效率
本文介紹了OpticStudio 20.1中添加的兩個動態(tài)鏈接庫 ( Dynamic Link Library,DLL ) 文件,兩者都是用來模擬表面浮雕光柵的衍射DLL。這兩個稱為“ rg_step_RCWA.dll ”和“ srg_trapezoid_RCWA.dll ”的DLL建立了階梯光柵和梯形光柵模型。
本文將首先介紹DLL中使用的方法,然后介紹DLL中的參數(shù),最后展示兩個示例。
這些功能只能在OpticStudio的高級訂閱版本中使用。
簡介
表面浮雕光柵 (SRG) 廣泛應(yīng)用于各種傳統(tǒng)光學(xué)系統(tǒng),如光譜儀、分束器、三維掃描系統(tǒng)、衍射透鏡和脈沖放大系統(tǒng)等。近年來,表面浮雕光柵在平視顯示器 (HUD) 、增強現(xiàn)實 (AR)、虛擬現(xiàn)實 (VR) 頭戴顯示器 (HMD) 等現(xiàn)代設(shè)備中得到廣泛應(yīng)用。它們能夠以任意角度衍射光線,綜合其波長和角度選擇性,使得光學(xué)系統(tǒng)比傳統(tǒng)設(shè)計更緊湊、更輕,而傳統(tǒng)設(shè)計通常需要使用棱鏡和自由曲面來達(dá)到同樣的性能,會導(dǎo)致系統(tǒng)更復(fù)雜,體積更龐大。
OpticStudio一直可以模擬光柵,但沒有考慮衍射效率。為了準(zhǔn)確地反映衍射光線的衍射效率和偏振態(tài),就必須在模擬時考慮光柵的微觀結(jié)構(gòu)等特性。
本文將討論兩個用來模擬梯形和階梯光柵的DLL。
表面浮雕光柵與體全息光柵
在介紹這個模型之前,先簡要解釋表面浮雕光柵和體全息光柵 (VHG) 之間的區(qū)別。這兩種光柵在光學(xué)系統(tǒng)中的作用幾乎相同,但在制作和仿真方面卻有很大的不同。
圖1(a)表面浮雕光柵折射率分布均勻,但表面微觀結(jié)構(gòu)具有周期性。(b)體全息光柵具有周期性變化的折射率分布,但表面光滑。
如圖1(a)所示的SRG可以用光刻、納米壓印或金剛石車削等方法制作。與VHG不同的是,SRG的折射率沒有空間變化,其表面是由周期性微觀結(jié)構(gòu)構(gòu)成的。需要使用一種類似于傅里葉模態(tài)法(也稱為RCWA [1])的算法來模擬SRG。
如圖1(b)所示的VHG是通過在感光乳膠膜上曝光兩束或更多光束來制造的,然后用化學(xué)或熱顯影方法處理制成光柵。體全息光柵表面光滑,但其內(nèi)部的折射率呈正弦變化。需要使用高效的Kogelnik理論 [2] 或增強型的嚴(yán)格耦合波分析等算法來模擬VHG。
OpticStudio提供了用于模擬SAR和VHG的DLL。本文介紹了用于模擬SRG衍射效率的工具。
用于VHG的工具,參見知識庫文章, 使用Kogelnik方法模擬體全息光柵的衍射效率 。
傅里葉模態(tài)法(嚴(yán)格耦合波分析)
讓我們快速回顧一下用于模擬SRG 的DLL中使用的理論。
傅里葉展開式
圖2. 在傅里葉空間展開麥克斯韋方程。將介電常數(shù) ε 和磁導(dǎo)率 μ 都寫入傅里葉級數(shù)中, Λx和 Λy為x和y方向的周期,a和b是每個傅里葉項的系數(shù),(m, n)是整數(shù)。將電場E和磁場H寫成平面波的組合,其中S和U是每個平面波的強度,k是波矢量。E 、 H 、S 、 U 和 k都是向量,表示 (Ex,Ey,Ez), (Hx,Hy,Hz), (Sx,Sy,Sz), (Ux,Uy,Uz) 和 (kx,ky,kz)。
Concept of layers
層的概念
層是RCWA中的重要概念。該理論假設(shè)光柵結(jié)構(gòu)在z方向上是均勻分布的,在X、Y方向上是周期性分布的。如果該結(jié)構(gòu)在Z方向上不是均勻分布,則認(rèn)為該結(jié)構(gòu)是多個“層”的組合。每一層上的結(jié)構(gòu)在z方向上是均勻分布的,如圖3所示。
圖3. 在RCWA算法中,將微結(jié)構(gòu)分割成許多層,每一層的結(jié)構(gòu)在z方向上是均勻的。
一般而言,對結(jié)構(gòu)的采樣層數(shù)越多,模擬結(jié)果越準(zhǔn)確,但計算速度也越慢。這是準(zhǔn)確性和速度之間的平衡。
DLL模型包含控制層數(shù)的參數(shù)。
在 srg_trapezoid_RCWA.dll 中,用 “# Layer”控制。
在 the srg_step_RCWA.dll 中, 用“l(fā)ays of 1 stp”控制。
有關(guān)這些參數(shù)的更多說明,請參見以下部分。
諧波(級次)的概念
當(dāng)平面波擊中光柵表面時,光向離散的方向衍射,稱之為諧波或級次。諧波就像層;計算中包含的諧波越多,計算的精度越高,但速度越慢。在兩個DLL中,諧波的數(shù)量由參數(shù) “最大級次(Max Order)” 控制。
例如,如果將最大級次設(shè)為3,則意味著在計算時要考慮 - 3 , -2 , -1 , 0 , 1 , 2 , 3級的諧波。通常需要做一些測試來找到平衡速度和精度的最佳值。根據(jù)經(jīng)驗,通常將最大級次初始值設(shè)置為:3*(光柵周期)/(波長)。圖4顯示了用一維光柵將入射光衍射成多個級次的情況。
圖4. 當(dāng)一束光入射到光柵上,分裂成多個級次。
鏈接到光線追跡模型
在RCWA算法中,電磁場是經(jīng)過傅里葉展開的。在光柵結(jié)構(gòu)中,電磁場被分解成多個平面波。經(jīng)過計算,RCWA根據(jù)輸入光和光柵結(jié)構(gòu)給出了輸出光波的電場和每個級次的傳播方向。
OpticStudio只是將這些平面波與光線追跡模型中的光線聯(lián)系起來。
圖5顯示了RCWA模型中,如何將光線追跡模型中的光線視為平面波。
圖5. 在光線追跡代碼中,當(dāng)光線入射到光柵上時,將其看作平面波,并傳遞給RCWA代碼。再將RCWA計算出的對應(yīng)的輸出平面波再次轉(zhuǎn)換成光線,再傳遞回光線追跡代碼。
請注意,RCWA代碼僅用光柵深度來計算效率。在光線追跡代碼中,仍將光柵視為無限薄的表面。
圖6從宏觀上展示了入射光、衍射光和光柵之間的關(guān)系。
圖6. 從光線追跡代碼的觀點出發(fā),將光柵結(jié)構(gòu)視為無限薄的表面。根據(jù)RCWA代碼,入射到光柵表面的任意光線都被衍射成不同方向、不同電場的幾個級次。
如何使用DLL建立光柵
在系統(tǒng)中加入光柵
本節(jié)將介紹如何在非序列模式下建立階梯光柵或梯形光柵。
可以使用衍射光柵(Diffraction Grating)物體或使用DiffractionGrating.dll定義的用戶定義物體 (User Defined Object),在非序列模式下添加光柵。目前不支持其他衍射物體,因為DLL假設(shè)衍射表面在XY平面上。
如果光柵孔徑為圓形,則使用衍射光柵物體。
如果光柵孔徑為矩形,則使用DiffractionGrating.dll定義的用戶定義物體。
如果孔徑是任意形狀的(既不是圓形,也不是矩形),那么可以將原生布爾(Boolean Native)物體或布爾CAD(Boolean CAD)物體與擠壓物體 (Extruded)一起使用。
圖7. 對于圓形光柵,請使用衍射光柵。對于矩形光柵,請使用具有衍射抓射的用戶定義對象.DLL。
然后在物體屬性(Object Properties)中,點擊衍射(Diffraction),選擇srg_step_RCWA.dll定義階梯光柵,srg_trapezoid_rcwa .dll定義梯形光柵。
反射(Reflect)和透射(Transmit)列中的參數(shù)應(yīng)該總是相同的。
下一節(jié)將介紹這些參數(shù)。
圖8. 可以通過在物體屬性中設(shè)置文中介紹的DLL來進(jìn)行應(yīng)用。
光柵的坐標(biāo)和方向
如圖9所示,光柵位于物體的面1 (Face 1)上。OpticStudio目前只支持一維光柵。假設(shè)光柵在Y方向上是均勻分布的,在XZ平面上具有周期性的分布。在光學(xué)系統(tǒng)中設(shè)置光柵時,應(yīng)注意光柵的方向。
圖9. 光柵總是在面1上。目前,OpticStudio只支持將光柵應(yīng)用于兩個物體:衍射光柵和DiffractionGrating.dll定義的用戶定義物體。
DLL 參數(shù)
在OpticStudio 20.3中,共有5個RCWA DL用于模擬不同形狀的1D光柵:
srg_trapezoid_RCWA.dll
srg_step_RCWA.dll
srg_blaze_RCWA.dll
srg_GridWirePolarizer_RCWA.dll
srg_user_defined_RCWA.dll
本節(jié)描述了這些DLL的參數(shù),從所有DLL相同的參數(shù)開始,然后解釋每個DLL的特定參數(shù)。
相同的參數(shù)
以下參數(shù)在所有 RCWA DLL 中具有相同的含義。
+周期/頻率(μm) 和深度 (μm)
這些凹槽周期單位為μm,光柵的剖面深度單位為μm。
當(dāng)“+周期/-頻率(μm)”是正值,它對應(yīng)于凹槽周期(μm);
當(dāng)它是負(fù)值,對應(yīng)于凹槽頻率(1 /μm)。周期和頻率是互為倒數(shù)的。圖10顯示了光柵的凹槽周期和深度。
圖10. 梯形和階梯光柵的槽深和凹槽周期。
建議周期不要太大,例如波長的100 倍。這意味著所需的最大級次非常大,以至于不能有一個準(zhǔn)確的結(jié)果。有關(guān)最大級次初始值的建議,請參閱"諧波(級次)的概念"部分。
最大級次
請參閱"諧波(級次)的概念"部分。
這目前限制為10(共 21 個諧波)。當(dāng)數(shù)字大于10時,在DLL中將其修改為 10。聯(lián)系支持團隊以增加限制。
旋轉(zhuǎn)光柵(°)
此參數(shù)允許用戶旋轉(zhuǎn)光柵線的方向。
當(dāng)它設(shè)置為零時,光柵線沿著Y方向,這意味著光線在X方向彎曲。
當(dāng)它設(shè)置為非零時,正值則光柵線以逆時針方向旋轉(zhuǎn)(+X +Y),負(fù)值則順時針向旋轉(zhuǎn)。請注意,此處描述的X和Y方向基于對象的本地坐標(biāo)系統(tǒng)。
圖11. 光柵旋轉(zhuǎn) 135 度。
使用鍍膜文件
此參數(shù)是一個標(biāo)志。如果是非零正整數(shù),則表示分散數(shù)據(jù)(指數(shù)與波長)在文本文件中定義。文本文件必須保存在 {Zemax}\Coatings\COATING_xx.dat中,其中 xx 是"使用涂料文件"參數(shù)中指定的正整數(shù)。
例如,如果將"使用涂層文件"設(shè)置為 7,則將COATING_7.dat讀取分散數(shù)據(jù)。
在COATING_xx.dat文件中,散射數(shù)據(jù)的定義可用參考“The Libraries Tab > Coatings Group > Defining Coatings > The MATE Data Section"下的幫助文件。材料名稱應(yīng)始終從RCWAxx開始,其中xx是兩位數(shù)的整數(shù)。所有文本依次排布。
例如,我們可以定義RCWA01TIO2。DLL將讀取 RCWA 材料1,并將忽略隨后的TIO2文本。圖12顯示了一個涂層文件與幾個材料散射數(shù)據(jù)的例子。
圖12. 如何在COATING_xx.dat中定義分散數(shù)據(jù)的示例。
材料編號可以指定光柵折射率(R)、環(huán)境折射率(R)或膜層折射率(R)。使用等于材料數(shù)乘以-1的負(fù)整數(shù)。
例如,如果我們要將RCWA02設(shè)置為Grate區(qū)域的索引數(shù)據(jù),則只需將光柵折射率(R)設(shè)置為 -2。
查看”光柵折射率(R)、光柵折射率(I)、環(huán)境折射率(R)、環(huán)境折射率(I)“和”膜層折射率(R)、膜層折射率(I)、膜層頂部厚度(μm)、膜層側(cè)面厚度(μm)“小節(jié)獲取更多信息
插值
這個參數(shù)需是一個整數(shù)。
如果為零,DLL 將不使用插值模式。
如果設(shè)置為非零值,DLL將在插值模式下工作,這意味著DLL在計算時將在RAM中緩存RCWA數(shù)據(jù)。然后,這些數(shù)據(jù)用于插值以進(jìn)行進(jìn)一步的光線追跡。這可以顯著提高系統(tǒng)中許多光線追跡的速度,例如,跟蹤超過一百萬條光線。
當(dāng)插值設(shè)置為1時,將使用201*201采樣網(wǎng)格。
當(dāng)它大于1時,它代表采樣網(wǎng)格的大小。換句話說,用戶可以通過將插值設(shè)置為大于1的數(shù)字來定義采樣網(wǎng)格的大小。但請注意,最低采樣網(wǎng)格大小為21。
當(dāng)插值設(shè)置為負(fù)整數(shù)時,DLL將采取絕對值來查找采樣網(wǎng)格,但會使用不同的方法進(jìn)行插值。這種插值方法更準(zhǔn)確,但速度較慢。
設(shè)置插值參數(shù)是為了速度和精度之間的正確平衡。
圖13. 當(dāng)參數(shù)插值為非零整數(shù)時,插值模式將打開。當(dāng)它是負(fù)數(shù)的時,使用不同的插值方法。這種方法較慢,但更準(zhǔn)確。
插值模式 (Interpolation Mode) 是如何工作的?
首先,在LM空間中定義一個采樣網(wǎng)格。當(dāng)光線入射到光柵上時,光線的方向可以用單位矢量(L,M,N)表示。LMN也被稱為光線的方向余弦。當(dāng)光線擊中光柵時,它在x和y方向上的方向余弦L和M被映射到LM空間。然后檢查最近的四個采樣點,如果在這四個點中沒有任何一個點已經(jīng)計算出RCWA數(shù)據(jù),則計算這些點的數(shù)據(jù)并將其保存在RAM中。然后用這四個點對入射光的RCWA數(shù)據(jù)進(jìn)行線性插值。注意,插值不僅是為了提高衍射效率,也是為了實現(xiàn)電場。換句話說,在緩存數(shù)據(jù)和插值的過程中,要充分考慮相位、偏振態(tài)和振幅的變化。
如果光柵數(shù)據(jù)或光的波長發(fā)生變化,DLL將創(chuàng)建另一個采樣網(wǎng)格來保存RCWA數(shù)據(jù)。因此,將光柵參數(shù)或波長設(shè)置為變量時,用戶不應(yīng)在優(yōu)化過程中打開插值功能。這意味著追蹤許多光線(>1000)時,插值會起到加速優(yōu)化的作用。但是,如果在優(yōu)化過程中僅通過光柵跟蹤幾條光線(如<10),建議關(guān)閉插值。
關(guān)于進(jìn)一步的討論,請參閱“優(yōu)化(Optimization)”一節(jié)。
圖14. 在插值模式下,衍射數(shù)據(jù)的計算如圖所示。
僅這些級次(Only these order)
當(dāng)參數(shù)"僅這些級次"為0或負(fù)時,DLL將照常工作。所有級次都將追蹤。當(dāng)該參數(shù)為正整數(shù)時,允許用戶指定用戶想要跟蹤的傳輸和反射中的衍射級次。
"僅這些級次"只是一個整數(shù),所以下表是它的定義。下表將級次映射為唯一的正整數(shù)。
"僅這些級次"是2的冪級數(shù)的總和。
舉個例子,如果用戶想要追跡0級反射光線(R0)和+1級透射光線(T+1)?!眱H這些級次“參數(shù)應(yīng)該被設(shè)置為2^0 + 2^5 = 1 + 32 = 33。
圖.15 ”僅這些級次“ 允許用戶指定用戶想要跟蹤的傳輸和反射中的衍射級次
注意在使用這個參數(shù)的時候,開始級次和結(jié)束級次需要包含指定的追跡級次。
此參數(shù)也可以使用可視化工具設(shè)置。這是一種更容易的方法,因為不需要計算。
圖.16 可視化工具中可用直接設(shè)置該參數(shù)。
隨機模式
這也可以稱為蒙特卡羅方法或者概率分裂
當(dāng)參數(shù)設(shè)置為0時,DLL正常工作
當(dāng)設(shè)置為1,2或3時,隨機模式將會生效。當(dāng)隨機模式工作時,DLL會讓光線隨機衍射,如圖17所示。跟蹤每個衍射級次的概率基于衍射級次之間的能量比。
圖17. 隨機模式下,任意入射光線會隨機衍射,產(chǎn)生衍射的級次的概率取決于每個級次的能量比。這張圖片顯示了只有1條光線隨機衍射的情況。
對于每條入射光線,可能有任意數(shù)量的出射光。要衍射的光線數(shù)量由計算決定(截至級次-初始級次+1)。換句話說,用戶可以設(shè)置參數(shù)"初始級次"和"截至級次"來定義出射的光線數(shù)量。同樣,在光線追跡過程中,隨機決定每一條光線的衍射級次。每個出射光線都攜帶Pi/n的功率,其中Pi是入射光線功率,n是出射線的數(shù)量。
圖18. 在隨機模式下,一條入射光線可用對應(yīng)多條衍射出射光線。
注意,如果”僅這些級次“不為零,則隨機模式按照如下規(guī)則運行。
當(dāng)隨機模式為1時,”僅這些級次“被忽略。
當(dāng)隨機模式為2時,隨機模式先于”僅這些級次“生效,一條光線可能由隨機模式隨機化,但被"僅限這些命令"設(shè)置的規(guī)則阻止。
當(dāng)隨機模式為3時,”僅這些級次“先于隨機模式生效,光柵仍然以隨機方式衍射光線,但衍射光線始終在"僅這些級次"指定的一組級次中隨機化。
錯誤日志
如果這個參數(shù)不為0,則會生成一個報告計算錯誤的txt文件。該日志文件會保存在{Zemax}\DLL\Diffractive\中,并且與指定的衍射DLL同名。這一參數(shù)通常應(yīng)該設(shè)置為0,除非出現(xiàn)了未知的錯誤。
查看”幾何錯誤“小節(jié)獲取更多相關(guān)信息。
梯形光柵參數(shù)(Trapezoid parameters)
以下是梯形光柵 (srg_trapezoid_RCWA.dll) 的參數(shù):
深度,Alpha (度),Beta (度)和填充因子。
這四個參數(shù)按照如下規(guī)則控制光柵的形狀:
深度決定了光柵的高度,如圖19所示。
從-z旋轉(zhuǎn)到+x方向時,Alpha和Beta是正的,從+x旋轉(zhuǎn)到-z方向時,Alpha和Beta是負(fù)的。例如,在圖19中Alpha是正的,Beta是負(fù)的。
填充因子是0到1之間的數(shù)字,表示底面與凹槽周期的比值。
圖19. 梯形光柵的4個參數(shù)定義了光柵形狀。
膜層折射率(R)、膜層折射率(I)、膜層頂部厚度(μm)、膜層側(cè)面厚度(μm)
這4個參數(shù)用于模擬光柵的膜層。DLL可以使用戶定義頂部厚度(膜層頂部厚度(μm))和側(cè)面厚度(膜層側(cè)面厚度(μm))。
注意,膜層的厚度不包括在深度參數(shù)中。例如,如果深度是5 μm,膜層頂部厚度為200 nm,則光柵的總厚度為5.2μm。
圖20. 梯形光柵膜層的頂部厚度。
由于膜層材料可以是金屬,DLL提供了另外兩個參數(shù)來定義膜層材料的復(fù)折射率;實部為膜層折射率(R),虛部為膜層折射率(I)。在OpticStudio中,對于吸收材料來說,折射率的虛部通常是負(fù)的。例如,鋁的復(fù)折射率為0.7-7.0i。
膜層折射率(R)不能為零,但可以是負(fù)整數(shù)。當(dāng)它是負(fù)整數(shù)時,意味著它由文本文件中的數(shù)據(jù)單獨定義。有關(guān)詳細(xì)信息,請參閱"使用鍍膜文件"部分。
光柵折射率(R)、光柵折射率(I)、環(huán)境折射率(R)、環(huán)境折射率(I)
光柵結(jié)構(gòu)可分為兩個部分,如圖 21所示:由”Grate”和“Env“指示的2個不同區(qū)域,表示光柵及其環(huán)境。光柵被外部區(qū)域(Outside)和基板區(qū)域(Substrate)包圍?;搴屯獠繀^(qū)域的折射率由光學(xué)系統(tǒng)定義。光柵和環(huán)境的折射率由DLL中的參數(shù)定義。
DLL中包含了4個參數(shù)來定義光柵和環(huán)境的折射率。
光柵和環(huán)境的折射率均由復(fù)數(shù)定義。
對于光柵區(qū)域,折射率的實數(shù)部分和虛數(shù)部分由光柵折射率(R)和光柵折射率(I)指定。
對于環(huán)境區(qū)域,折射率的實數(shù)部分和虛數(shù)部分由環(huán)境折射率(R)和環(huán)境折射率(I)指定。
當(dāng)光柵和環(huán)境的折射率的實數(shù)部分被設(shè)為0時,有一項特殊的定義。如果光柵折射率設(shè)為0,則表示光柵的折射率與基板的折射率一致?;逭凵渎视晒鈱W(xué)系統(tǒng)定義。同樣的,如果環(huán)境折射率設(shè)為0,則表示環(huán)境的折射率和外部區(qū)域的折射率一致。
光柵和環(huán)境的折射率的實數(shù)部分(R)可以是負(fù)數(shù),意味著它由文本文件中的數(shù)據(jù)單獨定義
有關(guān)詳細(xì)信息,請參閱"使用鍍膜文件"部分。
圖21. 梯形光柵可用分為兩個區(qū)域,光柵(Grate)和環(huán)境(Env)。兩個區(qū)域的折射率可用分別定義。
層數(shù)
這個參數(shù)是用來建模梯形形狀的層數(shù)。有關(guān)更多信息,請查看“層的概念”一節(jié)。
鋸齒光柵參數(shù)(Blaze parameters)
鋸齒光柵的參數(shù) (“srg_blze_RCWA.dll”) 與梯形光柵的參數(shù)(“srg_trapezoid_RCWA.dll”)一致,除了”深度“。
對于鋸齒光柵,深度可以由給定的Alpha和Beta參數(shù)計算得來,如圖22所示。
圖22. 鋸齒光柵的形狀由三個參數(shù)定義:Alpha,Beta和填充因子。
階梯光柵參數(shù)(Step parameters)
以下參數(shù)用于定義階梯光柵(“srg_step_RCWA.dll”)。
深度,階梯數(shù)和Alpha (度)。
深度決定了光柵的高度或厚度,如圖23所示。
階梯數(shù)定義了每個周期中階梯形狀的數(shù)量,如圖23所示。實際上,這通常與制造過程有關(guān)。請注意,光柵的形狀正在"向下"朝+x方向移動,如下圖所示。要反轉(zhuǎn)方向,用戶應(yīng)將光柵繞z軸旋轉(zhuǎn)180度。
圖23. 參數(shù) “階梯數(shù)”定義了每個周期中階梯形狀的數(shù)量。
參數(shù)Alpha定義另一側(cè)的斜角,如下圖所示。當(dāng)從+z旋轉(zhuǎn)到-x時,Alpha的符號是正的。圖24顯示了 Alpha為正的示例.
圖24. 參數(shù) Alpha 定義了另一側(cè)的斜角。
每階梯層數(shù)(Layers per step)
這個參數(shù)定義了每個階梯中的層數(shù),此參數(shù)只能在參數(shù) Alpha 不為零的情況下使用。否則就是無效的,因為計算結(jié)果不會改變。下圖顯示了該參數(shù)如何影響斜面的采樣。
圖25. 參數(shù)Lays of 1 stp定義了每個階梯中的層數(shù)。
膜層折射率(R)、膜層折射率(I)、膜層頂部厚度(μm)、膜層側(cè)面厚度(μm)
這四個參數(shù)的定義與梯形光柵一致。參照梯形光柵中的解釋。
圖26. 階梯光柵膜層的頂部和側(cè)面的厚度。
光柵折射率(R)、光柵折射率(I)、環(huán)境折射率(R)、環(huán)境折射率(I)
這四個參數(shù)的定義與梯形光柵一致。參照梯形光柵中的解釋。
圖21. 階梯型光柵可用分為兩個區(qū)域,光柵(Grate)和環(huán)境(Env)。兩個區(qū)域的折射率可用分別定義。
網(wǎng)格偏振線柵參數(shù)(Grid Wire Polarizer parameters)
以下是網(wǎng)格偏振線柵參數(shù)(“srg_GridWirePolarizer_RCWA.dll”)的參數(shù)。
這種光柵基本上是二進(jìn)制光柵。此DLL可用于建模網(wǎng)格線偏振器。
深度 (μm) 和填充因數(shù)
深度時光柵的高度。
填充因子是0到1之間的數(shù)字,表示柵格區(qū)域的寬度與周期的比值。如圖28所示。
折射率(R)和折射率(I)
與梯形光柵,鋸齒光柵和階梯光柵類似,網(wǎng)格偏振線柵可以分為四個區(qū)域,這兩個參數(shù)用于定義光柵區(qū)域的折射率,如圖28所示。
環(huán)境區(qū)域的折射率不能在DLL中定義,因為它總是與外部區(qū)域的數(shù)值保持一致。外部區(qū)域和基板區(qū)域的折射率都在OpticStudio中定義,它們不能在DLL中更改。
圖28. 網(wǎng)格偏振線柵可以分為四個區(qū)域:外部區(qū)域,光柵區(qū)域,環(huán)境區(qū)域和基板區(qū)域。光柵形狀由深度和填充因子決定。
用戶自定義光柵參數(shù)(User Defined Grating parameters)
用戶自定義光柵(“srg_user_defined_RCWA.dll”)只有一個參數(shù)。
文件編號
該參數(shù)必須是1-99內(nèi)的正整數(shù)。DLL會從位于\Documents\Zemax\DLL\Diffractive\的名為“user_grating_data_xx.txt”的txt文件內(nèi)讀取光柵數(shù)據(jù),其中xx就是”文件編號“參數(shù)。
DLL將僅讀取用戶自定義的光柵文本一次,并將數(shù)據(jù)保存在內(nèi)存中。如果文本被修改并且需要重新載入,則將"文件編號"參數(shù)設(shè)置為負(fù)數(shù)。確保通過系統(tǒng)中的光柵跟蹤至少一條光線以觸發(fā)重新加載:更新布局圖或使用射線跟蹤控制運行射線跟蹤。更新形狀數(shù)據(jù)后,請記住將"文件編號"參數(shù)設(shè)置為正值,讓DLL不會一直重新加載文本文件以更新光柵數(shù)據(jù)。
圖29. 用戶自定義的光柵數(shù)據(jù)寫在文本文件"user_grating_data_xx.txt"中,其中 xx 是正整數(shù),可以通過使用 DLL"srg_user_defined_RCWA.dll"進(jìn)行讀取。
用戶自定義光柵的文件格式
光柵形狀由多個層定義。每層由背景材料定義,并可選包含其他材料的幾個部分。有關(guān)層的更多信息,請參閱"層的概念"部分。
用戶定義的光柵文本文件包含3個關(guān)鍵字:"層數(shù)"、"層"和"節(jié)"。當(dāng) DLL 讀取文件時,它會逐行掃描文本以查找這些關(guān)鍵字。找到關(guān)鍵字后,它會讀取下一行上的數(shù)據(jù)。關(guān)鍵字行和以下行必須遵循下面所述的文件格式。其他部分可以添加任何文本使閱讀更加方便。
層數(shù)
"層數(shù)"關(guān)鍵字下的行應(yīng)包含一個表示文本中定義的層數(shù)的整數(shù)。
層
"層"關(guān)鍵字下的行包括 4 個數(shù)字:
本節(jié)中要添加的節(jié)數(shù)
層的厚度(微米)
折射率的實數(shù)部分
折射率的虛數(shù)部分。
這里的折射率是"背景材料折射率"。
節(jié)
"節(jié)"關(guān)鍵字下的行包括4個數(shù)字:
該節(jié)的移位量
該節(jié)的寬度
折射率的實數(shù)部分
折射率的虛數(shù)部分
請注意,移位和寬度都沒有單位。它們表示與該光柵周期的比率。折射率是覆蓋背景材料折射率的"節(jié)折射率"。位移參數(shù)定義了相對于單個周期框左邊緣的中心位置。如圖30的例子中,位移量=0.5,寬度=0.5,它們定義了一個從0.25開始到0.75結(jié)束的節(jié)。
用戶自定義光柵數(shù)據(jù)的例子
圖30展示了一個由用戶自定義光柵文件定義的光柵,右側(cè)是數(shù)據(jù)文件,左側(cè)是光柵示意圖。在這個例子中,所有的層都只有一個節(jié),但是每一層可以包含0個或多個節(jié)。同時也請注意,同一層中包含兩種不同材料時,其中一種需要被定義為”背景材料參數(shù)“,另一種則被定為節(jié)參數(shù)。哪一個作為背景材料取決于用戶自身。
圖30. 用戶自定義光柵的一個例子。移位量相對于單個周期框的左邊緣。寬度以位移量所定義的位置為中心。
編輯用戶自定義光柵的工具
雖然用戶定義的光柵數(shù)據(jù)可以在文本編輯器(如記事本)中直接編輯,但也可以在可視化工具中進(jìn)行編輯,如圖31所示。用戶需要設(shè)置一個帶有"srg_user_defined_RCWA.dll"DLL的虛擬系統(tǒng)來讀取此文本文件??梢暬ぞ哌€可以讀取其他RCWA DLL定義的光柵數(shù)據(jù)。
當(dāng)然,在編輯后,數(shù)據(jù)只能輸出為用戶自定義光柵數(shù)據(jù)。
圖31. 可視化工具可以讀取,編輯保存用戶自定義光柵數(shù)據(jù)。
可視化工具
運行可視化工具可以幫助用戶定義光柵參數(shù)。單擊Programming … User Extensions … RCWAvisualization.exe,如圖32所示。
圖32. 可視化工具
該工具的用戶界面如圖33所示。
圖33. 可視化工具的用戶界面
可視化工具包括四個部分,將在下面逐個介紹。
第一步-讀取DLL(Step 1 - Load DLL)
對象的下拉菜單將自動在使用RCWA DLL的非順序編輯器中列出對象。要更改對象,請選擇不同的對象并單擊"加載"。
第二步-設(shè)置參數(shù)(Step 2 - Set parameters)
基板材料和外部材料僅用于繪圖,不一定反映系統(tǒng)的真實設(shè)置。玻璃名稱如"N-BK7"可以使用。
所選對象上的RCWA DLL的參數(shù)名稱和當(dāng)前值會顯示??梢酝ㄟ^單擊"設(shè)置到對象"按鈕來修改表中的參數(shù)并應(yīng)用于系統(tǒng)。請注意,此按鈕可以在OpticStudio中生成多個"撤消",因為設(shè)置每個衍射參數(shù)被視為單個操作。
在此部分的底部,可以使用方便的工具設(shè)置"僅這些級次"參數(shù)。有關(guān)更多信息,請參閱本文中"DLL 參數(shù)>常見參數(shù)>僅這些級次"部分。
"創(chuàng)建 MCE"按鈕可以在所有DLL參數(shù)的多配置編輯器中產(chǎn)生操作。透射參數(shù)將設(shè)置為從反射參數(shù)中取取的數(shù)據(jù)。這對于修改系統(tǒng)很有用。當(dāng)然,這需要優(yōu)化光柵參數(shù)。
下面的"第四步-設(shè)置系統(tǒng)"部分解釋了最小和最大列。
圖34. "創(chuàng)建 MCE"按鈕可創(chuàng)建多配置編輯器中的DLL參數(shù)操作。
第三步-光柵編輯器(Step 3 - Grating editor)
單擊"從DLL加載"以讀取來自DLL的光柵數(shù)據(jù),并可視化兩個圖表。如果DLL參數(shù)不正確且無法繪制,則錯誤將顯示為圖35。這是一個非常有用的工具,用于檢查 DLL 參數(shù)是否正確。
頂部圖表顯示DLL的定義配置文件。它表示了了光柵的折射率。
底部圖表顯示從RCWA算法中使用的Fourier級數(shù)重建的相同配置文件。這主要用于檢查RCWA算法是否"看到"正確的數(shù)據(jù)。
請注意,由于ZOS-API的限制,目前需要重新定義光柵可視化圖表中的外部和基板區(qū)域的折射率。該工具不能自動讀取這些值。要重新定義它們,請使用"第二步"部分中稱為"基板材料"和"外部材料"的兩個文本框。
如果單擊"從文本中加載"按鈕,則光柵數(shù)據(jù)將從文本文件中用戶定義的光柵數(shù)據(jù)中讀取。有關(guān)更多信息,請參閱"用戶定義的光柵參數(shù)>DLL參數(shù)"部分。
有一個編輯器在詳細(xì)信息中逐層顯示光柵數(shù)據(jù),如圖31所示。這些數(shù)據(jù)可以進(jìn)行編輯,結(jié)果將在圖表中實時更新。鍵盤上的"插入"和"刪除"鍵可用于添加或刪除編輯器中的行。
但是,請注意,即使光柵數(shù)據(jù)可以在編輯器中編輯,數(shù)據(jù)也不能直接傳回系統(tǒng)。它只能導(dǎo)出到文本文件。然后,RCWA DLL"srg_user_defined_RCWA.dll"可以讀取此文本文件。有關(guān)更多信息,請參閱"用戶定義的光柵參數(shù)>DLL參數(shù)"部分。
圖35. 可視化工具檢測到參數(shù)錯誤時出現(xiàn)的消息框。
第四步-設(shè)置系統(tǒng)(Step 4 - Setup system)
此部分提供了一個方便的工具,用于生成用于分析或優(yōu)化單個光柵的系統(tǒng)。
前兩個表允許用戶設(shè)置角度和波長進(jìn)行分析。視場角遵循與序列模式下相同的約定。
"視場向?qū)?是定義視場角表的實驗功能。
偏振部分決定了要追跡的偏振態(tài)。如果選擇"Both",將為X和Y偏振的場和波長的每個組合構(gòu)建兩條光線。
如果"基板中的射線"選項被選中,則入射射線來自光柵基板。否則光線會從基板外射出并擊中光柵。
設(shè)置系統(tǒng)后,單擊"創(chuàng)建測試系統(tǒng)",會在\Zemax\Samples\RCWA_Analyze_x.zmx生成相應(yīng)系統(tǒng)文件,其中x是累積的整數(shù)。該系統(tǒng)包括光柵、探測器和圖36中示例中的若干測試光線。還生成評價函數(shù)來讀取每個入射射線的衍射功率,并達(dá)到圖37所示的 100% 目標(biāo)。
在"第二步-設(shè)置參數(shù)"部分中,最大列中的任何參數(shù)都大于最小列,然后在生成的測試系統(tǒng)中,參數(shù)被設(shè)置為可變參數(shù),并且受制于圖37中顯示的評價函數(shù)。
圖36. 可視化工具如何創(chuàng)建測試系統(tǒng)的示例。
圖37. 當(dāng)可視化工具生成測試系統(tǒng)時,還需要在功績函數(shù)編輯器和多配置編輯器中創(chuàng)建所需的操作。
常見問題解答
與內(nèi)置的衍射模型相比
如前所述的光柵模型是基于RCWA算法。那么這個新的RCWA模型和原來內(nèi)置的衍射光柵模型有什么區(qū)別呢?
答案是:這些模型在衍射方向上是相同的,但衍射光線的電場項不同。
RCWA的核心和內(nèi)置衍射模型都是根據(jù)下式計算衍射光線。
f1和f2是入射光線和衍射光線的單位向量,n是單位法向量,f是單位光柵矢量,Λ是光柵周期,n1和n2時入射光線和衍射光線在其中的材料的折射率,m是代表衍射級次的整數(shù)。
下圖顯示了光柵上的這些向量。
圖38. 此圖中畫出了入射光、衍射光、法向量和光柵向量。
其主要區(qū)別在于RCWA代碼可以定義衍射光線的電場,而內(nèi)置模型則不能。
優(yōu)化
將RCWA代碼集成到OpticStudio的好處之一是能夠在充分考慮整個光學(xué)系統(tǒng)的情況下優(yōu)化光柵參數(shù)。RCWA算法的計算量很大,通過以下幾點建議獲得更快和更平滑的優(yōu)化。
第一點是關(guān)于插值模式參數(shù)。如果將光柵參數(shù)或波長設(shè)置為變量,則應(yīng)在優(yōu)化過程中將關(guān)閉插值模式。
在優(yōu)化過程中,如果將光柵參數(shù)或波長設(shè)置為變量,其值會隨機變化,且變化非常頻繁。這意味著檢測到新的光柵參數(shù)時,DLL都會在RAM中創(chuàng)建新的采樣網(wǎng)格。這將導(dǎo)致RAM的使用達(dá)到極限;因此,DLL將停止工作。因此,在運行任何優(yōu)化之前,請關(guān)閉插值。
請注意,如果沒有將光柵參數(shù)或波長設(shè)置為變量,建議打開插值模式,以提高優(yōu)化速度。
第二點是在優(yōu)化時使用光線光源(Source Ray),而不是其他光源。光線光源是始終從指定位置(x,y,z)的指定傳播方向(l,m,n)發(fā)射光線的光源物體。光線光源的偏振態(tài)可以在物體屬性中控制,如下圖所示。
圖39. 光源物體在非序列模式下的偏振態(tài)可以在物體屬性中定義。
幾何錯誤
DLLs在代碼內(nèi)檢查了幾個錯誤,以避免參數(shù)錯誤,這是參數(shù)組合的無效組合,稱為參數(shù)錯誤。當(dāng)DLL檢測參數(shù)錯誤時,它會停止計算并返回"幾何錯誤"消息。如果有任何參數(shù)錯誤,查找檢查的最簡單方法是打開可視化工具。有關(guān)更多信息,請參閱"可視化工具"部分。
除了參數(shù)錯誤之外,還有一些錯誤錯誤還返回了幾何錯誤,而可視化工具無法發(fā)現(xiàn)這些錯誤。這些稱為計算錯誤。要查找在光線跟蹤過程中DLL內(nèi)部發(fā)生的任何計算錯誤,則需要打開錯誤日志。有關(guān)進(jìn)一步信息,請參閱"錯誤日志"。
下面列出了這些幾何錯誤最常見的原因,以及如何在可能的情況下解決它們。
許可證、OS版本、OS版次和有效期
這兩個DLL在OpticStudio版本20.1(21/01/20)中實現(xiàn),只有高級訂閱許可證可用。DLL將在OpticStudio 20.1發(fā)布后大約一年后到期。如果DLL檢測到任何上述條件不滿足,它將停止計算并返回錯誤,錯誤消息如下所示。
圖40. 無效許可證、到期或OpticStudio版本的錯誤消息。
分裂NSC光線
要使用DLL模型,必須打開分裂NSC光線(Split NSC Rays)選項。否則,DLL將停止計算并返回錯誤。請注意,此設(shè)置可以單獨在光線追跡控制(Ray Trace Control )對話框,三維布局圖(3D Layout),和實體模型(Shaded Model)中設(shè)置。用戶應(yīng)該仔細(xì)檢查所有設(shè)置是否正確。
光柵參數(shù)
非物理光柵參數(shù)是產(chǎn)生幾何錯誤的常見原因之一。這類錯誤會報告為可視化錯誤。
最大RAM內(nèi)存空間
如“插值”和“優(yōu)化”部分所述,軟件內(nèi)部存在DLL使用的最大RAM空間上限。當(dāng)達(dá)到極限時,DLL停止計算并返回幾何錯誤。
這個問題可以通過關(guān)閉插值模式或重新啟動OpticStudio,以釋放DLL分配的RAM空間來解決。
請注意,通常情況下,只要系統(tǒng)沒有以光柵參數(shù)或波長為變量進(jìn)行優(yōu)化,就不會達(dá)到這個極限。
這類錯誤會在錯誤日志中體現(xiàn)。
掠入射角
打開插值后,如果光線入射到角度過大的光柵上,DLL會返回幾何錯誤。這是因為在采樣網(wǎng)格的邊緣沒有外推。當(dāng)入射角大約大于89度時,就會發(fā)生錯誤。這個問題可以通過關(guān)閉插值來解決。
倏逝波
在特殊情況下,即入射光滿足以下三個條件之一,DLL不能計算,并返回幾何錯誤。
(L + m*λ/Λ)^2 + M^2 = 1
(L + m*λ/Λ)^2 + M^2 = n1^2
(L + m*λ/Λ)^2 + M^2 = n2^2
(L, M)是入射光線相對于光柵局部坐標(biāo)的x和y方向余弦,λ是光的波長,Λ是光柵周期,n1是入射側(cè)的折射率,n2是透射側(cè)的折射率,m是任意整數(shù)。
如果任意整數(shù)m可以使上述3個方程中的任何一個成立,則DLL無法計算,并返回幾何錯誤。
注意,這個錯誤是不太可能發(fā)生的,因為只有少數(shù)光線可以滿足條件并被停止。根據(jù)我們的經(jīng)驗,當(dāng)光的波長與光柵周期相同,并且光線垂直入射到光柵上,用戶最可能遇到該情況。這種情況下,可以通過略微改變光柵周期來解決該問題,例如:從0.55μm改到0.55001μm。
這類錯誤會在錯誤日志中體現(xiàn)。
節(jié)能
在RCWA模型中,每次計算一條光線時,DLL代碼都會測試能量是否守恒。這類錯誤會在錯誤日志中體現(xiàn)。
限制和反饋:
目前的DLL支持一維光柵,僅支持階梯或梯形配置文件,不支持衍射透鏡。
這不是RCWA算法的限制,所以如果您對這些功能中的任何一個感興趣,請將您的反饋發(fā)送公眾號后臺或者聯(lián)系工作人員。
另一方面,此DLL主要針對小周期設(shè)計。例如,如果周期大于事件波長的100倍,則需要在計算中考慮許多諧波,這非常緩慢,并且PC中需要大量RAM。
示例
示例1:梯形光柵的效率
圖4(a)中的示例再現(xiàn)了論文:"Design and fabrication of binary slanted surface-relief gratings for a planar optical interconnection." Applied optics 36.23 (1997): 5717-5727 中的結(jié)果。
打開附件中名為“verify_1997_Design_and_fabrication.zar” 的文件。
該文件包含在衍射光柵物體內(nèi)部發(fā)出光線的光線光源(Source Ray)(請查看該光源的“在...內(nèi)部(Inside Of )”項)。該物體的前表面是衍射的,并使用了“srg_trapezoid_RCWA.dll”。兩個極探測器(Detector polar )物體測量透射(物體4)和反射(物體5)光線。
圖41. (a)顯示示例1的非序列元件編輯器。(b)顯示示例1的布局圖。
1.系統(tǒng)波長 = 0.633 μm
2.物體1是讀取DiffractionGrating.dll得到的用戶定義物體,它是矩形體,其前表面有簡單的線性光柵,用戶可以定義其x、y方向和長度。這個示例展示了如何定義和測試衍射物體。任何追跡到前表面的光線都將調(diào)用在物體屬性(Object Properties)>衍射(Diffraction)下定義的相關(guān)衍射DLL。
在物體屬性(Object Properties) > 衍射(Diffraction)下,選擇DLL :srg_trapezoid_RCWA.dll,并按照如下參數(shù)設(shè)置:
光柵周期為0.943 *波長 = 0.596919。
光柵深度為1.058 *波長= 0.669714。
填充因子是 0.5。
Alpha 和 Beta 的夾角是30度。注意 Alpha 和 Beta 的符號取決于你如何建立這個系統(tǒng)。在論文中這個角是 -30°,但是在我們的系統(tǒng)中是30°。
圖42. 示例1中衍射光柵的設(shè)置。
3.注意,在上面的圖片中,將起始階數(shù)(Start Order)和終止階數(shù)(Stop Order)都設(shè)置為1。這意味著只追跡到第一衍射級次,忽略了其他級次,有益于觀察特定級次的特性。
4.評價函數(shù)如下所示,用來計算每個探測器接收到的能量。
圖43. 示例1中的評價函數(shù)(Merit function)。這是用來計算探測器探測到的能量的。
5.在多重結(jié)構(gòu)編輯器(Multi-Configuration Editor,MCE)中輸入衍射DLL的參數(shù),如下圖所示。注意,反射參數(shù)只是從透射參數(shù)值中拾取的。
圖44. 衍射DLL的參數(shù)可以在多重結(jié)構(gòu)編輯器中公開。這很方便,因為透射參數(shù)可以從圖中28-40行的反射參數(shù)中自動拾取。
6.最后,利用分析 (Analyze) >通用繪圖 (Universal Plot) 下的一維通用繪圖(Universal Plot 1D) 來驗證本文的結(jié)果。
下圖中的x軸是光柵的深度。
y軸是反射或透射的不同級次的衍射效率。
注意,在繪制反射級次k=0和k=2 (綠色和紫色線)時,將起始階數(shù)和終止階數(shù)更改為0和2。
圖45. 在一維通用繪圖中,y軸表示衍射效率,x軸表示光線入射角。不同的線代表透射或反射的不同的衍射級次。
下圖顯示了參考文獻(xiàn)中論文給出的結(jié)果。
圖46. 論文 "Design and fabrication of binary slanted surface-relief gratings for a planar optical interconnection." Applied optics 36.23 (1997): 5717-5727 中的圖 4(a)。
示例2:帶有梯形光柵的波導(dǎo)
這個例子將演示梯形光柵在波導(dǎo)系統(tǒng)中的應(yīng)用。波導(dǎo)頂部有兩個梯形光柵。此文件為附件中的:
RCWA_trap_waveguide_addlens.zar。
如下圖所示,在左側(cè),朗伯圖像光源位于近軸透鏡的焦平面上。來自圖像光源的光被近軸透鏡折射,然后通過第一個光柵耦合到波導(dǎo)中。在右側(cè),用第二個光柵把光耦合出去。最后,由第二個近軸透鏡將輸出耦合光重新成像到同樣位于焦平面的探測器上
圖47. 示例2的系統(tǒng)布局圖。
以下為本例中值得注意的一些要點。
1.下圖顯示了每個周期的結(jié)構(gòu)。
在這個文件中,使用srg_trapezoid_RCWA.dll來構(gòu)建光柵。兩個光柵具有相同的形狀,這個二元光柵的填充因子 = 0.5,深度 = 0.2μm,周期 = 0.43μm。Alpha 和 Beta 都是0。在光柵的頂部有一層 20 nm 厚的膜層。因此,光柵的總深度是0.22 μm。
圖48. 示例2中光柵各層的折射率分布和厚度。
2.光柵在非序列元件(NSC)編輯器中是“用戶定義物體(User Defined Object)”。它們是根據(jù)波導(dǎo)物體定義的,波導(dǎo)物體是矩形體。光柵與波導(dǎo)的面1重疊。因為定義波導(dǎo)后,當(dāng)光線擊中重疊的表面,嵌套規(guī)則后,光線將到達(dá)光柵,并產(chǎn)生衍射(更多信息請參閱幫助文件的設(shè)置(Setup )選項卡> 編輯(Editors )組 > 非序列元件編輯器(Non-sequential Component Editor)> 非序列概述 (Non-sequential Overview ) > 物體位置 (Object Placement) 部分)。
圖49. 布局圖和非序列元件編輯器中的波導(dǎo)和兩個光柵。
3.物體3是矩形光源(Source Rectangle),它用矩形來模擬準(zhǔn)直光束。物體2是幻燈片(Slide)物體。它是由“{Zemax}\IMAFiles\QR_code_Zemax.jpg”圖形文件定義的彩色RGB透明物體。
圖50. 示例2中使用的測試圖片。這是二維碼,里面的文字是“http://zemax.com”..
幻燈片物體具有朗伯散射特性。采用重點采樣(Importance Sampling),只考慮散射到近軸透鏡上的光線。
圖51. 示例2中幻燈片物體(物體#2)的散射設(shè)置。
二維碼通過波導(dǎo)成像。探測器上的模擬圖像如下圖所示。
圖52. 示例2系統(tǒng)模擬的圖像
參考文獻(xiàn)
1.M. G. Moharam, Drew A. Pommet, Eric B. Grann, and T. K. Gaylord, "Stable implementation of the rigorous coupled-wave analysis for surface-relief gratings: enhanced transmittance matrix approach," J. Opt. Soc. Am. A 12, 1077-1086 (1995)
2.Kogelnik, H., "Coupled wave theory for thick hologram gratings, " Bell Syst. Tech. J. 48, 2909-2947 (1969).
3.Glytsis, E. N. and Gaylord, T. K., "Rigorous 3-D coupled wave diffraction analysis of multiple superposed gratings in anisotropic media," Appl. Opt. 28(12), 2401-2421 (1989).