J'utilise le package de résolution non linéaire SNES de PETSc pour résoudre un système d'équations non linéaires obtenues en discrétisant une équation différentielle partielle. Comment puis-je déterminer pourquoi le solveur ne converge pas et que puis-je faire pour résoudre avec succès mes équations?
petsc
pde
implicit-methods
Jed Brown
la source
la source
Réponses:
La méthode de Newton peut ne pas converger pour de nombreuses raisons, voici quelques-unes des plus courantes.
Voici quelques façons d'aider à déboguer le manque de convergence de Newton.
-snes_monitor -ksp_monitor_true_residual -snes_converged_reason -ksp_converged_reason
. Si la résolution linéaire ne converge pas, vérifiez si le jacobien est correct, puis voyez cette question . Si le résidu préconditionné converge, mais pas le vrai résidu, le préconditionneur peut être singulier. Si la résolution linéaire converge bien, mais la recherche de ligne échoue, le jacobien peut être incorrect.-pc_type lu or -pc_type svd
pour voir si le problème est un mauvais solveur linéaire-mat_view
ou-mat_view_draw
pour voir si le jacobien semble raisonnable-snes_type test -snes_test_display
pour voir si le jacobien que vous utilisez est faux. Comparez la sortie lorsque vous ajoutez-mat_fd_type ds
pour voir si le résultat est sensible au choix du paramètre de différenciation.-snes_mf_operator -pc_type lu
pour voir si le jacobien que vous utilisez est faux. Si le problème est trop important pour être résolu directement, essayez-snes_mf_operator -pc_type ksp -ksp_ksp_rtol 1e-12
. Comparez la sortie lorsque vous ajoutez-mat_mffd_type ds
pour voir si le résultat est sensible au choix du paramètre de différenciation.-snes_ls_monitor
pour voir si la recherche de ligne échoue (c'est généralement le signe d'un mauvais jacobien).-info
pour obtenir des informations plus détaillées sur le processus de solution.Voici quelques façons d'aider le processus de Newton si tout ce qui précède est vérifié
-snes_grid_sequence
c'est tout ce dont vous avez besoin si vous travaillez avec aDM
) pour générer une meilleure estimation initiale de votre maillage plus fin./configure --with-precision=__float128 --download-f2cblaslapack
avec PETSc 3.2 et versions ultérieures, nécessite des compilateurs GNU version 4.6 ou ultérieure)if
instructions dans l'évaluation résiduelle, par exemple un changement de phase ou des limiteurs TVD). Utilisez un solveur variationnel d'inégalité ( SNESVINEWTONRSLS ) si les discontinuités sont d'une importance fondamentale.-ts_type tr
, il faudra peut-être ajuster les paramètres).la source