平台: 所有平台 版本: 所有版本

问题描述

当我查看瞬态模型的“求解器日志”时,看到NLFail列包含非零条目:

Step Time Stepsize Res Jac Sol Order Tfail NLfail LinErr LinRes
0 0 -out 2 3 2 0 8e-14 3.5e-15
1 0.1 0.1 11 5 11 1 0 1 2.6e-16 2.4e-16
... ... ... ... ... ... ... ... ... ... ...

这是什么意思?

我在求解瞬态模型时,收到类似如下的错误消息:

非线性求解器不收敛。
达到最大牛顿迭代次数。
时间:0.15582918651998362
最后一个时步不收敛。

我可以对求解器设置做哪些更改来解决这个问题?

解决方法

瞬态求解器通过一组基于牛顿法的迭代技术在每个时步对可能呈非线性的方程组进行求解。如果这些迭代技术在任意时步失败,则NLFail列中的数值将递增。这些用于求解非线性方程组的牛顿法技术在每个时步计算函数及其导数。此导数也称为雅可比矩阵,其计算量相对较大。因此,默认情况下,软件会尽量减少重新计算雅可比矩阵的次数。如果非线性求解器难以收敛,它将减小所请求的时步并尝试计算解。当时步减小时,Tfail列中的数值会递增。如果解场随时间快速变化,那么这是一种很好的方法。

但是,如果模型具有很强的非线性,那么这可能会是一种次优方法,或者可能根本不起作用。之所以产生这种非线性,可能是因为材料属性随解发生变化,也可能是反馈方程引起的,例如,在使用电流物理场接口中的电流功率类型的终端条件时会涉及这类方程。

为了求解强非线性模型,一个可行的解决办法是,在非线性求解器尝试在每个时步计算解的每次迭代中更新雅可比矩阵。为此,您可以展开研究设置并转到瞬态求解器分支下的全耦合子特征,然后定位到方法和终止栏。将雅可比矩阵更新:改为在每次迭代中,以替代最小,如下所示。完成此更改通常就足够了。

全耦合设置

“全耦合”特征中已修改的设置。

但有时,每个时步的非线性问题具有强非线性,即使采用牛顿法(更新雅可比矩阵)仍然无法收敛。下一个要更改的设置是最大迭代次数,其默认值为4。将该值增加到25或更大的值。接下来,调整容差因子:设置。其默认值1表示使用相对容差设置,如瞬态研究步骤中指定的那样。相对容差的默认值为0.01,其实际值为容差因子:乘以此数值,即:在本例中,将容差因子:设为0.1可以得到这个非线性问题在每个时步的相对容差为0.001。这意味着,当您收紧瞬态求解器的相对容差设置时,通常可以放宽容差因子。

如果模型仍未收敛,您可以将非线性方法:设置从恒定(牛顿)改为自动(牛顿),后者可以实现阻尼牛顿法。此方法会自动更新雅可比矩阵并使用动态阻尼项,因此需要更多的计算资源。自动高度非线性(牛顿)与此类似,但开始时具有更多阻尼,因而求解速度更慢,但更可能收敛。

默认情况下,模型可能使用分离法。在求解多物理场问题时常常是这样,由于强非线性往往只会影响模型中的一个物理场,所以使用这种方法通常是合理的。在分离式求解器中,每个分离步表示不同物理场的解,并单独进行求解,求解时会使用牛顿法的一些变体。您可以按如上所述进行类似修改,因为这是由存在的非线性所驱动的,所以只能对一个分离步进行修改。也就是说,如果只有一个物理场存在材料或反馈非线性,您可能只需修改该物理场的设置,如下面的屏幕截图所示。

“分离步”特征中已修改的设置。

如果您正在求解多物理场问题并怀疑物理场之间存在很强的非线性,则可以从分离法切换到全耦合方法,如知识库 1258:理解“全耦合”与“分离”求解方法之间的区别中所述。您可能仍需要按之前所述调整设置。

如果您在求解器日志中观察到的主要是Tfail列的数值经常递增,可以在时间步进设置中启用非线性控制器,如下面的屏幕截图所示。此设置将在向后差分公式法中实现更有效的时步控制,尤其适用于高度非线性模型。请注意,即使对于不含非线性的模型,Tfail列中的数值也会递增,在这种情况下,最好收紧求解器的相对容差。

启用非线性控制器。

最后请记住,为了验证模型的精度,您总是需要执行相对容差细化研究和网格细化研究,分别如知识库 1254:控制瞬态求解器的时间步长知识库 1261:执行网格细化研究中所述。

Baidu
map