FAS-multigrid plus lent que la correction linéaire des défauts?

9

J'ai implémenté un solveur multigrille V-Cycle utilisant à la fois une correction de défaut linéaire (LDC) et un schéma d'approximation complète (FAS).

Mon problème est le suivant: En utilisant LDC, le résidu est réduit d'un facteur de ~ 0,03 par cycle. L'implémentation FAS converge également avec un facteur linéaire, mais le facteur n'est que de ~ 0,58. Ainsi, le SAF a besoin d'environ 20 fois le nombre de cycles.

La plupart du code est partagé, la seule différence réside dans les calculs vers le haut / vers le bas, les PMA utilisent

bas:uH:=0,bH:=IhH(bhLhuh)

en haut:uh:=uh+IHhuH

et FAS utilise

vers le bas:uH:=IhHuh,bH:=IhHbh+LHIhHuhIhHLhuh

up:uh:=uh+IHh(uHIhHuh)

Mon paramètre de test est tiré de "A Multigrid Tutorial, Second Edition" de Brigg, p. 64, a la solution analytique

u(x,y)=(x2x4)(y4y2) avecx,y[0,1]2

et l'équation est à l' aide du pochoir linéaire typique de 5 points en tant que l' opérateur de Laplace- . La supposition initiale est .L v = 0Lv=Δu=:bLv=0

La modification du paramètre de test, par exemple vers le trivial utilisant une estimation initiale de entraîne presque les mêmes facteurs de convergence.u(x,y)=0v=1

Étant donné que seul le code bas / haut diffère, les résultats LDC sont conformes au livre et le FAS semble au moins fonctionner aussi, je n'ai aucune idée pourquoi il est tellement plus lent dans le même cadre linéaire.

