当我应用不同的边界条件时,我不理解对流扩散方程的不同行为。我的动机是模拟在扩散和对流作用下的实际物理量(粒子密度)。除非从边缘流出颗粒密度,否则内部应保持颗粒密度。按照这种逻辑,如果我强制执行Neumann边界条件,则系统的两端,例如(在左侧和右侧),则系统应“封闭”,即如果边界处的通量为零,则没有粒子可以逸出。∂ϕ∂x=0
对于以下所有模拟,我已将Crank-Nicolson离散化应用于对流扩散方程,所有模拟都具有边界条件。但是,对于矩阵的第一行和最后一行(边界条件行),我允许独立于内部值进行更改。这允许端点完全隐式。∂ϕ∂x=0β
下面我讨论4种不同的配置,只有一种是我所期望的。最后,我讨论了我的实现。
仅扩散限制
在此,通过将速度设置为零来关闭对流项。
仅扩散,所有点均为β = 0.5(Crank-Niscolson)
如脉冲面积减小所见,该量不守恒。
仅扩散,在内点处 = 0.5(Crank-Niscolson),边界处 = 1(完全隐式)βββ
通过在边界上使用完全隐式方程,可以实现我所期望的:没有粒子逸出。您可以通过保留粒子扩散的区域来看到这一点。为什么在边界点选择影响情况的物理性?这是错误还是预期的?β
扩散和平流
当包括对流项时,边界处的值似乎不会影响解。但是,对于所有情况,当边界似乎是“开放的”时,即粒子可以逃脱边界。为什么会这样呢?β
在所有点上具有 = 0.5(Crank-Niscolson)的对流和扩散β
对流和扩散,在内点处 = 0.5(Crank-Niscolson),边界处 = 1(完全隐式)βββ
对流扩散方程的实现
从对流扩散方程开始,
∂ϕ∂t=D∂2ϕ∂x2+v∂ϕ∂x
使用Crank-Nicolson进行写作,
ϕn+1j−ϕnjΔt=D[1−β(Δx)2(ϕnj−1−2ϕnj+ϕnj+1)+β(Δx)2(ϕn+1j−1−2ϕn+1j+ϕn+1j+1)]+v[1−β2Δx(ϕnj+1−ϕnj−1)+β2Δx(ϕn+1j+1−ϕn+1j−1)]
请注意,对于Crank-Nicolson, = 0.5,对于完全隐式为 = 1,对于完全显式为 = 0。β ββββ
为了简化表示法,让我们进行替换,
s=DΔt(Δx)2r=vΔt2Δx
并将时间导数的已知值到右侧,ϕnj
ϕn+1j=ϕnj+s(1−β)(ϕnj−1−2ϕnj+ϕnj+1)+sβ(ϕn+1j−1−2ϕn+1j+ϕn+1j+1)+r(1−β)(ϕnj+1−ϕnj−1)+rβ(ϕn+1j+1−ϕn+1j−1)
分解项,ϕ
β(r - s )ϕn + 1j − 1+(1+2sβ)ϕn+1j−β(s+r)ϕn+1j+1A⋅ϕn+1=(1−β)(s−r)ϕnj−1+(1−2s[1−β])ϕnj+(1−β)(s+r)ϕnj+1M⋅ϕn
我们可以用矩阵形式来写,A⋅ϕn+1=M⋅ϕn
A=⎛⎝⎜⎜⎜⎜⎜⎜⎜1+2sββ(r−s)0−β(s+r)1+2sβ⋱β(r−s)−β(s+r)⋱1+2sββ(r−s)0⋱−β(s+r)1+2sβ⎞⎠⎟⎟⎟⎟⎟⎟⎟
M=⎛⎝⎜⎜⎜⎜⎜⎜⎜1−2s(1−β)(1−β)(s−r)0(1−β)(s+r)1−2s(1−β)⋱(1−β)(s−r)(1−β)(s+r)⋱1−2s(1−β)(1−β)(s−r)0⋱(1−β)(s+r)1−2s(1−β)⎞⎠⎟⎟⎟⎟⎟⎟⎟
应用Neumann边界条件
NB再次通过推导工作,我想我已经发现了错误。在编写边界条件的有限差分时,我假设使用完全隐式方案( = 1)。如果您在这里假设使用Crank-Niscolson方案,那么复杂度就会变得太大,并且我无法求解结果方程式以消除域外的节点。但是,这似乎有可能,有两个带有两个未知数的方程,但我无法解决。这可能解释了上面第一幅图和第二幅图之间的差异。我认为我们可以得出结论,只有边界点处 = 0.5 的图才有效。ββ
假设左侧的通量是已知的(假定为完全隐式),
∂ϕn+11∂x=σL
将其写成居中差异可以得出,
∂ϕn+11∂x≈ϕn+12−ϕn+102Δx=σL
因此,
ϕn+10=ϕn+12−2ΔxσL
请注意,这引入了一个节点,该节点不在问题范围内。可以通过使用第二个方程来消除该节点。我们可以将节点写为ϕn+10j=1
β(r−s)ϕn+10+(1+2sβ)ϕn+11−β(s+r)ϕn+12=(1−β)(s−r)ϕnj−1+(1−2s[1−β])ϕnj+(1−β)(s+r)ϕnj+1
替换从边界条件中找到的的值, = 1行的以下结果,ϕn+10j
(1+2sβ)ϕn+11−2sβϕn+12=(1−β)(s−r)ϕnj−1+(1−2s[1−β])ϕnj+(1−β)(s+r)ϕnj+1+2β(r−s)ΔxσL
对最后一行执行相同的过程(在 =),jJ
−2sβϕn+1J−1+(1+2sβ)ϕn+1J=(1−β)(s−r)ϕnJ−1+(1−2s(1−β))ϕnJ+2β(s+r)ΔxσR
最后,使边界行隐式(设置 = 1)给出,β
(1+2s)ϕn+11−2sϕn+12=ϕnj−1+1ϕnj+2(r−s)ΔxσL
−2sϕn+1J−1+(1+2s)ϕn+1J=ϕnJ+2(s+r)ΔxσR
因此,在Neumann边界条件下,我们可以写出矩阵方程,A⋅ϕn+1=M⋅ϕn+bN
哪里,
A=⎛⎝⎜⎜⎜⎜⎜⎜⎜1+2sβ(r−s)0−2s1+2sβ⋱β(r−s)−β(s+r)⋱1+2sβ−2s0⋱−β(s+r)1+2s⎞⎠⎟⎟⎟⎟⎟⎟⎟
M=⎛⎝⎜⎜⎜⎜⎜⎜⎜1(1−β)(s−r)001−2s(1−β)⋱(1−β)(s−r)(1−β)(s+r)⋱1−2s(1−β)00⋱(1−β)(s+r)1⎞⎠⎟⎟⎟⎟⎟⎟⎟
bN=(2(r−s)ΔxσL0…02(s+r)ΔxσR)T
我目前的理解
我认为第一张图和第二张图之间的差异是通过注意上面概述的错误来解释的。
关于物理量的守恒。我相信原因是,正如我在这里指出的那样,以我编写的形式的对流方程不允许反向传播,因此即使在零通量边界条件下波也只能通过。我关于保护的最初直觉仅在对流项为零时适用(这是在保护区域面积的图2中的解决方案)。
即使使用Neumann零通量边界条件,质量仍然可以离开系统,这是因为在这种情况下正确的边界条件是Robin条件,其中总通量指定为。而且,诺依曼条件指定质量不能通过扩散离开畴,它对平流什么也没说。本质上,我们听到的是扩散的封闭边界条件和对流的开放边界条件。有关更多信息,请参见此处的答案,对流扩散方程中的零梯度边界条件的实现∂ϕ∂x=0j=D∂ϕ∂x+vϕ=0。
你同意吗?