Ich verwende das nichtlineare Lösungspaket SNES von PETSc , um ein System nichtlinearer Gleichungen zu lösen, das durch Diskretisieren einer partiellen Differentialgleichung erhalten wird. Wie kann ich feststellen, warum der Löser nicht konvergiert, und was kann ich tun, um meine Gleichungen erfolgreich zu lösen?
petsc
pde
implicit-methods
Jed Brown
quelle
quelle
Antworten:
Newtons Methode kann aus vielen Gründen nicht konvergieren, hier sind einige der häufigsten.
Hier sind einige Möglichkeiten, um die fehlende Konvergenz von Newton zu beheben.
-snes_monitor -ksp_monitor_true_residual -snes_converged_reason -ksp_converged_reason
. Wenn die lineare Lösung nicht konvergiert, prüfen Sie, ob der Jacobi korrekt ist, und sehen Sie sich diese Frage an . Wenn das vorkonditionierte Residuum konvergiert, das wahre Residuum jedoch nicht, kann der Vorkonditionierer singulär sein. Wenn die lineare Lösung gut konvergiert, die Zeilensuche jedoch fehlschlägt, ist der Jacobi möglicherweise falsch.-pc_type lu or -pc_type svd
um festzustellen, ob das Problem ein schlechter linearer Löser ist-mat_view
oder, um-mat_view_draw
zu sehen, ob der Jacobianer vernünftig aussieht-snes_type test -snes_test_display
zu sehen, ob der Jacobianer, den du benutzt, falsch ist. Vergleichen Sie die Ausgabe beim Hinzufügen,-mat_fd_type ds
um festzustellen, ob das Ergebnis von der Wahl des Differenzierungsparameters abhängt.-snes_mf_operator -pc_type lu
zu sehen, ob der Jacobianer, den du benutzt, falsch ist. Wenn das Problem für eine direkte Lösung zu groß ist, versuchen Sie es-snes_mf_operator -pc_type ksp -ksp_ksp_rtol 1e-12
. Vergleichen Sie die Ausgabe beim Hinzufügen,-mat_mffd_type ds
um festzustellen, ob das Ergebnis von der Wahl des Differenzierungsparameters abhängt.-snes_ls_monitor
um festzustellen, ob die Zeilensuche fehlschlägt (dies ist normalerweise ein Zeichen für einen schlechten Jakobianer).-info
, um detailliertere Informationen zum Lösungsprozess zu erhalten.Hier sind einige Möglichkeiten, um den Newton-Prozess zu unterstützen, wenn alle oben genannten Punkte ausgecheckt sind
-snes_grid_sequence
ist alles, was Sie für die Arbeit mit a benötigenDM
), um eine bessere erste Schätzung Ihres feineren Netzes zu erzielen./configure --with-precision=__float128 --download-f2cblaslapack
Ausführung mit Quad-Genauigkeit (ab PETSc 3.2 werden GNU-Compiler der Version 4.6 oder höher benötigt)if
Aussagen in der Restauswertung vorliegen , z. B. Phasenwechsel oder TVD-Limiter). Verwenden Sie einen Variations-Ungleichungslöser ( SNESVINEWTONRSLS ), wenn die Diskontinuitäten von grundlegender Bedeutung sind.-ts_type tr
möglicherweise müssen Parameter angepasst werden).quelle