Osilasi aneh ketika menyelesaikan persamaan adveksi dengan selisih-terbatas dengan kondisi batas Neumann yang tertutup sepenuhnya (refleksi pada batas-batas)

33

Saya mencoba untuk memecahkan persamaan adveksi tetapi memiliki osilasi aneh muncul dalam solusi ketika gelombang memantul dari batas-batas. Jika ada yang pernah melihat artefak ini sebelumnya saya akan tertarik untuk mengetahui penyebabnya dan bagaimana cara menghindarinya!

Ini adalah gif animasi, buka di jendela terpisah untuk melihat animasi (itu hanya akan diputar sekali atau tidak sekaligus itu sudah di-cache!) Perbanyakan denyut Gaussian

Perhatikan bahwa propagasi tampak sangat stabil hingga gelombang mulai memantul dari batas pertama. Menurut Anda apa yang mungkin terjadi di sini? Saya telah menghabiskan beberapa hari mengecek kode saya dan tidak dapat menemukan kesalahan. Ini aneh karena tampaknya ada dua solusi yang menyebar: satu positif dan satu negatif; setelah refleksi dari batas pertama. Solusi tampaknya berjalan di sepanjang titik jala yang berdekatan.

Detail implementasi mengikuti.

Persamaan advection,

ut=vux

di mana adalah kecepatan rambat.v

Crank-Nicolson adalah diskritisasi stabil tanpa syarat (pdf link) untuk persamaan adveksi asalkan perlahan bervariasi dalam ruang (hanya berisi komponen frekuensi rendah ketika Fourier ditransformasikan).u(x)

Diskritisasi yang telah saya terapkan adalah,

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

Menempatkan yang tidak diketahui di sisi kanan memungkinkan ini ditulis dalam bentuk linear,

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

di mana (untuk mengambil rata-rata waktu tertimbang secara merata antara titik sekarang dan masa depan) dan .r = v Δ tβ=0.5r=vΔt2Δx

Set persamaan ini memiliki bentuk matriks , di mana,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)

Vektor dan adalah yang diketahui dan tidak diketahui dari kuantitas yang ingin kita pecahkan.u n + 1unun+1

Saya kemudian menerapkan kondisi batas Neumann tertutup di batas kiri dan kanan. Dengan batas yang tertutup maksud saya pada kedua antarmuka. Untuk batas tertutup ternyata (saya tidak akan menunjukkan kerja saya di sini) kita hanya perlu menyelesaikan persamaan matriks di atas. Seperti yang ditunjukkan oleh @DavidKetcheson, persamaan matriks di atas sebenarnya menggambarkan kondisi batas Dirichlet . Untuk kondisi batas Neumann,ux=0

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

Memperbarui

Perilaku ini tampaknya cukup independen dari pilihan konstanta yang saya gunakan, tetapi ini adalah nilai-nilai untuk plot yang Anda lihat di atas:

  • v = 2
  • dx = 0,2
  • dt = 0,005
  • σ = 2 (Gaussian hwhm)
  • β = 0,5

Pembaruan II

Sebuah simulasi dengan koefisien difusi nol, (lihat komentar di bawah), osilasi hilang, tetapi gelombang tidak lagi mencerminkan !? Saya tidak mengerti mengapa?D=1

Difusi dan adveksi

Boyfarrell
sumber
apa yang kamu ambil untuk ? v
chris
v=2 dalam simulasi tersebut. Saya akan memperbarui dengan pengaturan simulasi. Ide bagus.
boyfarrell
Kemudian saya berharap kondisi awal akan ditingkatkan ke kanan dan menghilang melalui batas kanan. Semua yang terlintas dalam pikiran adalah bahwa skema pusat dapat memberikan osilasi palsu kecuali diterapkan pada persamaan adveksi-difusi dengan nomor Peclet sel di bawah 2. Mungkin coba skema angin naik?
chris
Apakah Anda pikir mungkin ada tanda kesalahan dengan persamaan. Sebenarnya, tujuan akhir saya adalah menerapkan ini dengan persamaan advection-difusion. Saat ini saya sedang menguji berbagai kasus pembatasan. Dalam contoh di atas koefisien difusi diatur ke nol. Saya telah memasukkan animasi baru di atas. Saya tidak mengerti mengapa puncak tidak mencerminkan ketika koefisien difusi bukan nol? Itu tidak persis seperti yang Anda sebutkan (terlepas dari arah).
boyfarrell
Saya memikirkan , jadi tandanya ok. Plot kedua terlihat ok untuk saya. Mengapa Anda mengharapkan sesuatu untuk tercermin? Itu hanya bisa terjadi jika perubahan masuk entah bagaimana. Coba dengan skema arah angin untuk advection bukan skema sentral, maka Anda akan melihat sesuatu yang serupa untuk . tu+vxu=0vD=0
chris

