王超
(重慶交通大學 土木工程學院,重慶400041)
有限元法全稱有限單元法(Finite Element Method,FEM)[1]。有限元分析程序涉及力學、應用數學和計算機科學三個不同學科的理論和方法,因而其編制工作十分復雜,且程序龐大易錯[2]。面向對象方法是一種強有力的工具,采用面向對象方法開發大型有限元分析軟件是一種非常有效的方法,與傳統的有限元程序相比,面向對象有限元程序更易于編寫、更易于維護和擴充,程序代碼的可重用成分更大[3]。
本文將通過研究設計及編程實踐,討論應用面向對象的程序設計方法進行有限元程序設計的基本思想及采用C++語言進行有限元分析程序編制的基本方法。最后將程序計算結果與有限元軟件(Abaqus)的計算結果以及問題的理論值進行比較,從而驗證程序以及問題模型建立的正確性。
在有限元分析過程中,主要應用了結構、載荷、節點、單元、自由度、矩陣、材料、高斯積分點、邊界條件、求解和輔助計算等物理概念。因此,根據面向對象程序設計方法可確定有限元分析過程的對象為:結構對象、載荷對象、節點對象、單元對象、自由度對象、矩陣對象、材料對象、截面對象、邊界條件對象、求解對象和輔助計算對象等。根據確定的有限元分析過程的對象和所標識的對象間的關聯,便形成了一個由單元類、節點類、自由度類、載荷類、材料類、邊界條件類、結構類、求解類以及矩陣類和截面類等組成的有限元分析類庫。對整個結構進行處理,包括對節點自由度的劃分,單元剛度矩陣和荷載向量的組裝,以及利用約束信息對總剛度矩陣進行劃0 置1,最后利用整體結構的平衡方程求出各個節點的位移解[4]。
本文的基本力學模型為端部受集中荷載的懸臂梁,在有限元計算原理的基礎上,利用Visual Studio 進行程序設計,以求解此離散化力學模型的各個節點的位移和轉角,本程序中包括節點類、約束類、力的類、對象基類,其中截面和材料信息統一放到了單元類中。因此,視單元類為抽象基類,并添加對象基類,采用public 關鍵字以便其派生類能夠存取有關數據,采用virtual 關鍵字以實現多態性。這樣就構筑了類之間的層次和體系結構,形成了繼承關系。然后,結構類接受用戶輸入的節點位置、單元、載荷、邊界條件等信息后,讀取信息并構造具體節點類、單元類、約束類、荷載類。最后由結構類、具體單元類中的各個計算公式的函數體的實現,從而完成一個結構的有限元分析過程。
2.1 對此懸臂梁進行離散化如圖1 所示,得到兩個單元三個節點的離散結構。

圖1 矩形懸臂鋼梁離散結構圖
2.2 根據虛功原理,考慮到虛位移的任意性,可得到平面坐標系下的單元平衡方程[4]:

2.3 根據單元的虛變形能,可得到單元剛度矩陣為[4]:

結構類接受用戶輸入的節點位置、單元、載荷、邊界條件等信息后,發送消息并構造具體節點類、單元類、約束類、荷載類,然后對整個結構進行處理,包括對節點自由度的初始化,單元剛度矩陣和荷載向量的組裝,以及利用約束信息對總剛度矩陣進行劃0 置1,最后利用整體結構的平衡方程求出各個節點的位移解[4]。


表1 節點信息表

表2 單元信息表

表3 約束信息表

表4 力信息表

表5 程序計算節點位移

表6 Abaqus 計算節點位移

在完成結構離散化之后,建立輸入文本信息如表1、2、3、4所示。
運行該程序后,即得到該離散化力學模型各個節點的位移解計算結果,經整理后制成如表5 所示。
經過Abaqus 建模分析該算例,得到各個節點的位移解計算結果,經整理后制成如表6 所示。
通過對比有限元軟件與C++程序的分析計算結果,我們可以看出二者各節點轉角值相同,各節點x 與y 方向位移也幾乎接近,從而驗證了本文有限元程序的正確性,并且通過本文更加直觀的了解了有限元法的一般思路和步驟,為進一步開發通用的面向對象的有限元分析軟件提供了可靠的參考。通過典型算例,更加深入的理解了計算力學程序設計的思想和方法。