Implementé un Navier Stokes basado en la discretización FEM y PETSc para resolver el sistema lineal de ecuaciones. Para crear un procedimiento de solución eficiente, sigo el documento "Precondicionamiento eficiente de las ecuaciones de Navier-Stokes linealizadas para flujo incompresible" (Silvester et al.), Que proponen un enfoque de complemento de Schur. Funciona bastante bien en el sentido de que tengo un número casi constante de iteraciones independientemente del tamaño de malla y el paso de tiempo para los puntos de referencia simples que también se presentan en este documento (flujo de cavidad impulsado en 2D y paso hacia atrás). Pero en este momento, resuelvo el bloque de velocidad superior con un solucionador directo paralelo (MUMPS). El bloque de Schur de presión se resuelve con solucionadores inexactos como se propone en el documento.
En el artículo, los autores proponen ejecutar en cada iteración externa un solo ciclo V multirredes y usar un punto Gauss-Seidel más suave para aproximar la inversa de este operador discreto de convección-difusión. Como no puedo usar fácilmente un método geométrico de cuadrícula múltiple, pensé en reemplazar el solucionador directo por un ciclo V algebraico de cuadrícula múltiple (boomeramg del paquete hypre). Pero luego pierdo el número constante de iteraciones mientras hago la malla más fina.
¿Alguno de ustedes tiene una idea de cómo crear un preacondicionador espectralmente equivalente y eficiente para el inverso de las matrices de velocidad basadas en multirredes algebraicas? ¿Hay algo inherente que no permita hacer uso de multirredes algebraicas en este caso? Si no, ¿cuál podría ser la fuente de perder la escala de iteración constante?
Editar:
Agregué algunos puntos de referencia para diferentes solucionadores del bloque de velocidad. El problema que se resuelve es el flujo de cavidad 2D estándar, la discretización con Taylor-Hood y un refinamiento uniforme de la caja de la unidad.
Solucionador de Exakt (MUMPS)
un V-AMG (algebraico, boomeramg)
fuente