首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

最基本的有限元計算程序:二維傳熱問題求解

     編輯:關於C++

問題描述

求解如下二維傳熱問題(參考《流體力學中的有限元方法》P156-165):

二維傳熱問題示意圖

求解流程

1. 區域離散化

  • 將計算域劃分為有限個三角形單元
  • 在單元邊界設置節點並編號
  • 計算節點坐標

2. 單元分析

控制方程:

控制方程

采用 Galerkin 弱形式:

Galerkin弱形式

選用三節點三角形單元,插值多項式:

插值多項式

代入節點坐標求得基函數:

基函數

其中:

係數定義1

係數定義2

單元近似函數:

近似函數

代入弱形式,利用基函數任意性得單元剛度矩陣:

單元剛度矩陣

記:

記號1

記號2

記號3

記號4

代入基函數具體表達式:

積分結果

經等參變換(詳見文獻 P201),對常數 p 情況:

等參變換結果

此處 A 為三角形面積。邊界項 g 均為 0,故不計算。

3. 整體分析與求解

  • 按集成規則組裝全局剛度矩陣與載荷向量
  • 施加位移邊界條件
  • 高斯消元法求解線性方程組,得節點溫度值

4. 程序實現

  • Fem1.cpp:直接計算積分值
  • Fem2.cpp:采用面積坐標插值函數,積分值取三角形面積 1/3,更通用
  • Fem3.cpp:求解題目 2

兩者結果一致,驗證了算法正確性。

網格劃分與結果可視化

四邊形區域網格劃分:

網格劃分

計算結果用 Matlab 可視化:

結果圖1 結果圖2

圖 2、3 為題 1 兩程序結果(視角不同),圖 4 為題 2 解:

題2結果

同框架還成功求解三角形、橢圓形區域問題。

致謝

感謝王旭教授在數學與計算上的悉心指導!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved