Estoy usando el paquete de solución no lineal de PETSc SNES para resolver un sistema de ecuaciones no lineales obtenidas al discretizar una ecuación diferencial parcial. ¿Cómo puedo determinar por qué el solucionador no converge y qué puedo hacer para resolver con éxito mis ecuaciones?
petsc
pde
implicit-methods
Jed Brown
fuente
fuente
Respuestas:
El método de Newton puede no converger por muchas razones, estas son algunas de las más comunes.
Estas son algunas de las formas de ayudar a depurar la falta de convergencia de Newton.
-snes_monitor -ksp_monitor_true_residual -snes_converged_reason -ksp_converged_reason
. Si la solución lineal no converge, verifique si el jacobiano es correcto, luego vea esta pregunta . Si el residuo preacondicionado converge, pero el residual verdadero no, el preacondicionador puede ser singular. Si la resolución lineal converge bien, pero la búsqueda de línea falla, el jacobiano puede ser incorrecto.-pc_type lu or -pc_type svd
para ver si el problema es un solucionador lineal pobre-mat_view
o-mat_view_draw
para ver si el jacobiano parece razonable-snes_type test -snes_test_display
para ver si el jacobiano que estás usando está mal. Compare la salida cuando agregue-mat_fd_type ds
para ver si el resultado es sensible a la elección del parámetro de diferenciación.-snes_mf_operator -pc_type lu
para ver si el jacobiano que estás usando está mal. Si el problema es demasiado grande para una solución directa, intente-snes_mf_operator -pc_type ksp -ksp_ksp_rtol 1e-12
. Compare la salida cuando agregue-mat_mffd_type ds
para ver si el resultado es sensible a la elección del parámetro de diferenciación.-snes_ls_monitor
para ver si la búsqueda de línea está fallando (esto generalmente es un signo de un mal jacobiano).-info
para obtener información más detallada sobre el proceso de solución.Aquí hay algunas formas de ayudar al proceso de Newton si todo lo anterior se verifica
-snes_grid_sequence
es todo lo que necesita si trabaja con aDM
) para generar una mejor estimación inicial en su malla más fina./configure --with-precision=__float128 --download-f2cblaslapack
con PETSc 3.2 y posterior, necesita compiladores GNU versión 4.6 o posterior)if
declaraciones en la evaluación residual, por ejemplo, cambio de fase o limitadores de TVD). Utilice un solucionador de desigualdad variacional ( SNESVINEWTONRSLS ) si las discontinuidades son de importancia fundamental.-ts_type tr
puede que tenga que ajustar los parámetros).fuente