摘" 要:該文基于Python和Qt框架研發(fā)一款具有前后處理模塊的二維邊界元法CAE軟件,為用戶打造一個(gè)直觀的可視化操作界面,通過該界面可實(shí)現(xiàn)幾何模型構(gòu)建、單元結(jié)點(diǎn)信息獲取、邊界條件加載和材料屬性施加等前處理功能,以及顯示位移、應(yīng)力云圖的后處理功能,可直觀展現(xiàn)邊界元法計(jì)算結(jié)構(gòu)獲得的物理參量。最后以含切口薄板結(jié)構(gòu)受力分析為例,利用所開發(fā)的軟件進(jìn)行計(jì)算,展現(xiàn)所開發(fā)軟件的功效。
關(guān)鍵詞:邊界元法;可視化;軟件開發(fā);Python;CAE軟件
中圖分類號(hào):TP391.7" " " 文獻(xiàn)標(biāo)志碼:A" " " " " 文章編號(hào):2095-2945(2025)05-0054-04
Abstract: In this paper, a two-dimensional boundary element method CAE software with pre-and post-processing modules is developed based on Python and Qt framework, which creates an intuitive visual operation interface for users. Through this interface, pre-processing functions such as geometric model construction, element node information acquisition, and boundary conditions can be realized. Pre-processing functions such as loading and material property application, as well as post-processing functions to display displacement and stress nephograms, can intuitively display the physical parameters obtained by the boundary element method calculation structure. Finally, this paper takes the stress analysis of thin plate structures with notches as an example, and uses the developed software to calculate, which demonstrates the effectiveness of the developed software.
Keywords: boundary element method; visualization; software development; Python; CAE software
相對(duì)有限元法商業(yè)化程度高、軟件種類繁多而言,邊界元法的通用軟件較少[1]。現(xiàn)有較多的是邊界元法應(yīng)用程序,數(shù)據(jù)要靠手動(dòng)輸入或文件導(dǎo)入,計(jì)算完成之后,結(jié)果也是以文件的形式給出,需要用戶在文件中尋找需要的信息。邊界元法程序計(jì)算得到的結(jié)果并不能直觀展示結(jié)構(gòu)相應(yīng)的物理參量,僅有的數(shù)值結(jié)果對(duì)于未經(jīng)過培訓(xùn)學(xué)習(xí)的工程技術(shù)人員和研究人員來說難以閱讀。因此邊界元法CAE軟件的開發(fā)還處于發(fā)展的起步階段。
高宇等[2]基于UG軟件開發(fā)了針對(duì)二維邊界元法的前處理模塊。邊煜凱[3]基于Qt開發(fā)了采用間接邊界元法的地震模擬分析軟件。衛(wèi)軍朝等[4]基于MATLAB環(huán)境介紹了一種CAE軟件的前置處理、解析計(jì)算及后置處理程序?qū)崿F(xiàn)的方法和編程技巧。秦曉晨等[5]基于Python和Abaqus研發(fā)了一款應(yīng)用于無加強(qiáng)U形波紋管的力學(xué)性能分析軟件。這些軟件多數(shù)是為了解決某一特定問題而編制,缺乏通用性。
本文基于Python開發(fā)了一款二維邊界元力學(xué)分析軟件,實(shí)現(xiàn)在UI界面輸入結(jié)構(gòu)計(jì)算信息、展示力學(xué)分析結(jié)果。軟件開發(fā)完后使用PyInstaller庫將其打包為Python應(yīng)用程序[6],方便用戶通過.exe文件運(yùn)行,界面友好,操作方便。
1" 軟件概述
1.1" 軟件開發(fā)環(huán)境及應(yīng)用工具
本軟件基于二維常規(guī)邊界元法,在Windows10系統(tǒng)下PyCharm環(huán)境中開發(fā),針對(duì)結(jié)構(gòu)的彈性力學(xué)問題進(jìn)行幾何建模、賦予材料屬性、施加邊界條件,再進(jìn)行邊界元法計(jì)算,并將計(jì)算得到的位移和應(yīng)力以云圖的形式展示。
在界面開發(fā)方面,采用Python語言,使用PyQt工具包創(chuàng)建桌面GUI應(yīng)用程序,構(gòu)建了前處理界面和后處理界面。前處理界面借助OpenGL技術(shù),能夠流暢地渲染2D圖形,為用戶提供清晰的視覺展示。后處理界面則充分利用numpy庫進(jìn)行高效的矩陣運(yùn)算,確保數(shù)據(jù)處理的準(zhǔn)確性和速度。此外軟件還集成matplotlib庫,并采用scipy庫中的griddata函數(shù)進(jìn)行插值處理,用于繪制位移、應(yīng)力云圖。
軟件的核心邊界元法使用Fortran語言編寫,使用Python的subprocess模塊以及os庫對(duì)數(shù)據(jù)和算法程序進(jìn)行文件操作。
1.2" 軟件設(shè)計(jì)流程圖
2" 軟件設(shè)計(jì)
2.1" 軟件界面設(shè)計(jì)
軟件的界面先由QTDesigner工具進(jìn)行布局設(shè)置,窗體、按鈕、文字框等界面元素的大小、位置設(shè)置均在工具中完成,然后通過PyUIC將QTDesigner生成的UI文件轉(zhuǎn)成Python源碼,之后將Python源碼添加在main文件中進(jìn)行編輯,用以修改參數(shù)以及添加交互功能。
在main文件中創(chuàng)建Ui_MainWindow類,該類繼承自QMainWindow,負(fù)責(zé)構(gòu)建主窗體,設(shè)計(jì)窗體布局及按鈕等元素,同時(shí)可以添加如setText方法(設(shè)置文本信息)、clicked方法(點(diǎn)擊交互)等參數(shù)和交互功能。
在窗體界面中使用OpenGL Widget控件來顯示繪圖過程以及后處理云圖。首先在openglwidgettest文件中創(chuàng)建MyGLWidget1類,該類繼承自QOpenGLWidget,以利用OpenGL功能進(jìn)行圖形渲染。之后在Ui_MainWindow類中,實(shí)例化MyGLWidget1類的對(duì)象,以實(shí)現(xiàn)其圖形渲染函數(shù)的調(diào)用。
2.2" 前處理模塊設(shè)計(jì)
2.2.1" 幾何模型構(gòu)建
該模塊用于生成結(jié)構(gòu)的幾何模型。首先在Ui_MainWindow類中的lineEdit控件中獲取一條邊的參數(shù),將這些參數(shù)信息保存至datasave.Py文件中。通過MyGLWidget1類的對(duì)象,調(diào)取該類中的繪圖函數(shù)drawfunc,函數(shù)讀取datasave文件以渲染二維圖形,并在主窗體的右側(cè)區(qū)域進(jìn)行顯示。
用戶可通過左側(cè)文本框輸入結(jié)點(diǎn)編號(hào),以逆時(shí)針方向繪制二維任意多邊形,系統(tǒng)會(huì)根據(jù)用戶輸入的2個(gè)坐標(biāo)來定義一條邊,并將這條邊均勻劃分為N個(gè)單元,同時(shí)生成N+1個(gè)邊界結(jié)點(diǎn)。生成的邊界結(jié)點(diǎn)顯示如圖3所示。
2.2.2" 單元結(jié)點(diǎn)信息構(gòu)建
該模塊針對(duì)前一個(gè)模塊輸入的幾何參數(shù)信息自動(dòng)生成邊界結(jié)點(diǎn)信息和單元信息。Ui_MainWindow類中的pushButton控件被點(diǎn)擊后會(huì)調(diào)用datasave文件中的結(jié)點(diǎn)和單元信息保存函數(shù),用以按照特定數(shù)據(jù)形式生成和保存單元結(jié)點(diǎn)信息。此外,lineEdit控件會(huì)獲取用戶輸入的內(nèi)結(jié)點(diǎn)坐標(biāo)和編號(hào)信息,并將其保存至datasave文件中,進(jìn)行對(duì)內(nèi)結(jié)點(diǎn)的繪制和存儲(chǔ)。
邊界結(jié)點(diǎn)信息和單元信息程序會(huì)按照邊界元法要求的數(shù)據(jù)格式自動(dòng)生成并保存。邊界結(jié)點(diǎn)信息獲取如圖4所示。內(nèi)點(diǎn)信息則需要用戶根據(jù)需要手動(dòng)輸入并保存。
2.2.3" 邊界條件信息構(gòu)建
該模塊用以獲取結(jié)構(gòu)的位移和應(yīng)力邊界條件。本軟件使用鼠標(biāo)來選擇單元以施加邊界條件,在鼠標(biāo)移動(dòng)過程中,通過Ui_MainWindow類中mouseMoveEvent方法(鼠標(biāo)移動(dòng)事件)捕獲坐標(biāo)信息。當(dāng)mousePressEvent方法(鼠標(biāo)按下事件)被觸發(fā)時(shí),系統(tǒng)會(huì)獲取當(dāng)前的坐標(biāo)信息,并將其與datasave文件中的單元結(jié)點(diǎn)坐標(biāo)進(jìn)行對(duì)比,判定該單元是否被鼠標(biāo)點(diǎn)擊,并對(duì)已點(diǎn)擊單元及其結(jié)點(diǎn)進(jìn)行加粗顯示。當(dāng)mouseReleaseEvent方法(鼠標(biāo)釋放事件)發(fā)生,即鼠標(biāo)抬起時(shí),系統(tǒng)會(huì)進(jìn)行加粗單元和結(jié)點(diǎn)的繪制,此時(shí)點(diǎn)擊保存按鈕即pushButton控件,相應(yīng)函數(shù)會(huì)記錄這些加粗結(jié)點(diǎn)的坐標(biāo)和編號(hào)等信息。此外,lineEdit控件會(huì)讀取用戶輸入的數(shù)據(jù)信息,并與鼠標(biāo)選定的結(jié)點(diǎn)信息相結(jié)合,從而構(gòu)成結(jié)構(gòu)的完整邊界條件。位移邊界條件的施加如圖5所示。
2.2.4" 材料參數(shù)信息設(shè)置
該模塊用來獲取結(jié)構(gòu)的基本參數(shù)信息,例如結(jié)構(gòu)對(duì)稱性、彈性模量、泊松比等。選擇類數(shù)據(jù)在Ui_MainWindow類中的comboBox控件獲取,輸入類數(shù)據(jù)在lineEdit控件中獲取。點(diǎn)擊保存參數(shù)的pushButton控件會(huì)調(diào)用數(shù)據(jù)保存函數(shù)對(duì)用戶在前處理模塊輸入的數(shù)據(jù)信息進(jìn)行保存,點(diǎn)擊輸出信息文檔按鈕則會(huì)調(diào)用datasave文件中的write函數(shù),通過Python的文件操作根據(jù)相應(yīng)格式生成.dat文件。材料參數(shù)信息設(shè)置如圖6所示。
2.3" 邊界元法計(jì)算模塊設(shè)計(jì)
邊界元法程序使用Fortran語言編寫完成,主要分為3個(gè)步驟:
1)根據(jù)格式要求將幾何模型前處理信息輸入到.dat文件中。
2)運(yùn)行邊界元Fortran算法程序,經(jīng)過編譯構(gòu)建.exe文件,執(zhí)行.exe文件,生成結(jié)果.dat文件。
3)根據(jù)需求從結(jié)果.dat文件中提取數(shù)據(jù)。
本軟件針對(duì)邊界元法程序的計(jì)算執(zhí)行特點(diǎn),先將用戶在前處理模塊的數(shù)據(jù)輸入板塊輸入的信息進(jìn)行保存,并按照相應(yīng)格式生成.dat文件。通過Python的subprocess模塊對(duì)邊界元法程序生成的.exe文件進(jìn)行調(diào)用執(zhí)行,此時(shí)會(huì)生成結(jié)果.dat文件。
用戶可以查看當(dāng)前生成的結(jié)果.dat文件,對(duì)感興趣的結(jié)果進(jìn)行查閱,也可以在后處理模塊進(jìn)行交互操作,軟件會(huì)在全局生成多個(gè)內(nèi)點(diǎn),之后調(diào)用.exe文件重新計(jì)算內(nèi)點(diǎn)位移和應(yīng)力并讀取結(jié)果.dat文件,將結(jié)果經(jīng)過插值計(jì)算,呈現(xiàn)位移、應(yīng)力云圖。
2.4" 后處理模塊設(shè)計(jì)
軟件的后處理部分主要以云圖的形式展示邊界元法計(jì)算后各邊界點(diǎn)和內(nèi)點(diǎn)的位移或應(yīng)力大小。
云圖繪制部分使用numpy庫,在10×10的矩形區(qū)域內(nèi)生成500×500個(gè)點(diǎn),并將這些點(diǎn)的X坐標(biāo)和Y坐標(biāo)通過numpy.meshgrid函數(shù)分別存儲(chǔ)起來。系統(tǒng)會(huì)對(duì)全局生成的所有點(diǎn)進(jìn)行篩選,每隔20個(gè)點(diǎn)進(jìn)行一次判斷。這里采用射線法[7]來確定點(diǎn)是否位于多邊形內(nèi)部。如果點(diǎn)位于多邊形內(nèi),系統(tǒng)會(huì)記錄該點(diǎn)的編號(hào)和坐標(biāo)信息,這些信息將用于后續(xù)的結(jié)點(diǎn)計(jì)算。借助scipy庫的griddata函數(shù),能夠?qū)Y(jié)構(gòu)其余邊界結(jié)點(diǎn)和生成的內(nèi)點(diǎn)(這些點(diǎn)都具有位移和應(yīng)力數(shù)據(jù))進(jìn)行插值處理,從而生成一個(gè)包含多邊形內(nèi)部所有點(diǎn)數(shù)據(jù)的矩陣。最后,根據(jù)該矩陣和邊界元法計(jì)算結(jié)果,利用matplotlib在QOpenGLWidget中繪制出相應(yīng)的云圖。
3" 應(yīng)用舉例
使用本軟件對(duì)如圖7所示的含切口薄板結(jié)構(gòu)進(jìn)行力學(xué)分析。該模型下側(cè)邊界均為固定鉸支座約束,上側(cè)邊界為?滓=2.0 MPa。材料的彈性模量E=3.9 GPa、泊松比v=0.25。
4" 結(jié)束語
本文介紹了基于Python和Qt開發(fā)的二維邊界元法CAE軟件。該軟件的前處理模塊允許用戶通過直觀的可視化界面構(gòu)建幾何模型、獲取單元結(jié)點(diǎn)信息、施加邊界條件和設(shè)置材料參數(shù)信息,并導(dǎo)出數(shù)據(jù)供邊界元法程序計(jì)算使用,經(jīng)邊界元法計(jì)算后,結(jié)果可在后處理界面中以位移和應(yīng)力云圖進(jìn)行全局可視化展示,也可在.dat文件中對(duì)感興趣的數(shù)據(jù)進(jìn)行讀取。文章還詳細(xì)描述了如何構(gòu)建軟件界面和構(gòu)建前后處理模塊。軟件界面友好,操作便捷,為用戶提供了一種直觀、高效的力學(xué)分析方法。
參考文獻(xiàn):
[1] 姚振漢,段小華,尹欣,等.邊界元法軟件及其在工程與教學(xué)中的應(yīng)用[J].重慶建筑大學(xué)學(xué)報(bào),2000(6):84-87.
[2] 高宇,曹悅,劉彪,等.基于邊界元法的CAE軟件開發(fā)及應(yīng)用[J].武漢大學(xué)學(xué)報(bào)(工學(xué)版),2023,56(9):1066-1072.
[3] 邊煜凱.三維復(fù)雜場(chǎng)地地震動(dòng)放大效應(yīng)并行邊界元模擬及軟件開發(fā)[D].天津:天津城建大學(xué),2022.
[4] 衛(wèi)軍朝,張廣鵬,方英武,等.基于Matlab的CAE軟件實(shí)現(xiàn)方法[J].制造業(yè)自動(dòng)化,2004(6):51-53.
[5] 秦曉晨,劉靜,何進(jìn),等.基于Python和Abaqus的波紋管力學(xué)性能分析軟件開發(fā)[J].重型機(jī)械,2023(5):77-84.
[6] 王瑞文,王圣輝,邊潤根,等.Python程序打包成exe可執(zhí)行文件的方法探究[J].無線互聯(lián)科技,2017(12):52-53.
[7] 章磊,何芬,李鴻赟.一種基于奇異射線法檢測(cè)點(diǎn)在多邊形內(nèi)的方法[J].計(jì)算機(jī)應(yīng)用研究,2020,37(S2):133-135.