# 3.5.3: 分析非线性WIP (Analyze Nonlinear WIP)

线性结构行为意味着如果改变外部载荷一个因子$$f$$，则物理响应量（位移、横截面力、应力等）也会因该因子而改变。令人满意的结果是可叠加不同荷载的影响。因此，没有必要为每种可能的外部荷载组合而重新计算模型。对于实际结构而言，线性行为的假设是一个近似值（在多数情况下都是一个很好的假设）。共有两种主要的非线性来源：

* 物理非线性：当材料超出线性弹性范围时起作用（例如，开裂的混凝土、折弯的钢材等）。
* 几何非线性：在以下情况下生效
  * 横向位移过大，以至于不能再忽略它们对轴向变形（例如，梁）或平面变形（如壳体的情况）的影响；
  * 节点旋转$$\alpha$$达到一定值，会使得$$\alpha$$和$$\tan(\alpha)$$之间的差异变得重要。

{% hint style="info" %}
**“Analyze Nonlinear WIP（分析非线性WIP）”**&#x8FD0;算器可以处理几何非线性。它处于运行中状态。这意味着，对于某些结构，特别是对于壳体，算法可能无法在可接受的时间内完成。但是，如果有结果反馈，则应该是正确的结果。
{% endhint %}

借&#x52A9;**“Analyze Nonlinear WIP（分析非线性WIP）”**&#x8FD0;算器，用户可以从三种迭代解决方案算法中进行选择。所有算法均有不同的收益和职能，我们将在下面分别进行解释。上述算法是基于小应变的假设，但考虑了任意的大位移。上述三种算法的目标都是找到一个外力和内力处于平衡的位移状态。从已知初始位移状态作为起始，用户必须推测结构在给定荷载下如何变形。通常在内力和外力不相匹配的情况下，这种推测会导致第二种位移状态，剩余的不平衡则构成了关于位移变化等下一个预测的基础。当残余力或位移变化降至给定阈值以下时，可达到平衡。**“Analyze Nonlinear WIP（分析非线性WIP）”**&#x8FD0;算器提供的三种算法在预测位移增量值的方式上略有不同。

## 动态松弛 (**Dynamic Relaxation)**

