跳转至

几何边界条件的处理

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\),移项不会改变右端项。通过这一限制,只需相对于全局节点数进行局部操作即可完成约束处理。

相关项目