Advertencia
La resolución de problemas de silla de montar implica muchas más opciones que problemas definidos, y hay muchas más cosas que pueden salir mal. Utilice monitores para todos los niveles para depurar la convergencia, para asegurarse de que los espacios nulos se manejan correctamente cuando los operadores auxiliares son singulares (generalmente solo un espacio nulo constante), y para garantizar que los preacondicionadores sean estables. Estas técnicas se discuten en esta pregunta .
Resolviendo problemas de silla de montar
Puede comenzar con la sección sobre resolución de matrices de bloques en el Manual del usuario . Para problemas similares a los de Stokes, puede construir un preacondicionador de complemento Schur usando PCFIELDSPLIT .
-pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_detect_saddle_point
Esto se puede combinar con un preacondicionador de conmutador de mínimos cuadrados para el complemento Schur ( -fieldsplit_1_pc_type lsc
). Es común -fieldsplit_1_ksp_type preonly
y permite que la iteración externa haga la mayor parte del trabajo. Las variantes de bloques triangulares son muy populares cuando se usa de esta manera, por ejemplo, -pc_fieldsplit_schur_fact_type upper
.
Puede encontrar más detalles sobre la composición del solucionador utilizando las opciones de opciones en nuestro documento (preimpresión) , que también analiza la conmutación de múltiples cuadrículas con la descomposición de bloques (colocando la división de campos dentro de múltiples cuadrículas).
Para muchos problemas, querrá personalizar la descomposición de campo y los preacondicionadores complementarios de Schur, muchos de los cuales involucran operadores auxiliares. Por ejemplo, el método de "convección-difusión de presión" (PCD) de Elman et al requiere la discretización de un operador auxiliar en el espacio de presión. Consulte los ejemplos de PCSHELL y la sección del manual del usuario para este propósito.