Usando multigrid algébrico para pré-condicionar operadores de difusão por convecção

8

Implementei um Navier Stokes baseado na discretização FEM e PETSc para resolver o sistema linear de equações. Para criar um procedimento de solução eficiente, sigo o artigo "Pré-condicionamento eficiente das equações de Navier-Stokes linearizadas para fluxo incompressível" (Silvester et al.), Que propõe uma abordagem de complemento de Schur. Funciona bastante bem no sentido de que eu tenho um número quase constante de iterações, independentemente do tamanho da malha e do tempo para os benchmarks simples que também são apresentados neste documento (fluxo de cavidade acionado por 2D e passo voltado para trás). Mas, no momento, resolvo o bloco de velocidade superior com um solucionador direto paralelo (MUMPS). O bloco Schur de pressão é resolvido com solucionadores inexatos, conforme proposto no artigo.

No artigo, os autores propõem executar em cada iteração externa um único ciclo V multigrid e usar um ponto Gauss-Seidel mais suave para aproximar o inverso desse operador discreto de difusão por convecção. Como não posso usar facilmente um método geométrico multigrid, pensei em substituir o solucionador direto por um ciclo V multigrid algébrico (boomeramg do pacote hypre). Porém, perdi o número constante de iterações ao tornar a malha mais fina.

Algum de vocês tem alguma idéia de como criar um pré-condicionador espectralmente equivalente e eficiente para o inverso das matrizes de velocidade com base no multigrid algébrico? Existe algo inerente que não permita fazer uso de multigrid algébrico neste caso? Caso contrário, qual poderia ser a fonte para perder o escalonamento constante da iteração?


Editar:

Eu adicionei alguns benchmarks para diferentes solucionadores do bloco de velocidade. O problema está resolvido é o fluxo de cavidade 2D padrão acionado, discretização com Taylor-Hood e um refinamento uniforme da caixa da unidade

Solucionador de problemas (MUMPS)

: 25 iter h=1h=132. : 25 iter h=1h=164 : 25 iter h=1h=1128 : 22 iterh=1256

um V-AMG (algébrico, boomeramg)

: 30 iter h=1h=132. : 30 iter h=1h=164 : 39 iter h=1h=1128 : 48 iterh=1256

FGMRES com pré-condicionador V-AMG (algébrico, boomeramg), rtol: 10-6

: 30 iter h=1h=132. : 29 iter h=1h=164 : 30 iter h=1h=1128 : 47 iterh=1256

FGMRES com pré-condicionador V-AMG (algébrico, boomeramg), atol: 10-8

: 27 iter h=1h=132. : 27 iter h=1h=164 : 28 iter h=1h=1128 : 26 iterh=1256

Thomas W.
fonte

Respostas:

2

O que você fez foi substituir o solucionador exato (direto) no canto superior esquerdo por um em que você faz apenas um único ciclo V. O caminho a seguir é resolver o bloco superior esquerdo em seu pré-condicionador usando um solucionador iterativo (por exemplo, GMRES) usando o AMG de ciclo V como pré-condicionador para esse solucionador interno. A experiência mostra que, se você usar o F-GMRES como solucionador externo, o solucionador interno do GMRES não precisará ser terrivelmente preciso. Apenas preciso o suficiente para permitir que ele produza um número quase constante de iterações externas.

Wolfgang Bangerth
fonte
Eu segui sua sugestão e fiz alguns testes com a substituição do solucionador exato por um fgmres (acho que é preciso usar também a variante flexibal de gmres como o solucionador interno como multigrid não deve se comportar como um operador linear) com o V-AMG como pré-condicionador . Adicionei os resultados à minha pergunta acima. Como você vê, quando substituo o ciclo V por um solucionador com tolerância relativa, obtenho os mesmos resultados. Somente executar o solucionador interno com uma tolerância absoluta torna a iteração externa constante ao preço do número crescente de iterações internas.
Thomas W.
Eu encontrei o problema! Surpreendentemente, o problema não foi devido a uma aproximação espectral ruim do operador de convecção-difusão, mas a algum erro que cometi na parte do complemento de Schur. Portanto, mesmo um ciclo V é bom para o bloco de velocidade e o solucionador exige 10 iterações por passo temporal, independentemente do tamanho da malha.
Thomas W.
Fico feliz em ouvir. Seus resultados são certamente em linha com a nossa experiência em papel de 35 aqui: math.tamu.edu/~bangerth/publications.html#x-reviewed
Wolfgang Bangerth