在完全封闭的诺伊曼边界条件(边界处的反射)下通过有限差分求解对流方程时的奇异振荡


33

我正在尝试求解平流方程,但是当波从边界反射时,解决方案中会出现奇怪的振荡。如果有人在看过此文物之前,我很想知道原因以及如何避免它!

这是一个动画gif,在单独的窗口中打开以查看动画(它仅被缓存一次,或仅播放一次!) 高斯脉冲的传播

请注意,在波开始从第一个边界开始反射之前,传播似乎非常稳定。您认为这里可能会发生什么?我花了几天时间仔细检查我的代码,找不到任何错误。奇怪的是,似乎有两种传播的解决方案:一种是积极的,一种是消极的。从第一个边界反射之后。解决方案似乎沿着相邻的网格点传播。

实现细节如下。

对流方程,

üŤ=vüX

其中是传播速度。v

Crank-Nicolson是对流方程的无条件 稳定离散化,条件是在空间中缓慢变化(傅立叶变换时仅包含低频分量)。üX

我应用的离散化是

ϕĴñ+1个-ϕĴñΔŤ=v[1个-β2ΔXϕĴ+1个ñ-ϕĴ-1个ñ+β2ΔXϕĴ+1个ñ+1个-ϕĴ-1个ñ+1个]

将未知数放在右侧可以使它以线性形式编写,

