四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列

導讀:大家好,我是SimPC博士,主要從事工程結構抗震及減隔震研究,玻璃成型熱工設備流動及傳熱研究,玻璃材料力學性能研究。精通有限元等數值算法的實現,有限元軟件二次開發,數據處理,偏微分方程求解,優化算法,GUI界面開發等。有多項科研成果,其中SCI論文4篇,EI3篇,專利2篇。

近日我注冊并認證了技術鄰專欄,將在技術鄰官網和App給平臺用戶帶來Matlab有限元編程、復雜函數擬合和偏/常微分方程求解、隔震建筑Abaqus建模仿真分析等 相關內容。點擊試看《Matlab有限元編程從入門到精通》

本文的案例主要以受均布荷載和集中荷載的變截面懸臂梁為研究對象,通過matlab編制四節點和八節點四邊形單元有限元程序來對懸臂梁進行受力分析,提供對應有限元基本理論講解的同時展示相應代碼的實現技巧。

一、問題概述
如圖1-1 所示,某變截面懸臂梁長度為2m,截面面積由0.6m至0.2m線性變化,受作用在自由端節點的集中荷載2P=kN和豎直方向均布荷載q=1kN/m作用,按 平面應力問題分析,求解自由端節點撓度。變截面懸臂梁采用C30混凝土,彈性模量為E= 4 3 10 MPa,泊松比為。編制四節點和八節點四邊形單元有限元程序,最終得到梁的變形。
四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖1
圖1-1 變截面懸臂梁
二、求解思路
對于本問題采用基于MATLAB 編制有限元分析程序進行求解,其基本組成部分包括前處理模塊、分析主程序模塊和后處理模塊。在前處理模塊中,實現節點坐標輸入、單元節點編號、網絡劃分以及邊界條件輸入等工作;在分析主程序模塊中,求解整體剛度方程;在后處理模塊中,實現結果顯示、數據輸出等工作。本文主要針對四節點四邊形單元與八節點四邊形單元理論和對應的計算程序進行講解。
有限元法的基本步驟:
  1. 幾何域離散,獲得標準化的單元;

  2. 通過能量原理(虛功原理或最小勢能原理,獲得單元剛度方程;

  3. 單元的集成(裝配);

  4. 處理位移邊界條件;

  5. 計算支反力;

  6. 計算單元的其他物理量(應力應變)。

這幾步中, 最核心的內容是單元研究,具體包括:
  1. 節點描述

  2. 場描述

  3. 單元剛度方程。
接下來的內容主要以單元的描述為核心內容,結合 matlab代碼,為大家講解本案例 有限元matlab編程過程。  
1、平面問題的平衡方程、幾何方程、物理方程
平面問題的彈性力學基礎理論是推導有限元方程的基礎,所以先羅列出平面問題的平衡方程、幾何方程、物理方程,具體如公式(1)-(3)所示。至于這些方程的推導過程大家可以參考任意彈性力學課本,都會進行詳細的講解。
四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖2
2、等參單元
在有限元方法中,若要離散邊界為曲線或曲面的求解域,需要建立將形狀規則的單元變換為邊界為曲線或曲面的單元的方法,在有限元法中對應此問題所采用的變換方法是等參變換,即單元幾何形狀的變換和單元內長函數采用相同數目的節點及相同的插值函數進行變換。同樣我們今天要講的四邊形單元也從其對應的等參單元的基礎理論講起。
四邊形單元可以由自然坐標系中的矩形單元映射而成,映射關系如圖2-1所示。

四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖3

圖2-1 平面四節點矩形單元的映射關系

在自然坐標系下,矩形單元是規則化的,當自然坐標系中的單元取為雙線性單元時(也即為四節點四邊形單元),平面四節點矩形單元如圖2-2所示,單元有4個節點,8個自由度。單元的形函數定義如下:
四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖4 (4)
其中, 四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖5和  四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖6為自然坐標系下的節點坐標值。
單元從自然坐標系到物理坐標系的映射為

四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖7

在進行映射變換時候,要求單元兩個坐標系下的節點編號要對應。
單元的節點變量用型函數進行插值,有
四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖8                   (7)
function N=ShapeFun(s,t)            N1=1/4*(1-s)*(1-t);N2=1/4*(1 s)*(1-t);N3=1/4*(1 s)*(1 t);N4=1/4*(1-s)*(1 t);N=[N1 0 N2 0 N3 0 N4 0;0 N1 0 N2 0 N3 0 N4];end

同理平面八節點矩形單元如圖2-3所示,單元共有8個節點,16個自由度。單元的形函數定義如下:

四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖9    (8)
四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖10       (9)
四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖11   (10)
其中,  四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖12和  四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖13為自然坐標系下的節點坐標值。
單元從自然坐標系到物理坐標系的映射為
四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖14      (11)
四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖15        (12)
在進行映射變換時候,要求單元兩個坐標系下的節點編號要對應。
單元的節點變量用型函數進行插值,有
                            四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖16   (13)
function N=ShapeFun(s,t)            
%% 四邊形八結點等參單元形函數矩陣 % 角點N1=1/4*(1-s)*(1 t)*(-s t-1); N2=1/4*(1-s)*(1-t)*(-s-t-1); N3=1/4*(1 s)*(1-t)*(s-t-1); N4=1/4*(1 s)*(1 t)*(s t-1); % 邊中點 N5=1/2*(1-t^2)*(1-s); N7=1/2*(1-t^2)*(1 s); N6=1/2*(1-s^2)*(1-t); N8=1/2*(1-s^2)*(1 t); N=[N1 0 N2 0 N3 0 N4 0 N5 0 N6 0 N7 0 N8 0;0 N1 0 N2 0 N3 0 N4 0 N5 0 N6 0 N7 0 N8];

四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖17

圖2-2 平面四節點矩形單元

四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖18

圖2-3 平面四節點矩形單元
等參單元中除了完成如公式(5)(6)(10)(11)的坐標映射外,還需要完成坐標偏導數的映射和面積/體積的映射,因為在最終推導出的單元剛度矩陣表達式,即一個積分函數中會包含坐標的偏導項和坐標的面積積分項,如公式(x)所示,所以接下來我們研究坐標偏導項的映射關系。根據鏈式求導法則,形函數對自然坐標系的導數為
          四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖19     (14)
寫成矩陣的形式就是
     四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖20     (15)
其中,J被稱為Jacobi矩陣。反過來,形函數對物理坐標的導數為
                     四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖21         (16)
另外,對于二維平面單元還要完成面積的映射,為
        四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖22              (17)
可以看出Jacob矩陣在等參變化中扮演著至關重要的角色,Jacob矩陣具體的表達式如下所示,
      四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖23       (18)
公式18對應的八節點單元雅各比矩陣的求解代碼為:
function J=Jacobi(ie,s,t,Elements,Nodes)            ENodes = Elements(ie,:);                 %獲取單元結點 xe = Nodes(ENodes(:),:);                 %獲取節點坐標 x1=xe(1,1);y1=xe(1,2); x2=xe(2,1);y2=xe(2,2); x3=xe(3,1);y3=xe(3,2); x4=xe(4,1);y4=xe(4,2); J=1/4*[-(1 t) -(1-t) 1-t 1 t;1-s -(1-s) -(1 s) 1 s]*[x1 y1;x2 y2;x3 y3;x4 y4];end
公式18對應的四節點單元雅各比矩陣的求解代碼為:
function J=Jacobi(ie,kesi,yita,Elements,Nodes)            ENodes = Elements(ie,:);                 %獲取單元結點 xe = Nodes(ENodes(:),:);                 %獲取結點坐標 x1=xe(1,1);y1=xe(1,2); x2=xe(2,1);y2=xe(2,2); x3=xe(3,1);y3=xe(3,2); x4=xe(4,1);y4=xe(4,2); J=1/4*[-(1-yita),(1-yita),(1 yita),-(1 yita);-(1-kesi),-(1 kesi),(1 kesi),(1-kesi)]*[x1 y1;x2 y2;x3 y3;x4 y4];end
3、剛度矩陣的推導

為了求出上述平面四節點和八節點單元的單元剛度矩陣,需要借助能量原理(虛功原理、最小勢能原理)進行推導,能量原理的推導過程大家可以參考任意一本有限元理論書籍,都會有詳細的推導過程,這里就不做進一步推導講解,直接給出物理坐標和幾何坐標系下的剛度矩陣的公式

四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖24   (19)

四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖25   (20)

其中B矩陣為應變矩陣,如下式;D矩陣為材料剛度矩陣,如公式(1)所示,是物理方程中表征應力應變關系的矩陣。從上述剛度矩陣的表達式可以看出,自然坐標和物理坐標間要完成坐標映射、偏導映射、面積隱射三個部分,具體映射公式已在上一節的等參單元講解中詳細給出。

                 四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖26        (21)

4、高斯積分

公式(20)中的單元剛度矩陣通過數值積分求得,本案例中的四節點和八節點四邊形等參單元均采用2*2個積分點的高斯積分即可求得精確結果。高斯積分點的坐標具體如圖所示。

四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖27

4-1 Gauss積分點示意圖

公式(20)寫成數值積分的形式為

        四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖28        (22)

對于8節點單元實現上述數值積分的代碼如下所示:

r = [-sqrt(1/3) sqrt(1/3)];             % 2*2 高斯積分點 s = [r(1) r(1) r(2) r(2)]; t = [r(2) r(1) r(1) r(2)];              % 高斯積分點坐標for i=1:4         J = Jacobi(E_ID,s(i),t(i),Elements,Nodes);             % 雅可比矩陣         Nst = DiffShapeFun(s(i),t(i));        % 形函數關于自然坐標s,t求導         Nxy = zeros(8,2);         for j=1:8           Nxy(j,:) = (J\Nst(j,:)')';             % 形函數關于 x,y 求導=inv(J)*Nst         end         Bm = [Nxy(1,1) 0 Nxy(2,1) 0 Nxy(3,1) 0 Nxy(4,1) 0 Nxy(5,1) 0 Nxy(6,1) 0 Nxy(7,1) 0 Nxy(8,1) 0;             0 Nxy(1,2) 0 Nxy(2,2) 0 Nxy(3,2) 0 Nxy(4,2) 0 Nxy(5,2) 0 Nxy(6,2) 0 Nxy(7,2) 0 Nxy(8,2);             Nxy(1,2) Nxy(1,1) Nxy(2,2) Nxy(2,1) Nxy(3,2) Nxy(3,1) Nxy(4,2) Nxy(4,1) Nxy(5,2) Nxy(5,1) Nxy(6,2) Nxy(6,1) Nxy(7,2) Nxy(7,1) Nxy(8,2) Nxy(8,1)];         ke = ke det(J)*Bm'*D*Bm*Width;  %數值積分  end

5、均布荷載的施加

在有限元中分布力要轉為等效節點荷載,而確定等效節點荷載的方法也是通過能量原理推導得到

           四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖29       (22)

上式中,第一項代表體積力的等效荷載,第二項代表面積力的等效荷載,這個案例我們只考慮面力荷載。實現公式22的代碼為

function Pe=UniLoad(ie,N_ID_p1,q0,Nodes,Elements)     k=-0.625e-3;                            % 均布荷載值 N/mms = [-sqrt(1/3) sqrt(1/3)];                 % 2*2 高斯積分點ENodes = N_ID_p1(ie,:);                    %獲取單元結點號Pe=zeros(16,1);                          %生成臨時單元節點力零列向量x1=Nodes(ENodes(1),1);x6=Nodes(ENodes(4),1);L16=abs(x6-x1);                          %單元長度for i=1:2                                 %用于高斯積分的求和循環    N_q=ShapeFun(s(i),1);                   % 4級子程序:ShapeFun(s(i),1)    q_x=q0;    Pe=Pe N_q'*q_x*[0;L16/2];            endend

三、Matlab有限元編程精品課

網格劃分及變形結果如圖3-1所示。本案例的詳細視頻教程和對應的matlab源碼,請關注我的技術鄰官網和APP精品課程《Matlab有限元編程從入門到精通10講》,點擊試看《Matlab有限元編程從入門到精通》

四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖30

圖3-1 梁變形結果

此外,為幫助大家更好的入門學習Matlab有限元編程分析能力,筆者準備了了一些有限元編程書籍資料供大家下載。歡迎大家直接在附件下載。另外本人推出《Matlab有限元編程從入門到精通》視頻教學課程。點擊試看《Matlab有限元編程從入門到精通》

四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖31有限元資料網盤鏈接.txt

四節點/八節點四邊形單元懸臂梁的Matlab有限元編程——《Matlab有限元編程從入門到精通》系列的圖32

點擊試看《Matlab有限元編程從入門到精通》

本課程為matlab有限元編程專題課,課程主要以案例的形式進行講解,中間會穿插案例中所涉及到的有限元基本理論,案例不局限于力學問題的有限元求解,還會涉及傳熱學、電學等問題的有限元求解。

因為固體力學領域我最熟悉,所以我們從固體力學開始,所涉及的單元有桿單元,梁單元,平面三角形單元,薄板單元,厚板單元,四面體實體單元等等,力學問題有靜力學問題,也有動力學問題,后期還會涉及材料非線性、幾何非線性、接觸非線性等非線性問題,內容豐富,不斷更新完善。

此外,筆者為所有訂閱用戶提供知識圈答疑服務和VIP用戶交流群。并附贈課程相關資料等(平臺支持自行開具電子發票)。

1、你將學到  
  • 快速獲得各典型有限元案例的 Matlab代碼
  • 學習并掌握有限元基礎理論;
  • 掌握Matlab編程實現有限元算法的流程;
  • 掌握多種有限元單元的基本理論Matlab編程實現過程;
  • 掌握靜力學、動力學、材料非線性、幾何非線性、接觸非線性問題的Matlab編程實現;
  • 為訂閱用戶提供知識圈答疑服務,并建立VIP用戶交流群,后續可根據訂閱用戶需求進行加餐直播。此外還提供課程對應的學習資料模型一份。

2、適合哪些人學習  
  • 理工科院校學生和教師;

  • 學習型仿真設計工程師;

  • Matlab有限元編程興趣愛好者和應用者。

作者:SimPC博士   
登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

8
2
14