Quais pré-condicionadores (e solucionadores) no PETSc para sistemas simétricos indefinidos devo usar?


12

Meu sistema é um problema simétrico de FE com multiplicadores de lagrange (por exemplo, fluxo incompressível de Stokes):

(ABTBC)

onde é o caso típico (eu até me certifiquei de que as equações sejam numeradas para que os multiplicadores de Lagrange apareçam por último). O sistema é bastante grande (+ 100k linhas).C=0

Depois de ler a resposta a essa pergunta , tive a impressão de que existem pré-condicionadores adequados que podem ser usados ​​para problemas mistos de FE.

Usando o PETSc, eu consegui resolver o sistema com MINRES ( -ksp_type minres -pc_type none -mat_type sbaij), embora a precisão não seja ótima (causando várias iterações de Newton para um problema linear). Nenhuma outra combinação de pré-condicionador e ksp-solver parece funcionar.

Existe alguma combinação de sinalizadores para o PETSc que resolverá esse sistema mais rapidamente do que com apenas MINRES?


1
Bem-vindo ao SciComp SE! Sua pergunta está bem colocada em termos de clareza e generalidade. Apenas uma frase é um tanto obscura ou incompleta: o que você quer dizer com as computações inexatas?
Jan

1
Eu esqueci de terminar a frase! Espero que esteja claro agora.
Mikael Öhman

Respostas:


13

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 preonlye 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.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.