[Trilinos-Users] PyTrilinos + Anasazi - Generalized eigenproblem

Marko Budisic mbudisic at engineering.ucsb.edu
Mon Dec 22 14:38:51 MST 2008

Hi Chris,

yes, after I rescaled the auxiliary vector to unit norm, everything 
seems to work just fine on the larger problems, even without changing 
the "Orthogonalization" setting.

I believe I am set right now. If I run into some other problems, I will 
e-mail to the list. Thanks a lot once again for all your help.


Chris Baker wrote:
> Hi Marko,
> It looks like the problem where the solver would freeze with an 
> auxiliary vector is some combination of the orthogonalization routine 
> and the small problem size. I suggest you start running with a larger 
> sample problem, at least 10 x 10. For the case that the solver seems to 
> freeze, it should be possible to fix this via:
> myPL.set("Orthogonalization","DGKS")
> I played around on some row-stochastic matrices to verify that deflating 
> against the (normalized) ones() vector worked.
> Thanks,
> Chris
> On Mon, Dec 22, 2008 at 13:28, Marko Budisic 
> <mbudisic at engineering.ucsb.edu <mailto:mbudisic at engineering.ucsb.edu>> 
> wrote:
>     Hi Chris,
>     thank you for all your responses, especially those over the weekend.
>     I wasn't trying to rush you in my last e-mail, I was just
>     summarizing all my questions because I wanted to make them clear at
>     the end of the e-mail so you didn't have to decode what I was
>     actually asking for in the end. The discussion with you was
>     extremely helpful with my understanding of the code and it's a
>     pleasure to have such responsive support on the other end.
>     As for the problem, I resorted to solving the generalized
>     eigenproblem in the exact way you suggested and I'm glad to say that
>     it is working well. My original matrix A might end up being
>     symmetric in some cases too, so I will try the Davidson solver in
>     those cases.
>     All of the things being said, it seems that it is only Monday and
>     that the prospects are good for my problems to be resolved, thanks
>     to you and Heidi in the past weeks, so I am glad that is the case.
>     Best,
>     Marko
>     Chris Baker wrote:
>         Hello Marko,
>         I am currently looking into the reason that Anasazi+PyTrilinos
>         becomes unresponsive when using Auxilliary vectors.
>            Am I right to assume that one use of AuxVecs would be to used for
>            removing "known" eigenvectors from the process? In my case, I
>         will
>            often have row-stochastic matrices. Most of the times, they will
>            have the largest eigenvalue at 1 with eigenspace being the vector
>            filled with ones (the diagonal of the vector space). Would
>         passing a
>            vector filled with ones ( via say PutScalar(1.0) ) to AuxVecs
>         (and
>            choosing "LM" as the sorting method) make the code return the
>         second
>            largest evalue/evector as the result (assuming NEV = 1)?
>         Yes.
>            In any case, I have tried working a bit more with the AuxVecs
>         to see
>            why the code was not responsive before. It seems that AuxVecs
>            vectors have to be of length 1
>         Also correct. In fact, for multiple auxiliary vectors, they must
>         form an orthonormal basis.
>            In this case however, this is the last thing the code prints
>         to the
>            screen (even with all verbosity options turned on) but it still
>            continues to run at 100% CPU. I waited for some time but it never
>            exited or printed other messages so I ended up killing the
>         process.
>         Yeah, I'm currently investigating this. We don't see this
>         problem with Anasazi in general, so I am leaning toward some
>         Python issue.
>            When I pass the unit length vector to AuxVecs, the code runs but
>            fails (and exits to command prompt) with
>            Anasazi::SVQBOrthoManager::findBasis(): Orthogonalization
>            constraints not feasible
>         This is because the auxiliary vectors add another constraint on
>         the orthogonalization routine. Your 5x5 example just doesn't
>         have enough room to move around: 1 vector for the auxiliary
>         vector plus 3 vectors minimum for BKS plus 1 additional vector
>         because the problem is non-Hermitian (this gives us extra room
>         to keep from splitting a conjugate pair).
>         Having said that, I don't believe this is the cause for the
>         problem with setAuxVecs(). I ran on a larger matrix and still
>         saw the freezing.
>            To summarize, my main question is the one stated at the
>         beginning,
>            about the use ot AuxVecs, the rest of the e-mail was more of a
>            followup to your answer. Of course, I am still interested in an
>            answer to my previous question about why the generalized
>            eigenproblem acts as the regular eigenproblem in PyTrilinos
>            (explained in my previous e-mails).
>         Solving generalized eigenvalue problems with BlockKrylovSchur
>         requires a little more work. I neglected to tell you this in my
>         previous email, because my brain doesn't work properly on the
>         weekend. In short, the generalized eigenvalue problem must be
>         transformed into a standard eigenvalue problem to work with BKS.
>         (/This is not the case with the other Anasazi eigensolvers, but
>         they don't solve non-Hermitian problems, so they are not
>         relevant to you./)
>         In your particular case (searching for the largest magnitude
>         eigenvalues of (W,Dsum)), construct a linear operator
>         Op = inv(Dsum) W
>         This transforms the eigenvalue problem to
>         inv(Dsum) W v = v lambda
>         The eigenvectors and eigenvalues are unchanged from the
>         generalized eigenvalue problem.
>         Pass Op to the BasicEigenproblem class, either by setOp() or
>         setA(). If a matrix is passed via setM(), it is used for the
>         inner product defining orthogonality. The benefit of doing that
>         is to restore symmetry in Op and to handle certain special
>         cases. In your case, W was not symmetric, so that symmetry in
>         inv(Dsum) W cannot be easily restored. I would not pass anything
>         to setM().
>         However, in your case, because Dsum is a diagonal matrix,
>         applying the operator inv(Dsum) W serves to implicitly scale the
>         entries of W on every application of the operator. In this case,
>         it is probably better to simply scale them once in situ, as you
>         were doing before, and consider simply the standard eigenvalue
>         problem.
>         I hope this helps. Even more, I hope this is correct; after all,
>         it is only Monday.
>         I'm still looking at the setAuxVecs() problem with
>         Anasazi+PyTrilinos. I will respond to you and the list when it
>         is diagnosed.
>         Chris
>         ------------------------------------------------------------------------
>         _______________________________________________
>         Trilinos-Users mailing list
>         Trilinos-Users at software.sandia.gov
>         <mailto:Trilinos-Users at software.sandia.gov>
>         http://software.sandia.gov/mailman/listinfo/trilinos-users

More information about the Trilinos-Users mailing list