天天看點

有限元 fem 與 有限差分 fdm 在處理Dirichlet 自然邊界時的比較

      why it cares?  

      2D Laplacian equation, soved by FEM & FDM

      u,xx + u,yy = 0

     有限元方法:

        任意一個節點必屬于某個單元,不管該節點處于邊界還是内部區域。是以邊界節點和内部節點,從運算格式上講,是同等考慮的。但,考慮Dirichlet邊界條件,邊界節點的位移已知。有限元采用 “劃行劃列”,将已知的自由度從總體矩陣中剔除。保留所有未知自由度,求解。

        ps, 對于大型矩陣,“從總體剛度矩陣中剔除行列”,導緻矩陣resize并不實用。更好的解決是對已知自由度對應的剛度值乘以非常大的罰系數,來大大降低非主元的影響。

   有限差分方法:

         比如采取5點格式,那麼内部節點都執行了這個格式的計算,而邊界節點并不構成5點格式,沒有做這個格式計算。是以,從運算格式上講,内部節點與邊界節點是不等同的。會發現,差分格式得到的剛度矩陣各個方向上自由度個數比系統離散在各個方向上布置的節點個數少2。

 那麼,邊界上已知的位移資訊是如何傳入内部區域的呢?  

         方法一: 将邊界自由度加入剛度矩陣,那麼矩陣各個方向上自由度個數等于節點個數,很好,跟有限元(沒有剔除行列之前的)總體矩陣緯度一緻。矩陣不會是以變奇異,因為隻在矩陣對角線增加了正數(1)。 

         會發現這個樣子,就是有限元處理Dirichlet邊界條件的罰系數方法。不過,好像沒有誰喜歡把低緯度的矩陣擴充到高緯度,如果有更簡單的方法。

         方法二: 修改使用了邊界自由度資訊的節點的右端項,即将該邊界自由度資訊乘以相應的權值後,放到右端去。這樣矩陣的形狀不變。

        這個樣子,跟有限元“劃行劃列”的思想一緻了。

        總結: 對問題采用相同的離散(相同節點數),有限元方法産生的矩陣緯度與總節點數相同(采用罰系數);而有限差分方法生成的矩陣,隻包括内部節點。 而且這個矩陣仍然是對角占有的正定陣,故解的唯一性有保證。

         實際中,計算pde數值解的另一個問題:存儲 與 節點編号。 d緯(每個緯度采用n個自由度)的帶狀剛度矩陣存儲 : n^2 * bandwidth。 bandwidth changes from O(const)  to  O(n^2), that's a big difference. 

        e.g. the extremely worst case with n = 100;  K storage needs 100 million double bit. that's fuck~  

        Maybe later ~