[Trilinos-Users] Beginner's problems with PyTrilinos and Anasazi

Marko Budisic mbudisic at engineering.ucsb.edu
Tue Dec 16 11:28:53 MST 2008


Hi Heidi,

thank you for your reply.

Indeed, I have intended to create a 5x5 matrix and the code snippet had
a faulty code, probably left over from when I was trying to play with
parameters to see if I understood them properly. The line 

numglobals = nx*nx 

should be changed to 

numglobals = nx

to get a matrix with 5 rows. The matrix population code is complete.
However, this does not resolve the original problem. For additional
information, here are eigenvalues of the matrix that I would like to
compute (as computed by numpy and numpy.linalg):

1.00000000+0.j
-0.01363536+0.59362319j
-0.01363536-0.59362319j
0.06893738+0.j
0.33333333+0.j

Thank you for your help.

Best,
Marko


On Tue, 2008-12-16 at 11:09 -0700, Thornquist, Heidi K wrote:
> Hi Marko,
> 
> Thanks for sending a copy of your code.  Upon inspection of the
> attached code snippet, it looks like you 
> are creating a matrix with 25 rows and columns and then only filling
> the primary 5x5 block.  This gives 
> the matrix a nullspace of dimension 20.  Is this the matrix you meant
> to generate, or did you omit some
> of the matrix population for brevity?  If so, could you include all
> the matrix population code.
> 
> Thanks,
> Heidi
> 
> ---
> Heidi K. Thornquist
> Senior Member of Technical Staff
> Electrical & Microsystem Modeling
> Sandia National Laboratories
> P.O. Box 5800, MS 0316
> Albuquerque, NM  87185-0316
> Phone: (505)284-8426
> Fax:   (505)284-5451
> 
> 
> 
> 
> On 12/15/08 9:47 PM, "Marko Budisic" <mbudisic at engineering.ucsb.edu>
> wrote:
> 
>         Dear Trilinos list,
>         
>         I would like to use PyTrilinos with Anasazi to compute
>         eigenvectors of
>         large non-symmetric sparse matrices. In order to familiarize
>         myself with
>         both packages, I tried to build a small example for computing
>         1-eigenvector of a probability transition matrix for a random
>         walk on a
>         graph. The solver I tried to use was BlockKrylovSchur.
>         
>         I managed to successfuly build the matrix in question and even
>         perform
>         some basic operations on it (I checked by printing the
>         matrix). I also
>         managed to pass the setProblem() sanity test with the
>         Eigenproblem
>         object. However, when I try to invoke the solver, the GEES
>         subroutine
>         fails which causes the entire code to fail.
>         
>         This is the traceback from Python:
>         ******************
>         Traceback (most recent call last):
>           File "src/anasazitest.py", line 56, in <module>
>             info = mngr.solve()
>           File
>         "/usr/lib/python2.5/site-packages/PyTrilinos/Anasazi.py", line
>         6456, in solve
>             return _Anasazi.BlockKrylovSchurSolMgrEpetra_solve(*args)
>         SystemError: /home/mbudisic/downloads/trilinos-9.0.1/packages/anasazi/src/AnasaziBlockKrylovSchur.hpp:1432:
>         
>         Throw number = 1
>         
>         Throw test that evaluated to true: info != 0
>         
>         Anasazi::BlockKrylovSchur::computeSchurForm(): GEES returned
>         info != 0.
>         *******************
>         
>         I am guessing that I am mismatching some options, possibly
>         related to
>         block size and sizes of auxiliary vectors but I don't know how
>         to
>         correct the problem. Below is the relevant source code.
>         
>         If anyone could direct me in correcting this problem, I would
>         be very
>         thankful. Also, if you have any other suggestions, based on my
>         code,
>         those would also be very much appreciated.
>         
>         Best,
>         Marko Budisic
>         
>         *********************************
>         # epetra
>         nx = 5
>         numglobals = nx*nx
>         mycomm = Epetra.SerialComm()
>         mymap = Epetra.Map( numglobals, 0, mycomm )
>         W = Epetra.CrsMatrix(Epetra.Copy, mymap, 4)
>         
>         # populate matrix
>         W.InsertGlobalValues( 0, [1.,2.,3.,2.], [0,1,2,4] )
>         W.InsertGlobalValues( 1, [1.,2.], [1,2] )
>         W.InsertGlobalValues( 2, [1.,2.], [2,3] )
>         W.InsertGlobalValues( 3, [3.,1.], [0,3] )
>         W.InsertGlobalValues( 4, [2.,1.], [3,4] )
>         W.FillComplete()
>         
>         # normalize the matrix
>         d = Epetra.Vector( W.RowMap() )
>         W.InvRowSums(d)
>         W.LeftScale(d)
>         
>         print W
>         
>         eigs = Anasazi.BasicEigenproblem()
>         eigs.setA( W )
>         eigs.setHermitian(False)
>         
>         Nev = 1
>         eigs.setNEV( Nev )
>         
>         blocksize = 1
>         storage = Epetra.MultiVector( W.RowMap() , blocksize)
>         eigs.setInitVec(storage)
>         
>         print "Problem set:", eigs.setProblem()
>         
>         myPL = Teuchos.ParameterList()
>         myPL.set("Which", "LM")
>         myPL.set("Block Size",blocksize)
>         myPL.set("Verbosity", Anasazi.Errors | Anasazi.Warnings | \
>                      Anasazi.FinalSummary )
>         
>         mngr = Anasazi.BlockKrylovSchurSolMgr( eigs, myPL )
>         info = mngr.solve()
>         print "Problem solved:", info
>         
>         x = eigs.getSolution()
>         print x.Evecs()
>         
>         *********************************
>         
>         
>         _______________________________________________
>         Trilinos-Users mailing list
>         Trilinos-Users at software.sandia.gov
>         http://software.sandia.gov/mailman/listinfo/trilinos-users
>         
> 
> _______________________________________________
> Trilinos-Users mailing list
> Trilinos-Users at software.sandia.gov
> http://software.sandia.gov/mailman/listinfo/trilinos-users




More information about the Trilinos-Users mailing list