学习中心

求解初始值不一致的瞬态模型


在 COMSOL Multiphysics® 中求解瞬态(随时间变化的)研究时,需要对模型进行设置,使初始条件与载荷和边界条件相一致。这一点对于任何瞬态模型都很重要,尤其是研究瞬态流体流动时。本文我们将解释这种一致性的重要性,它对模型的影响,以及当初始值不一致时求解瞬态模型方程的不同方法。

背景介绍

我们将通过一个示例来说明为什么模型的初始值必须与载荷和边界条件保持一致。下图是一个简单的 流体流动模型, 它由一个长 3 m、宽 1 m 的二维通道组成,左边界为入口,右边界为出口。我们的目标是求解流体在通道中的层流。流体密度为 1 kg/m3 ,黏度为 0.01 Pa·s,指定入口处流速为 1 m/s,在出口处施加零压力的边界条件。

A diagram of laminar fluid flow through a channel from left to right, with a label on the left that says, "Normal inflow velocity u=1," a label on the right that says, "Outlet p=0," and an initial values label that says, "u=0." 一个流体流动示例模型的示意图。

上述边界条件导致入口处流体的速度值(u = 1 m/s)与通道中的速度初始值(u = 0 m/s)不匹配,称为 初始值不一致

A screenshot of the COMSOL Multiphysics UI showing the settings for the sample model's Inlet boundary condition. A screenshot of the COMSOL Multiphysics UI showing the settings for the sample model's Inlet boundary condition. 示例模型在软件中的设置页面,显示了入口边界条件的设置。


A screenshot of the COMSOL Multiphysics UI showing the default settings for the Initial Values node. A screenshot of the COMSOL Multiphysics UI showing the default settings for the Initial Values node. 含默认设置的默认 初始值 节点。


当模型的初始值不一致时,你可能会发现求解器的时间步长非常小,或者软件会结束计算并报告类似下面的错误信息:

Failed to find consistent initial values.
Last time step is not converged.

A screenshot of a Time-Dependent Solver error message that says, "Failed to find consistent initial values. Last time step is not converged.
错误信息说明了导致模型计算无法完成的错误原因。

COMSOL Multiphysics® 软件在默认情况下会尝试使用后向欧拉法,即采取一个小的时间步长(初始时间步长的一小部分)来调节不一致的初始值。默认情况下,初始时间步长由总模拟时间跨度确定。不过,也可以 指定初始时间步长 并通过后向欧拉法,即后向微分公式(BDF)法,更改初始步长的一部分来一致初始化。这些设置将影响一致初始化程序的结果。

A screenshot of the COMSOL Multiphysics Settings window for a Time-Dependent Solver, with the default initial step, consistent initialization, and fraction of initial step for backward Euler settings outlined in red.
设置 窗口显示 瞬态 求解器的默认设置。

如果后向欧拉步长过大,或者模型中的边界条件相互不一致,又或者模型中的物理场条件不一致,一致初始化可能会失败。更常见的情况是,结果可能与预期相差甚远,求解器很可能需要在模拟开始时采取很小的时间步长从初始解演化。这种情况并不可取,因为它会导致求解时间过长。

在很多情况下,这种一致初始化并不是严格需要的,最好是将其关闭以确保你的模型从一致的初始值平稳地增加所有载荷和边界条件。本文将介绍两种方法。对于计算初始值不一致的瞬态模型,我们推荐使用以下方法:

  1. 使用 稳态研究 初始化瞬态研究
  2. 逐渐提高边界条件

请注意,如果你的边界条件确实不一致,那么本文介绍的解决方案将不适用。请务必仔细检查模型中的载荷和边界条件是否一致,我们在此概述的建议仅适用于假设良好的问题,因此你的模型必须首先满足这一要求。

方法 1:使用稳态研究初始化瞬态研究

求解初始值不一致的瞬态模型,可以采用的第一种方法是用稳态研究来初始化瞬态研究。接下来,我们来介绍几种实现方法。

使用多个步骤

一个研究可以包括多个研究步骤。默认情况下,每个研究步骤的结果都会作为初始值传递给下一个研究步骤。如果在 瞬态 研究步骤之前添加了 稳态 研究步骤,后者将首先求解稳态假设下的场,然后使用这些计算结果为 瞬态 研究步骤提供一致的初始值,并替代物理场接口中 初始值 节点内指定的初始值。如下面屏幕截图所示,只要这两个步骤在同一研究中,就无需进行其他更改。求解时,两个步骤都将重新计算。

A screenshot of the COMSOL Multiphysics UI showing a stationary study step preceding a time-dependent study step in the model tree.
稳态 研究步骤用于计算瞬态研究步骤的初始值。

您可以下载本文随附的流体流动案例模型文件,自己动手尝试多个步骤方法。

使用多个研究

因变量值的设置部分

也可以将求解分成两个独立的研究,这样,稳态瞬态 研究步骤就会分别被添加到两个不同的研究中。这种设置要求将 瞬态 研究步骤设置中的 因变量值 设置为引用稳态研究的结果,如下面屏幕截图所示。

