王超
(重慶交通大學 土木工程學院,重慶400041)
有限元法全稱有限單元法(Finite Element Method,F(xiàn)EM)[1]。有限元分析程序涉及力學、應用數(shù)學和計算機科學三個不同學科的理論和方法,因而其編制工作十分復雜,且程序龐大易錯[2]。面向?qū)ο蠓椒ㄊ且环N強有力的工具,采用面向?qū)ο蠓椒ㄩ_發(fā)大型有限元分析軟件是一種非常有效的方法,與傳統(tǒng)的有限元程序相比,面向?qū)ο笥邢拊绦蚋子诰帉?、更易于維護和擴充,程序代碼的可重用成分更大[3]。
本文將通過研究設(shè)計及編程實踐,討論應用面向?qū)ο蟮某绦蛟O(shè)計方法進行有限元程序設(shè)計的基本思想及采用C++語言進行有限元分析程序編制的基本方法。最后將程序計算結(jié)果與有限元軟件(Abaqus)的計算結(jié)果以及問題的理論值進行比較,從而驗證程序以及問題模型建立的正確性。
在有限元分析過程中,主要應用了結(jié)構(gòu)、載荷、節(jié)點、單元、自由度、矩陣、材料、高斯積分點、邊界條件、求解和輔助計算等物理概念。因此,根據(jù)面向?qū)ο蟪绦蛟O(shè)計方法可確定有限元分析過程的對象為:結(jié)構(gòu)對象、載荷對象、節(jié)點對象、單元對象、自由度對象、矩陣對象、材料對象、截面對象、邊界條件對象、求解對象和輔助計算對象等。根據(jù)確定的有限元分析過程的對象和所標識的對象間的關(guān)聯(lián),便形成了一個由單元類、節(jié)點類、自由度類、載荷類、材料類、邊界條件類、結(jié)構(gòu)類、求解類以及矩陣類和截面類等組成的有限元分析類庫。對整個結(jié)構(gòu)進行處理,包括對節(jié)點自由度的劃分,單元剛度矩陣和荷載向量的組裝,以及利用約束信息對總剛度矩陣進行劃0 置1,最后利用整體結(jié)構(gòu)的平衡方程求出各個節(jié)點的位移解[4]。
本文的基本力學模型為端部受集中荷載的懸臂梁,在有限元計算原理的基礎(chǔ)上,利用Visual Studio 進行程序設(shè)計,以求解此離散化力學模型的各個節(jié)點的位移和轉(zhuǎn)角,本程序中包括節(jié)點類、約束類、力的類、對象基類,其中截面和材料信息統(tǒng)一放到了單元類中。因此,視單元類為抽象基類,并添加對象基類,采用public 關(guān)鍵字以便其派生類能夠存取有關(guān)數(shù)據(jù),采用virtual 關(guān)鍵字以實現(xiàn)多態(tài)性。這樣就構(gòu)筑了類之間的層次和體系結(jié)構(gòu),形成了繼承關(guān)系。然后,結(jié)構(gòu)類接受用戶輸入的節(jié)點位置、單元、載荷、邊界條件等信息后,讀取信息并構(gòu)造具體節(jié)點類、單元類、約束類、荷載類。最后由結(jié)構(gòu)類、具體單元類中的各個計算公式的函數(shù)體的實現(xiàn),從而完成一個結(jié)構(gòu)的有限元分析過程。
2.1 對此懸臂梁進行離散化如圖1 所示,得到兩個單元三個節(jié)點的離散結(jié)構(gòu)。
圖1 矩形懸臂鋼梁離散結(jié)構(gòu)圖
2.2 根據(jù)虛功原理,考慮到虛位移的任意性,可得到平面坐標系下的單元平衡方程[4]:
2.3 根據(jù)單元的虛變形能,可得到單元剛度矩陣為[4]:
結(jié)構(gòu)類接受用戶輸入的節(jié)點位置、單元、載荷、邊界條件等信息后,發(fā)送消息并構(gòu)造具體節(jié)點類、單元類、約束類、荷載類,然后對整個結(jié)構(gòu)進行處理,包括對節(jié)點自由度的初始化,單元剛度矩陣和荷載向量的組裝,以及利用約束信息對總剛度矩陣進行劃0 置1,最后利用整體結(jié)構(gòu)的平衡方程求出各個節(jié)點的位移解[4]。
表1 節(jié)點信息表
表2 單元信息表
表3 約束信息表
表4 力信息表
表5 程序計算節(jié)點位移
表6 Abaqus 計算節(jié)點位移
在完成結(jié)構(gòu)離散化之后,建立輸入文本信息如表1、2、3、4所示。
運行該程序后,即得到該離散化力學模型各個節(jié)點的位移解計算結(jié)果,經(jīng)整理后制成如表5 所示。
經(jīng)過Abaqus 建模分析該算例,得到各個節(jié)點的位移解計算結(jié)果,經(jīng)整理后制成如表6 所示。
通過對比有限元軟件與C++程序的分析計算結(jié)果,我們可以看出二者各節(jié)點轉(zhuǎn)角值相同,各節(jié)點x 與y 方向位移也幾乎接近,從而驗證了本文有限元程序的正確性,并且通過本文更加直觀的了解了有限元法的一般思路和步驟,為進一步開發(fā)通用的面向?qū)ο蟮挠邢拊治鲕浖峁┝丝煽康膮⒖?。通過典型算例,更加深入的理解了計算力學程序設(shè)計的思想和方法。