解决方法编号: 952
标题: 避免负浓度
平台: 所有平台
适用于: COMSOL Multiphysics, CFD 模块, 化学反应工程模块, 电池与燃料电池模块, 电镀模块, 微流体模块, 地下水流模块, 搅拌器模块, 腐蚀模块, 电化学模块
版本: 所有版本
类别: 物理场, 物理场
关键字: convergence negative concentrations

问题描述

在扩散、对流和反应模型中,为什么浓度出现负值?为什么根据为扩散和对流问题施加的边界条件,得到的值低于最低可能值,或高于最高可能值?这显然在物理上是不成立的。

解决方法

造成求解结果过大或过小的原因可能有多种,您可以通过以下方式来避免这个问题:

数值误差

常见的原因是数值噪声:例如,当浓度变量接近零时,与该值(接近零)相比,数值噪声可能变得明显。如果您发现浓度出现非常小的负值,则很可能是数值噪声造成的,在不发生反应的情况下,这对扩散/对流问题的影响不大。

反应域:使用 Danckwerts 流入类型

如果有入口可以进入发生化学反应的域或壁面发生反应的域,则使用流入 条件,并在流入 设置中选择边界条件类型:通量 (Danckwerts)。该流入条件类型的目的是避免负振荡,并且还会加快反应流问题的求解速度。

Danckwerts.

有关该条件的用法示例,请参见透析分离

不连续边界和初始条件:平滑设置

局部浓度出现较小负值的另一个原因是空间或时间不连续,例如在初始条件下可能出现这种情况。比如,我们以一维瞬态对流-扩散-反应方程为例:

初始条件是域内的浓度为零,边界条件是左右边界处的浓度分别设为 1 和 0。其物理解释为,扩散前沿最初非常尖锐,随后逐渐扩散,沿正 x 方向移动。然而,有限元形函数(例如一阶拉格朗日)仅允许连续函数作为解,因此需要在时间迭代开始之前修改不连续的初始值。这通常会导致 t=0 时的解略微变小。这一现象还会影响第一时间步的结果。当 t=0 时,局部浓度显示为较小的负值,如图所示。

Negative concentrations

图 1:瞬态扩散问题的解,左侧边界条件 (c=1) 在 t=0 时在初始条件 (c=0) 下产生不连续。由于采用有限元法,最左侧单元产生了小于零的浮动。t=0 附近的下降现象有时会导致振荡和收敛问题。

通过使用 COMSOL Multiphysics 内置平滑阶跃函数中的一个,以可控方式平滑初始不连续性,可以避免这个问题。比如,在上例中,您可以使用平滑的阶跃过渡作为初始条件,而不是统一的零初始条件。有关更多信息,请参见解决方法 905:平滑阶跃过渡

当浓度接近零时,采用反应项大于零作为条件

较大的负浓度值通常表明底层数学模型没有正确描述物理现象。在这种情况下,上述方法不能解决问题。一个潜在的原因是,反应项包含恒定的汇,这是一个仅适用于大浓度的近似值。当浓度达到零时,反应项继续消耗物质,最终出现负浓度。为避免这种情况,请确保反应速率足够快,从而当物质的浓度接近零时,其物质沉降速度也接近零。例如,通过编写 max(eps^2,Q) 可以实现这一点。eps 是一个 COMSOL 内部常数,从阶数上来说,它是一个非常小的数字,相当于 10-15。如果要避免 Q 为 0,此类表达式也非常有用,比如,如果您要在几何内的某个位置应用 Q 的对数,或者符号导数存在包含除数为零的风险。

确保网格可以解析问题

网格分辨率不够会导致小于零的求解结果。如果在高对流流态(高佩克莱特数)下且包含大反应项或快速动力学(高达姆科勒数)时观察到负浓度,其根本原因往往是收敛问题。通过网格细化来研究负浓度问题有所好转还是变得更糟也很有用。如果有所改善,则问题很大程度上与网格相关。如果变得更糟,可能是数学模型引起的问题。

知识库解决方法 103中提供了几种其他的方法,可以在无需大量细化网格的情况下改善这几类问题。

相关文件

conc.mph 445 KB
  用于创建以上绘图的模型。

免责声明

COMSOL 尽一切合理的努力验证您在此页面上查看的信息。本页面提供的资源和文档仅供参考,COMSOL 对其有效性不作任何明示或暗示的声明。COMSOL 对所披露数据的准确性不承担任何法律责任。本文档中引用的任何商标均为其各自所有者的财产。有关完整的商标详细信息,请参阅产品手册。