Jawaban:

28

Persamaan yang Anda selesaikan tidak mengizinkan solusi yang berjalan dengan benar, jadi tidak ada kondisi batas yang mencerminkan persamaan ini. Jika Anda mempertimbangkan karakteristiknya, Anda akan menyadari bahwa Anda hanya dapat memaksakan kondisi batas pada batas kanan. Anda mencoba untuk memaksakan kondisi batas Dirichlet yang homogen di batas kiri, yang secara matematis tidak valid.

Untuk mengulangi: metode karakteristik mengatakan bahwa solusi harus konstan di sepanjang garis apapun bentuk untuk setiap konstan . Dengan demikian solusi di sepanjang batas kiri ditentukan oleh solusi di waktu sebelumnya di dalam domain masalah Anda; Anda tidak dapat memaksakan solusi di sana.xνt=CC

Berbeda dengan persamaan, skema numerik Anda memang mengakui solusi yang tepat. Mode yang tepat disebut sebagai mode parasit dan melibatkan frekuensi yang sangat tinggi. Perhatikan bahwa gelombang yang tepat adalah paket gelombang gigi gergaji, yang dikaitkan dengan frekuensi tertinggi yang dapat diwakili di grid Anda. Gelombang itu murni artifak numerik, dibuat oleh diskresi Anda.

Untuk penekanan: Anda belum menuliskan masalah nilai batas awal penuh yang Anda coba selesaikan. Jika Anda melakukannya, akan menjadi jelas bahwa itu bukan masalah yang diposisikan secara matematis.

Saya senang Anda memposting ini di sini, karena itu adalah ilustrasi yang indah tentang apa yang bisa terjadi ketika Anda mendiskreditkan masalah yang tidak diposisikan dengan baik, dan tentang fenomena mode parasit. +1 besar untuk pertanyaan Anda dari saya.

David Ketcheson
sumber
terima kasih atas diskusi dan koreksi. Saya tidak menghargai bahwa matriks tidak akan memiliki sifat yang sama dengan persamaan diferensial. Lebih banyak komentar untuk diikuti ...
boyfarrell
Ya, saya mengerti sekarang bagaimana sebenarnya kondisi batas Dirichlet ini telah saya buat catatan di atas untuk koreksi. Ini adalah pertama kalinya saya mencoba (paling tidak) untuk benar-benar memahami proses penyelesaian persamaan ini, saya terus memukul gundukan di jalan. Saya senang memposting kemajuan saya!
boyfarrell
@ David Ketcheson: Saya mengalami masalah yang sama dan memposting masalah saya di tautan berikut scicomp.stackexchange.com/questions/30329/... Bisakah Anda jelaskan mengapa Anda mengatakan bahwa masalahnya bukan "berpose secara matematis" ? Terima kasih.
Herman Jaramillo
@HermanJaramillo Anda mencoba untuk memaksakan nilai solusi di batas kiri, di mana sudah ditentukan oleh PDE. Buku teks apa pun yang menyertakan diskusi tentang adveksi juga akan menunjukkan kondisi batas yang valid dan mengapa. Saya menambahkan paragraf kedua dengan penjelasan tambahan; berharap itu bisa membantu.
David Ketcheson
1
@HermanJaramillo: bukan "posisi matematis yang baik" pada dasarnya berarti Anda memiliki dua persamaan untuk satu nilai fungsi pada batas, kondisi batas serta PDE itu sendiri. Secara umum, kedua persamaan itu saling bertentangan. Secara umum, orang dapat menganggap ini sebagai masalah optimisasi di mana kedua tujuan harus dipenuhi sebaik mungkin.
davidhigh
0

