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!)
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,
di mana adalah kecepatan rambat.
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).
Diskritisasi yang telah saya terapkan adalah,
Menempatkan yang tidak diketahui di sisi kanan memungkinkan ini ditulis dalam bentuk linear,
di mana (untuk mengambil rata-rata waktu tertimbang secara merata antara titik sekarang dan masa depan) dan .r = v Δ t
Set persamaan ini memiliki bentuk matriks , di mana,
Vektor dan adalah yang diketahui dan tidak diketahui dari kuantitas yang ingin kita pecahkan.u n + 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,
Memperbarui
Perilaku ini tampaknya cukup independen dari pilihan konstanta yang saya gunakan, tetapi ini adalah nilai-nilai untuk plot yang Anda lihat di atas:
- = 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?