问题描述
非线性稳态(与时间无关)问题在求解的过程中,有时收敛很慢。通常来说,模型中求解的控制方程本身,与求解变量相关的材料属性、载荷或边界条件等,都可能在模型中引入非线性。一般来说,多物理场耦合问题都是非线性的。针对线性问题,请参见知识库 1260:如何解决线性稳态模型不能求解的问题。本解答仅适用于非线性稳态模型。
解决方法
通常这类问题与用于求解非线性稳态模型的迭代算法有关。一般而言,该算法为牛顿法。也就是说,软件在求解时,求解器会从用户指定的初始值开始,计算所有与解相关的项。然后,软件计算一个初始解,并基于此迭代地重新计算解,同时分析这些中间解对非线性的影响。当逐次迭代之间求解结果的差值足够小,或者当残差足够小时,我们就可以认为该问题收敛到指定的容差。对于一个适定问题,初始值不当,非线性求解器无法通过重复迭代逼近解,或因网格不够细化而无法解析解的空间变化,都可能造成求解器收敛缓慢(或根本不收敛)。
初始值
在大多数物理场接口中,未知数的默认初始值均为零。“传热”接口是例外情况,其温度场的默认“初始值”为 293.15K 或 20℃。当初始值没有为这种迭代方法提供良好的起点时,收敛会很差。如果我们已知所求解变量的近似估值,则可以将其作为“初始值”框中的表达式输入。然而,除了一些传热问题外,我们通常很难获得所求解变量的近似估值,因此需要考虑使用替代方法。
载荷缓慢变化
一般来说,如果非线性系统的载荷为零,则该系统将处于静止状态,即,解为零。因此,如果施加的载荷非常小,那么初始值为零几乎总是合理的。如果施加的载荷足够小,非线性求解器从初始条件为零开始计算,将得到收敛解。也就是说,您可以先求解具有很小但非零载荷的模型。基于此,如果逐渐附加载荷增量,则先前计算的解就可以作为合理的初始条件。对这个逻辑进行扩展,如果您想要求解非线性系统中的任意载荷,则可求解一系列中间问题,在此过程中逐渐增加载荷值,并且每次都使用上一步的解作为下一步的初始条件。在软件中这可以通过连续法完成,当您使用辅助扫描研究扩展时,系统会默认启用此方法,如下所示。
“辅助扫描”可用于实现缓慢增加载荷和问题的非线性。
您可以引入一个全局参数(上面屏幕截图中的 P),并将其从接近 0 的值逐渐增加到 1。此参数在物理场接口中用于乘以一个、部分或所有外加载荷系数。
这种技术的优点体现在两个方面。首先,这种方法在物理上很直观,通常与人们进行实验的方式相符合。其次,如果找不到解,连续法将自动采用较小的载荷增量。例如,如果在递增 P
时采用以下值:0.2,0.4,0.6,0.8,1.0
,那么,当值为 0.8
时,非线性求解器可能无法收敛。在这种情况下,连续法将自动回溯并尝试求解 0.6
到 0.8
范围内的中间值。由于软件随后将返回可能的最大载荷工况估计值,此时求解器可以收敛,因此这种方法非常有用。
非线性斜坡变化
载荷斜坡变化技术并不总是适用于所有问题。在这种情况下,您可以使用相同的连续法,但改为使模型中的非线性呈斜坡变化。非线性与控制方程、材料非线性表达式或物理场之间的耦合项紧密相关。同样,您可以引入一个全局参数,使其从 0 逐渐增加到 1。使用此参数对模型中的非线性表达式进行修正。例如,存在温度相关的材料属性时,如:
k(T) = 10[W/m/K]*exp(-(T-293[K])/100[K])
您可以将其替换为以下表达式:
k(T,P) = 10[W/m/K]*((1-P)+P*exp(-(T-293[K])/100[K]))
当值为 P=0
时,上述表达式呈线性,值为 P=1
时,该表达式等于原始非线性表达式。随着 P 值的斜升,连续法会使用先前的解作为更多非线性情况的初始条件。如果您定义了这种非线性斜坡变化,使第一种情况 (P=0)
是一个纯线性问题,那么必然会得到斜坡变化中第一步的解。
对于模型中存在任何非线性项变化突然的情况,尤其适合使用非线性斜坡变化这一技术。在极端情况下,假设我们想要对属性的瞬时变化进行建模,比如:
k(T) = 10[W/m/K]+10[W/m/K]*(T>400[K])
也就是说,材料属性在 400K
时,从 10W/m/K
瞬间变为 20W/m/K
。由于这种材料属性的变化不平滑,因此这种情况通常难以求解,或不可能求解。此时,可以改用非线性材料属性表达式,从非常平滑的函数过渡为几乎不连续的函数。连续法将再次回溯并尝试求解斜坡参数的中间值,从而为可求解的突变提供最接近的值。
您可以将载荷和非线性的斜坡变化结合使用,但开始时只研究一个/几个载荷或非线性呈斜坡变化的情况。您可以检查求解器日志,查看连续法是否回溯。如果已回溯,请在该范围内使用更小的增量。
网格细化
如果采用载荷和非线性斜坡变化后,求解器仍然收敛缓慢,您可以尝试细化网格。有限元网格必须足够细化才能解析解场的空间变化。理想情况下,对于解在空间中快速变化的区域,我们可以使用小单元,而在其他区域使用较大的单元。但是,我们通常不可能提前知道这一点。因此,建议您使用自适应网格细化,此功能仅对有必要细化网格的区域自动执行网格细化,而在其他区域使用粗化网格。此外,您也可以手动细化网格。有关更多详细信息,请参见:执行网格细化研究。
网格细化通常可能需要与载荷或非线性的斜坡变化结合使用,并可能需要进行一系列研究,您可以首先对非线性斜坡变化使用相对粗化的网格,接着细化网格,然后再使细化的网格进一步产生斜坡变化。将非线性斜坡变化和自适应网格细化技术与多个研究步骤相结合的示例模型为: 金属冷却和凝固。
求解方法
您可以使用两种方法来迭代求解非线性方程组:全耦合或分离方法。前一种方法一次求解问题中的所有未知量,并在单次迭代中考虑所有未知量之间的所有耦合项。这种方法的计算成本相对较高,但收敛效果最佳。默认情况下,大多数一维、二维和二维轴对称模型都使用此方法。
另一种是分离法,可分别求解多组未知量。我们通常根据未知量所表示的物理场将其分成多个组,然后依次对这些组进行求解。也就是说,在每个外部牛顿型迭代中,分离法按顺序求解每个分离的组。因此,软件使用任何先前计算步骤中的解作为初始值和线性化点,将每个物理场作为单独的问题进行求解,其中忽略不同组之间的耦合项。尽管如此,分离法通常也能非常稳健地收敛(模型中的物理场之间存在强耦合的情况除外)。与全耦合方法相比,这种方法的内存需求始终更低,并且总的求解时间也往往更短。默认情况下,大多数三维多物理场模型都使用分离法,并且软件会自动将问题分成适当的组。
要在这两类求解器之间进行切换,请转到研究序列中的稳态求解器节点。该节点始终包含分离或全耦合特征。右键单击稳态求解器节点并添加分离或全耦合特征。在任一特征中,启用求解时显示结果选项(如下面的屏幕截图所示)也很有帮助,可以将求解期间进行的迭代可视化。
“全耦合”求解方法,其中已启用“求解时绘图”。
有时,您需要手动缩放因变量。请参见知识库 1240:手动设置变量的缩放比例。
您可以选择使用稳态求解器中的其他低级默认设置,从而增强稳定性。也就是说,通过调整这些设置,在尽可能多的情况下实现收敛。尽管在模型逐渐收敛时,您可以调整这些设置以减少求解时间和内存需求,但与结合使用本知识库中的其他技术相比,更改这些设置几乎没有优势。更改这些低级别设置的默认值通常与特定的模型和具体情况紧密相关。
模型检查的通用方法
如果您不清楚上述任何策略是否有效,可以采用更通用的方法来验证模型的一般有效性。这涉及系统性降低模型的复杂性。请检查模型并确定会引入非线性的所有项,例如多物理场耦合、非线性材料关系和非线性边界条件。您可以使用合理的线性化项替换任何非线性项,并对模型的每个非线性重复此操作。对于多物理场耦合,请勿使用全耦合方法(默认方法)求解问题,而是按顺序进行求解,即逐个求解各个物理场。这里的目标是将模型简化为可通过线性近似求解的状态。经过充分简化,您可以将模型降阶,将其转化为线性问题,如果简化模型不收敛,请参见:如何解决线性稳态模型不能求解的问题。
在找到简化模型的可求解版本后,再逐渐增加模型的复杂性,重新引入非线性和多物理场耦合。系统性地使用这种技术和前面描述的技术,通常可以确定模型中导致问题的非线性,不仅如此,还可以揭示模型本身在某种程度上是不适定的。有时,降低模型的复杂性可能是一项具有挑战性的任务,最好从尽可能简单的情况着手,然后逐渐增加复杂性。鉴于此,我们始终建议您使用简化的二维或二维轴对称模型开始此过程。
转换为瞬态公式
如果您已经尝试了上述所有方法,并确定问题本身是适定的,那么可以认为这个非线性问题实际上可能并没有稳态(时不变)解。一个经典的例子是圆柱体周围具有恒定高流速的流体流动。在低流速下,流动解是时不变的,但在较高的流率下,将发生涡脱落,这是圆柱体后方流场中发生的时变变化。此类问题必须在时域进行求解。
在这种情况下,从一致的初始值开始,使载荷随时间逐渐呈斜坡变化,这种方法将特别有用。随着时间的推移,非线性斜坡变化并没有那么明显,但在整个仿真过程中,应该对非线性阶跃变化进行平滑处理。您可以在整个仿真域中使用非常细化的网格,也可以使用自适应网格细化。
另请参见知识库 1254:控制瞬态求解器的时步。
COMSOL 尽一切合理的努力验证您在此页面上查看的信息。本页面提供的资源和文档仅供参考,COMSOL 对其有效性不作任何明示或暗示的声明。COMSOL 对所披露数据的准确性不承担任何法律责任。本文档中引用的任何商标均为其各自所有者的财产。有关完整的商标详细信息,请参阅产品手册。