Bagaimana Anda men-debug kode numerik, apa yang bisa menjadi sumber kesalahan osilasi ini?

16

Tenang banyak wawasan yang bisa didapat dari pengalaman, saya hanya ingin tahu apakah ada yang melihat sesuatu yang mirip dengan ini sebelumnya. Plot menunjukkan kondisi awal (hijau) untuk persamaan advection-difusion, kemudian solusi pada iterasi 200 (biru) dan kemudian lagi pada iterasi 400 (merah).

Kesalahan osilasi

Solusi dari persamaan advection-difusion meledak setelah beberapa iterasi. Angka Péclet , dan kondisi CFL terpenuhi, C 0,0015 , sehingga persamaannya harus stabil. Saya mengantisipasi saya memiliki bug dalam kode numerik.μ0,07C0,0015

Latar Belakang. Diskretisasi adalah perbedaan utama untuk istilah adveksi dan difusi. Saya percaya ini adalah urutan pertama adveksi dan urutan kedua untuk difusi. Saya telah menerapkan ini menggunakan pendekatan volume-terbatas (untuk pertama kalinya) di mana nilai-nilai koefisien (kecepatan dan koefisien difusi) pada permukaan sel ditemukan dengan interpolasi linier dari rata-rata sel. Saya menerapkan kondisi batas Robin di permukaan kiri dan kanan dan mengatur fluks pada batas menjadi nol.

Bagaimana Anda men-debug kode numerik Anda? Adakah yang pernah melihat adegan seperti ini sebelumnya, di mana tempat yang bagus untuk mulai mencari?

Memperbarui

Memperbarui

Solusinya tidak bisa lebih sederhana! Saya baru saja membuat kesalahan tanda pada istilah difusi. Aneh, saya yakin saya belum memposting ini saya tidak akan menemukan kesalahan! Jika seseorang ingin berbagi kiat tentang cara men-debug kode numerik mereka, saya masih tertarik. Saya tidak punya metode, ini sedikit untung-untungan, saya terus mencoba hal-hal untuk mendapatkan petunjuk, tetapi proses ini bisa memakan waktu berminggu-minggu (kadang-kadang).

Buktikan itu bekerja ( NB bahwa dengan metode volume hingga semua yang perlu Anda lakukan untuk menghitung luas adalah penjumlahan dari lebar tinggi untuk semua sel, jika Anda menggunakan metode integrasi seperti numpy.trapz hasil Anda termasuk numerik kesalahan metode trapezium). Apa yang terjadi disini? Ada koefisien kecepatan dan difusi yang konstan tetapi dengan kondisi batas tertutup . Oleh karena itu pada batas kita melihat keseimbangan antara medan kecepatan yang mendorong ke kanan dan dorongan difusi ke kiri.×

Persamaan adveksi-difusi dengan kondisi batas tertutup melalui metode volume hingga.

Boyfarrell
sumber
2
Diskritisasi macam apa yang Anda gunakan? Apa metode pemesanan? Apa syarat batas Anda?
Geoff Oxberry
Terima kasih @ GeoffOxberry, saya telah memperbarui dengan rincian lebih lanjut. Meskipun untuk benar-benar memahami apa yang telah saya lakukan Anda dapat membaca catatan buku lab saya di tautan github di atas.
boyfarrell
2
θ=0,0,5,1
1
Sebuah=0d<0

Jawaban:

9

Saya telah mengumpulkan beberapa pengalaman saya tentang debug kode numerik di sini: deal.II FAQ: debugging . Saya tidak tahu apakah itu akan membantu Anda dalam kasus khusus ini, tetapi mungkin pada orang lain.

Wolfgang Bangerth
sumber
Hai, tautan itu putus ketika proyek dipindahkan - apakah ini yang benar sekarang? github.com/dealii/dealii/wiki/…
hyperpallium
Ya, itu yang benar. Terima kasih telah memperbaruinya dalam komentar Anda!
Wolfgang Bangerth