β[RϕĴ-1个ñ+1个+ϕĴñ+1个-β[RϕĴ+1个ñ+1个=-1个-β[RϕĴ-1个ñ+ϕĴñ+1个-β[RϕĴ+1个ñ

其中(取当前点和未来点之间的时间平均权重)和。[R = v Δ β=0.5[R=vΔŤ2ΔX

这些方程组的矩阵形式为,其中,Aun+1=Muñ

A=(1βr0βr1βrβr1βr0βr1)

M=(1(1β)r0(1β)r1(1β)r(1β)r1(1β)r0(1β)r1)

向量和是我们要求解的数量的已知和未知量。unun+1

然后,我在左右边界上应用封闭的 Neumann边界条件。封闭边界表示两个接口上的。对于封闭边界,事实证明(在这里我不会显示我的工作),我们只需要求解上述矩阵方程即可。正如@DavidKetcheson指出的那样,上述矩阵方程实际上描述了Dirichlet边界条件。对于诺伊曼边界条件,ux=0

A=(100βr1βrβr1βr001

更新资料

该行为似乎与我使用的常量的选择完全无关,但是这些是您在上面看到的图的值:

  • v = 2
  • dx = 0.2
  • dt = 0.005
  • σ = 2(高斯hwhm)
  • β = 0.5

更新二

具有非零扩散系数的模拟(请参见下面的评论),振荡消失了,但波不再反射!我不明白为什么?D=1

扩散和平流


您为买了什么?v
克里斯

v=2在这些模拟中为。我将更新仿真设置。好主意。
boyfarrell 2013年

然后,我希望初始条件会向右平移并通过右边界消失。所有想到的是,除非将其应用于单元Peclet数小于2的对流扩散方程,否则中心方案会产生伪振荡。也许尝试迎风方案?
克里斯

您是否认为方程式可能存在符号错误。实际上,我的最终目标是将其与对流扩散方程一起应用。我目前正在测试不同的限制情况。在以上示例中,扩散系数设置为零。我在上面包括了一个新动画。我不明白为什么扩散系数不为零时峰不会反映出来?它的功能与您提到的完全一样(方向除外)。
boyfarrell 2013年

我在想,所以这个符号还可以。第二个情节对我来说还可以。您为什么期望有任何反映?仅当变化以某种方式签名时,才会发生这种情况。尝试使用顺风方案而不是中央方案,那么对于,应该会看到类似的结果。v d = 0tu+vxu=0vD=0
克里斯

Answers:


28

您要求解的方程式不允许右移解决方案,因此该方程式没有反射边界条件之类的问题。如果考虑这些特性,您将意识到只能在正确的边界处施加边界条件。您试图在左边界上施加齐次Dirichlet边界条件,这在数学上是无效的。

重申一下:特征方法说,对于任何常数,解必须在形式的任何直线上都是常数。因此,沿着左边界的解决方案是由您的问题域内的解决方案在更早的时候确定的;您不能在此处强加解决方案。xνt=CC

与方程式不同,您的数值方案确实接受正确的解。正确的模式称为寄生模式,并且涉及很高的频率。请注意,右行波是一个锯齿波包,与可以在网格上表示的最高频率相关。那波纯粹是由离散化产生的数字伪像。

需要强调的是:您尚未写下要解决的全部初始边界值问题。如果这样做,很显然这不是一个数学上合理的问题。

不过,我很高兴您在此处发布此内容,因为它很好地说明了当离散化一个不适当地提出的问题时可能发生的情况以及寄生模式现象。我的问题大+1。


感谢您的讨论和更正。我没有意识到矩阵不会具有与微分方程相同的属性。
接下来还有

是的,我现在看到这些实际上是Dirichlet边界条件了,我在上面已作了注释以进行更正。这是我第一次(真心地)真正理解这些方程的求解过程,我不断前进。我很高兴发布自己的进度!
boyfarrell

@大卫Ketcheson:我遇到了同样的问题,我发布在以下链接问题 scicomp.stackexchange.com/questions/30329/... 能否请您解释一下我为什么这么说,这个问题是不是“在数学上适定” ?谢谢。
Herman Jaramillo

@HermanJaramillo您正在尝试在左边界处施加解值,该值已由PDE确定。任何包含对流讨论的教科书都将指出有效边界条件是什么以及为什么。我添加了第二段,并附加了解释。希望能有所帮助。
David Ketcheson '18

1
@HermanJaramillo:本质上讲不是“数学上正确的”,这意味着您对于边界处的一个函数值,边界条件以及PDE本身具有两个方程式。通常,这两个等式相互矛盾。更一般地,可以将其视为优化问题,其中两个目标都应尽可能地得到满足。
davidhigh '18

0

我从上述答案中学到了很多东西。我想包括这个答案,因为我相信它可以提供对该问题的不同见解。

uxx+1cutt=0.
c

u(x,t)=f(xct)

u(x,t0)=p(x)x(,)p[xc(tt0)]

x[a,b]一种b

Ť0

ü一种Ť0=0übŤ0=p[b-CŤ-Ť0]

这将产生一个向右运行的脉冲,直到在右边缘消失。

在此处向左推动Dirichlet上的动画

我仍然听到一些我听不懂的声音(有人可以帮忙吗?)

另一种选择是施加周期性边界条件。那不是在左边施加Dirichlet边界条件,我们可以在左边施加与边界一致的波包。那是:

ü一种Ť0=p[一种-CŤ-Ť0]übŤ0=p[b-CŤ-Ť0]

一种-CŤ-Ť0<一种Ť>Ť0c>0[a,b]baac(tt0)+ba=a+b(tt0)u(a,t0)=p[bc(tt0]

链接 显示了我所说的周期性边界条件。

我用python制作了动画,该方案是Crank-Nicholson方案,如此处问题所示。

在波到达第一个(右)边界之后,我仍在为噪声模式而苦苦挣扎。


1
我无法在手机中看到动画,但是我相信您的噪声模式是由于缺少数值精度引起的。吸收仅适用于您在边界上施加了精确解。使用此精确解,到达右边界的数值解在频率和相位上略有不同。这又导致反射并因此导致干涉。
davidhigh '18

@davidhigh:谢谢您的信息。我会检查的。很抱歉,动画无法在您的手机中正常播放。在我的手机(三星)中也无法使用。这可能是电话中缺少的某些软件。它应该可以在计算机上工作。再次感谢。
Herman Jaramillo

别客气。动画本身并不那么重要,我只是想看看错误有多大。顺便说一句,通过在边界上施加确切的解,可以避免设计上的“不适定性”。也就是说,对于边界处的一个值,您仍然有两个方程式,但是通过使用精确的结果,您必须使它们一致。但这仅近似起作用,因为数值结果并不完全准确。
davidhigh '18

另一个评论是:波动方程的一般解析解是脉冲向左移动和一个向右移动的叠加。在您的情况下,您仅考虑向右移动的脉冲,因此您已经应用了初始条件-与您在文本中陈述的相反。
davidhigh '18

@davidhigh:在脉冲到达边界后,我一直在思考您对噪声的见解。我相信您是对的,确切的解析解与数值传播脉冲之间存在差异。在边界处,几乎没有差异会产生在那里看到的小噪声模式。在此讨论中显示的CN对流系统是分散的,我相信虽然在脉冲到达边界之前没有注意到分散,但它可能会触发,但会触发边界处的小扰动(解析解与数值解之间的差异)。再次感谢。
Herman Jaramillo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.