Resolver un gran problema de valor propio generalizado no hermitiano a partir de un análisis de estabilidad lineal utilizando SLEPc

8

Tengo un problema de matriz generalizado: de un método espectral en un problema de análisis de estabilidad lineal. Mi matriz B es diagonal y positiva semi-definida. A es no ermitaño y complejo.UNAX=λsiX

Mi problema es esencialmente que cuando uso el solucionador de valores propios generalizados SLEPc obtengo el error "cero pivote en factorización LU". El resto de los siguientes son detalles sobre el problema y las cosas que he probado hasta ahora. ¡Gracias por la ayuda!

Detalles del problema

La matriz estará en su punto más grande, aproximadamente 48000 por 48000, y quiero encontrar los valores propios. Los valores propios que me interesan son aquellos con la mayor parte real cerca de 0 + 0i. Idealmente, quiero poder encontrarlos incluso si son internos (es decir, cuando hay otros valores propios con una parte real positiva más grande en el espectro). Sin embargo, sería feliz si pudiera hacer que funcione para problemas en los que todos los valores propios tienen partes reales <0 aparte del valor propio de interés.

Por el momento, he utilizado las funciones scipy linalg.eig y sparse.eigs. Hasta donde yo sé, estos usan LAPACK y ARPACK respectivamente para hacer el trabajo pesado. He decidido ver si puedo lograr un mejor rendimiento mediante el uso de la biblioteca SLEPc. Si esta es una mala decisión, ¡avísame!

Quiero pasar a usar PETSc con los solucionadores de valores propios SLEPc. He estado probando SLEPc usando los ejemplos proporcionados como parte del tutorial. El ejercicio 7 ( http://www.grycap.upv.es/slepc/handson/handson3.html ) lee las matrices A y B de un archivo y genera las soluciones. Conseguí que esto funcionara bien usando las matrices proporcionadas. Sin embargo, si sustituyo una versión de prueba más pequeña de mi problema (6000x6000), obtengo una variedad de errores dependiendo de los argumentos de la línea de comando que proporciono.

El principal problema que tengo es el error: "pivote cero en factorización LU!" cuando uso la configuración predeterminada.

Creo que esto podría estar relacionado con el hecho de que B contiene filas de ceros, aunque mi comprensión del álgebra lineal es algo básica. ¿Es esto cierto?

He intentado configurar las opciones sugeridas en el sitio web petsc, -pc_factor_shift_type NONZERO, etc. pero todo lo que obtengo es una advertencia adicional de que estas opciones no se usaron

Supuse que esto era un problema con el preacondicionador, así que intenté establecer -eps_target en 0.1 y ambos con y sin especificar -st_type sinvert y shift. Todavía me sale el mismo error.

Luego probé -st_pc_type jacobi y st_pc_type bjacobi. Jacob ejecuta, pero no produce ningún valor propio. Block jacobi hace una factorización LU y me da el mismo error nuevamente.

El método predeterminado es krylov-schur, por lo que he experimentado con las opciones -eps_type gd y -eps_type jd. Desafortunadamente, estos parecen producir valores propios sin sentido, que no aparecen en absoluto en el espectro cuando resuelvo usar LAPACK en scipy.

Sé que mi problema de matriz no es singular, porque puedo resolverlo usando scipy.

¿Conoce algún libro / guía que deba leer además de los manuales de PETSC y SLEPC para comprender el comportamiento de todos estos solucionadores diferentes?

La salida del caso sin opciones de línea de comando se da a continuación.

¡Muchas gracias por tomarse el tiempo de leer mi primera publicación!

Saludos cordiales, Toby

Salida de terminal desde SLEPc

tobymac: SLEPC toby $ mpiexec ./ex7 -f1 LHS-N7-M40-Re0.0-b0.1-Wi5.0-amp0.02.petsc -f2 RHS-N7-M40-Re0.0-b0.1- Wi5.0-amp0.02.petsc -eps_view

Eigenproblema generalizado almacenado en archivo.

[0] ERROR PETSC: --------------------- Mensaje de error --------------------- --------------- [0] ERROR PETSC: Pivote cero detectado en factorización LU: consulte http://www.mcs.anl.gov/petsc/documentation/faq.html#ZeroPivot! [0] ERROR PETSC: Fila vacía en matriz: fila en el pedido original 2395 en el pedido permutado 3600! [0] ERROR PETSC: -------------------------------------------- ---------------------------- [0] ERROR PETSC: Petsc versión de lanzamiento 3.3.0, parche 5, sáb dic 1 15:10 : 41 CST 2012 [0] ERROR PETSC: Ver docs / changes / index.html para actualizaciones recientes. [0] ERROR PETSC: Consulte docs / faq.html para obtener sugerencias sobre la resolución de problemas. [0] ERROR PETSC: Consulte docs / index.html para ver las páginas del manual. [0] ERROR PETSC: -------------------------------------------- ---------------------------- [0] ERROR PETSC: ./ex7 en un arco-darw llamado tobymac por toby jue 25 de julio 10 : 20: 40 2013 [0] ERROR PETSC: Bibliotecas vinculadas desde / opt / local / lib [0] ERROR PETSC: Configurar ejecución el martes 23 de julio 15:11:27 2013 [0] ERROR PETSC:

[0] ERROR PETSC: PCSetUp () línea 832 en /opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/pc/interface/precon.c [0] PETS ERROR: KSPSetUp () línea 278 en /opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/ksp/interface/itfunc.c [0] PETSC ERROR: 0S PETSC ERROR_Red: ) línea 176 en /opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/pc/impls/redundant/redundant.c [0] PETSC ERROR: PCSetUp (PCSetUp (línea) 832 en /opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/pc/interface/precon.c [0] PETSC ERROR: KSPSetUp () línea 278 en / KSPSetUp () línea 278 en / /local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/ksp/interface/itfunc.c [0] ERROR PETSC: STSetUp_Shift () línea 94 en src / st / impls / shift / shift.c [0] ERROR PETSC: STSetUp () línea 280 en src / st / interface / stsolve.c [0] ERROR PETSC : EPSSetUp () línea 204 en src / eps / interface / setup.c [0] PETSC ERROR: EPSSolve () línea 109 en src / eps / interface / solve.c tobymac: SLEPC toby $

Toby Searle
fuente
Piensa un poco en lo que significa una fila de todos los ceros. Escribe la ecuación y decide si es útil. :)
meawoppl
Tengo un problema similar. Pero intentaste ./ex7 -st_type sinvert .. funciona. Pero no obtengo el vector propio correcto, sino el valor propio. ¿Lograste resolver tu problema?
han17

Respuestas:

1

En problemas de esta forma, normalmente necesita que no sea singular, es decir, que sea invertible. No dices de dónde vienen , así que no sé nada sobre tu pero debes asegurarte de que no sea singular.A , B BsiUNA,sisi

Wolfgang Bangerth
fuente
Gracias por la respuesta, A proviene de una descomposición espectral en 2D de las ecuaciones de análisis de estabilidad lineal para un flujo de Couette en el plano viscoelástico. B es cero para el primer 40% de las filas, después de esto tiene 1.0 en la diagonal. Entonces supongo que mi B es singular. ¿Esto hace que el problema no tenga solución? Estoy confundido acerca de cuán despectivo me está dando resultados tan convincentes si esto es cierto.
Toby Searle
UNA-1siX=λ-1X
siXUNA-1siX=0 0λ-1=0 0si