黃河++姚剛+段世慧
摘要: 為滿足國產(chǎn)有限元軟件HAJIF對大規(guī)??梢暬那爸媒:秃笾脭?shù)據(jù)處理功能的迫切需求,基于面向?qū)ο蟮某绦蛟O(shè)計(jì)思想設(shè)計(jì)并實(shí)現(xiàn)具有高度靈活性的前后處理模塊.提出層次化、組件式的軟件設(shè)計(jì)架構(gòu).在前處理功能設(shè)計(jì)方面,引入準(zhǔn)C++標(biāo)準(zhǔn)Boost庫,解決模型數(shù)據(jù)的持久化和內(nèi)存管理問題;采用節(jié)點(diǎn)相關(guān)面法以及OpenGL深度緩存機(jī)制大大提升模型顯示效率.在后處理功能設(shè)計(jì)方面,建立物理場量值與顏色的對應(yīng)關(guān)系,并構(gòu)建結(jié)構(gòu)變形比例放大因子計(jì)算公式.研究表明:面向?qū)ο蟮某绦蛟O(shè)計(jì)方法可以大大提高開發(fā)效率和前后處理模塊的可維護(hù)性.
關(guān)鍵詞: HAJIF; 前處理; 后處理; 有限元; 面向?qū)ο蟪绦蛟O(shè)計(jì)
中圖分類號: TP317.4 文獻(xiàn)標(biāo)志碼: B
0 引 言
商業(yè)化的CAE軟件,如Abaqus和Nastran等,大多具有友好的前后處理模塊.HAJIF是航空工業(yè)集團(tuán)研發(fā)的大型有限元分析軟件,其功能涵蓋靜力、模態(tài)、屈曲等通用計(jì)算以及優(yōu)化、靜彈、顫振、熱應(yīng)力分析等專用求解計(jì)算功能.[1]近年來,隨著數(shù)值分析方法的逐步完善,尤其是計(jì)算機(jī)運(yùn)算速度的飛速發(fā)展,整個(gè)HAJIF計(jì)算系統(tǒng)求解規(guī)模越來越大,求解效率也越來越高,但由于缺少對大規(guī)模模型的前后處理功能,HAJIF軟件的長遠(yuǎn)發(fā)展與市場銷售受到制約,因此,增強(qiáng)可視化的前置建模和后置數(shù)據(jù)處理功能十分迫切.
在分析有限元前后處理特點(diǎn)的基礎(chǔ)上,提出以有限元數(shù)據(jù)結(jié)構(gòu)為中心構(gòu)建前后置程序架構(gòu)的思路,借助主流的程序設(shè)計(jì)語言C++,采用面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,設(shè)計(jì)開發(fā)前后置模塊HAJIF_PrePost,并重點(diǎn)對其中的關(guān)鍵功能技術(shù)進(jìn)行探討,如底層數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)、模型數(shù)據(jù)持久化、大規(guī)模網(wǎng)格與云圖顯示技術(shù)等.
1 總體架構(gòu)
HAJIF_PrePost模塊采用層次化的三層體系架構(gòu),見圖1.底層是數(shù)據(jù)層,負(fù)責(zé)有限元模型數(shù)據(jù)的管理以及圖形顯示數(shù)據(jù)管理,是前后置模塊的基礎(chǔ);中間層是業(yè)務(wù)層,承上啟下,串聯(lián)界面層與數(shù)據(jù)層,負(fù)責(zé)具體功能接口的定義實(shí)現(xiàn)、模型卡讀寫、圖形處理、數(shù)據(jù)處理等,是前后置模塊的核心;最上面層是界面層,主要提供數(shù)據(jù)顯示、交互及建模功能,并負(fù)責(zé)各個(gè)求解模塊的界面定義和任務(wù)管理.
出于開放性的考慮,HAJIF_PrePost模塊遵循面向?qū)ο?、模塊化的軟件構(gòu)建技術(shù),按照高內(nèi)聚低耦合的原則,以庫函數(shù)的方式形成一系列基礎(chǔ)服務(wù)組件即動態(tài)鏈接庫,不同功能組件通過約定的接口協(xié)同工作、傳遞數(shù)據(jù),整個(gè)架構(gòu)由一個(gè)主程序和多個(gè)基礎(chǔ)服務(wù)組件構(gòu)成,見圖2.
2 前處理關(guān)鍵功能設(shè)計(jì)
2.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
利用C++面向?qū)ο罄^承的重要特性,建立HAJIF_PrePost模塊完整的前后處理類層次結(jié)構(gòu).[2-3]分別構(gòu)建Element,Node,Material,Property,Load和Bound等基類,用于對有限元單元、節(jié)點(diǎn)、材料、屬性、載荷和邊界等數(shù)據(jù)的公共部分進(jìn)行封裝.在設(shè)計(jì)好基類后,可以派生出更加具體的子類,例如:由載荷類可以派生出力矩類、溫度類,由屬性類可以派生出桿元類、梁元類和殼元類等.
為實(shí)現(xiàn)有限元數(shù)據(jù)的可擴(kuò)展性,HAJIF_PrePost模塊采用工廠設(shè)計(jì)方法模式,通過工廠對象接口,將實(shí)際創(chuàng)建工作推遲到子類中,使系統(tǒng)在不修改工廠接口的情況下引進(jìn)新的產(chǎn)品.如:分別定義單元類ElementSet,材料類MaterialSet,屬性類PropertySet和載荷類LoadSet等8個(gè)工廠接口,然后通過定義模型管理類FemManager存儲管理相應(yīng)的工廠類.以種類相對較多的單元類為例,其數(shù)據(jù)結(jié)構(gòu)見圖3.
2.2 模型數(shù)據(jù)管理
模型數(shù)據(jù)管理是CAE軟件前后處理的基礎(chǔ):一方面需形成統(tǒng)一的數(shù)據(jù)庫文件,將內(nèi)存中的模型數(shù)據(jù)進(jìn)行存檔;另一方面能根據(jù)用戶需要快速方便地進(jìn)行內(nèi)外部數(shù)據(jù)的交換.基于C++標(biāo)準(zhǔn)庫的I/O流框架雖然提供富有彈性且易于使用的流處理機(jī)制,但不具備快速對模型對象進(jìn)行序列化存儲、存檔的能力.準(zhǔn)C++標(biāo)準(zhǔn)Boost Serialization能以庫的形式為C++提供這個(gè)重要的功能,可以序列化C++中的各種類型,同時(shí)Serialization庫把存檔的格式與類型的序列化完全分離開來,任意的數(shù)據(jù)類型都可以采用任意的格式保存,非常靈活.[4]由于HAJIF_PrePost模塊是按照面向?qū)ο蟮乃枷脒M(jìn)行設(shè)計(jì)的,因此可以應(yīng)用Serialization庫將模型對象轉(zhuǎn)換為一個(gè)字節(jié)流進(jìn)行存儲或者傳輸,在需要時(shí)再恢復(fù)成與原狀態(tài)一致的等價(jià)對象.
僅僅依靠Boost Serialization進(jìn)行模型對象的序列化與反序列化,會存在內(nèi)存泄露的問題,特別是在反序列化時(shí)雖然分配內(nèi)存但是卻沒有合理的地方釋放,采用外部釋放又存在釋放不完全的風(fēng)險(xiǎn),故引入Boost庫的智能指針Share_ptr進(jìn)行內(nèi)存管理.以材料對象為例,在材料類集合對象映射表中存儲其智能指針,偽代碼如下.
2.3 大模型網(wǎng)格的可視化
有限元模型是由三維網(wǎng)格單元組成的,隨著建模精度的逐漸提高,網(wǎng)格單元數(shù)量級可能上億.由于在三維模型可視化過程中需要顯示的只是所選擇的計(jì)算區(qū)域外表面的信息,因此大模型網(wǎng)格的可視化問題就轉(zhuǎn)化為快速判斷在三維網(wǎng)格中哪些單元面是外表面,以及哪些外表面可見的問題.
針對單元內(nèi)外面問題,眾所周知,由于在三維模型網(wǎng)格中內(nèi)部單元面屬于并只屬于2個(gè)單元,外部單元面只屬于某一個(gè)單元.組建結(jié)構(gòu)外部單元面的一般方法為先形成結(jié)構(gòu)中所有單元的單元面,然后對各個(gè)單元面進(jìn)行比較,節(jié)點(diǎn)組成完全相同的面即為內(nèi)部單元面,其余的即為外部單元面.[5-6]隨著網(wǎng)格單元數(shù)目的增加,這種方法的運(yùn)算量將呈幾何級數(shù)增加.為提高模型的顯示速度和效果,采取如下更高效的節(jié)點(diǎn)相關(guān)面方法.
(1)建立節(jié)點(diǎn)相關(guān)面列表,F(xiàn)(n)=F1,F(xiàn)2,…,其中:n為節(jié)點(diǎn)編號,F(xiàn)i代表一個(gè)單元面,例如單元號為154的四面體的1面為154.1,2面為154.2.
(2)對非空的F(n)列表的各個(gè)相關(guān)面進(jìn)行比較,剔除節(jié)點(diǎn)組成完全相同的面,剩下的即為節(jié)點(diǎn)相關(guān)的外表面.
在提取出外表面后,需要把三維模型信息經(jīng)過某種投影變換在二維顯示的表面上繪制出來.投影變換會失去深度信息,導(dǎo)致圖形的二義性.要消除二義性,就要在繪制時(shí)消除實(shí)際不可見的面,對三維模型的內(nèi)部單元和被遮擋的外部單元進(jìn)行消隱.HAJIF_PrePost模塊應(yīng)用基于OpenGL的幀緩存圖形消隱技術(shù),即OpenGL的深度緩存.深度緩存保存每個(gè)像素的深度值,深度通常用視點(diǎn)到物體的距離來度量,有較大深度值的像素會被較小深度值的像素替代,即遠(yuǎn)處的物體被近處的物體所遮擋.[7]深度緩存也稱為Z-buffer.在實(shí)際應(yīng)用中,常用x和y度量屏幕上水平與垂直距離,而用z度量眼睛到屏幕的垂直距離,如果像素的z坐標(biāo)值小于深度緩沖區(qū)中的深度值,則深度緩沖區(qū)中的深度值被z坐標(biāo)值替代,即只保留距離觀察點(diǎn)近的圖形元素所對應(yīng)的像素,也就是說他們沒有被其他元素遮擋住并最終在眼前顯示.對有限元模型每個(gè)顯示對象的每個(gè)面上的每個(gè)點(diǎn)都進(jìn)行上述處理后,即可得到消除隱藏面的有限元模型.某機(jī)翼盒段結(jié)構(gòu)三維網(wǎng)格模型見圖4.
3 后處理關(guān)鍵功能設(shè)計(jì)
3.1 彩色云圖繪制
有限元數(shù)值結(jié)果主要包括位移、應(yīng)力和應(yīng)變等信息,相應(yīng)的后處理程序以彩色云圖的繪制為主要內(nèi)容,以便能快速準(zhǔn)確地掌握模型中物理量的客觀分布以及極值的大小和位置等.
在計(jì)算結(jié)果平滑云圖的繪制過程中,彩色云圖繪制的關(guān)鍵之一是建立物理場量值與顏色的對應(yīng)關(guān)系.[8-9]通常,有限元計(jì)算結(jié)果數(shù)值較大且危險(xiǎn)的部位用紅色表示,數(shù)值結(jié)果較小且相對安全的部位用藍(lán)色表示.在HAJIF_PrePost模塊中彩色云圖的配色主要采用RGB方案,最小場值配色為藍(lán)色,最大場值配色為紅色,場值中值配色為綠色,物理量場值和顏色呈線性分布,見圖5.最后,通過OpenGL繪圖命令對模型進(jìn)行著色,并進(jìn)行繪制和填充,填充后的彩色云圖使有限元分析數(shù)據(jù)的描述更為直觀.某機(jī)翼盒段模型應(yīng)力云圖見圖6.
3.2 變形圖繪制
由于載荷作用,工程結(jié)構(gòu)會產(chǎn)生各自由度方向上的變形,經(jīng)有限元分析后體現(xiàn)為離散節(jié)點(diǎn)的位移.將節(jié)點(diǎn)位移以變形圖形式表現(xiàn)出來,有助于更直觀、更準(zhǔn)確有效地評價(jià)結(jié)構(gòu)的受力變形或振動情況.[10]但是,離散結(jié)構(gòu)的節(jié)點(diǎn)位移相對于結(jié)構(gòu)尺寸要小得多,若直接將節(jié)點(diǎn)位移疊加到節(jié)點(diǎn)坐標(biāo)上并進(jìn)行離散結(jié)構(gòu)單元的重繪,由此得到的離散結(jié)構(gòu)變形圖幾乎看不出整體結(jié)構(gòu)的變形情況,因此需要對節(jié)點(diǎn)位移進(jìn)行適當(dāng)程度的放大.基于此,在HAJIF_PrePost模塊中將最大的節(jié)點(diǎn)位移放大到結(jié)構(gòu)尺寸的f倍,取f為0.15~0.2,模型變形圖的比例換算因子
4 算 例
為驗(yàn)證HAJIF軟件前后置模塊的實(shí)際性能,選取飛機(jī)機(jī)身結(jié)構(gòu)進(jìn)行驗(yàn)證.機(jī)身模型見圖8.該有限元模型包含928 768個(gè)節(jié)點(diǎn),由231 600個(gè)桿元和694 800個(gè)四邊形單元等近百萬個(gè)單元組成,在8GB內(nèi)存、2GB顯存的計(jì)算機(jī)上,應(yīng)用操作流暢,顯示效果良好,滿足使用要求.計(jì)算結(jié)果見圖9.
5 結(jié)束語
(1)通過封裝基本數(shù)據(jù)類派生出高級類的方法,建立面向?qū)ο蟮南到y(tǒng)架構(gòu),符合現(xiàn)代軟件的設(shè)計(jì)思想,大大提高HAJIF_PrePost模塊開發(fā)效率和可維護(hù)性,對于提高軟件質(zhì)量以及縮短開發(fā)周期具有現(xiàn)實(shí)意義.(2)HAJIF_PrePost模塊具有操作簡單、功能全面、可擴(kuò)展性強(qiáng)等特點(diǎn),給用戶帶來直觀的感受和操作的便利,提升國產(chǎn)CAE軟件HAJIF的競爭力,具有廣闊的發(fā)展前景,為進(jìn)一步市場開拓打下堅(jiān)實(shí)的基礎(chǔ).
參考文獻(xiàn):
[1] 孫俠生, 段世慧, 陳煥星. 堅(jiān)持自主創(chuàng)
新 實(shí)現(xiàn)航空CAE軟件的產(chǎn)業(yè)化發(fā)展[J]. 計(jì)算機(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] 魏守水, 張合寶, 姜春香, 等. 面向?qū)ο笪⒘黧w有限元分析軟件的設(shè)計(jì)[J]. 計(jì)算機(jī)應(yīng)用與軟件, 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] 魏泳濤, 于建華, 陳君楷. 面向?qū)ο笥邢拊绦蛟O(shè)計(jì)——基本數(shù)據(jù)類[J]. 四川大學(xué)學(xué)報(bào)(工程科學(xué)版), 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++準(zhǔn)標(biāo)準(zhǔn)庫[M]. 北京: 清華大學(xué)出版社, 2012: 373-424.
[5] 徐良寅, 李云鵬, 陳飆松. 面向超大規(guī)模有限元計(jì)算的通用可視化系統(tǒng)SiPESC.POST的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算力學(xué)學(xué)報(bào), 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ì)算中大規(guī)模網(wǎng)格生成及顯示技術(shù)[J]. 計(jì)算機(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] 簡學(xué)東, 陸玲, 莫桂花. Z緩沖消隱算法的改進(jìn)[J]. 計(jì)算機(jī)應(yīng)用與軟件, 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] 李建波, 陳健云, 林皋. 針對三維有限元數(shù)據(jù)場的精確后處理算法[J]. 計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào), 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] 周偉, 田紅旗, 高廣軍. 一種有限元科學(xué)計(jì)算可視化方法[J]. 工程圖學(xué)學(xué)報(bào), 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] 倪昱, 金建海, 單威俊. 艦船綜合水動力分析虛擬試驗(yàn)系統(tǒng)中試驗(yàn)結(jié)果的可視化關(guān)鍵技術(shù)研究[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.