跳轉至

幾何邊界條件的處理

Newton-Raphson 法在每次反覆中求解的線性方程式 \(\boldsymbol{K} d\boldsymbol{u} = \boldsymbol{R}\),尚未納入幾何邊界條件(位移約束)。本章說明對施加位移約束 \(\boldsymbol{u} = \bar{\boldsymbol{u}}\) 的自由度,應如何修改剛度矩陣 \(\boldsymbol{K}\) 與殘差向量 \(\boldsymbol{R}\),使反覆後的位移達到約束值。多點約束(MPC)及接觸所伴隨的非線性約束採用不同系統處理,請參閱多點約束接觸

將位移約束保留為未知變數的方針

施加幾何邊界條件之節點的位移已不再是未知變數,而是固定為指定值 \(\bar{u}_i\)。也可以將這些自由度視為常數,從線性方程式 \(\boldsymbol{K} d\boldsymbol{u} = \boldsymbol{R}\) 中消去;然而 FrontISTR 的作法是仍將約束自由度與其他自由度一樣保留在修正量向量 \(d\boldsymbol{u}\) 中,改寫 \(\boldsymbol{K}\)\(\boldsymbol{R}\) 來實現約束。

此方式中,係數矩陣的維度與自由度排列不會因有無約束而改變,因此不需要在消去變數後重新壓縮空出的行與列。對以稀疏矩陣形式保存係數矩陣的實作而言,這類重新壓縮相當繁瑣,因此 FrontISTR 採用後者,也就是僅更新係數矩陣與右端向量來達成約束。

Newton-Raphson 修正量的置換目標

對位移受約束的自由度 \(i\),Newton-Raphson 反覆中所求得的修正量 \(du_i\)

\[ du_i = d\bar{u}_i \equiv \begin{cases} \bar{u}_i & (\text{第 1 次反覆}) \\ 0 & (\text{第 2 次反覆以後}) \end{cases} \]

修改 \(\boldsymbol{K}\)\(\boldsymbol{R}\),使修正量成為上述值。如此一來,在第 1 次反覆時位移增量即達到約束值 \(\bar{u}_i\),而自第 2 次反覆起修正量為 \(0\),因此可維持約束值。

矩陣與殘差向量的變形程序

前節的置換目標可在保持線性方程式 \(\boldsymbol{K} d\boldsymbol{u} = \boldsymbol{R}\) 形式不變的情況下,透過以下兩項變形達成。

  1. 將第 \(i\) 行對角化:把 \(du_i\) 的係數,即對角項 \(K_{ii}\) 替換為 \(1\),其餘所有係數 \(K_{ij}\ (j \not= i)\) 替換為 \(0\),並將右端設為 \(R_i \to d\bar{u}_i\)。如此第 \(i\) 行方程式便成為 \(du_i = d\bar{u}_i\)
  2. 由第 \(j(\not= i)\) 行移項:對第 \(j(\not= i)\) 行,若 \(K_{ji} \not= 0\),則將 \(K_{ji} du_i = K_{ji} d\bar{u}_i\) 一項移至右端。也就是從右端減去 \(K_{ji} d\bar{u}_i\),並將 \(du_i\) 的係數 \(K_{ji}\) 設為 \(0\)

以分量形式表示,變形前後的方程式對應如下。

\[ \begin{bmatrix} K_{11} & K_{12} & \cdots & K_{1i} & \cdots & K_{1N} \\ K_{21} & K_{22} & \cdots & K_{2i} & \cdots & K_{2N} \\ \vdots & \vdots & \ddots & \vdots & & \vdots \\ K_{i1} & K_{i2} & \cdots & K_{ii} & \cdots & K_{iN} \\ \vdots & \vdots & & \vdots & \ddots & \vdots \\ K_{N1} & K_{N2} & \cdots & K_{Ni} & \cdots & K_{NN} \\ \end{bmatrix} \begin{bmatrix} du_1 \\ du_2 \\ \vdots \\ du_i \\ \vdots \\ du_N \end{bmatrix} = \begin{bmatrix} R_1 \\ R_2 \\ \vdots \\ R_i \\ \vdots \\ R_N \end{bmatrix} \]
\[ \Longrightarrow \quad \begin{bmatrix} K_{11} & K_{12} & \cdots & 0 & \cdots & K_{1N} \\ K_{21} & K_{22} & \cdots & 0 & \cdots & K_{2N} \\ \vdots & \vdots & \ddots & \vdots & & \vdots \\ 0 & 0 & \cdots & 1 & \cdots & 0 \\ \vdots & \vdots & & \vdots & \ddots & \vdots \\ K_{N1} & K_{N2} & \cdots & 0 & \cdots & K_{NN} \\ \end{bmatrix} \begin{bmatrix} du_1 \\ du_2 \\ \vdots \\ du_i \\ \vdots \\ du_N \end{bmatrix} = \begin{bmatrix} R_1 - K_{1i} d\bar{u}_i \\ R_2 - K_{2i} d\bar{u}_i \\ \vdots \\ d\bar{u}_i \\ \vdots \\ R_N - K_{Ni} d\bar{u}_i \\ \end{bmatrix} \]

將變形後的係數矩陣與右端分別記為 \(\tilde{\boldsymbol{K}}, \tilde{\boldsymbol{R}}\),則最終應求解的線性方程式為

\[ \tilde{\boldsymbol{K}}\, d\boldsymbol{u} = \tilde{\boldsymbol{R}} \]

若存在多個受約束自由度,則對每個受約束自由度 \(i\) 依序套用上述變形 1、2。

稀疏矩陣實作中的處理範圍

在實作中,係數矩陣 \(\boldsymbol{K}\) 以稀疏矩陣形式保存,因此前節程序 2 對第 \(j(\not= i)\) 行的處理,只會執行於第 \(i\) 欄具有非零分量的行,也就是透過元素與受約束自由度 \(i\) 相連之節點的自由度。對未連結的自由度而言 \(K_{ji} = 0\),移項並不會改變右端。藉由此限制,相對於總節點數,只需局部操作即可完成約束處理。

相關項目