程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 一個最基本的有限元計算程序

一個最基本的有限元計算程序

編輯:關於C++

我們在學習有限元課程時做的另一個作業,用 C/C++ 編程求解了一個簡單的有限元問題,可以作為有限元學習的編程實例,以更好地理解有限元理論,並為進一步使用大型有限元軟件打下基礎。本文所涉及的有限元基本理論請參考章本照先生編著的《流體力學中的有限元方法》PP.156-165。

一、二維傳熱問題

如圖一所示:

圖一 二維傳熱問題

二、解題過程

1、對結構進行離散化,將待分析的結構物從幾何上用線或面劃分為有限個單元,按結構物的不同和分析要求,選取不同形式的單元,在單元的邊界上設置節點,並書寫編號。計算節點坐標

2、單元分析:設法導出單元的結點位移和結點力之間的關系,建立單元剛度矩陣。

單元剛度矩陣的計算:

對於方程

采用 Galerkin弱解表達式

(*)

這裡采用三節點的三角形單元,單元的基函數共有三個,選用插值多項式

分別代入單元三個節點的坐標可解得

其中

e單元中的近似函數為

(**)

將式(*)中的積分區域取為e單元的區域 ,並將單元中的近似函數表達式(**)代入,並注意到的任意性,可得

(***)

(****)

將單元基函數的具體表達式(*)代入(***)式中,可得

通過等參變換(具體見文獻1第201頁),可得

這裡指p為常數的情況,A為三角形單元的面積。

這裡g 均為0,所以此項不用計算。

3、整體分析(以求結點力為例)整體分析就是將各個單元組成結構整體進行分析。整體分析的目的在於導出整個結構結點位移與結點力之間的關系,建立整個結構的剛度方程。分析步驟:首先按著一定的集成規則,將各單元剛度矩陣集合成結構整體剛度矩陣,並將單元等效結點荷載集合成整體等效結點荷載列陣;然後引入結構的位移邊界條件,求解整體平衡方程組,得出基本未知量――結點位移列陣。

4、用選定的算法語言編寫出程序(C/C++),調試程序調用高斯消元法解方程的出結果。

附件程序Fem1.cpp計算了積分值,Fem2.cpp則采用了面積坐標下的插值函數,積分值取為三角形面積的三分之一。兩者結果相同,但是後者更為通用,可以把程序用於其他形狀的二維區域的有限元計算,Fem3.cpp計算了題2。

三.單元網格劃分

四邊形單元網格劃分單元網格劃分示意如圖一:

圖一

計算結果結果數據可視化如圖二、圖三。它們是題1分別用Fem1.cpp程序和Fem2.cpp程序計算結果的Matlab數據可視化圖,它們表現的數據基本一致,觀察視點不同。圖4是題2的解。

圖二               圖三

圖四

利用此程序的基本框架,我們還成功地解算了三角形、橢圓形區域的有限元問題。

最後感謝我們的老師----在數學和計算上具有深厚功力的王旭教授,感謝他對我們的悉心指導和熱情鼓勵!

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved