Estou usando o SNES do pacote de resolução não-linear do PETSc para resolver um sistema de equações não-lineares obtido discretizando uma equação diferencial parcial. Como posso determinar por que o solucionador não está convergindo e o que posso fazer para resolver com êxito minhas equações?
petsc
pde
implicit-methods
Jed Brown
fonte
fonte
Respostas:
O método de Newton pode não convergir por muitas razões, aqui estão algumas das mais comuns.
Aqui estão algumas das maneiras de ajudar a depurar a falta de convergência de Newton.
-snes_monitor -ksp_monitor_true_residual -snes_converged_reason -ksp_converged_reason
. Se a resolução linear não convergir, verifique se o jacobiano está correto e veja esta pergunta . Se o resíduo pré-condicionado convergir, mas o resíduo verdadeiro não, o pré-condicionador pode ser singular. Se a resolução linear convergir bem, mas a pesquisa de linha falhar, o jacobiano pode estar incorreto.-pc_type lu or -pc_type svd
para ver se o problema é um solucionador linear ruim-mat_view
ou-mat_view_draw
para ver se o jacobiano parece razoável-snes_type test -snes_test_display
para ver se o jacobiano que você está usando está errado. Compare a saída ao adicionar-mat_fd_type ds
para ver se o resultado é sensível à escolha do parâmetro diferencial.-snes_mf_operator -pc_type lu
para ver se o jacobiano que você está usando está errado. Se o problema for muito grande para uma solução direta, tente-snes_mf_operator -pc_type ksp -ksp_ksp_rtol 1e-12
. Compare a saída ao adicionar-mat_mffd_type ds
para ver se o resultado é sensível à escolha do parâmetro diferencial.-snes_ls_monitor
para ver se a pesquisa de linha está falhando (isso geralmente é um sinal de um jacobiano ruim).-info
para obter informações mais detalhadas sobre o processo da solução.Aqui estão algumas maneiras de ajudar o processo de Newton se tudo acima
-snes_grid_sequence
é tudo o que você precisa se estiver trabalhando com aDM
) para gerar uma melhor estimativa inicial de sua malha mais fina./configure --with-precision=__float128 --download-f2cblaslapack
com PETSc 3.2 e posterior, precisa da versão 4.6 ou posterior dos compiladores GNU)if
declarações na avaliação residual, por exemplo, mudança de fase ou limitadores de TVD). Use um solucionador de desigualdades variacionais ( SNESVINEWTONRSLS ) se as descontinuidades forem de importância fundamental.-ts_type tr
, pode ser necessário ajustar os parâmetros).fonte