Código Multigrid Algébrico

9

Eu gostaria de entender mais detalhes sobre a implementação de Algebraic Multigrid Methods (AMG). Eu tenho lido "Um tutorial multigrid", que é muito bom e explica todos os detalhes da interpolação, operador de grade grossa e seleção de grade grossa para AMG. No entanto, acho que não há nada como brincar e ler um código.

Então, eu gostaria de perguntar se alguém conhece algum "código de exemplo" clássico da AMG, como o código FORTRAN geométrico multigrid disponível no final de "Métodos Multigrid" (SIAM) de SF McCormick. É muito difícil obter um código de alta qualidade e produção como o BoomerAMG para aprender mais sobre o método.

Bernardo MR
fonte
Você está especificamente interessado na AMG clássica (em oposição à agregação suavizada)? Nesse caso, indique isso na pergunta.
precisa

Respostas:

10

O BoomerAMG faz parte do pacote Hypre , que é simples de adquirir. Um código muito menos complexo se você começar a analisar esses métodos pode ser o PyAMG .

Peter Brune
fonte
Sim, dei uma olhada no PyAMG, que é um código muito bom, mas ele tem todo esse material sobre agrupar código C / C ++ no Python, implementa métodos AMG diferentes do que o "clássico" e assim por diante. Eu estava procurando por algo mais simples, que as pessoas usassem para ensinar.
Bernardo MR
4
Infelizmente, a experiência geral com o uso e a tentativa de contribuir com os códigos AMG é que, se você não tiver várias opções, não poderá resolver nada que se aproxime de um problema interessante. Portanto, seu pacote AMG típico incluirá várias opções para aproximação de conexão, construção de interpoladores e suavização que certamente são difíceis de analisar pela leitura de código. Dito isto, a AMG clássica é simples: implementá-la você mesmo ou pedir que seus alunos tentem fazer isso sozinhos (dependendo do nível de habilidade) pode ser o caminho a percorrer.
Peter Brune
2

Eu recomendo a introdução de Alfio Borizi ao método multigrid algébrico. Há um exemplo de código fortran 77 no apêndice A.

Paulo
fonte
Eu acho que ele está perguntando sobre implementações, não mais literatura.
22612 Jack Poulson
11
@ JackPoulson: Possui uma implementação no apêndice.
Paul
2
Desculpe, aparentemente eu não posso ler esta manhã. Votado.
22612 Jack Poulson
11
@ Paul: Eu posso estar errado, mas acho que esse é um código multigrid geométrico para o problema de Poisson (que funciona também para o caso não-linear).
Bernardo MR
@ BernardoM.R .: Acabei de encontrar esse arquivo postscript ... Ele contém muitos exemplos concretos de operadores de prolongamento e restrição para problemas de modelo. No entanto, ele realmente não tem um código completo, mas ainda pode ser útil para você.
Paul
1

Há também o pacote ML que faz parte do Trilinos. Sua reputação é igualmente boa como a do BoomerAMG / hypre.

Um pacote Trilinos mais recente para AMG é chamado MueLu, acredito, e também deve estar disponível nas versões mais recentes.

Todos estes são de código aberto.

Wolfgang Bangerth
fonte
11
MueLu não foi lançado e da última vez que falei com ele, Ray não esperava um lançamento público por mais um ano. Observe que ML e MueLu (na medida em que ouvi o que há nele) são baseados em agregação suavizada, que é um algoritmo bastante diferente do AMG clássico (no qual o BoomerAMG se baseia).
precisa
1

Estou trabalhando nessa implementação há um tempo. É Python / Numpy / Scipy. Não é multigrid algébrico - você precisa fornecer seu próprio operador de restrição. Mas se é uma implementação educacional em que você está interessado, gostaria de receber algumas solicitações pull para adicionar essa capacidade.

tsbertalan
fonte