Saya belajar banyak dari jawaban di atas. Saya ingin memasukkan jawaban ini karena saya percaya ini menawarkan wawasan yang berbeda untuk masalahnya.

uxx+1cutt=0.
c

u(x,t)=f(xct)

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

x[a,b]ab

t0

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

Ini menghasilkan pulsa mengalir ke kanan sampai menghilang di tepi kanan.

dorong di sini untuk animasi di Dirichlet di batas kiri

Saya masih mendapatkan suara yang tidak dapat saya mengerti (ada yang bisa membantu di sini?)

Pilihan lainnya adalah memberlakukan ketentuan batas periodik. Itu bukannya memaksakan kondisi batas Dirichlet di sebelah kiri kita bisa memaksakan paket gelombang yang konsisten dengan batas di sebelah kiri. Itu adalah:

kamu(Sebuah,t0)=hal[Sebuah-c(t-t0)],kamu(b,t0)=hal[b-c(t-t0)].

Sebuah-c(t-t0)<Sebuaht>t0c>0[Sebuah,b]b-Sebuahac(tt0)+ba=a+b(tt0)u(a,t0)=p[bc(tt0]

Tautan ini menunjukkan apa yang saya sebut kondisi batas periodik.

Saya membuat animasi dengan python dan skema adalah skema Crank-Nicholson seperti yang ditunjukkan dalam pertanyaan di sini.

Saya masih berjuang dengan pola noise setelah gelombang mencapai batas pertama (kanan).

Herman Jaramillo
sumber
1
Saya tidak dapat melihat animasi di ponsel saya, tetapi saya percaya pola kebisingan Anda disebabkan oleh ketepatan angka yang hilang. Penyerapan hanya bekerja karena Anda memaksakan solusi tepat pada batas. Dengan solusi tepat ini, solusi numerik yang tiba di batas kanan sedikit berbeda dalam frekuensi dan fase. Sekali lagi ini mengarah pada refleksi dan gangguan.
davidhigh
@davidhigh: Terima kasih atas informasi Anda. Saya akan periksa ini. Maaf animasi tidak berfungsi di ponsel Anda. Itu juga tidak berfungsi di ponsel saya (Samsung). Ini mungkin beberapa perangkat lunak yang hilang di telepon. Itu harus bekerja di komputer. Terima kasih lagi.
Herman Jaramillo
Sama-sama. Animasi itu sendiri tidak begitu penting, saya hanya ingin melihat seberapa besar kesalahannya. Btw, dengan memaksakan solusi yang tepat pada batas, Anda menghindari "keliru" dengan desain. Artinya, Anda masih memiliki dua persamaan untuk satu nilai di batas, tetapi dengan menggunakan hasil yang tepat Anda memaksa mereka untuk konsisten. Tetapi ini hanya bekerja kira-kira, karena hasil numerik tidak sepenuhnya tepat.
davidhigh
Dan komentar lain: solusi analitik umum untuk persamaan gelombang adalah superposisi dari pulsa yang bergerak ke kiri dan satu bergerak ke kanan. Dalam kasus Anda, Anda hanya mempertimbangkan pulsa yang bergerak ke kanan, sehingga Anda sudah menerapkan kondisi awal - berbeda dengan apa yang Anda nyatakan dalam teks.
davidhigh
@davidhigh: Saya telah berpikir sedikit tentang wawasan Anda tentang kebisingan setelah pulsa menyentuh batas. Saya percaya Anda benar dan ada perbedaan antara solusi analitik yang tepat dan pulsa yang diperbanyak secara numerik. Dalam batas itu perbedaan kecil menghasilkan pola kebisingan kecil yang terlihat di sana. Sistem adveksi CN yang diperlihatkan dalam diskusi ini adalah dispersif dan saya percaya bahwa sementara dispersi tidak diketahui sebelum pulsa menyentuh batas, mungkin memicu tetapi gangguan kecil (perbedaan antara solusi analitik dan numerik) pada batas. Terima kasih lagi.
Herman Jaramillo