Multigrid FAS più lento della correzione lineare dei difetti?


9

Ho implementato un solutore multigrid V-Cycle utilizzando sia una correzione lineare dei difetti (LDC) sia uno schema di approssimazione completo (FAS).

Il mio problema è il seguente: usando LDC il residuo è ridotto di un fattore di ~ 0,03 per ciclo. L'implementazione FAS converge anche con un fattore lineare, ma il fattore è solo ~ 0,58. Pertanto la FAS ha bisogno di circa 20 volte il numero di cicli.

La maggior parte del codice è condiviso, l'unica differenza sono i calcoli down / up, che utilizza LDC

giù:uH: =0,BH: =iohH(Bh-Lhuh)

su:uh: =uh+ioHhuH

e usi FAS

giù:uH: =iohHuh,BH: =iohHBh+LHiohHuh-iohHLhuh

su:uh: =uh+ioHh(uH-iohHuh)

La mia impostazione di prova è tratta da "A Multigrid Tutorial, Second Edition" di Brigg, p. 64, ha la soluzione analitica

u(X,y)=(X2-X4)(y4-y2) conX,y[0,1]2

e l'equazione è utilizzando il tipico lineare 5 punti stencil come Laplace-operatore . L'ipotesi iniziale è .L v = 0Lv=Δu=:BLv=0

Cambiando l'impostazione del test, ad es. Con la banale usando un'ipotesi iniziale di ottengono quasi gli stessi fattori di convergenza.v = 1u(X,y)=0v=1

Poiché solo il codice down / up differisce, i risultati LDC sono conformi al libro e almeno il FAS sembra funzionare, non ho idea del perché sia ​​molto più lento nella stessa impostazione lineare.

Esiste un comportamento strano sia in LDC che in FAS che non posso ancora spiegare che si verifica solo se l'ipotesi iniziale è negativa (ad esempio ma anche nei miei esperimenti multigrid completi in cui l'interpolazione con la nuova griglia fine aumenta il residuo da a ): se aumento il numero di rilassamenti post correzione a un numero molto elevato in modo tale che la soluzione sia risolta per la precisione della macchina sulla griglia grossolana, perde quasi tutte le cifre quando si sale di un gradino alla prossima griglia fine.10 - 15 10 - 1=010-1510-1

Dal momento che un'immagine dice più delle parole:

// 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)

Non sono sicuro che si possano ottenere solo poche cifre per ciclo o se ciò indica un errore durante l'interpolazione alla griglia fine. Se si tratta di quest'ultimo caso, come può il LDC raggiungere i rapporti residui per libro di ~ 0,03 usando sempre 2 rilassamenti?

Risposte:


7

Non conosco direttamente la tua risposta poiché utilizzo principalmente FAS anziché correzione poiché faccio multigrid per problemi non lineari, ma alcuni pensieri che puoi esaminare:

  • Stai applicando uno schema di correzione lineare a un problema lineare, quindi non è scioccante che lo faccia molto bene.

  • Considera le tue condizioni al contorno: assicurati di eseguirle correttamente e nota anche che i BC complicati potrebbero apparire completamente diversi sulla griglia grossolana, apportando correzioni lì non così utili.

  • Ricontrolla il trattamento del termine sorgente; Ricordo di aver rovinato qualcosa nella fase di prolungamento relativa a quel termine quando l'ho scritto per Poisson.

  • Non ho mai visto la necessità di ripetere la convergenza sulla griglia più grossolana. Una soluzione dipende dal fatto che il residuo della griglia fine sia corretto, cosa che non lo è. Stai cercando di eliminare quegli errori dal dominio / eliminarli. Se ti converti completamente sulla griglia più grossolana in una prima iterazione, la tua soluzione è naturalmente piuttosto lontana dalla corretta soluzione a griglia fine perché i tuoi residui non sono aggiornati. Questo è quasi certamente il motivo per cui stai vedendo i residui saltare nella fase di prolungamento.

  • Inoltre, prova un fattore di rilassamento sia per gli operatori di restrizione che di prolungamento, diciamo 0.75.

Se aiuta, ecco come appariva la mia storia residua di FAS per un problema di poisson che utilizzava una singola griglia attraverso cicli completi a 7 V. Credo che il fattore di rilassamento sia stato di 0,75 e stavo usando uno schema RK a 3 stadi come più fluido con una singola iterazione a ciascun livello della griglia.

storia di res


Grazie per la tua risposta, il caso lineare e il BC semplice (bordo quadrato = 0) sono solo il primo passo, testare casi reali sarà fatto dopo che le impostazioni "facili" funzionano. Non sono sicuro di capire cosa intendi con un fattore di rilassamento per restrizione e prolungamento. Attualmente utilizzo l'interpolazione bilineare per il prolungamento e la metà ponderazione per la restrizione.
Silpion,

uh: =uh+αioHh(uH-iohHuh)0<α<1

(1-α)

@Aurelius dici che non è necessario convergere sulla griglia grossolana. Sono d'accordo con il tuo ragionamento, ma le prove di convergenza in letteratura (per il caso lineare) presumono che la risoluzione della griglia grossolana sia esatta. Non sono a conoscenza di alcun riferimento (per il caso lineare o non lineare) in cui si afferma che la risoluzione della griglia grossolana non dovrebbe essere esatta, e mi chiedevo se si potesse citare un riferimento per questo? Sarei molto interessato a vederlo da solo
Keeran Brabazon,

@KeeranBrabazon Non ho neanche un riferimento per questo, e onestamente non ho familiarità con i dettagli delle prove di convergenza per multigrid. Suggerirei di cercare qualsiasi letteratura antica che introduce quel fattore di rilassamento. Questo fattore è comune a tutte le moderne implementazioni multigrid che ho visto ed è intuitivamente vero che non sarebbe necessario se fossero necessarie / desiderabili soluzioni esatte di rotta. Per una dimostrazione intuitiva, immagino solo quali siano le condizioni al contorno per la griglia più grossolana contro la migliore. È facile immaginarli mentre creano soluzioni molto diverse.
Aurelio,

6

iohHio^hHuhuh(uH-iohHuh)io^hHuh

Dal punto di vista spettrale, la restrizione statale richiede solo un ordine secondario elevato (conservazione accurata delle basse frequenze), ma l'ordine primario (aliasing delle alte frequenze) non ha importanza. L'iniezione ha ordine primario 0 e ordine secondario infinito. Nel frattempo, la restrizione residua richiede che sia l'ordine primario sia quello secondario siano positivi (almeno). Vedere la sezione 4.3 della Guida multigrid di Achi Brandt .

Quando si progettano i metodi MG, è anche bene guardare agli errori piuttosto che ai residui e assicurarsi di ponderare la norma in modo appropriato.


Aspetti positivi, e non avevo menzionato qualcosa di simile. Un aspetto importante dell'uso pratico di multigrid è la scelta di una più fluida: ne vuoi una che smorzi gli errori ad alta frequenza il più rapidamente possibile, che affronti il ​​problema che descrivi.
Aurelio,

@Aurelius Dal registro fornito, puoi vedere che il problema non è il più fluido. Ricordiamo che Silpion utilizza lo stesso fluido per la correzione del difetto MG, che converge correttamente.
Jed Brown,

>0.8

1

uoldH=iohHuh

uhuh+ioHh(uH-iohHuh)=uh+ioHh(uH-uoldH)

H2HuoldHuoldH

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.