绘制代数残差以研究模型的收敛性

Author Image

作者Magnus Ringh

2016年 4月 27日

新发布的 COMSOL Multiphysics®5.2 版本中的残差算子可用于计算并绘制模型的代数残差,从而有效解决模型的收敛性问题。这篇博客将介绍如何使用残差算子对湍流仿真的收敛性进行可视化处理,以及深入理解模型的收敛特性。

什么是代数残差?

求解有限元模型时,明确结果的精确度十分重要。根据网格(离散化)和所求解方程的性质,代数残差只是多种误差来源中的一种。计算误差包括:

  • 截断误差(又称有限元方法的伽辽金误差)。
  • 正交误差是使用数值方法对有限元积分进行近似处理所产生的。
  • 几何近似法误差是采用多项式表示法表征真实几何结构所产生的,一种临近弯曲边界,或位于弯曲边界上的单元积分误差。
  • 代数误差因过早终止求解器(或使用了不恰当的容差)而产生。使用残差算子可存取这类误差。

一般情况下,代数误差(应该)比截断误差小得多。然而当遇到收敛性问题时,代数残差会变大,并且能反映出模型中问题产生的原因。

与 COMSOL Multiphysics®已给出的相关信息(例如收敛数,即按比例缩放的全局数)完全相反,残差算子可以提供模型中每个变量的未缩放残差值,同时还能表明该物理量残差的空间分布情况。残差来源于有限元离散化的最新计算的残差矢量,但被解释为连续的空间场物理量。空间分布可以帮助准确找出建模域内相对较大的残差,从而阻碍解的收敛。模型中可能出现的问题包括:

  • 部分模拟域的网格分辨率不足
  • 几何结构中出现尖锐边角
  • 边界条件不适合或不兼容

让我们详细了解一下如何使用残差算子精确绘制及评估模型中的代数残差。

如何向模型添加代数残差

稳态和瞬态仿真都能使用残差算子。将残差算子添加到模型之前,需要在稳态或瞬态求解器的高级子节点设置中将其激活。存储上一个残差默认设为Off。如要要计算残差,请选择求解时;如要要计算残差并将其存储在输出中以进行后处理,则应选择求解和输出时。将残差存储在输出中,便可将其用于绘图以及一般需要额外内存资源的后处理,但如果您只是想在求解时绘制残差,则没有必要使用这一操作。

在 COMSOL Multiphysics<sup>®</sup> 中向模型添加代数残差的设置窗口。
指定上一个残差值储存方式的设置。

在 COMSOL Multiphysics®中使用残差算子:以流体动力学为例

为了展示残差算子是如何帮助了解数值扰动进入有限元模型并进行扩散的方式,您可以打开 COMSOL®案例下载中的台阶湍流流场教学模型。这个案例使用的是 k-ɛ 湍流模型,展示了一个经典的背阶梯式流场的二维几何结构,其中的台阶角在湍流流动仿真中形成一个回流区。

这个模型包含了绘制求解时动量方程(速度场)的残差。为此,速度绘图组下包含带有表达式residual(spf2.U)表面绘图节点,其中spf2.U表示速度大小。

屏幕截图显示了分离式求解器的设置窗口。
分离式求解器的设置窗口,可在求解中显示结果栏下指定残差绘图。

这个案例清楚地表明当使用某种稳态方法(此例中为伪时步)求解传递问题时会发生什么。我们需要将“背阶梯扰动”造成的残差从区域中移除。只有通道内的“扰动”被移除,残差才会降低,这样仿真才能结束。下方截图显示了残差相对较大的区域从入口移动到出口的过程。

仿真显示了求解开始时的速度场残差绘图。
求解结束时的速度场残差。

求解开始与即将结束时的速度场残差。

收敛图证实了当较大的残差消失后,仅需很少的迭代次数便可使起初缓慢的收敛转变为快速收敛。这个现象符合扰动和误差会根据近似方程来发展这一事实,本文中的案例正是将以对流为主导的流动方程进行了瞬态近似处理。因此各类误差中需要将时间从域中移除,该时间对应于与伪时步迭代。

图像描绘了背阶梯式教学模型的收敛性。
背阶梯式湍流流场教学模型的收敛图。请注意即将结束时的快速收敛。

通过绘图及计算代数残差,您可以对不收敛或者收敛缓慢的模型进行调试,从而以最高效的方式获取仿真结果。

使用残差算子时需要考虑的因素

有几种情况需要考虑如何应用残差算子:

代数残差数据仅对求解器采取的实际时步有意义。对于默认的内插输出,COMSOL Multiphysics®软件不会存储任何残差值;因此,您将得到一个关于内插时间的空图。对于瞬态问题,有两种方法可以研究残差(假定您已将存储上一个残差设置为求解和输出时):

  1. 在求解时,将曲线图的更新基于设置更改为以求解器采用的时步,并选择使用残差算子的曲线图。
  2. 输出部分,将瞬态求解器节点的要存储的时步设置为以求解器采用的时步。这种方法还使残差可用于结果评估。

此外,根据定义,单个约束自由度(DOF)的残差将为零。但是,如果一个约束涉及多个自由度,那么所有自由度的残差都将为零。例如,如果添加了约束条件u + v = 0,那么在该约束条件所在的选区中,\text{residual(u)} = \text{residual(v)} = 0将处于激活状态。有许多内置约束都具有这种特性(例如,固体力学中的辊子条件,\textbf{u} \times \textbf{n} = 0)。

这一点适用于逐点约束;弱约束没有此属性,即约束的自由度被设置为零。

扩展阅读

编者注:这篇博客更新于2024年2月29日,以包括使用残差算子时需要考虑的一些因素。


评论 (0)

正在加载...
浏览 COMSOL 博客
Baidu
map