Il y a un comportement étrange dans les PMA et le SAF que je ne peux pas encore expliquer qui ne se produit que si la supposition initiale est mauvaise (par exemple mais aussi dans mes expériences multigrilles complètes où l'interpolation vers la nouvelle grille fine augmente le résiduel de à ): Si j'augmente le nombre de relaxations de post-correction à un nombre très élevé de telle sorte que la solution soit résolue à la précision de la machine sur la grille grossière, il perd presque tous les chiffres lorsque vous montez d'un cran à la prochaine grille fine.=01015101

Puisqu'une image en dit plus que des mots:

// first cycle, levels 0-4
// DOWN
VCycle top 4, start               res_norm 3.676520e+02 // initial residual
VCycle top 4, cycle 0, current 4, res_norm 3.676520e+02
VCycle top 4, cycle 0, current 4, res_norm 1.520312e+02 // relaxed (2 iterations)
VCycle tau_norm 2.148001e+01 (DEBUG calculation)
VCycle top 4, cycle 0, current 3, res_norm 1.049619e+02 // restricted
VCycle top 4, cycle 0, current 3, res_norm 5.050392e+01 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 2, res_norm 3.518764e+01 // restricted
VCycle top 4, cycle 0, current 2, res_norm 1.759372e+01 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 1, res_norm 1.234398e+01 // restricted
VCycle top 4, cycle 0, current 1, res_norm 4.728777e+00 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 0, res_norm 3.343750e+00 // restricted
// coarsest grid
VCycle top 4, cycle 0, current 0, res_norm 0.000000e+00 // solved
// UP
VCycle top 4, cycle 0, current 1, res_norm 3.738426e+00 // prolonged
VCycle top 4, cycle 0, current 1, res_norm 0.000000e+00 // relaxed (many iterations)
VCycle top 4, cycle 0, current 2, res_norm 1.509429e+01 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 2, res_norm 2.512148e-15 // relaxed (many iterations)
VCycle top 4, cycle 0, current 3, res_norm 4.695979e+01 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 3, res_norm 0.000000e+00 // relaxed (many iterations)
VCycle top 4, cycle 0, current 4, res_norm 1.469312e+02 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 4, res_norm 9.172812e-24 // relaxed (many iterations)

Je ne sais pas s'il ne peut y avoir que quelques chiffres gagnés par cycle ou si cela indique une erreur lors de l'interpolation à la grille fine. Si c'est le dernier cas, comment le PMA peut-il atteindre les ratios résiduels de ~ 0,03 en utilisant toujours 2 relaxations?

Silpion
la source

Réponses:

7

Je ne connais pas directement votre réponse car j'utilise principalement le SAF au lieu de la correction car je fais du multigrille pour les problèmes non linéaires, mais quelques réflexions que vous pouvez examiner:

  • Vous appliquez un schéma de correction linéaire à un problème linéaire, il n'est donc pas choquant qu'il fonctionne très bien.

  • Tenez compte de vos conditions aux limites: assurez-vous de les faire correctement, et notez également que les BC complexes peuvent avoir un aspect complètement différent sur la grille grossière, ce qui rend les corrections qui ne sont pas si utiles.

  • Vérifiez votre traitement du terme source; Je me souviens d'avoir raté quelque chose dans la phase de prolongation liée à ce terme quand je l'ai écrit pour poisson.

  • Je n'ai jamais vu la nécessité de répéter la convergence sur le réseau le plus grossier. Une solution dépend du bon résidu de la grille, ce qui n'est pas le cas. Vous essayez de pousser ces erreurs hors du domaine / de les lisser. Si vous êtes complètement convergé sur la grille la plus grossière dans une itération précoce, votre solution est naturellement assez loin de la bonne solution de grille fine car vos résidus n'y sont pas à jour. C'est presque certainement la raison pour laquelle vous voyez des résidus augmenter dans la phase de prolongation.

  • Essayez également un facteur de relaxation pour les opérateurs de restriction et de prolongation, par exemple 0,75.

Si cela aide, voici à quoi ressemblait mon historique résiduel FAS pour un problème de poisson utilisant une seule grille pendant des cycles complets de 7 V. Je crois que le facteur de relaxation était de 0,75, et j'utilisais un schéma RK à 3 étapes comme un lisseur avec une seule itération à chaque niveau de la grille.

histoire res

Aurelius
la source
Merci pour votre réponse, le cas linéaire et le BC simple (bordure carrée = 0) ne sont que la première étape, le test des cas réels sera fait après le travail de paramétrage "facile". Je ne sais pas si je comprends ce que vous entendez par un facteur de relaxation pour la restriction et la prolongation. J'utilise actuellement l'interpolation bilinéaire pour la prolongation et la demi-pondération pour la restriction.
Silpion
Par relaxation, je veux dire que pour votre étape de prolongation, modifiez-la en: où est un facteur de relaxation. Généralement, plus la solution est compliquée, plus ce facteur doit diminuer. Dans les solutions avec beaucoup de discontinuités, je dois parfois ramener cela à environ 0,6, mais généralement 0,75-0,85 fonctionne. uh:=uh+αIHh(uHIhHuh)0<α<1
Aurelius
Bon à savoir. Dans mon réglage, cela ne fait que ralentir le taux de convergence de mais je le garderai à l'esprit lors du test de données plus complexes. (1α)
Silpion
@Aurelius, vous mentionnez que la convergence sur le réseau grossier n'est pas nécessaire. Je suis d'accord avec votre raisonnement, mais les preuves de convergence dans la littérature (pour le cas linéaire) supposent que la résolution de la grille grossière est exacte. Je ne connais aucune référence (pour le cas linéaire ou non linéaire) dans laquelle il est indiqué que la résolution de la grille grossière ne devrait pas être exacte, et je me demandais si vous pouviez citer une référence pour cela? Je serais très intéressé à voir cela moi
Keeran Brabazon
@KeeranBrabazon Je n'ai pas non plus de référence pour cela, et je ne suis honnêtement pas familier avec les détails des preuves de convergence pour les multigrilles. Je suggère de rechercher toute littérature antérieure qui présente ce facteur de relaxation. Ce facteur est commun à toutes les implémentations multigrilles modernes que j'ai vues, et il est intuitivement vrai qu'il ne serait pas nécessaire si des solutions de cours exactes étaient nécessaires / souhaitables. Pour une preuve intuitive, j'imagine juste à quoi ressemblent les conditions aux limites pour la grille la plus grossière vs la plus fine. Il est facile de les imaginer créer des solutions très différentes.
Aurelius
6

Si vous utilisez une discrétisation centrée sur les sommets, la restriction d'état doit être l'injection plutôt que la restriction résiduelle pondérée que vous semblez utiliser. Autrement dit, remplacez par lors de la restriction de l'état. L'utilisation d'une restriction pondérée pour l'état produit un aliasing des composants haute fréquence de l'état qui, après l'application de génère un nouveau bruit à la même échelle qu'auparavant la correction grossière (les conditions aux limites sont particulièrement responsables de cet effet). Utilisez l'injection, , et ce problème devrait disparaître.I H h u hu h ( u H - I H h u h ) I H h u hIhHI^hHuhuh(uHIhHuh)I^hHuh

Spectralement, la restriction d'état ne nécessite qu'un ordre secondaire élevé (conservation précise des basses fréquences), mais l'ordre primaire (repliement des hautes fréquences) n'a pas d'importance. L'injection a un ordre primaire 0 et un ordre secondaire infini. Pendant ce temps, la restriction résiduelle doit être à la fois d'ordre primaire et secondaire pour être positive (au moins). Voir la section 4.3 du guide multigrille d' Achi Brandt .

Lors de la conception de méthodes MG, il est également bon de regarder les erreurs plutôt que les résidus et de vous assurer que vous pondérez la norme de manière appropriée.

Jed Brown
la source
De bons points et je n'avais pas mentionné quelque chose dans ce sens. Un aspect important de l'utilisation pratique du multigrille est le choix du lisseur: vous en voulez un qui atténue le plus rapidement possible les erreurs de haute fréquence, ce qui résout le problème que vous décrivez.
Aurelius
@Aurelius À partir du journal fourni, vous pouvez voir que le lissage n'est pas le problème. Rappelons que Silpion utilise le même lissage que pour la correction de défauts MG, qui converge correctement.
Jed Brown
>0.8
1

uoldH=IhHuh

uhuh+IHh(uHIhHuh)=uh+IHh(uHuoldH)

H2HuoldHuoldH

Silpion
la source