異なる境界条件を適用すると、移流拡散方程式の異なる動作が理解できません。私の動機は、拡散と移流のもとでの実際の物理量(粒子密度)のシミュレーションです。粒子密度は、端から流出しない限り、内部で保存する必要があります。この論理により、システムの両端に(左側および右側)などのノイマン境界条件を適用すると、システムは「閉じる」、つまり境界でのフラックスがゼロの場合、粒子は逃げることができません。∂ϕ∂x=0
以下のすべてのシミュレーションでは、Crank-Nicolson離散化を移流拡散方程式に適用し、すべてのシミュレーションには境界条件があります。ただし、行列の最初と最後の行(境界条件の行)については、内部値に関係なくを変更できます。これにより、エンドポイントが完全に暗黙的になります。∂ϕ∂x=0β
以下に4つの異なる構成について説明しますが、そのうちの1つだけが期待したものです。最後に、実装について説明します。
拡散のみの制限
ここでは、速度をゼロに設定すると移流項がオフになります。
拡散のみ、すべてのポイントでβ = 0.5(Crank-Niscolson)
パルス面積が減少することからわかるように、量は保存されません。
拡散のみ、内部ポイントで = 0.5(クランクニコルソン)、境界で = 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)]
なおクランク・ニコルソンため= 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−β)⎞⎠⎟⎟⎟⎟⎟⎟⎟
ノイマン境界条件の適用
NBは派生を再度処理しています。エラーを見つけたと思います。境界条件の有限差分を記述するときに、完全に暗黙的なスキーム( = 1)を想定しました。ここでCrank-Niscolsonスキームを仮定すると、複雑さが非常に大きくなり、結果の方程式を解いてドメイン外のノードを排除できませんでした。しかし、それは可能だと思われ、2つの未知数を持つ2つの方程式がありますが、私はそれを管理できませんでした。これはおそらく、最初のプロットと2番目のプロットの違いを説明しています。境界点で = 0.5のプロットのみが有効であると結論付けることができると思います。ββ
左側のフラックスが既知であると仮定すると(完全に暗黙的な形式を想定)、
∂ϕn+11∂x=σL
これを中心差として書くと、
∂ϕn+11∂x≈ϕn+12−ϕn+102Δx=σL
したがって、
ϕn+10=ϕn+12−2ΔxσL
これにより、問題のドメイン外にあるノードが導入されることに注意してください。このノードは、2番目の式を使用して削除できます。ノードは次のように記述できます。ϕ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
したがって、ノイマン境界条件では、行列方程式。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番目のプロットの違いは、上記のエラーに注目することで説明されると思います。
物理量の保存に関して。私は原因がそれであると信じて、ここで指摘したように、私は波がちょうど通過するので、それが逆方向に伝播することはできません書かれている形での移流方程式ゼロフラックス境界条件でさえも。保存に関する私の最初の直感は移流項がゼロの場合にのみ適用されます(これは、面積が保存されているプロット番号2の解です)。
偶数とノイマンゼロフラックス境界条件質量は依然としてシステムを残すことができ、この場合の正しい境界条件であるため、これはロビンにおける境界条件の総磁束指定されている。さらに、ノイマン条件は、質量が拡散を介して領域を離れることができないことを指定します。本質的に、私たちが聞いているのは、拡散に対する閉じた境界条件と移流に対する開いた境界条件です。詳細については、移流拡散方程式における勾配ゼロ境界条件の実装の回答を参照してください。∂ϕ∂x=0j=D∂ϕ∂x+vϕ=0。
同意しますか?