FAS-multigrid más lento que la corrección de defecto lineal?

9

He implementado un solucionador multigrid V-Cycle utilizando una corrección de defectos lineales (LDC) y un esquema de aproximación completa (FAS).

Mi problema es el siguiente: con LDC, el residuo se reduce en un factor de ~ 0.03 por ciclo. La implementación de FAS también converge con un factor lineal, pero el factor es solo ~ 0.58. Por lo tanto, FAS necesita aproximadamente 20 veces el número de ciclos.

La mayor parte del código se comparte, la única diferencia son los cálculos descendentes / ascendentes, LDC utiliza

abajo: tuH: =0 0,siH: =yohH(sih-Lhtuh)

arriba: tuh: =tuh+yoHhtuH

y FAS utiliza

abajo: tuH: =yohHtuh,siH: =yohHsih+LHyohHtuh-yohHLhtuh

arriba: tuh: =tuh+yoHh(tuH-yohHtuh)

Mi configuración de prueba es de "A Multigrid Tutorial, Second Edition" de Brigg, pág. 64, tiene la solución analítica

tu(X,y)=(X2-X4 4)(y4 4-y2)con X,y[0 0,1]2

y la ecuación es usando el típico lineal stencil de 5 puntos como el Laplace-operador L . La suposición inicial es v = 0 .Lv=Δtu=:siLv=0 0

Cambiar la configuración de la prueba, por ejemplo, al trivial usando una suposición inicial de v = 1 da como resultado casi los mismos factores de convergencia.tu(X,y)=0 0v=1

Dado que solo el código down / up es diferente, los resultados de LDC cumplen con el libro y el FAS al menos parece funcionar también, no tengo idea de por qué es mucho más lento en la misma configuración lineal.

Hay un extraño comportamiento, tanto en los PMA y FAS que no puedo explicar todavía que sólo ocurre si la conjetura inicial es mala (por ejemplo, , sino también en mis experimentos multigrid completos donde la interpolación de la nueva rejilla fina aumenta el residual de 10 - 15 a 10 - 1 ): Si aumento de número de relajaciones de corrección de colocar a un número muy elevado de tal manera que la solución se resuelve con precisión de la máquina en la malla gruesa, pierde casi todos los dígitos cuando se va un paso hasta la próxima rejilla fina.=0 010-1510-1

Como una imagen dice más que palabras:

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

No estoy seguro de si solo puede haber unos pocos dígitos ganados por ciclo o si esto indica un error durante la interpolación a la cuadrícula fina. Si es el último caso, ¿cómo puede el LDC alcanzar las proporciones residuales de ~ 0.03 cuando se usan siempre 2 relajaciones?

Silpion
fuente

Respuestas:

7

No conozco directamente su respuesta, ya que uso principalmente FAS en lugar de corrección, ya que hago multigrid para problemas no lineales, pero algunos pensamientos que puede considerar:

  • Está aplicando un esquema de corrección lineal a un problema lineal, por lo que no es sorprendente que lo haga muy bien.

  • Considere sus condiciones de contorno: asegúrese de que las esté haciendo correctamente, y también tenga en cuenta que los BC complicados podrían verse completamente diferentes en la grilla gruesa, haciendo que las correcciones allí no sean tan útiles.

  • Vuelva a verificar su tratamiento del término fuente; Recuerdo haber arruinado algo en la etapa de prolongación relacionada con ese término cuando lo escribí para Poisson.

  • Nunca he visto la necesidad de iterar para converger en la grilla más gruesa. Una solución allí depende de que la rejilla fina residual sea correcta, que no lo es. Estás tratando de sacar esos errores del dominio / suavizarlos. Si está completamente convergido en la cuadrícula más gruesa en una iteración temprana, su solución está, naturalmente, bastante lejos de la solución de cuadrícula fina correcta porque sus residuos no están actualizados. Esta es casi seguramente la razón por la que está viendo que los residuos saltan en la etapa de prolongación.

  • Además, pruebe con un factor de relajación para los operadores de restricción y prolongación, digamos 0.75.

Si ayuda, así es como se veía mi historial residual de FAS para un problema de Poisson usando una red simple a través de ciclos completos de 7V. Creo que el factor de relajación fue de 0,75, y estaba usando un esquema RK de 3 etapas como más uniforme con una sola iteración en cada nivel de cuadrícula.

historia res

Aurelio
fuente
Gracias por su respuesta, el caso lineal y el BC simple (borde cuadrado = 0) son solo el primer paso, la prueba de casos reales se realizará después de que funcione la configuración "fácil". No estoy seguro si entiendo lo que quieres decir con un factor de relajación para la restricción y la prolongación. Actualmente uso la interpolación bilineal para la prolongación y la media ponderación para la restricción.
Silpion
tuh: =tuh+αyoHh(tuH-yohHtuh)0 0<α<1
Aurelius
(1-α)
@Aurelius mencionas que no es necesario converger en la grilla gruesa. Estoy de acuerdo con su razonamiento, pero las pruebas de convergencia en la literatura (para el caso lineal) suponen que la resolución gruesa de la cuadrícula es exacta. No conozco ninguna referencia (para el caso lineal o no lineal) en la que se indique que la resolución de la cuadrícula gruesa no debe ser exacta, y me preguntaba si podría citar una referencia para esto. Yo estaría muy interesado en ver esto yo mismo
Keeran Brabazon
@KeeranBrabazon Tampoco tengo una referencia para esto, y honestamente no estoy íntimamente familiarizado con los detalles de las pruebas de convergencia para multirredes. Sugeriría buscar cualquier literatura temprana que introduzca ese factor de relajación. Ese factor es común a todas las implementaciones modernas de múltiples cuadrículas que he visto, y es intuitivamente cierto que no sería necesario si las soluciones exactas del curso fueran necesarias / deseables. Para una prueba intuitiva, me imagino cómo se verían las condiciones de contorno para la cuadrícula más gruesa frente a la más fina. Es fácil imaginarlos creando soluciones muy diferentes.
Aurelius
6

yohHyo^hHtuhtuh(tuH-yohHtuh)yo^hHtuh

Espectralmente, la restricción de estado solo necesita un orden secundario alto (preservación precisa de las frecuencias bajas), pero el orden primario (alias de las frecuencias altas) no importa. La inyección tiene un orden primario 0 y un orden secundario infinito. Mientras tanto, la restricción residual necesita que tanto el orden primario como el secundario sean positivos (al menos). Consulte la sección 4.3 de la Guía de cuadrículas múltiples de Achi Brandt .

Al diseñar métodos MG, también es bueno observar el error en lugar de los residuos y asegurarse de que pondera la norma adecuadamente.

Jed Brown
fuente
Buenos puntos, y había fallado en mencionar algo en ese sentido. Un aspecto importante del uso práctico de multirredes es la opción más suave: desea uno que amortigüe los errores de alta frecuencia lo más rápido posible, que aborde el problema que describe.
Aurelius
@Aurelius Desde el registro proporcionado, puede ver que el problema no es el más suave. Recuerde que Silpion está utilizando el mismo suavizador que para la corrección de defectos MG, que converge adecuadamente.
Jed Brown
>0.8
1

tuolreH=yohHtuh cuando bajé durante el ciclo V y lo reutilicé más tarde en

tuhtuh+yoHh(tuH-yohHtuh)=tuh+yoHh(tuH-tuolreH)

H2HtuolreHtuolreH

Silpion
fuente