Code multigrille algébrique


9

Je voudrais comprendre plus de détails sur la mise en œuvre des méthodes multigrilles algébriques (AMG). J'ai lu "A Multigrid Tutorial", qui est assez bon et explique tous les détails de l'interpolation, de l'opérateur de grille grossière et de la sélection de grille grossière pour AMG. Cependant, je pense qu'il n'y a rien de tel que de jouer et de lire un code.

Je voudrais donc demander si quelqu'un connaît un "exemple de code" AMG classique, comme le code FORTRAN multigrille géométrique disponible à la fin de "Méthodes multigrille" (SIAM) par SF McCormick. Il est assez difficile d'obtenir un code de production et de haute qualité comme BoomerAMG pour en savoir plus sur la méthode.


Êtes-vous spécifiquement intéressé par l' AMG classique (par opposition à * l'agrégation lissée)? Si oui, veuillez l'indiquer dans la question.
Jed Brown

Réponses:


10

BoomerAMG fait partie du package Hypre , qui est très simple à acquérir. Un code beaucoup moins complexe si vous commencez à regarder ces méthodes pourrait être PyAMG .


Oui, j'ai jeté un œil à PyAMG, qui est un très bon code, mais il contient tout ce qui concerne l'encapsulation de code C / C ++ en Python, il implémente différentes méthodes AMG autres que la méthode "classique", et ainsi de suite. Je cherchais quelque chose de plus simple, que les gens utilisent pour l'enseignement.
Bernardo MR

4
Malheureusement, l'expérience générale avec l'utilisation et la tentative de contribuer aux codes AMG est que si vous n'avez pas une multitude d'options, vous ne pouvez pas résoudre quoi que ce soit approchant un problème intéressant. Par conséquent, votre package AMG typique comprendra un certain nombre d'options pour l'approximation de la connectivité, la construction d'interpolateurs et le lissage qui sont certainement difficiles à analyser par la lecture de code. Cela étant dit, l'AMG classique est extrêmement simple, et l'implémenter vous-même ou demander à vos élèves d'essayer de le faire eux-mêmes (en fonction de leur niveau de compétence) peut être la voie à suivre.
Peter Brune

2

Je recommande fortement l' introduction d' Alfio Borizi à la méthode multigrille algébrique. Il y a un exemple de code fortran 77 dans l'annexe A.


Je pense qu'il pose des questions sur les implémentations, pas plus de littérature.
Jack Poulson

1
@JackPoulson: Il a une implémentation en annexe.
Paul

2
Désolé, apparemment je ne peux pas lire ce matin. A voté.
Jack Poulson

1
@ Paul: Je peux me tromper, mais je pense que c'est un code multigrille géométrique pour le problème de Poisson (qui fonctionne aussi pour le cas non linéaire).
Bernardo MR

@ BernardoM.R .: Je viens de trouver ce fichier postscript ... Il contient de nombreux exemples concrets d'opérateurs de prolongation et de restriction pour les problèmes de modèle. Il n'a pas vraiment de code complet, mais il peut encore vous être utile.
Paul

1

Il y a aussi le paquet ML qui fait partie de Trilinos. Sa réputation est tout aussi bonne que celle de BoomerAMG / hypre.

Un nouveau package Trilinos pour AMG s'appelle MueLu, je crois, et devrait également être disponible dans les versions les plus récentes.

Tous ces éléments sont open source.


1
MueLu n'a pas été libéré et la dernière fois que je lui ai parlé, Ray ne s'attendait pas à une sortie publique avant un an environ. Notez que ML et MueLu (dans la mesure où j'ai entendu ce qu'il contient) sont basés sur une agrégation lissée qui est un algorithme tout à fait différent de l'AMG classique (sur lequel BoomerAMG est basé).
Jed Brown

1

Je travaille sur cette implémentation depuis un petit moment. C'est Python / Numpy / Scipy. Ce n'est pas multigrille algébrique - vous devez fournir votre propre opérateur de restriction. Mais s'il s'agit d'une implémentation pédagogique qui vous intéresse, j'accueillerais volontiers certaines demandes d'ajout d'une telle capacité.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.