Python 進行有限元分析 -- 有限元方法基礎教程 (第五版)(例題3.6)

在《有限元方法基礎教程》(第五版)中,第三章是桁架問題。

這裏再重新強調一遍有限元分析的基本步驟(重要的事情我們要經常說):

step 1: 離散和選擇單元類型。

step 2: 選擇位移函數。(位移函數一般都是多項式函數,一般都選線性,類似於y = ax +b .除非特別情況,一般都是選擇這個函數)

step 3: 寫出力和位移的關係,或者應力/應變關係。

step 4: 得到單元剛度矩陣。

step 5: 組合總體剛度矩陣。

step 6: 帶入邊界條件。

step 7: 求解未知量(一般是求解出力和位移)。以及自己想要獲取的量(有時候讓求解應力和應變)。

以上便是直接剛度法來進行有限元求解的步驟了。

接下來,我們便開始通過Python來編寫計算本題的有限元程序。

第一步: 我們創建一個單元類,其實例用來表示單元,單元的基本信息包括:A(橫截面積),E(楊氏模量),L(單元的長度),angle(局部座標系相對於全局座標系所轉過的角度), <最重要的特性><與單元相關的節點的編號i, j>(因爲節點編號是我們將單元剛度矩陣組合到總體剛度矩陣中去的時候的關鍵因素,所以這個特性非常重要,而且對應的順序也不能變)。

這是我們的單元類,在Python中__init__()函數就類似於java中的類的構造器,我們可以注意到這裏傳入的參數有6個,第一個Node_label是與當前單元有關係的節點的編號所組成的tuple。我們在本函數的代碼部分,對部分參數的類型進行限制,這裏強制要求傳入的Node_label必須是tuple類型,而且必須是2個元素的tuple。之所以這麼設置是因爲當前的單元是一個杆單元,只有兩端的節點與其有關係。

2~4參數分別爲:橫截面接,楊氏模量,單元長度。

對於第五個參數angle設置爲了None, 並且第六個參數cosine也設置爲了None.關於此參數的說明請見: 函數的參數 - 廖雪峯的官方網站 . 之所以這麼設置,是因爲我們注意到對於本題,求解局部座標相對於全局座標的偏轉角度的正餘弦要比求角度方便的多,於是我們在這裏添加了直接設置餘弦和正弦的參數,並且我們也不想拋棄掉設置angle參數的功能,因爲在某些問題中,可能設置角度更爲方便。

第二步: 我們先來生成單元實例,通過實例我們再來判斷一下剛度矩陣的組合方式。

我們通過一個列表來將存儲所有的單元。(如果查看過Abaqus的Python Reference的話,你會發現所有的不管是單元還是節點都會存在在對應的單元倉庫和節點倉庫,類型是list)

第三步: 我們再來組合對應的總體剛度矩陣

第四步: 帶入對應的邊界條件

這裏一定要注意,如果不設置dtype的話,整個array會默認爲全部元素爲字符串,下面根本無法進行計算。

第五步: 計算對應的未知量。

這裏要注意,力/位移關係滿足: F=KU; 那麼U中爲0的元素將不會對F中的內容有任何貢獻。那麼剩下的U中只有前兩個元素。而且我們要再來得到F中的前兩個元素,但是這裏邊U中有一個未知量,F中有一個未知量,所以我們無法通過矩陣的操作來實現方程組的求解。爲了能使本題採用矩陣的相乘法來得到未知量的值:

我們需要做以下處理: 因爲在排除掉U中的0元素之後,剩下的是兩個方程,由兩個方程來確定兩個未知量,是完全沒有問題的。

其對應的算法實現如下所示:

接下來便可以通過矩陣的方式來求解對應的未知量了。

然後再接下來,便將所計算出來的u寫入到原位移矩陣U中,然後再將通過原位移矩陣U,跟剛度矩陣K的乘積來得到力矩陣。

到此,要計算的位移矩陣和力矩陣便完全計算得到了,接下來便是可以來計算對應的局部座標系下的力。

到此,我們可以對比顯示的結果和書本中給出的例題的結果:

贊助一點錢.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章