完全に閉じたノイマン境界条件(境界での反射)を伴う有限差分によって移流方程式を解くときの奇妙な振動


33

私は移流方程式を解こうとしていますが、境界から波が反射すると、解に奇妙な振動が現れます。私が原因とその回避方法を知りたいと思う前に誰かがこの人工物を見たなら!

これはアニメーションGIFで、別のウィンドウで開いてアニメーションを表示します(キャッシュされているのは一度だけ再生されるか、一度に再生されないかです!) ガウスパルスの伝播

波が最初の境界から反射し始めるまで、伝播は非常に安定しているように見えることに注意してください。ここで何が起こると思いますか?数日かけてコードを再確認しましたが、エラーが見つかりません。奇妙なのは、2つの伝播ソリューションがあるように見えることです。1つはポジティブなソリューションで、もう1つはネガティブなソリューションです。最初の境界からの反射後。ソリューションは、隣接するメッシュポイントに沿って移動しているようです。

実装の詳細は次のとおりです。

移流方程式

ut=vux

ここで、は伝播速度です。v

Crank-Nicolsonは、が空間でゆっくりと変化する(フーリエ変換時に低周波数成分のみを含む場合、移流方程式の無条件(pdfリンク)の 安定した離散化です。u(x)

私が適用した離散化は、

ϕjn+1ϕjnΔt=v[1β2Δx(ϕj+1nϕj1n)+β2Δx(ϕj+1n+1ϕj1n+1)]

未知数を右側に配置すると、これを線形形式で記述することができます。

βrϕj1n+1+ϕjn+1βrϕj+1n+1=(1β)rϕj1n+ϕjn+(1β)rϕj+1n

ここで(均等現在および将来の点との間に加重時間平均を取ること)及び。、R = V Δ Tβ=0.5r=vΔt2Δx

これらの方程式のセットの行列形式は、。ここで、Aun+1=Mun

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

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

ベクトルおよびは、解決したい量の既知および未知です。u n + 1unun+1

次に、左右の境界に閉じたノイマン境界条件を適用します。閉じた境界とは、両方のインターフェースでを意味します。閉じた境界の場合、ここでの作業は示しませんが、上記の行列方程式を解くだけでよいことがわかります。@DavidKetchesonが指摘したように、上記の行列方程式は実際にディリクレ境界条件を記述しています。ノイマン境界条件の場合、ux=0

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

更新

動作は、使用する定数の選択とはかなり独立しているように見えますが、上記のプロットの値は次のとおりです。

  • v = 2
  • dx = 0.2
  • dt = 0.005
  • σ = 2(ガウスhwhm)
  • β = 0.5

アップデートII

ゼロ以外の拡散係数のシミュレーション(下記のコメントを参照)、振動は消えますが、波は反射しなくなりました!?理由がわかりませんか?D=1

拡散と移流


について何を考えましたか?v
クリス

v=2これらのシミュレーションの。シミュレーション設定で更新します。良いアイデア。
-boyfarrell

その後、初期条件が右に移り、右の境界から消えることが予想されます。頭に浮かぶのは、セルペクレ数が2未満の移流拡散方程式に適用しない限り、中央のスキームがスプリアス振動を与える可能性があることです。
クリス

方程式に符号エラーがある可能性があると思いますか。実際、私の最終目標は移流拡散方程式でこれを適用することです。現在、さまざまな制限ケースをテストしています。上記の例では、拡散係数はゼロに設定されました。上記に新しいアニメーションを含めました。拡散係数がゼロ以外の場合、ピークが反映されない理由がわかりませんか?あなたが述べた通りに(方向は別として)それはします。
-boyfarrell

私はを考えていたので、サインは大丈夫です。2番目のプロットは私には問題ないように見えます。何が反映されると期待するのですか?これは、が何らかの形で符号を変更した場合にのみ発生する可能性があります。中央スキームの代わりに移流のための風上スキームを試してみると、と似たようなものが見えるはずです。のV D = 0をtu+vxu=0vD=0
クリス

回答:


28

解く方程式は、正解を許可しないため、この方程式には境界条件反映するようなものはありません。特性を考慮すると、正しい境界にのみ境界条件を課すことができることに気付くでしょう。左境界に均一なディリクレ境界条件を課そうとしていますが、これは数学的に無効です。

繰り返しに:特徴の方法は、溶液は、フォームの任意の線に沿って一定でなければならないことを述べている任意定数の。したがって、左境界に沿った解は、問題領域内の以前の解によって決定されます。そこでソリューションを課すことはできません。xνt=CC

方程式とは異なり、数値スキーム正しい解決策を受け入れます。右方向モードは寄生モードと呼ばれ、非常に高い周波数を伴います。右向きの波は鋸歯状波パケットであり、グリッドで表現できる最高周波数に関連付けられています。その波は、離散化によって作成された純粋に数値的なアーチファクトです。

強調:解決しようとしている初期境界値の問題を完全に書き留めていない。そうした場合、それは数学的に適切な問題ではないことが明らかになります。

ただし、ここに投稿したのはうれしいことです。これは、適切に設定されていない問題を離散化したときに何が起こるか、寄生モードの現象の美しい例だからです。私からの質問に対する大きな+1。


議論と修正をありがとう。私は行列がしますことを理解していなかったではない微分方程式と同じ性質を持っています。あとに続くコメント
...-boyfarrell

はい、これらが実際にディリクレ境界条件であることがわかりました。修正のために上記のメモを作成しました。これらの方程式を解くプロセスを本当に理解しようと(真剣に)試みたのはこれが初めてです。進捗状況を投稿できてうれしいです!
-boyfarrell

@David Ketcheson:同じ問題にぶつかり、次のリンクに問題を投稿しました scicomp.stackexchange.com/questions/30329/… なぜ問題が「数学的にうまく処理されていない」と言っているのか教えてください?ありがとう。
ハーマン

@HermanJaramillo左境界に解答値を課そうとしていますが、PDEによって既に決定されています。移流の議論を含む教科書は、有効な境界条件が何であり、なぜであるかを示します。追加の説明を含む2番目の段落を追加しました。それが役立つことを願っています。
デビッドケッチャソン

1
@HermanJaramillo:「数学的に適切に配置された」ではないということは、基本的に、境界の1つの関数値、境界条件、およびPDE自体に対して2つの方程式があることを意味します。一般に、これらの2つの方程式は互いに矛盾しています。より一般的には、これは両方の目的が可能な限り十分に満たされる最適化問題と考えることができます。
-davidhigh

0

上記の答えから多くのことを学びました。この答えを含めたいのは、問題に対するさまざまな洞察を提供できると思うからです。

方程式考えてみましょう。 一定の波速度。

uxx+1cutt=0.
c

初期条件および境界条件がない場合、この方程式にはという形式の解があり ます。(右に移動するパルス)u(x,t)=f(xct)

初期条件を課す場合、区間の方程式の解はです。境界はなく、それが解決策です。u(x,t0)=p(x)x(,)p[xc(tt0)]

ここで、すべてのコンピューターのメモリが制限された後、境界ドメインを定義すると仮定します。その後、我々は時の値を指定する必要がありとそれ以外の場合は、計算上、我々が立ち往生しています、。x[a,b]ab

境界条件を定義する1つの方法は、左側の境界でディリクレを使用し、伝播されるソリューションと一致する条件を使用することです。つまり、定義することができます(初期時間想定) t0

u(a,t0)=0,u(b,t0)=p[bc(tt0)].

これにより、右端で消えるまで右に走るパルスが生成されます。

左の境界のディリクレのアニメーションのためにここを押してください

私にはまだ理解できないノイズが聞こえます(誰か助けてください)

他のオプションは、周期的な境界条件を課すことです。それは、左のディリクレ境界条件を課す代わりに、左の境界と一致する波束を課すことができます。あれは:

u(a,t0)=p[ac(tt0)],u(b,t0)=p[bc(tt0)].

ただし、 for andであり、間隔内にデータを配置する必要があるため、長さ 1つの「期間」を追加し 、、したがって左側の条件は(同じ!)になり、パルスが終了します右側と左側から入ります。ac(tt0)<at>t0c>0[a,b]baactt0+ba=a+btt0あなたはat0=p[bctt0]

この リンク は、私が周期的境界条件と呼ぶものを示しています。

私はpythonでアニメーションを作成し、スキームはここの質問に示されているようにクランクニコルソンスキームです。

波が最初の(右の)境界に達した後も、ノイズパターンにまだ苦労しています。


1
携帯電話でアニメーションを見ることができませんでしたが、ノイズパターンは数値の正確性の欠如が原因であると考えています。吸収は、境界に正確な解を課すためにのみ機能します。この正確な解法により、右の境界に到達する数値解法は、周波数と位相がわずかに異なります。これも反射につながり、したがって干渉につながります。
-davidhigh

@davidhigh:情報をありがとう。これを確認します。アニメーションがお使いの携帯電話で機能しなかったことが残念です。私の電話(Samsung)でも動作しませんでした。これは、電話機に不足しているソフトウェアである可能性があります。コンピューターで動作するはずです。再度、感謝します。
ハーマンジャラ

どういたしまして。アニメーション自体はそれほど重要ではなく、エラーの大きさを確認したかっただけです。ところで、境界に正確な解を課すことにより、設計上「不適切」を回避できます。つまり、境界の1つの値に対して2つの方程式がまだありますが、正確な結果を使用することで、それらの方程式を強制的に整合させることができます。ただし、数値結果は完全に正確ではないため、これはほぼ機能します。
-davidhigh

別のコメント:波動方程式の一般的な解析解は、左に移動するパルスと右に移動するパルスの重ね合わせです。あなたの場合、あなたは正しい動きのパルスのみを考慮しているので、テキストで述べていることとは対照的に、すでに初期条件を適用しています。
-davidhigh

@davidhigh:パルスが境界に達した後のノイズについてのあなたの洞察について少し考えていました。私はあなたが正しいと信じており、正確な分析解と数値伝播パルスの間には違いがあります。わずかな差がある境界では、そこに見られる小さなノイズパターンが生成されます。この議論に示されているCN移流システムは分散的であり、パルスが境界に到達する前に分散は気付かれないが、境界で小さな摂動(解析的解法と数値解法の差)が誘発される可能性があると信じています。再度、感謝します。
ハーマンジャラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.