Saya telah menerapkan pemecah multigrid V-Cycle menggunakan koreksi cacat linier (LDC) dan skema aproksimasi penuh (FAS).
Masalah saya adalah sebagai berikut: Menggunakan LDC residual dikurangi dengan faktor ~ 0,03 per siklus. Implementasi FAS memang konvergen dengan faktor linear juga, tetapi faktornya hanya ~ 0,58. Jadi FAS membutuhkan sekitar 20 kali jumlah siklus.
Sebagian besar kode dibagikan, satu-satunya perbedaan adalah perhitungan turun / naik, menggunakan LDC
bawah:
up:
dan penggunaan FAS
bawah:
up:
Pengaturan pengujian saya dari Brigg "A Multigrid Tutorial, Second Edition", hal. 64, memiliki solusi analitis
dengan
dan persamaan adalah menggunakan khas linear 5-titik stensil sebagai Laplace-operator . Tebakan awal adalah .
Mengubah pengaturan tes, misalnya ke u sepele (x, y) = 0 menggunakan tebakan awal menghasilkan faktor konvergensi yang hampir sama.
Karena hanya kode turun / atas yang berbeda, hasil LDC sesuai dengan buku dan FAS setidaknya tampaknya berfungsi juga, saya tidak tahu mengapa jauh lebih lambat dalam pengaturan linier yang sama.
Ada satu perilaku aneh dalam LDC dan FAS yang saya tidak dapat jelaskan tetapi itu hanya terjadi jika tebakan awal buruk (misalnya tetapi juga dalam percobaan multigrid penuh saya di mana interpolasi ke kisi-kisi halus baru meningkatkan residu dari hingga ): Jika saya menambah jumlah relaksasi pasca koreksi ke jumlah yang sangat tinggi sehingga solusinya diselesaikan ke mesin presisi pada grid kasar, ia kehilangan hampir semua digit ketika naik satu langkah ke atas ke kotak halus berikutnya.
Karena gambar mengatakan lebih dari sekadar kata-kata:
// first cycle, levels 0-4
// DOWN
VCycle top 4, start res_norm 3.676520e+02 // initial residual
VCycle top 4, cycle 0, current 4, res_norm 3.676520e+02
VCycle top 4, cycle 0, current 4, res_norm 1.520312e+02 // relaxed (2 iterations)
VCycle tau_norm 2.148001e+01 (DEBUG calculation)
VCycle top 4, cycle 0, current 3, res_norm 1.049619e+02 // restricted
VCycle top 4, cycle 0, current 3, res_norm 5.050392e+01 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 2, res_norm 3.518764e+01 // restricted
VCycle top 4, cycle 0, current 2, res_norm 1.759372e+01 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 1, res_norm 1.234398e+01 // restricted
VCycle top 4, cycle 0, current 1, res_norm 4.728777e+00 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 0, res_norm 3.343750e+00 // restricted
// coarsest grid
VCycle top 4, cycle 0, current 0, res_norm 0.000000e+00 // solved
// UP
VCycle top 4, cycle 0, current 1, res_norm 3.738426e+00 // prolonged
VCycle top 4, cycle 0, current 1, res_norm 0.000000e+00 // relaxed (many iterations)
VCycle top 4, cycle 0, current 2, res_norm 1.509429e+01 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 2, res_norm 2.512148e-15 // relaxed (many iterations)
VCycle top 4, cycle 0, current 3, res_norm 4.695979e+01 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 3, res_norm 0.000000e+00 // relaxed (many iterations)
VCycle top 4, cycle 0, current 4, res_norm 1.469312e+02 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 4, res_norm 9.172812e-24 // relaxed (many iterations)
Saya tidak yakin apakah hanya ada beberapa digit yang diperoleh per siklus atau apakah ini menunjukkan kesalahan selama interpolasi ke kisi-kisi halus. Jika ini adalah kasus terakhir, bagaimana LDC dapat mencapai rasio residu sesuai-buku ~ 0,03 saat menggunakan selalu 2 relaksasi?