Resolvendo um grande problema de autovalor generalizado não eremita a partir de uma análise de estabilidade linear usando SLEPc

8

Eu tenho um problema generalizado de matriz: de um método espectral em um problema de análise de estabilidade linear. Minha matriz B é diagonal e positiva semi-definida. A é não-eremita e complexo.Ax=λBx

Meu problema é essencialmente que, ao usar o solucionador de autovalor generalizado do SLEPc, recebo o erro "pivô zero na fatoração da LU". O restante abaixo é detalhes sobre o problema e as coisas que tentei até agora. Obrigado pela ajuda!

Detalhes do problema

A matriz terá o maior valor entre 48000 e 48000, e eu quero encontrar os autovalores. Os autovalores nos quais estou interessado são aqueles com a maior parte real próxima de 0 + 0i. Idealmente, quero ser capaz de encontrá-los, mesmo que sejam internos (ou seja, quando houver outros autovalores com maior parte real positiva no espectro). No entanto, eu ficaria feliz se conseguisse trabalhar com problemas em que todos os autovalores tenham partes reais <0 além do autovalor de interesse.

No momento, usei as funções scipy linalg.eig e sparse.eigs. Tanto quanto eu sei, eles usam LAPACK e ARPACK, respectivamente, para fazer o trabalho pesado. Decidi ver se posso obter melhor desempenho usando a biblioteca SLEPc. Se for uma má decisão, me avise!

Eu quero passar a usar o PETSc com os solucionadores de autovalores do SLEPc. Eu tenho experimentado o SLEPc usando os exemplos fornecidos como parte do tutorial. O Exercício 7 ( http://www.grycap.upv.es/slepc/handson/handson3.html ) lê matrizes A e B de um arquivo e gera as soluções. Eu fiz isso funcionar bem usando as matrizes fornecidas. No entanto, se eu substituir uma versão de teste de tamanho menor do meu problema (6000x6000), obtenho vários erros, dependendo dos argumentos da linha de comando que forneço.

O principal problema que tenho é o erro: "zero pivô na fatoração da LU!" quando eu uso as configurações padrão.

Eu acho que isso pode estar relacionado ao fato de B conter linhas de zeros, embora meu entendimento da álgebra linear seja um pouco básico. Isso é verdade?

Eu tentei definir as opções sugeridas no site petsc, -pc_factor_shift_type NONZERO etc, mas tudo o que recebo é um aviso adicional de que essas opções não foram usadas

Eu assumi que isso era um problema com o pré-condicionador, então tentei definir -eps_target como 0.1 e com e sem especificar -st_type sinvert e shift. Ainda recebo o mesmo erro.

Então tentei -st_pc_type jacobi e st_pc_type bjacobi. O jacobi é executado, mas não produz nenhum valor próprio. O bloco jacobi faz uma fatoração de LU e me dá o mesmo erro novamente.

O método padrão é krylov-schur, então experimentei as opções -eps_type gd e -eps_type jd. Infelizmente, eles parecem produzir autovalores sem sentido, que não aparecem no espectro quando resolvo o uso do LAPACK no scipy.

Eu sei que meu problema de matriz não é singular, porque eu posso resolvê-lo usando scipy.

Você conhece algum livro / guia que talvez precise ler além dos manuais do PETSC e do SLEPC para entender o comportamento de todos esses diferentes solucionadores?

A saída do caso sem opções de linha de comando é fornecida abaixo.

Muito obrigado por ler o meu primeiro post!

Atenciosamente, Toby

Saída terminal do 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

Problema próprio generalizado armazenado em arquivo.

[0] ERRO PETSC: --------------------- Mensagem de erro --------------------- --------------- [0] ERRO PETSC: Pivô zero detectado na fatoração de LU: consulte http://www.mcs.anl.gov/petsc/documentation/faq.html#ZeroPivot! [0] ERRO PETSC: linha vazia na matriz: linha na ordem original 2395 na ordem permutada 3600! [0] ERRO PETSC: -------------------------------------------- ---------------------------- [0] ERRO PETSC: Petsc Release Versão 3.3.0, Patch 5, sáb 1 dez. 15:10 : 41 CST 2012 [0] ERRO PETSC: consulte docs / changes / index.html para atualizações recentes. [0] ERRO PETSC: consulte docs / faq.html para obter dicas sobre solução de problemas. [0] ERRO PETSC: consulte docs / index.html para páginas de manual. [0] ERRO PETSC: -------------------------------------------- ---------------------------- [0] ERRO PETSC: ./ex7 em um arco-darw chamado tobymac por toby Qui 25 jul 10 : 20: 40 2013 [0] ERRO PETSC: Bibliotecas vinculadas a partir de / opt / local / lib [0] ERRO PETSC: Configure a execução em terça-feira 23 de julho 15:11:27 2013 [0] ERRO PETSC:

[0] ERRO PETSC: PCSetUp () linha 832 em /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 ERRO: linha 278 KSPSetUp () em /opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/ksp/interface/itfunc.c [0] ERRO PETSCUp: ) linha 176 na linha /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] linha PETSC ERRO: PCSetUp () 832 em /opt/local/var/macports/build/_Users_toby_MyPorts_scienceports_math_petsc/petsc/work/petsc-3.3-p5/src/ksp/pc/interface/precon.c [0] ERRO PETSC: KSPSetUp () linha 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] ERRO PETSC: linha STSetUp_Shift () 94 em src / st / impls / shift / shift.c [0] ERRO PETSC: linha STSetUp () 280 em src / st / interface / stsolve.c [0] ERRO PETSC : Linha 204 EPSSetUp () em src / eps / interface / setup.c [0] ERRO PETSC: linha 109 EPSSolve () em src / eps / interface / resolve.c tobymac: SLEPC toby $

Toby Searle
fonte
Pense no que uma linha de todos os zeros significa um pouco. Escreva a equação e decida se é útil. :)
meawoppl 23/02
Eu tenho um problema similar. Mas você tentou ./ex7 -st_type sinvert .. funciona. Mas não estou obtendo o vetor próprio correto, mas estou obtendo o valor próprio. Você conseguiu resolver seu problema?
han17

Respostas:

1

Nos problemas desta forma, você normalmente precisa que não seja singular, isto é, que seja invertível. Você não diz de onde vem, então eu não sei nada sobre o seu mas você precisa garantir que ele não seja singular.BA,BB

Wolfgang Bangerth
fonte
Obrigado pela resposta, A vem de uma decomposição espectral 2D das equações de análise de estabilidade linear para um fluxo Couette no plano viscoelástico. B é zero para os primeiros 40% das linhas, depois disso tem 1,0 na diagonal. Então eu acho que meu B é singular. Isso torna o problema insolúvel? Estou confuso sobre o quão covarde está me dando resultados tão convincentes, se isso é verdade.
Toby Searle
Eu acredito que scipy está fazendo , o que deve estar bem? A1Bx=λ1x
Toby Searle
Suponha que é singular, então haverá vetores em seu kernel para que , ou seja, sejam vetores próprios correspondentes a que claramente apresentem um problema para a definição dos autovalores generalizados do problema original. Consequentemente, normalmente se quer que seja não singular. BxA1Bx=0λ1=0B
22913 Wolfgang Bangerth