# [Trilinos-Users] Bug in Anasazi example code BlockKrylovSchurEpetraExGenAmesos.cpp?

Chris Baker cgbaker at gmail.com
Fri Aug 15 09:08:22 MDT 2008

 Michael,

You are correct in all of these. The example you cited is solved by using a
shift invert strategy, transforming the generalized eigenvalue problem into
a standard one.
The purpose of passing both the Krylov operator K^{-1} M as well as the mass
matrix M to the eigenproblem is because the BKS solver manager will use the
latter as an inner product. The benefit of doing this, as you noted, is that
the operator K^{-1} M is symmetric with respect to the inner product defined
by M (so long as K and M are both symmetric; they are in this case.) It
would only be correct to omit the mass operator from the definition of the
eigenproblem if you specify that the problem is non-symmetric (because the
operator K^{-1} M is non-symmetric with respect to the standard inner
product.)

The BKS solver is capable of solving non-Hermitian/non-symmetric problems as
well. In this case, you should pass only the Krylov operator to the
eigenproblem and specify that it is non-Hermitian. If you pass the mass
matrix, the 8.0.3 version of BKSSolMgr will use it for an inner product.
This behavior will be different in Trilinos 9.0. There is an example of
using the BKSSolMgr in a non-symmetric mode in
anasazi/examples/BlockKrylovSchur/BlockKrylovSchurEpetraEx.cpp. This example
illustrates the way that complex eigenvectors are extracted from the
compressed storage scheme utilized by Anasazi.

I apologize that these things are not better documented. We are currently
compiling a list of FAQs, and this discussion will be present on that list.

Chris

On Fri, Aug 15, 2008 at 01:24, Michael Junge <junge at iam.uni-stuttgart.de>wrote:

> Hi,
> I have been studying the BlockKrylovSchur (BKS) examples provided with
> the Anasazi package. In the file
>
> "/packages/anasazi/example/BlockKrylovSchur/BlockKrylovSchurEpetraExGenAmesos.cpp"
> of trilinos-8.0.3 the eigenvalues of smallest magnitude of the
> discretized 2D Laplacian operator using the block Krylov-Schur method
> are solved by an shift-and-invert strategy.
> If I understand it right, the Generalized Hermitian Eigenvalue Problem
> (GHEVP) is thus transformed to the standard eigenvalue problem, by solving
> K^{-1}M x = \lamba x instead of
> M x=\lambda K x.
> Assumed that this is correct, why is it that the eigenvalue problem is
> then defined as
>  Teuchos::RCP<Anasazi::BasicEigenproblem<double,MV,OP> > MyProblem =
> Teuchos::rcp( new Anasazi::BasicEigenproblem<double,MV,OP>(Aop, M, ivec) );
> in line 219 of the file BlockKrylovSchurEpetraExGenAmesos.cpp? Would it
> be rather correct to define it by
>  Teuchos::RCP<Anasazi::BasicEigenproblem<double,MV,OP> > MyProblem =
> Teuchos::rcp( new Anasazi::BasicEigenproblem<double,MV,OP>(Aop, ivec) );
> thus ommiting the M operator, since we no longer solve the original GHEVP?
>
> It is correct, that BKS solver is also capable to solve non-symmetric
> EVPs? Is the only difference in specifying the non-symmetric problem by
> setting
> MyProblem->setHermitian(false)?
> Or do I also have to modify the Solver's parameters? Is there an example
> code for this?
>
> I would appreciate any comments on this questions.
>
> Michael
>
> _______________________________________________
> Trilinos-Users mailing list
> Trilinos-Users at software.sandia.gov
> http://software.sandia.gov/mailman/listinfo/trilinos-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://software.sandia.gov/mailman/private/trilinos-users/attachments/20080815/b24bf8f9/attachment.html