有限元素法與有限體積法

矩陣組裝(matrix assembly)

砌一道石牆時,你不會雕出一整塊巨石——你會塑出許多小磚,把它們交疊並在接縫處咬合鋪好。有限元素法以同樣的方式建造它那巨大的全域矩陣:它從不一次算出整個剛度矩陣。它反而為每個元素分別算出一個小矩陣,再把每個元素的貢獻「加」進大矩陣中正確的位置。這種累加就是組裝。

用樸素的步驟說明這個迴圈。對每個元素,你算出一個小小的元素矩陣——對一個三節點的三角形而言是一個 3 乘 3 的剛度矩陣——做法是只在那一個元素上對形狀函數積分(通常用數值求積)。元素的每個局部節點編號對應到一個全域節點編號;這份「連結性」告訴你那 9 個元素各自該放進全域矩陣的哪裡。然後你把局部元素「加」進(而非覆寫)那些全域位置:K_global[I][J] += k_element[i][j]。因為被數個元素共用的節點會從每個元素各收到一份貢獻,這些加法逐片正確地累加出完整的積分。荷載向量 F 也以同樣方式組裝。

組裝正是有限元素能擴展、又如此有彈性的原因。它純粹是局部的——每個元素獨立處理,除了知道自己的節點在全域的位置外,對其他元素一無所知——這使組裝天然可平行化,且所得矩陣自動稀疏(只有同元素的節點才會互動)。誠實的微妙之處在於記帳:連結性表、局部對全域的節點對應,以及一致的定向都必須完全正確,因為單一個對應錯的索引就會無聲地污染整個方程組。實務上會用壓縮格式儲存稀疏矩陣,並用 scatter-add 寫入預先配置的結構以保持組裝快速。

一根 2 個元素的一維桿有節點 1-2-3。元素 A(節點 1,2)把它的 2x2 矩陣貢獻進列/行 {1,2};元素 B(節點 2,3)進 {2,3}。節點 2 被共用,所以 K[2][2] 從「兩個」元素各收到一份貢獻,加總為 (1/h) tridiag(-1,2,-1) 中央的「2」。共用節點處的這種重疊正是組裝的核心。

共用節點累加每一個碰到它的元素所給的貢獻。

組裝是把貢獻「加」進共用節點的元素中,絕不覆寫。錯誤的局部對全域索引對應會產生一個看似合理卻無聲錯誤的方程組——連結性記帳是有限元素法最常見的錯誤來源。

又稱
element assemblyglobal assemblyscatter-add組合組裝