[Trilinos-Users] PyTrilinos + Anasazi - Generalized eigenproblem

Chris Baker cgbaker at gmail.com
Sun Dec 21 08:42:02 MST 2008


On Sat, Dec 20, 2008 at 18:16, Marko Budisic
<mbudisic at engineering.ucsb.edu>wrote:

> Correct. Even after passing a non-identity matrix to setM(), I get an
> eigenvector and eigenvalue of the non-generalized problem (due to problems
> below I couldn't compute any other eigenvectors, I will try generating
> something larger and let you know). Since I was using the LM and LR settings
> to check this, I get the evector corresponding to evalue 4.3... The
> eigenvector is of unit length.


I'll check. It could be a problem with the python adaptors.


> So if I had a larger operator size (say 1e3 dimensions), to compute the
> first say 10 evalues/evectors using the default options, it should be
> sufficient to pass 10 to setNev() and pass a multivector of size 1 to
> setInitVec()?


Correct. Also, the size of the multivector passed to setInitVec() must be
the same as "Block Size". However, the default for "Block Size" for this
solver manager is one (to emulate ARPACK), so those two should be fine.
However, there is another requirement that the number of blocks ("Num
Blocks") be large enough to capture the number of eigenvalues that you want.
What I would recommend is:
* eigs.setNEV(whatever you want)
* myPL.set("Block Size",1)
* myPL.set("Num Blocks",eigs.getNEV() * 3) // or larger


>    4) Should AuxVec also be set prior to solving the problem/is there a
>>    benefit for doing so? If yes, how would one go about choosing the size
>>    of this multivector and should it be initialized in a certain way?
>>
>>
>> Auxilliary vectors define a space which the solver should avoid. This is
>> useful for restarting the eigensolve if some number of eigenvector are
>> already known. I apologize; this is not documented very well.
>>
>
> I have just remembered that I tried passing a randomized MultiVector of
> size 1 to setAuxVec() just to see what happens for the above problem. The
> code seemed to freeze and after 10 seconds or so I killed the process. I
> understand that this might again be due to the small size of the problem I
> used but perhaps the code could made to fail with some error in future, to
> facilitate debugging.


For the default settings (NEV=1, num blocks=default 3, block size=1) with
one auxilliary vector, I believe that everything is valid. The reason that
the code seemed to freeze is that the solver didn't converge. I would not
expect it to converge, because by staying orthogonal to the random
auxilliary vector, the subspace was not able to sufficiently capture any of
the eigenvectors.

However, the code shouldn't run forever; it should eventually quit and tell
you that it didn't converge. One way to better tell is to increase the
verbosity via some level that prints at every iteration. Perhaps
Anasazi::IterationDetails or Anasazi::Debug. It should be clear then whether
it is still running or if it froze.

Chris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://software.sandia.gov/mailman/private/trilinos-users/attachments/20081221/3a1222b4/attachment-0001.html 


More information about the Trilinos-Users mailing list