Предупреждение
Решение проблем седловой точки включает в себя гораздо больше выбора, чем определенные проблемы, и есть гораздо больше вещей, которые могут пойти не так. Используйте мониторы для всех уровней для отладки сходимости, чтобы убедиться, что пустые пространства обрабатываются правильно, когда вспомогательные операторы единичны (обычно это просто постоянное нулевое пространство), и чтобы обеспечить стабильность предварительные условия. Эти методы обсуждаются в этом вопросе .
Решение проблем седловой точки
Вы можете начать с раздела о решении блочных матриц в Руководстве пользователя . Для задач, подобных задачам Стокса, вы можете создать предварительное условие комплемента Schur, используя PCFIELDSPLIT .
-pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_detect_saddle_point
Это может быть объединено с предобусловливателем коммутации наименьших квадратов для дополнения Schur ( -fieldsplit_1_pc_type lsc
). Это обычное явление, -fieldsplit_1_ksp_type preonly
и пусть внешняя итерация выполняет большую часть работы. Блочно-треугольные варианты популярны при использовании таким образом, например,-pc_fieldsplit_schur_fact_type upper
.
Вы можете найти более подробную информацию о составе решателя, используя опции параметров в нашей статье (препринт) , в которой также обсуждается коммутация многосетки с разложением блока (размещение поля поля внутри многосетки).
Для многих задач вы захотите настроить декомпозицию поля и предобусловливатели дополнения Шура, многие из которых включают вспомогательные операторы. Например, метод «конвекции-диффузии давления» (PCD) от Elman et al. Требует дискретизации вспомогательного оператора в пространстве давления. С этой целью см. Примеры PCSHELL и раздел руководства пользователя.