Saya menggunakan paket PETSc non -linier SNES untuk menyelesaikan sistem persamaan nonlinier yang diperoleh dengan mendiskritisasi persamaan diferensial parsial. Bagaimana saya bisa menentukan mengapa pemecah tidak konvergen dan apa yang bisa saya lakukan untuk berhasil menyelesaikan persamaan saya?
petsc
pde
implicit-methods
Jed Brown
sumber
sumber
Jawaban:
Metode Newton mungkin tidak konvergen karena banyak alasan, berikut adalah beberapa yang paling umum.
Berikut adalah beberapa cara untuk membantu men-debug kurangnya konvergensi Newton.
-snes_monitor -ksp_monitor_true_residual -snes_converged_reason -ksp_converged_reason
. Jika penyelesaian linier tidak bertemu, periksa apakah Jacobian benar, lalu lihat pertanyaan ini . Jika residu prekondisi menyatu, tetapi residu sebenarnya tidak, prekondisi mungkin tunggal. Jika penyelesaian linear konvergen dengan baik, tetapi pencarian baris gagal, Jacobian mungkin salah.-pc_type lu or -pc_type svd
untuk melihat apakah masalahnya adalah pemecah linier yang buruk-mat_view
atau-mat_view_draw
untuk melihat apakah Jacobian terlihat masuk akal-snes_type test -snes_test_display
untuk melihat apakah Jacobian yang Anda gunakan salah. Bandingkan output ketika Anda menambahkan-mat_fd_type ds
untuk melihat apakah hasilnya sensitif terhadap pilihan parameter pembeda.-snes_mf_operator -pc_type lu
untuk melihat apakah Jacobian yang Anda gunakan salah. Jika masalah terlalu besar untuk diselesaikan langsung, coba-snes_mf_operator -pc_type ksp -ksp_ksp_rtol 1e-12
. Bandingkan output ketika Anda menambahkan-mat_mffd_type ds
untuk melihat apakah hasilnya sensitif terhadap pilihan parameter pembeda.-snes_ls_monitor
untuk melihat apakah pencarian baris gagal (ini biasanya pertanda Jacobian buruk).-info
untuk mendapatkan informasi lebih rinci tentang proses solusi.Berikut adalah beberapa cara untuk membantu proses Newton jika semuanya di atas diperiksa
-snes_grid_sequence
adalah yang Anda butuhkan jika bekerja dengan aDM
) untuk menghasilkan tebakan awal yang lebih baik pada mesh yang lebih halus./configure --with-precision=__float128 --download-f2cblaslapack
dengan PETSc 3.2 dan yang lebih baru, membutuhkan versi 4.6 atau yang lebih baru dari kompiler GNU)if
pernyataan dalam evaluasi residu, misalnya perubahan fase atau pembatas TVD). Gunakan pemecah ketimpangan variasional ( SNESVINEWTONRSLS ) jika diskontinuitas itu sangat penting.-ts_type tr
, mungkin harus menyesuaikan parameter).sumber