黃河++姚剛+段世慧



摘要: 為滿足國產有限元軟件HAJIF對大規??梢暬那爸媒:秃笾脭祿幚砉δ艿钠惹行枨螅诿嫦驅ο蟮某绦蛟O計思想設計并實現具有高度靈活性的前后處理模塊.提出層次化、組件式的軟件設計架構.在前處理功能設計方面,引入準C++標準Boost庫,解決模型數據的持久化和內存管理問題;采用節點相關面法以及OpenGL深度緩存機制大大提升模型顯示效率.在后處理功能設計方面,建立物理場量值與顏色的對應關系,并構建結構變形比例放大因子計算公式.研究表明:面向對象的程序設計方法可以大大提高開發效率和前后處理模塊的可維護性.
關鍵詞: HAJIF; 前處理; 后處理; 有限元; 面向對象程序設計
中圖分類號: TP317.4 文獻標志碼: B
0 引 言
商業化的CAE軟件,如Abaqus和Nastran等,大多具有友好的前后處理模塊.HAJIF是航空工業集團研發的大型有限元分析軟件,其功能涵蓋靜力、模態、屈曲等通用計算以及優化、靜彈、顫振、熱應力分析等專用求解計算功能.[1]近年來,隨著數值分析方法的逐步完善,尤其是計算機運算速度的飛速發展,整個HAJIF計算系統求解規模越來越大,求解效率也越來越高,但由于缺少對大規模模型的前后處理功能,HAJIF軟件的長遠發展與市場銷售受到制約,因此,增強可視化的前置建模和后置數據處理功能十分迫切.
在分析有限元前后處理特點的基礎上,提出以有限元數據結構為中心構建前后置程序架構的思路,借助主流的程序設計語言C++,采用面向對象的程序設計思想,設計開發前后置模塊HAJIF_PrePost,并重點對其中的關鍵功能技術進行探討,如底層數據結構設計、模型數據持久化、大規模網格與云圖顯示技術等.
1 總體架構
HAJIF_PrePost模塊采用層次化的三層體系架構,見圖1.底層是數據層,負責有限元模型數據的管理以及圖形顯示數據管理,是前后置模塊的基礎;中間層是業務層,承上啟下,串聯界面層與數據層,負責具體功能接口的定義實現、模型卡讀寫、圖形處理、數據處理等,是前后置模塊的核心;最上面層是界面層,主要提供數據顯示、交互及建模功能,并負責各個求解模塊的界面定義和任務管理.
出于開放性的考慮,HAJIF_PrePost模塊遵循面向對象、模塊化的軟件構建技術,按照高內聚低耦合的原則,以庫函數的方式形成一系列基礎服務組件即動態鏈接庫,不同功能組件通過約定的接口協同工作、傳遞數據,整個架構由一個主程序和多個基礎服務組件構成,見圖2.
2 前處理關鍵功能設計
2.1 數據結構設計
利用C++面向對象繼承的重要特性,建立HAJIF_PrePost模塊完整的前后處理類層次結構.[2-3]分別構建Element,Node,Material,Property,Load和Bound等基類,用于對有限元單元、節點、材料、屬性、載荷和邊界等數據的公共部分進行封裝.在設計好基類后,可以派生出更加具體的子類,例如:由載荷類可以派生出力矩類、溫度類,由屬性類可以派生出桿元類、梁元類和殼元類等.
為實現有限元數據的可擴展性,HAJIF_PrePost模塊采用工廠設計方法模式,通過工廠對象接口,將實際創建工作推遲到子類中,使系統在不修改工廠接口的情況下引進新的產品.如:分別定義單元類ElementSet,材料類MaterialSet,屬性類PropertySet和載荷類LoadSet等8個工廠接口,然后通過定義模型管理類FemManager存儲管理相應的工廠類.以種類相對較多的單元類為例,其數據結構見圖3.
2.2 模型數據管理
模型數據管理是CAE軟件前后處理的基礎:一方面需形成統一的數據庫文件,將內存中的模型數據進行存檔;另一方面能根據用戶需要快速方便地進行內外部數據的交換.基于C++標準庫的I/O流框架雖然提供富有彈性且易于使用的流處理機制,但不具備快速對模型對象進行序列化存儲、存檔的能力.準C++標準Boost Serialization能以庫的形式為C++提供這個重要的功能,可以序列化C++中的各種類型,同時Serialization庫把存檔的格式與類型的序列化完全分離開來,任意的數據類型都可以采用任意的格式保存,非常靈活.[4]由于HAJIF_PrePost模塊是按照面向對象的思想進行設計的,因此可以應用Serialization庫將模型對象轉換為一個字節流進行存儲或者傳輸,在需要時再恢復成與原狀態一致的等價對象.
僅僅依靠Boost Serialization進行模型對象的序列化與反序列化,會存在內存泄露的問題,特別是在反序列化時雖然分配內存但是卻沒有合理的地方釋放,采用外部釋放又存在釋放不完全的風險,故引入Boost庫的智能指針Share_ptr進行內存管理.以材料對象為例,在材料類集合對象映射表中存儲其智能指針,偽代碼如下.
2.3 大模型網格的可視化
有限元模型是由三維網格單元組成的,隨著建模精度的逐漸提高,網格單元數量級可能上億.由于在三維模型可視化過程中需要顯示的只是所選擇的計算區域外表面的信息,因此大模型網格的可視化問題就轉化為快速判斷在三維網格中哪些單元面是外表面,以及哪些外表面可見的問題.
針對單元內外面問題,眾所周知,由于在三維模型網格中內部單元面屬于并只屬于2個單元,外部單元面只屬于某一個單元.組建結構外部單元面的一般方法為先形成結構中所有單元的單元面,然后對各個單元面進行比較,節點組成完全相同的面即為內部單元面,其余的即為外部單元面.[5-6]隨著網格單元數目的增加,這種方法的運算量將呈幾何級數增加.為提高模型的顯示速度和效果,采取如下更高效的節點相關面方法.
(1)建立節點相關面列表,F(n)=F1,F2,…,其中:n為節點編號,Fi代表一個單元面,例如單元號為154的四面體的1面為154.1,2面為154.2.
(2)對非空的F(n)列表的各個相關面進行比較,剔除節點組成完全相同的面,剩下的即為節點相關的外表面.
在提取出外表面后,需要把三維模型信息經過某種投影變換在二維顯示的表面上繪制出來.投影變換會失去深度信息,導致圖形的二義性.要消除二義性,就要在繪制時消除實際不可見的面,對三維模型的內部單元和被遮擋的外部單元進行消隱.HAJIF_PrePost模塊應用基于OpenGL的幀緩存圖形消隱技術,即OpenGL的深度緩存.深度緩存保存每個像素的深度值,深度通常用視點到物體的距離來度量,有較大深度值的像素會被較小深度值的像素替代,即遠處的物體被近處的物體所遮擋.[7]深度緩存也稱為Z-buffer.在實際應用中,常用x和y度量屏幕上水平與垂直距離,而用z度量眼睛到屏幕的垂直距離,如果像素的z坐標值小于深度緩沖區中的深度值,則深度緩沖區中的深度值被z坐標值替代,即只保留距離觀察點近的圖形元素所對應的像素,也就是說他們沒有被其他元素遮擋住并最終在眼前顯示.對有限元模型每個顯示對象的每個面上的每個點都進行上述處理后,即可得到消除隱藏面的有限元模型.某機翼盒段結構三維網格模型見圖4.
3 后處理關鍵功能設計
3.1 彩色云圖繪制
有限元數值結果主要包括位移、應力和應變等信息,相應的后處理程序以彩色云圖的繪制為主要內容,以便能快速準確地掌握模型中物理量的客觀分布以及極值的大小和位置等.
在計算結果平滑云圖的繪制過程中,彩色云圖繪制的關鍵之一是建立物理場量值與顏色的對應關系.[8-9]通常,有限元計算結果數值較大且危險的部位用紅色表示,數值結果較小且相對安全的部位用藍色表示.在HAJIF_PrePost模塊中彩色云圖的配色主要采用RGB方案,最小場值配色為藍色,最大場值配色為紅色,場值中值配色為綠色,物理量場值和顏色呈線性分布,見圖5.最后,通過OpenGL繪圖命令對模型進行著色,并進行繪制和填充,填充后的彩色云圖使有限元分析數據的描述更為直觀.某機翼盒段模型應力云圖見圖6.
3.2 變形圖繪制
由于載荷作用,工程結構會產生各自由度方向上的變形,經有限元分析后體現為離散節點的位移.將節點位移以變形圖形式表現出來,有助于更直觀、更準確有效地評價結構的受力變形或振動情況.[10]但是,離散結構的節點位移相對于結構尺寸要小得多,若直接將節點位移疊加到節點坐標上并進行離散結構單元的重繪,由此得到的離散結構變形圖幾乎看不出整體結構的變形情況,因此需要對節點位移進行適當程度的放大.基于此,在HAJIF_PrePost模塊中將最大的節點位移放大到結構尺寸的f倍,取f為0.15~0.2,模型變形圖的比例換算因子
4 算 例
為驗證HAJIF軟件前后置模塊的實際性能,選取飛機機身結構進行驗證.機身模型見圖8.該有限元模型包含928 768個節點,由231 600個桿元和694 800個四邊形單元等近百萬個單元組成,在8GB內存、2GB顯存的計算機上,應用操作流暢,顯示效果良好,滿足使用要求.計算結果見圖9.
5 結束語
(1)通過封裝基本數據類派生出高級類的方法,建立面向對象的系統架構,符合現代軟件的設計思想,大大提高HAJIF_PrePost模塊開發效率和可維護性,對于提高軟件質量以及縮短開發周期具有現實意義.(2)HAJIF_PrePost模塊具有操作簡單、功能全面、可擴展性強等特點,給用戶帶來直觀的感受和操作的便利,提升國產CAE軟件HAJIF的競爭力,具有廣闊的發展前景,為進一步市場開拓打下堅實的基礎.
參考文獻:
[1] 孫俠生, 段世慧, 陳煥星. 堅持自主創
新 實現航空CAE軟件的產業化發展[J]. 計算機輔助工程, 2010, 19(1): 1-6. DOI: 10.3969/j.issn.1006-0871.2010.01.003.
SUN X S, DUAN S H, CHEN H X. Keeping independent innovation, implementing industrialization development of aviation CAE software[J]. Computer Aided Engineering, 2010, 19(1): 1-6. DOI: 10.3969/j.issn.1006-0871.2010.01.003.
[2] 魏守水, 張合寶, 姜春香, 等. 面向對象微流體有限元分析軟件的設計[J]. 計算機應用與軟件, 2008, 25(10): 27-29. DOI: 10.3969/j.issn.1000-386X.2008.10.011.
WEI S S, ZHANG H B, JIANG C X, et al. The design of object-oriented finite element analysis software for microfluid[J]. Computer Applications and Software, 2008, 25(10): 27-29. DOI: 10.3969/j.issn.1000-386X.2008.10.011.
[3] 魏泳濤, 于建華, 陳君楷. 面向對象有限元程序設計——基本數據類[J]. 四川大學學報(工程科學版), 2001, 33(2): 17-21. DOI: 10.3969/j.issn.1009-3087.2001.02.005.
WEI Y T, YU J H, CHEN J K. Object-oriented approach to the finite element programming: basic data classes[J]. Journal of Sichuan University(Engineering Science), 2001, 33(2): 17-21. DOI: 10.3969/j.issn.1009-3087.2001.02.005.
[4] 羅劍鋒. Boost程序庫探秘——深度解析C++準標準庫[M]. 北京: 清華大學出版社, 2012: 373-424.
[5] 徐良寅, 李云鵬, 陳飆松. 面向超大規模有限元計算的通用可視化系統SiPESC.POST的設計與實現[J]. 計算力學學報, 2015, 32(2): 220-224. DOI: 10.7511/jslx201502013.
XU L Y, LI Y P, CHEN B S. Design and implementation of general visual system SiPESC.POST for large scale finite element computation[J]. Chinese Journal of Computational Mechanics, 2015, 32(2): 220-224. DOI: 10.7511/jslx201502013.
[6] 林庚浩, 馬天寶, 寧建國. 三維有限差分計算中大規模網格生成及顯示技術[J]. 計算機輔助工程, 2012, 21(4): 1-5. DOI: 10.3969/j.issn.1006-0871.2012.04.001.
LIN G H, MA T B, NING J G. Large-scale grid generation and display technology in 3D finite difference computation[J]. Computer Aided Engineering, 2012, 21(4): 1-5. DOI: 10.3969/j.issn.1006-0871.2012.04.001.
[7] 簡學東, 陸玲, 莫桂花. Z緩沖消隱算法的改進[J]. 計算機應用與軟件, 2007, 24(9): 149-150. DOI: 10.3969/j.issn.1000-386X.2007.09.053.
JIAN X D, LU L, MO G H. An improvement to Z-buffer hidden surface remove algorithm[J]. Computer Application and Software, 2007, 24(9): 149-150. DOI: 10.3969/j.issn.1000-386X.2007.09.053.
[8] 李建波, 陳健云, 林皋. 針對三維有限元數據場的精確后處理算法[J]. 計算機輔助設計與圖形學學報, 2004, 16(8): 1169-1175. DOI: 10.3321/j.issn:1003-9775.2004.08.024.
LI J B, CHEN J Y, LIN G. Precise visualiztation algorithm for the post-processing of 3D finite element model[J]. Journal of Computer Aided Design & Computer Graphics, 2004, 16(8): 1169-1175. DOI: 10.3321/j.issn:1003-9775.2004.08.024.
[9] 周偉, 田紅旗, 高廣軍. 一種有限元科學計算可視化方法[J]. 工程圖學學報, 2010, 31(5): 112-117. DOI: 10.3969/j.issn.1003-0158.2010.05.019.
ZHOU W, TIAN H Q, GAO G J. Visualization in scientific computation of FEM[J]. Journal of Engineering Graphics, 2010, 31(5): 112-117. DOI: 10.3969/j.issn.1003-0158.2010.05.019.
[10] 倪昱, 金建海, 單威俊. 艦船綜合水動力分析虛擬試驗系統中試驗結果的可視化關鍵技術研究[J]. 船海工程, 2013, 42(2): 8-12. DOI: 10.3963/j.issn.1671-7953.2013.02.003.
NI Y, JIN J H, SHAN W J. Key techniques of visualization of virtual experimental result in ship hydrodynamic performance analysis system[J]. Ship & Ocean Engineering, 2013, 42(2): 8-12. DOI: 10.3963/j.issn.1671-7953.2013.02.003.