如何避免寄生振荡 1D FEM Neumann BC

计算科学 有限元
2021-12-17 05:45:50

我正在尝试使用 1-D FEM 以数值方式求解 Lamm eqn。我观察到的是一个边界()处的虚假振荡,这很快导致整个范围内的值不合理。我正在寻找有关如何修改 FE 公式以消除这些振荡的建议。rb

Lamm eqn 为 J 其中是沉降系数,是扩散系数,而是角速度。边界条件是通量对于简单的情况,是常数,但它们也可能是的函数。是一个“源函数”,但在我们的例子中它是 0。初始条件通常是 = 常数。

Ct+1r(rJ)r=Q,  rarrb,
J=sω2rCDCr
sDωJ(ra,t)=J(rb,t)=0sDCQC

当前的 FEM 公式使用分段线性(“帽子”)函数在空间中进行离散化,并使用隐式方法 ) 。C(t+Δt)C(t)

编辑:典型值为 =5.9, =7.2, =1, , ,rarbC0s=4×1013ω2=2.7×107D=3.6×107

成正比exp(r2)

1个回答

Lamm 方程是对流扩散偏微分方程的一个具体例子。你可以找到许多关于这个方程数值解的困难的参考资料(例如Leveque)。

由于数值方法的特性,在边界附近的解中的振荡是一个常见问题。理解振荡可能性的一个关键参数是网格 Peclet 数,由下式给出

P=sω2rΔx2D
其中是网格间距。时,几乎总是会发生振荡对于您提供的 Lamm 方程和常数,对于合理的网格,这个数字是然而,由于边界条件,特别是在右端,解中存在非常陡峭的梯度。这与即使是中等的佩克莱特数一起也是造成那里振荡的原因。Δx>1<1

显而易见的解决方案是细化网格以减少 Peclet 数。这可以不均匀地完成,例如,网格在右端更加精细。通常,这会产生一个计算成本太高而无法求解的模型,但这里的情况似乎并非如此。

另一种选择是人为地增加的值。其中一条评论建议改用前向差分(逆风)有限差分法。的不幸副作用,因此与精确相比,该解决方案非常“模糊”。在有限元法中,直接稍微增加就可以达到同样的效果。DDD

通过简单的网络搜索,我能够找到许多与您感兴趣的特定应用的 Lamm 方程的数值解相关的论文。其中许多描述了使用基本 FE 方法解决这个问题的困难,并提出了更多复杂的替代方案,如移动网格方法,来克服这些问题。我认为刘和陈的这本书在这方面做得特别好。

二节点有限元和隐式时间积分算法计算了您的方程的以下解。如您所见,对于这些参数和这种级别的网格细化,右端没有明显的振荡。 500在此处输入图像描述