Я использую пакет нелинейных решателей PETSc SNES для решения системы нелинейных уравнений, полученных путем дискретизации уравнения в частных производных. Как я могу определить, почему решатель не сходится и что я могу сделать, чтобы успешно решить мои уравнения?
petsc
pde
implicit-methods
Джед браун
источник
источник
Ответы:
Метод Ньютона может не сходиться по многим причинам, вот некоторые из наиболее распространенных.
Вот некоторые способы помочь отладить отсутствие сходимости Ньютона.
-snes_monitor -ksp_monitor_true_residual -snes_converged_reason -ksp_converged_reason
. Если линейное решение не сходится, проверьте правильность якобиана, а затем посмотрите этот вопрос . Если предобусловленный остаток сходится, а истинный остаток - нет, предобусловливатель может быть единственным. Если линейное решение сходится хорошо, но поиск строки не удается, якобиан может быть неверным.-pc_type lu or -pc_type svd
чтобы увидеть, если проблема плохой линейный решатель-mat_view
или,-mat_view_draw
чтобы увидеть, выглядит ли якобиан разумно-snes_type test -snes_test_display
чтобы увидеть, если якобиан, который вы используете, не так. Сравните результат при добавлении,-mat_fd_type ds
чтобы увидеть, чувствителен ли результат к выбору параметра разности.-snes_mf_operator -pc_type lu
чтобы увидеть, если якобиан, который вы используете, не так. Если проблема слишком велика для прямого решения, попробуйте-snes_mf_operator -pc_type ksp -ksp_ksp_rtol 1e-12
. Сравните результат при добавлении,-mat_mffd_type ds
чтобы увидеть, чувствителен ли результат к выбору параметра разности.-snes_ls_monitor
чтобы увидеть, если поиск строки не удался (это обычно признак плохого якобиана).-info
чтобы получить более подробную информацию о процессе решения.Вот несколько способов помочь процессу Ньютона, если все вышеперечисленное подтвердится
-snes_grid_sequence
это все, что вам нужно, если вы работаете с aDM
), чтобы генерировать лучшее начальное предположение о вашей более мелкой сетке./configure --with-precision=__float128 --download-f2cblaslapack
с PETSc 3.2 и более поздними версиями требуется компилятор GNU версии 4.6 или более поздней)if
в остаточной оценке есть операторы, например, изменение фазы или ограничители TVD). Используйте средство решения вариационных неравенств ( SNESVINEWTONRSLS ), если разрывы имеют фундаментальное значение.-ts_type tr
возможно, придется настроить параметры).источник