A screenshot of the COMSOL Multiphysics UI showing the initial values in the Settings window for a Time Dependent study step that has been added under a second study after an initial stationary study has been implemented.
瞬态研究步骤节点被设置为使用之前稳态研究计算的结果作为初始值。

您可以下载 此模型,探索如何在流体流动模型中应用这种方法。

虽然这种策略可行,但它也有一些缺点:

  1. 首先,根据模拟问题的不同,可能不存在稳态解。这在接近湍流起始点的流体流动模型中尤为常见,因为稳定的边界条件可能会导致非稳定(时变)流场。还有一种情况是,在数值上很难找到模型的稳态解。了解如何求解这类问题,请参阅这篇讨论如何 改善非线性稳态模型的收敛性 的文章。
  2. 其次,瞬态模型的目标可能是研究系统从静止状态演变时的启动行为。

无论是这两种情况中的哪一种,都可以使用后面会介绍的第二种方法。

使用 withsol 算子

将仿真计算拆分为两个独立的研究时,另一种引用稳态研究结果的方法是使用 withsol 算子。通过 withsol 算子,你可以从一项研究中提取解并将其作为另一个研究的输入,这等同于上一节中已经讨论过的在研究步骤设置节点的 因变量值 栏进行更改。

初始值 节点中,我们可以输入适当的语法来使用 withsol 算子,格式为: withsol('tag',expr)。 对于拆分开的研究, 'tag' 是指输入类似于 'sol1' 的标记引用稳态研究的求解器序列,而对于 expr, 我们输入适当的物理变量(例如流体流速场 x 分量uy 分量v ,以及压力 p)。

A screenshot of the COMSOL Multiphysics UI showing the withsol operator in the settings of the Initial Values node.
初始值节点的设置,其中 withsol 算子用于引用稳态研究的解。

更多关于 使用 withsol 算子的示例 的详细信息,请参阅学习中心关于这个主题的文章。

方法 2:随时间逐渐增加边界条件

在计算初始值不一致的瞬态模型时,可以使用的第二种方法是随时间逐渐增加模型中的载荷和边界条件。

瞬态模型中的载荷和边界条件可以从与初始值一致的值开始逐渐增加,最常见的情况是初始值处处为零的处于平衡状态的系统。COMSOL Multiphysics® 软件包含多个内置函数,你可以使用这些函数将这些初始值过渡到其他值。在本示例中,我们使用带有平滑功能的内置阶跃(Step)函数,如下图所示。

A screenshot of the COMSOL Multiphysics UI showing the Step function settings with smoothing and a function plot that shows the ramp up from the initial values. A screenshot of the COMSOL Multiphysics UI showing the Step function settings with smoothing and a function plot that shows the ramp up from the initial values.
平滑 阶跃 函数的设置。


这篇 讨论阶跃过渡建模的文章中,还有其他一些函数也包含 平滑 选项。默认情况下,在平滑区的起点,所有这些函数的时间导数都为零,这很有帮助,因为这样不会出现突然的阶跃或变化,从而可以实现渐进过渡。

我们可以使用平滑 阶跃 函数来修改瞬态流体流动模型的载荷和边界条件,如下图所示。相应的模型文件可在 此处 下载。

A screenshot of the COMSOL Multiphysics UI showing the Settings window and a function plot of the smoothed Step function. A screenshot of the COMSOL Multiphysics UI showing the Settings window and a function plot of the smoothed Step function.
平滑 阶跃 函数用于逐渐增加边界条件。


在对模型进行研究时,您需要选择一个符合当前问题实际情况的平滑时间跨度。不过,与其使用符合物理实际的平滑方法,不如采用非常缓慢的斜坡法,因为这样可能更容易求解问题。

A screenshot of the COMSOL Multiphysics UI showing the settings for a gradual ramping using the smoothed Step function.
瞬态 研究步骤设置。具有较小时步(0.01 s)的短时间跨度(从 0 s 到 0.1 s),我们的 阶跃 函数就定义在这个区间以逐渐提高模型中 入口 边界条件处的速度。

请注意,并非所有问题都需要这种平滑处理。有些问题,尤其是不涉及对流的传热问题,可以通过载荷的阶跃变化来求解。如果这些阶跃变化发生在模拟时间跨度内,则应使用 事件 接口对这些情况进行精确建模,详请参考 这篇文章

进阶学习

你可以使用上述任意一种方法来求解初始值不一致的瞬态模型,应该都可以解决一致初始化的问题,而不必更改模型中的研究设置。但是,如果仍然遇到收敛问题,可能有几个原因:

  • 模型的网格不够精细。在这种情况下,应该考虑进行网格细化研究,请点击此处了解相关信息。
  • 模型高度非线性。在这种情况下,应考虑更改求解器配置设置,请点击此处了解相关信息。

请提交与此页面相关的反馈,或点击此处联系技术支持