Lösen eines großen nicht-hermitischen verallgemeinerten Eigenwertproblems aus einer linearen Stabilitätsanalyse mit SLEPc

8

Ich habe ein verallgemeinertes Matrixproblem: aus einer Spektralmethode für ein Problem der linearen Stabilitätsanalyse. Meine Matrix B ist diagonal und positiv semidefinit. A ist nicht hermitisch und komplex.Ax=λBx

Mein Problem ist im Wesentlichen, dass bei Verwendung des verallgemeinerten SLEPc-Eigenwertlösers der Fehler "Null-Pivot bei der LU-Faktorisierung" angezeigt wird. Der Rest des Folgenden enthält Details zu dem Problem und den Dingen, die ich bisher ausprobiert habe. Danke für die Hilfe!

Details des Problems

Die Matrix wird ungefähr 48000 mal 48000 am größten sein, und ich möchte die Eigenwerte finden. Die Eigenwerte, an denen ich interessiert bin, sind diejenigen mit dem größten Realteil nahe 0 + 0i. Idealerweise möchte ich sie auch dann finden können, wenn sie intern sind (dh wenn es andere Eigenwerte mit einem größeren positiven Realteil im Spektrum gibt). Ich würde mich jedoch freuen, wenn ich es für Probleme zum Laufen bringen könnte, bei denen alle Eigenwerte außer dem interessierenden Eigenwert Realteile <0 haben.

Im Moment habe ich die Funktionen scipy linalg.eig und sparse.eigs verwendet. Soweit ich weiß, verwenden diese LAPACK bzw. ARPACK, um das schwere Heben durchzuführen. Ich habe mich entschlossen zu prüfen, ob ich mit der SLEPc-Bibliothek eine bessere Leistung erzielen kann. Wenn dies eine schlechte Entscheidung ist, lassen Sie es mich wissen!

