新发布的 COMSOL Multiphysics® 5.2 版本中的 残差 算子可用于计算并绘制模型的代数残差,从而有效解决模型的收敛性问题。这篇博客将介绍如何使用 残差 算子对湍流仿真的收敛性进行可视化处理,以及深入理解模型的收敛特性。
什么是代数残差?
求解有限元模型时,明确结果的精确度十分重要。根据网格(离散化)和所求解方程的性质,代数残差只是多种误差来源中的一种。计算误差包括:
- 截断误差(又称有限元方法的 伽辽金误差)。
- 正交误差 是使用数值方法对有限元积分进行近似处理所产生的。
- 几何近似法误差 是采用多项式表示法表征真实几何结构所产生的,一种临近弯曲边界,或位于弯曲边界上的单元积分误差。
- 代数误差 因过早终止求解器(或使用了不恰当的容差)而产生。使用 残差 算子可存取这类误差。
一般情况下,代数误差(应该)比截断误差小得多。然而当遇到收敛性问题时,代数残差会变大,并且能反映出模型中问题产生的原因。
与 COMSOL Multiphysics® 已给出的相关信息(例如收敛数,即按比例缩放的全局数)完全相反,残差 算子可以提供模型中每个变量的未缩放残差值,同时还能表明该物理量残差的空间分布情况。残差来源于有限元离散化的最新计算的残差矢量,但被解释为连续的空间场物理量。空间分布可以帮助准确找出建模域内相对较大的残差,从而阻碍解的收敛。模型中可能出现的问题包括:
- 部分模拟域的网格分辨率不足
- 几何结构中出现尖锐边角
- 边界条件不适合或不兼容
让我们详细了解一下如何使用 残差 算子精确绘制及评估模型中的代数残差。
如何向模型添加代数残差
稳态和瞬态仿真都能使用 残差 算子。将 残差 算子添加到模型之前,需要在稳态或瞬态求解器的 高级 子节点设置中将其激活。存储上一个残差 默认设为 Off
。如要要计算残差,请选择求解时;如要要计算残差并将其存储在输出中以进行后处理,则应选择求解和输出时。将残差存储在输出中,便可将其用于绘图以及一般需要额外内存资源的后处理,但如果您只是想在求解时绘制残差,则没有必要使用这一操作。
指定上一个残差值储存方式的设置。
在 COMSOL Multiphysics® 中使用 残差 算子:以流体动力学为例
为了展示 残差 算子是如何帮助了解数值扰动进入有限元模型并进行扩散的方式,您可以打开 COMSOL® 案例下载中的台阶湍流流场教学模型。这个案例使用的是 k-ɛ 湍流模型,展示了一个经典的背阶梯式流场的二维几何结构,其中的台阶角在湍流流动仿真中形成一个回流区。
这个模型包含了绘制求解时动量方程(速度场)的残差。为此,速度绘图组下包含带有表达式 residual(spf2.U)
的 表面 绘图节点,其中 spf2.U
表示速度大小。
分离式求解器的设置窗口,可在求解中显示结果栏下指定残差绘图。
这个案例清楚地表明当使用某种稳态方法(此例中为伪时步)求解传递问题时会发生什么。我们需要将“背阶梯扰动”造成的残差从区域中移除。只有通道内的“扰动”被移除,残差才会降低,这样仿真才能结束。下方截图显示了残差相对较大的区域从入口移动到出口的过程。
求解开始与即将结束时的速度场残差。
收敛图证实了当较大的残差消失后,仅需很少的迭代次数便可使起初缓慢的收敛转变为快速收敛。这个现象符合扰动和误差会根据近似方程来发展这一事实,本文中的案例正是将以对流为主导的流动方程进行了瞬态近似处理。因此各类误差中需要将时间从域中移除,该时间对应于与伪时步迭代。
背阶梯式湍流流场教学模型的收敛图。请注意即将结束时的快速收敛。
通过绘图及计算代数残差,您可以对不收敛或者收敛缓慢的模型进行调试,从而以最高效的方式获取仿真结果。
使用残差算子时需要考虑的因素
有几种情况需要考虑如何应用 残差 算子:
代数残差数据仅对求解器采取的实际时步有意义。对于默认的内插输出,COMSOL Multiphysics® 软件不会存储任何残差值;因此,您将得到一个关于内插时间的空图。对于瞬态问题,有两种方法可以研究残差(假定您已将 存储上一个残差 设置为 求解和输出时):
- 在求解时,将曲线图的 更新基于 设置更改为 以求解器采用的时步,并选择使用 残差 算子的曲线图。
- 在 输出 部分,将 瞬态求解器 节点的 要存储的时步 设置为 以求解器采用的时步。这种方法还使残差可用于结果评估。
此外,根据定义,单个约束自由度(DOF)的残差将为零。但是,如果一个约束涉及多个自由度,那么所有自由度的残差都将为零。例如,如果添加了约束条件u + v = 0,那么在该约束条件所在的选区中,\text{residual(u)} = \text{residual(v)} = 0 将处于激活状态。有许多内置约束都具有这种特性(例如,固体力学中的辊子条件, \textbf{u} \times \textbf{n} = 0 )。
这一点适用于逐点约束;弱约束没有此属性,即约束的自由度被设置为零。
扩展阅读
- 阅读博客学习如何使用黏度递变,文章提供了另一种提高 CFD 模型收敛性的方法
- 在 COMSOL®博客中阅读更多关于如何充分利用 COMSOL Multiphysics® 求解功能的博客文章
编者注:这篇博客更新于2024年2月29日,以包括使用残差算子时需要考虑的一些因素。
评论 (0)