![Fig. 3.5.3.1：使用“分析非线性WIP”运算器的动态松弛方法选项计算在其尖端有弯矩荷载的悬臂梁的大位移。](https://2244769574-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M9XteyGDAU3Odla53cC%2Fsync%2Fd4bc9cefc2edf3ba85b60beb92ba695720ff013c.PNG?generation=1591871199283178\&alt=media)

图3.5.3.1显示了一个在其尖端处弯矩载荷围绕局部y轴的悬臂梁。它由20个梁元件组成。为了计算其响应，使用&#x4E86;**“DynamicRelaxation（动态松弛 ）”**&#x9009;项。该算法根据作用在每个节点上残余力的方向来预测结构的下一步运动。这是一个可靠的过程，可以相当可靠地收敛至平衡，但有时需要进行大量迭代。该运算器提供以下输入端口：

|                                   |                                                                                                                                                                                                                                                                                                                                                                 |
| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **"Model（**&#x6A21;&#x578B;**）"** | 需要被分析的结构。                                                                                                                                                                                                                                                                                                                                                       |
| **"nLoadSteps"**                  | 充当阶跃荷载的荷载工况数。默认值为1。从图2的设置可以看出，该算法从寻找荷载工况0的平衡开始。此后，保持荷载工况0的荷载不变，添加荷载工况1的荷载以达到最终阶段。这种做法允许对加载历史进行建模。剩余工况将在假设位移很小的情况下分别添加，直至最后阶段。在主动弯曲结构的情况下，第一荷载工况为引起结构变形的荷载工况，而其余荷载工况则构成了对结构变形产生影响的附加作用，例如，风荷载或活荷载。在仅作用于荷载&#x7684;**“ModelView（模型视图）”**&#x8FD0;算器的子菜&#x5355;**“Display Scales（显示比例）”**&#x4E2D;，位移的比例因子仅作用于假定位移较小的阶跃荷载。总位移中较大的变形份额不会缩放，以实际大小显示。                    |
| **"nLoadIncs"**                   | 每个荷载工况的增量数值（默认值为5）。外部荷载分为几个步骤。如果结构行为接近线性，则可将增量的数量设置为较小的值。对于高度非线性的问题，较大的值则可能更为有利。荷载增量越小，算法就越容易找到平衡。迭代次数通常随着加载步骤的增加而减少（从而减小步长）不过，如果将荷载步数设置为对于给定类型的结构行为而言过高的数值，则可能会降低其总体性能。                                                                                                                                                                                        |
| **"maxEquiIter"**                 | 设置每个荷载增量的最大平衡迭代次数，从而对计算时间的设置有所限制，其默认值为200。                                                                                                                                                                                                                                                                                                                      |
| **"EquiTol"**                     | 残余力和位移相对于其在当前阶跃荷载中增量变化的迭代变化公差。默认值为$$1E-7$$。                                                                                                                                                                                                                                                                                                                     |
| **"maxLimitIter"**                | 可以借助Karamba3D中动态松弛（DR）算法解决问题的范围仅限于稳定的结构。如果出现诸如屈曲或突弹跳变的现象，则可能存在超出初始不稳定点的平衡状态。不过，由于它们通常与最近已知稳定配置之间的距离较大，因此很难到达。在这种情况下，DR算法不会在最大平衡迭代次数内收敛至平衡状态。此后，它将通过荷载增量减半尝试在假定的不稳定性点上关闭，并将导致差异。通过这种运行方式，可以以任意精度计算确定所谓的极限荷载。默认情况下，**“maxLimitIter”**&#x5C06;极限荷载迭代次数的上限设置为200。遗憾的是，算法中的数值问题也同样会导致差异。因此，&#x7531;**“Analyze Nonlinear WIP（分析非线性WIP）”**&#x8FD0;算器所确定的极限荷载因子仅构成下限预估。 |
| **"LimitTol"**                    | 设置用于计算极限荷载的最小荷载增量。                                                                                                                                                                                                                                                                                                                                              |
| **"StepSizeFac"**                 | 用于缩放DR算法预测位移增量的因子。                                                                                                                                                                                                                                                                                                                                              |

在非线性计算期间可能会发生许多问题。为了了解为什么会出现问题和具体哪里出现了问题，**“DynamicRelaxation（动态松弛）”**&#x9009;项的DR变体会生成以下输出：

|                  |                                                                                                                                                                                                                                                                                                                               |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **"Model（模型）"**  | 具有计算的位移、应力和内力的结构。                                                                                                                                                                                                                                                                                                             |
| **"Disp（显示）"**   | 最大位移以厘米为单位。                                                                                                                                                                                                                                                                                                                   |
| **"Energy（能量）"** | 存储在结构中的变形能，其单位为 $$kN m$$。                                                                                                                                                                                                                                                                                                     |
| **"Info（信息）"**   | <p>有关解决方案过程的详细信息。共输出五列文本：</p><ul><li><strong>“Factor（系数）”</strong>: 当前阶跃荷载的荷载系数。</li><li><strong>“Step（步骤）”</strong>: 当前的阶跃荷载</li><li><strong>“Iter”</strong>: 计算当前荷载增量的迭代次数。</li><li><strong>“Disp.Err”</strong>: 输出当前荷载增量中节点位移的迭代变化总和与第一次迭代位移变化的比率。</li><li><strong>“Force.Err”</strong>: 输出残余力的迭代变化总和与当前荷载增量的比率。</li></ul> |
| **"Lambdas"**    | 告知相关可以达到平衡的荷载系数的信息。                                                                                                                                                                                                                                                                                                           |

## 牛顿-拉夫逊方法（亦称牛顿迭代法）(**Newton-Raphson Method)**

在实践中，动态松弛（DR）程序用于计算高度非线性问题，例如：汽车碰撞测试数值、螺栓射入墙面，其原因是，采用非线性效果作为DR代码相对容易。这种易于实施的代价是需要大量运算工作：必须通过多次迭代才能达到可接受的精度，最终达到平衡。解决的办法是投入更多的精力以期更好地预测位移增量。在DR方法中，节点处的残余力构成了预测节点下一个位置的基础。诸如Newton-Raphson-method（牛顿-拉夫逊方法）或Arc-Length-method（弧长法）之类的方法使用刚度矩阵来生成位移预测。在这些方法中，每次迭代的运算成本较高，但与DR方法相比，迭代次数可以减少很多。通过一致的刚度矩阵，可以在最优条件下实现平方收敛。这意味着对于迭代位移和力误差，小数点分隔符之后的零在每次迭代中都会倍增。对&#x4E8E;**“Analyze Nonlinear WIP (分析非线性WIP)”**&#x8FD0;算器来说，情况并非如此，这也&#x662F;**“work in progress（进行中）”**&#x6807;签的原因之一。有关牛顿-拉夫逊方法或是弧长方法的详细信息，请参见第102页的[\[6\]](https://manual-1-3.karamba3d.com/chinese_1_3_3/appendix/bibliography)及第214页其后。

![图3.5.3.2：使用“Analyze Nonlinear WIP（分析非线性WIP）”运算器中的Newton-Raphson方法选项。](https://2244769574-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M9XteyGDAU3Odla53cC%2Fsync%2F804129fe5be80f7fd271c12dc0f9c7c2a57a82e0.PNG?generation=1591871199233988\&alt=media)

图3.5.3.2显示了与以前相同的悬臂梁，这次使&#x7528;**“NewtonRaphson（牛顿-拉夫逊）”**&#x9009;项进行了分析。**“Analyze Nonlinear WIP（分析非线性WIP）”**&#x8FD0;算器的Newton-Rahpson（牛顿-拉夫逊）类型有着与DR版本几乎相同的输入端口和输出端口。唯一的区别是缺&#x5C11;**“StepSizeFac（步长系数）”**&#x8F93;入。由于Newton-Raphson（牛顿-拉夫逊）过程在不稳定结构方面与DR方法有着相同的局限性，因此，像以前一样，采用了将对极限点封闭间隔减半的策略。

## 弧长方法 (**Arc-Length Method)**

![图3.5.3.3：使用“Analyze Nonlinear WIP（分析非线性WIP）”运算器的“Arc-Length（弧长）”方法选项](https://2244769574-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M9XteyGDAU3Odla53cC%2Fsync%2F8f3995186a79b84773c1266aa97ff65f45250bb1.PNG?generation=1591871199492107\&alt=media)

对于许多结构而言，达到不稳定的第一点还远远没有结束。考虑到其屈曲后的行为，特别是薄板和壳体结构，会显示出大量的荷载储备能力。弧长方法可用于此类情况。图3.5.3.3显示了桁架结构从不稳定状态过渡到稳定的后屈曲状态的计算结果。

**“Arclength（弧长）”**&#x8FD0;算器的前两个输入与以前的含义相同。这里描述了其余的输入端口如何控制解决方案的过程：

|                      |                                                     |
| -------------------- | --------------------------------------------------- |
| **"IniLoadFac"**     | 外部荷载下结构的位移乘&#x4EE5;**“IniLoadFac”**，作为目标变形增量的第一估算值。 |
| **"MaxEquiIter"**    | 每个荷载增量的最大迭代次数。                                      |
| **"TargetEquiIter"** | 设置每个增量中要使用的增量数。用于按比例缩放荷载增量。                         |
| **"EquiTol"**        | 不平衡力和位移的公差从一次迭代到下一次迭代都会发生变化。                        |
| **"MaxLoadInc"**     | 最大加载迭代次数。                                           |
