从经验中可以获得很多见解,我只是想知道是否有人以前见过类似的东西。该图显示了对流-扩散方程的初始条件(绿色),然后是迭代 200(蓝色)和迭代 400(红色)的解。
对流-扩散方程的解在几次迭代后就爆炸了。佩克莱数,并且满足 CFL 条件,,所以方程应该是稳定的。我预计我在数字代码中有一个错误。
背景。离散化是平流项和扩散项的中心差异。我相信这是对流的一阶和扩散的二阶。我已经使用有限体积方法(第一次)实现了这一点,其中细胞表面的系数(速度和扩散系数)值是通过细胞平均值的线性插值来找到的。我在左右表面上应用 Robin 边界条件,并将边界处的通量设置为零。
你如何调试你的数字代码?以前有没有人遇到过这样的场景,哪里是开始寻找的好地方?
更新
- 这是我个人的“实验室书”风格笔记,关于为平流扩散方程实施有限体积法,http://danieljfarrell.github.io/FVM/
- Python 源代码可在此处获得, http: //github.com/danieljfarrell/FVM.git
更新
解决方案再简单不过了!我刚刚在扩散项上犯了一个符号错误。很奇怪,我确定我没有发布这个我不会发现错误!如果有人想分享他们如何调试数字代码的技巧,我仍然很感兴趣。我没有方法,有点碰运气,我一直在尝试寻找线索,但这个过程可能需要数周(有时)。
证明它有效(注意,使用有限体积法计算面积所需要做的就是宽度的总和所有单元格的高度,如果您使用诸如 numpy.trapz 之类的积分方法,您的结果包括梯形方法的数值误差)。这里发生了什么?存在恒定的速度和扩散系数,但具有封闭的边界条件。因此,在边界处,我们看到向右推的速度场和向左推的扩散之间的平衡。