摘要:詳細介紹了一種在柱面坐標系下非均勻FDTD(finite difference time domain,時域有限差分)網格的生成算法,并且利用OpenGL技術對其一維、二維、三維網格圖形進行實現。一般地,使用傳統方法進行三維圖像的生成與消隱比較復雜,而采用OpenGL可以非常方便地對以上問題實現快速生成以及高效消隱。
關鍵詞:非均勻FDTD網格;柱面坐標;網格圖形;消隱
中圖分類號:TP391文獻標志碼:A
文章編號:1001-3695(2008)05-1593-03
FDTD方法是一種為麥克斯韋方程提供數值求解的有效方法。它的優點在于能夠有效地模擬電磁場的特征,使求解的問題簡化、減少了計算的數據量、降低了計算誤差、大大提高了計算效率、加快了收斂速度。但在實際應用中,首先要對計算區域進行離散化,為FDTD提供網格坐標。如果該網格坐標過于稠密,將會增加系統計算的開銷,效率低下;如果該網格坐標過于稀疏,將會影響求解的精度。FDTD的計算是否精確和有效很大程度取決于生成的網格坐標和每個網格點上的介質參數。所以,用戶擁有一個性能良好的網格生成系統,是非常重要和有幫助的。
一個實用的網格生成系統應該是這樣的,用戶任意提供一個包含原始數據、用戶要求的輸入文件,網格生成系統可以快速、準確地在繪制出相應的1D、2D、3D圖形,并同時生成相應的介質數據文件和網格坐標文件。這些輸出文件可以作為FDTD程序的輸入數據,而產生的網格是用戶可視、可調的。一個可靠、高效的網格坐標生成算法在網格生成系統中就尤為重要。
1生成網格的基本原則
前面已經提到,如果網格坐標過于稠密或稀疏,都會帶來相應的問題。為了解決這一問題,通常采用非均勻(non-uniform)FDTD法,即在電磁場強度變化大、結構比較復雜的地方,采用高密度的網格來描述;而在電磁場強度變化小,結構簡單的地方使用相對密度比較稀疏的網格來描述。根據電磁學理論,一般在兩種不同的介質交界處,電磁場強度變化大,則需要生成稠密的網格,而在同一種介質中心處,電磁場強度變化小,生成比較稀疏的網格即可。另外,需要注意在ρ、θ、z方向上的任何一個計算域或相鄰的計算域中,任意兩個相鄰的網格尺寸的變化必須很小,整個計算域內的網格尺寸是按照一個給定的比率進行變化。也就是說,計算域內的網格尺寸是漸漸的、平滑的變化,否則,將會導致FDTD在計算上的嚴重失誤。
2生成網格的算法
2.1劃分區間
一般地,用戶提供的是每個物體在計算域中的幾何坐標和介質參數。如果直接使用該坐標進行計算,分別在其上生成網格,則很可能會出現重疊區。如某個物體的ρ方向的區間是[0,2],而另一個物體的ρ方向的區間是[1,3],則此時會出現重疊區間[1,2]。如果仍然在原來給定的兩個區間里各自生成網格,顯然不能滿足電磁學上的需要,而且還會出現網格重疊或毫無規律的網格分布。為此,必須對所有物體的每個方向上的區間進行重新劃分。劃分的原則是將所有的區間之間重疊的部分,提取出來作為一個單獨的區間來考慮。
在實際的一個柱面坐標系統下,需要分別地對ρ、θ和z方向上的網格區間進行劃分。此處,僅以ρ方向來描述網格區間的劃分過程,步驟如下:
a)初始化一維數組G,用來保存區間劃分以后的數據,初始化整型變量n=0保存數組G的長度。
b)讀入一個未處理物體的ρ方向上的區間,將左端點值與數組G中的元素G(0)到G(n)進行比較。若左端點值已經存在于其中,略過;否則,將左端點值插入數組G中的適當位置,保持其中元素的從小到大的有序性,并置n=n+1。以同樣的方法處理右端點值。
c)如果所有的物體均已處理,結束;否則,轉b)。
經過處理以后,則得到劃分以后的n個區間,即[G(0),G(1)],[G(1),G(2)],…,[G(n-1),G(n)]。
2.2產生網格坐標
經過前面的區間劃分,將原來物體的幾何區間重新劃分,產生一組新的區間,這些區間之間不再有重疊現象,因而可以分別對這些子區間進行網格坐標生成。由于劃分以后每個子區間的兩端總是與不同的子區間或不同的物體相連接,在這些邊界處需要用較稠密的網格,而在子區間的中間部分可以用比較稀疏的網格。也就是說,無論是哪個區間里的網格尺寸都是由靠近邊界處的最小,然后漸大,到中間位置時達到最大,然后又漸小,到另一端點邊界處達到最小。
3網格生成
在以前的研發中,一般均使用微軟API(application programming interface)函數進行繪制網格圖形。繪圖時以線段或圓弧為基礎,繪制速度慢,而且在進行平移、縮放、旋轉等變換時帶來巨大的計算量,導致系統響應速度變慢,顯示效果差。另外,繪圖時網格圖形的線條消隱是主要難點,實體的復雜性以及靈活變換使得可見線段或可見面的判定(visual-line or vi-sual-surface detection)具有一定的局限性。
對于一個三維物體,當沿著投影視線觀察它時,由于物體中各種表面或其他物體的遮擋, 使某些線段或面成為不可見,這些不可見的線段或面就稱為隱藏線或隱藏面。為了使計算機顯示圖像有一定的逼真感,在確定了觀測點及觀察方向后,首先要解決的問題,就是決定顯示對象的哪些部分是可見的,哪些部分為自身或其他物體所遮擋,因而是不可見的,即找出隱藏線和隱藏面。消除這些不可見的部分,只顯示可見的線、面,可以使所顯示的圖形沒有二義性。
自開發第一個三維圖形系統開始,消隱問題一直是各種三維圖形系統的重要問題。到目前為止,已經提出了很多有效的消隱算法,如浮動水平算法、羅伯茨算法、Z緩沖區算法、畫家算法、區域分割算法、掃描線算法等。值得注意的是,沒有一種算法適合于各種復雜多變的應用領域,每一種算法一般都有其各自的特點,很難說哪種算法最好。故不同的領域應采用不同的算法。例如,在實時模擬飛行員的模擬系統中就必須使用快速的消隱算法,甚至用專門的硬件來實現算法。
OpenGL(open graphics library)是由SGI公司于1992年推出的一套獨立于操作系統和硬件環境的開放式三維圖形庫,有著強大的圖形功能和良好的跨平臺移植能力,目前已被廣泛應用于可視化技術、實體造型、CAD/CAM和模擬仿真等諸多領域,成為事實上的圖形標準。OpenGL是一種過程性的圖形API,每臺計算機的系統平臺都有自己的函數,由這些函數實現方法,把窗口或位圖的繪制權交給OpenGL。
OpenGL提供了顏色緩沖區、深度緩存區、模板緩存區和累加緩存區來存儲每個像素的數據。利用深度緩存區能有效地實現圖形消隱,它是OpenGL的特色之一。深度緩存區中存儲了屏幕上每個像素的深度值,即觀察點到窗口每一個像素的距離。如果指定的深度值通過檢測,那么像素新的深度值將替換深度緩存中原有的深度值。這種方法符合人們對客觀事物的感官認識。
在程序初始化時,首先使用glClearDepth 1#將窗口中所有像素的深度值設置為最大值;然后使用glEnable glcDepthTest打開深度檢測開關,完成圖形繪圖后,應使用glDisable glcDepthTest函數禁止深度檢測;最后再使用glDepthFunc cfLEqual設置所作的深度測試的類型,還可以使用glHint htPerspectiveCorrection-Hint,hmNicest設置精細的透視修正。經過了以上的設置后, OpenGL即可繪出具有消隱效果的三維圖形。
在進行FDTD網格圖形繪制時,要繪制的網格是由多個物體(或分割以后的區域)組成的,所以需要逐個對每個物體進行繪制。可以通過glNewList創建OpenGL顯示列表(display list),它是由一組OpenGL函數語句組成。在對圖形進行平移、旋轉、縮放等操作時可以使用glCallList函數調用顯示列表,即依次執行列表中的函數語句。這種設計可以改善程序的運行性能,尤其是網絡性能。
考慮到直接繪制網格線難以實現消隱的效果,因為直線不具有二維面積這一屬性,所以它不能對后面的網格線進行遮蓋。這樣,雖然OpenGL在繪制網格圖形時可以實現消隱的效果,但是因處在前面的網格線無法遮蓋住后側的網格線,生成的圖形看起來仍然很不美觀。為了解決這一問題,本文采取以下策略:先使用一種比較淺的顏色把物體的各個表面繪制出來,然后再在每個面上來繪制它的網格線。這樣處在后側的網格線將會被前側的淺色的物體表面完全遮蓋住,而且又不影響前側的網格線的顯示。這樣就可以非常方便地解決了前面出現的問題。
下面先來看看如何繪制物體的各個面。在柱面坐標系下的物體,一般地,有圖1所示的幾種情況。對于圖1(a)類型的物體,一共有上、下兩個圓面以及側面。對于圓面,可以首先把圓周平均分成n等份(n越大,圖像越精細,計算量就越大),任取相鄰的兩個點以及圓心使用bmTriangles方法繪制三角形面,當所有的三角形面繪制完畢,則近似的圓面就繪制成功。對于側面,在側面的一端的圓周上采用和前面一樣的方法任取兩個相鄰的點,然后將它們在另一端圓周上的作正投影得到對應的兩個點,將這四個點使用bmQuads方法繪制四邊形面,當把所有相鄰的點都取出做四邊形面,則近似的側面就繪制成功,如圖2所示。對于圖1(b)類型的物體,比起圖1(a)類型的物體僅僅多了兩個矩形的側面而已,所以只需要使用bmQuads方法把這兩個矩形面繪制出來即可;對于類型圖1(c)的物體,與類型圖1(a)不一樣的是上面是一個圓環,此時不能像圖1(a)中那樣使用一系列的三角形面來代替圓面,而只能使用一系列的四邊形面來代替,如圖3所示;對于類型圖1(d)的物體,方法完全類似。
再來看看如何繪制物體的網格線。在柱面坐標系下,網格線不外乎是直線和圓弧。對于直線,可以使用bmLines方法繪制出。對于圓弧,既可以使用OpenGL內的專門用來繪制圓弧的函數來進行繪制,也可以使用bmLineStrip方法繪制首尾相連的折線段來代替。
4結束語
在一個電磁場非均勻FDTD網格自動生成系統中,生成網格坐標的算法以及繪制網格的方法是至關重要的。生成網格坐標算法的優劣在于能否提供正確有效并且快速高效的網格點坐標;繪制網格的方法的優劣在于能否加快非均勻FDTD網格圖形的繪制過程,實現圖形的高效消隱、提高后續的電磁場FDTD仿真及模擬計算的精確度。按照本文的思路,筆者已經設計出相關軟件,事實證明文中的方法生成的網格坐標正確可靠,繪制的網格圖形快速高效(圖4)。
參考文獻:
[1]周國祥,楊明武,侯整風.在直角坐標系下一種快速有效產生非均勻FDTD網格的算法[J].微波學報,2002,18(2):67-70.
[2]CHEN Yin-chao,MITTRA R,HARMS P.FDTD algorithm for solving Maxwell’s equations in rotationally symmetrical geometries[J].IEEE Trans on Microwave Theory and Techniques,1999,44(6):832-839.
[3]YEE K S. Numerical solution of initial boundary value problems involving Maxwell’s equations in isotropic media[J].IEEE Trans on Antennas and Propagation,1966,14(3):302-307.
[4]ZHOU Guo-xiang,CHEN Yin-chao.Efficient non-uniform orthogonal mesh generation algorithm for cylindrical finite difference time applications [J].Chinese Journal of Electronics,2001,10(3):292-295.
[5]ZHOU Guo-xiang,YANG Zi-jiang.Extended BOR-FDTD analysis for horn antennas[J].Chinese Journal of Electronics,2005,14(4):735-738.
[6]SHEN G,ZHOU Guo-xiang.Analysis and design of cylindrical mult: layered MICs using a unified non-uniform FDTD algorithm [J].Microwave Optical Technology Letters,2002,33(4):254-262.
[7]YU W,MITTRA R.A conformal FDTD software package modeling antennas and microstrip circuit component[J].IEEE Trans on Antennas and Propagation,2000,42(5):28-39.
[8]周國祥,程萍,蔣經國,等.直角坐標系下非均勻FDTD網格生成系統[J].微波學報,2005,21(2):56-59.
[9]YANG M,CHEN Yin-chao,BEKER B.Dual frequency U-shaped planar microstrip antenna for mobile telephone communications[J]. Recent Research Development of Microwave Theory and Techniques,2002,2:279-294.
“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”