Atenção
A solução de problemas no ponto de sela envolve muito mais opções do que problemas definidos, e há muito mais coisas que podem dar errado. Use monitores para todos os níveis para depurar a convergência, para garantir que os espaços nulos sejam manipulados corretamente quando os operadores auxiliares forem singulares (geralmente apenas um espaço nulo constante) e para garantir que os pré-condicionadores sejam estáveis. Essas técnicas são discutidas nesta pergunta .
Solução de problemas do ponto de sela
Você pode começar com a seção sobre resolução de matrizes de bloco no Manual do Usuário . Para problemas do tipo Stokes, você pode criar um pré-condicionador de complemento Schur usando o PCFIELDSPLIT .
-pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_detect_saddle_point
Isso pode ser combinado com um pré-condicionador do comutador dos mínimos quadrados para o complemento Schur ( -fieldsplit_1_pc_type lsc
). É comum -fieldsplit_1_ksp_type preonly
e deixa a iteração externa fazer a maior parte do trabalho. As variantes triangulares de bloco são populares quando usadas dessa maneira, por exemplo -pc_fieldsplit_schur_fact_type upper
,.
Você pode encontrar mais detalhes sobre a composição do solucionador usando as opções de opções em nosso artigo (pré-impressão) , que também discute a comutação multigrid com a decomposição do bloco (colocando o campo dividido dentro da multigrid).
Para muitos problemas, convém personalizar a decomposição de campo e os pré-condicionadores de complemento Schur, muitos dos quais envolvem operadores auxiliares. Por exemplo, o método "PCD) de Elman et al requer discretização de um operador auxiliar no espaço de pressão. Veja exemplos de PCSHELL e a seção do manual do usuário para essa finalidade.