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?
Jika Anda menggunakan diskresi terpusat-titik, maka pembatasan keadaan harus disuntikkan daripada pembatasan residual berbobot penuh yang tampaknya Anda gunakan. Yaitu, ganti dengan saat membatasi negara. Menggunakan pembatasan full-weighted untuk state menghasilkan aliasing komponen frekuensi tinggi dari state yang setelah menerapkan menghasilkan noise baru pada skala yang sama seperti sebelumnya koreksi kasar (kondisi batas kemungkinan merupakan penyebab utama efek ini). Gunakan injeksi, , dan masalah ini akan hilang.I H h u h ← u h ( u H - I H h u h ) I H h u hIHh I^Hh uh←uh(uH−IHhuh) I^Hhuh
Secara spektral, pembatasan negara hanya membutuhkan tatanan sekunder tinggi (pelestarian akurat frekuensi rendah), tetapi tatanan primer (aliasing frekuensi tinggi) tidak masalah. Injeksi memiliki urutan primer 0 dan urutan sekunder tak terbatas. Sementara itu, pembatasan residual membutuhkan urutan primer dan sekunder untuk menjadi positif (setidaknya). Lihat bagian 4.3 dari Panduan Multigrid Achi Brandt .
Saat merancang metode MG, lebih baik untuk melihat kesalahan daripada residu dan untuk memastikan Anda mempertimbangkan norma dengan tepat.
sumber
Saya diselesaikan dengan masalah sekarang. Saya menyimpan ketika turun selama siklus-V dan menggunakannya kembali nanti diuHold=IHhuh
Masalahnya adalah sebelum turun lagi dari ke , santai di tempat . Menyimpan salinan sebelum langkah-langkah relaksasi membantu. Karena hanya diperlukan dalam FAS, itu tidak muncul dalam perhitungan linier.2 H u H o l d u H o l dH 2H uHold uHold
sumber