Ich möchte PETSc mit den SLEPc-Eigenwertlösern verwenden. Ich habe SLEPc anhand der im Tutorial bereitgestellten Beispiele ausprobiert. In Übung 7 ( http://www.grycap.upv.es/slepc/handson/handson3.html ) werden die Matrizen A und B aus einer Datei gelesen und die Lösungen ausgegeben. Ich habe dies mit den bereitgestellten Matrizen gut funktionieren lassen. Wenn ich jedoch eine kleinere Testversion meines Problems (6000 x 6000) ersetze, werden abhängig von den von mir angegebenen Befehlszeilenargumenten verschiedene Fehler angezeigt.

Das Hauptproblem, das ich habe, ist der Fehler: "Null Pivot bei der LU-Faktorisierung!" wenn ich die Standardeinstellungen verwende.

Ich denke, dies könnte mit der Tatsache zusammenhängen, dass B Reihen von Nullen enthält, obwohl mein Verständnis der linearen Algebra etwas grundlegend ist. Ist das wahr?

Ich habe versucht, die auf der Haustier-Website vorgeschlagenen Optionen, -pc_factor_shift_type NONZERO usw. festzulegen, aber ich erhalte nur eine zusätzliche Warnung, dass diese Optionen nicht verwendet wurden

Ich nahm an, dass dies ein Problem mit dem Vorkonditionierer war, und versuchte, -eps_target auf 0,1 zu setzen, sowohl mit als auch ohne Angabe von -st_type sinvert und shift. Trotzdem bekomme ich den gleichen Fehler.

Dann habe ich -st_pc_type jacobi und st_pc_type bjacobi ausprobiert. jacobi läuft, erzeugt aber keine eigenwerte. Block jacobi führt eine LU-Faktorisierung durch und gibt mir wieder den gleichen Fehler.

Die Standardmethode ist krylov-schur, daher habe ich mit den Optionen -eps_type gd und -eps_type jd experimentiert. Leider scheinen diese unsinnige Eigenwerte zu erzeugen, die überhaupt nicht im Spektrum erscheinen, wenn ich mit LAPACK in scipy löse.

Ich weiß, dass mein Matrixproblem nicht singulär ist, weil ich es mit scipy lösen kann.

Kennen Sie Bücher / Anleitungen, die ich möglicherweise neben den PETSC- und SLEPC-Handbüchern lesen muss, um das Verhalten all dieser verschiedenen Löser zu verstehen?

Die Ausgabe des Falls ohne Befehlszeilenoptionen ist unten angegeben.

Vielen Dank, dass Sie sich die Zeit genommen haben, meinen ersten Beitrag zu lesen!

Mit freundlichen Grüßen, Toby

Terminalausgang von 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

Verallgemeinertes Eigenproblem in Datei gespeichert.

[0] PETSC-FEHLER: --------------------- Fehlermeldung --------------------- --------------- [0] PETSC-FEHLER: Null-Pivot bei der LU-Faktorisierung festgestellt: siehe http://www.mcs.anl.gov/petsc/documentation/faq.html#ZeroPivot! [0] PETSC-FEHLER: Leere Zeile in Matrix: Zeile in Originalreihenfolge 2395 in permutierter Reihenfolge 3600! [0] PETSC-FEHLER: ---------------------------------------- ---------------------------- [0] PETSC-FEHLER: Petsc Release Version 3.3.0, Patch 5, Sa 1. Dezember 15:10 : 41 CST 2012 [0] PETSC-FEHLER: Aktuelle Aktualisierungen finden Sie in docs / changes / index.html. [0] PETSC-FEHLER: Hinweise zur Fehlerbehebung finden Sie in docs / faq.html. [0] PETSC-FEHLER: Handbuchseiten finden Sie in docs / index.html. [0] PETSC-FEHLER: ---------------------------------------- ---------------------------- [0] PETSC-FEHLER: ./ex7 auf einem Arch-Darw namens Tobymac von Toby Do 25.07.10 : 20: 40 2013 [0] PETSC-FEHLER: Mit / opt / local / lib verknüpfte Bibliotheken [0] PETSC-FEHLER: Konfigurieren Sie den Lauf am Dienstag, 23. Juli, 15:11:27 2013 [0] PETSC-FEHLER:

[0] PETSC-FEHLER: PCSetUp () -Zeile 832 in /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 FEHLER: KSPSetUp () Zeile 278 in /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: PCS ) Zeile 176 in /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 (0) 832 in /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-FEHLER: KSPSetUp () Zeile 278 in / 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-FEHLER: STSetUp_Shift () -Zeile 94 in src / st / impls / shift / shift.c [0] PETSC-FEHLER: STSetUp () -Zeile 280 in src / st / interface / stsolve.c [0] PETSC-FEHLER : EPSSetUp () Zeile 204 in src / eps / interface / setup.c [0] PETSC-FEHLER: EPSSolve () Zeile 109 in src / eps / interface / lösen.c tobymac: SLEPC toby $

Toby Searle
quelle
Überlegen Sie, was eine Reihe aller Nullen für ein bisschen bedeutet. Schreiben Sie die Gleichung auf und entscheiden Sie, ob sie hilfreich ist. :)
Meawoppl
Ich habe ein ähnliches Problem. Aber hast du versucht ./ex7 -st_type sinvert .. es funktioniert. Aber ich bekomme nicht den richtigen Eigenvektor, sondern den Eigenwert. Hast du es geschafft, dein Problem zu lösen?
han17

Antworten:

1

BA,BB

Wolfgang Bangerth
quelle
Vielen Dank für die Antwort. A stammt aus einer spektralen 2D-Zerlegung der linearen Stabilitätsanalysegleichungen für einen Couette-Fluss in der viskoelastischen Ebene. B ist für die ersten 40% der Zeilen Null, danach hat es 1,0 auf der Diagonale. Also ich denke mein B ist einzigartig. Macht dies das Problem unlösbar? Ich bin verwirrt darüber, wie scipy mir so überzeugende Ergebnisse liefert, wenn dies wahr ist.
Toby Searle
A1Bx=λ1x
BxA1Bx=0λ1=0B