Shift-Invert in Anasazi/Belos using Tpetra Sparse Matrices

I am currently trying to port my code over to Trilinos because the problems that I am working on are too big for LAPACK/ARPACK. Specifically I am computing the generalized eigenvalues/eigenvectors:

$$\mathbf{A}x = \lambda\mathbf{B}x$$

where both $\mathbf{A}$ and $\mathbf{B}$ are large and sparse. I am mainly interested in targeting specific interior eigenvalues using a shift-invert method:

$$\mathbf{A}x - \sigma\mathbf{B}x = \lambda\mathbf{B}x - \sigma\mathbf{B}x$$ $$\mathbf{A}x - \sigma\mathbf{B}x = (\lambda - \sigma)\mathbf{B}x$$ $$\frac{1}{\lambda - \sigma}x = (\mathbf{A}x - \sigma\mathbf{B})^{-1}\mathbf{B}x$$

This maps eigenvalues that are close to $\sigma$ towards $\infty$ so that they are easy to find by iterative methods. To avoid computing the inverse in the previous expression we instead solve the linear system at every iteration:

$$w = \mathbf{B}v_i$$ $$(\mathbf{A}x - \sigma\mathbf{B})v_{i+1} = w$$

Previously I was solving this system using LU decomposition but as the matrices become large, this method is unwieldy. Instead I am trying to use Belos to solve this linear system for the Anasazi eigensolver package. An important point to note is that my matrices are complex-valued and so Epetra is a less than ideal solution, I would rather get Tpetra working.

I've been looking at this Epetra example which defines an Anasazi::EpetraGenOp generalized operator to solve the linear system. This generalized operator basically computes $\mathbf{A}^{-1}\mathbf{B}v_i$ for a shift of $\sigma = 0$.

Anasazi::EpetraGenOp is defined in the Epetra adapter for Anasazi but the Tpetra adapter does not seem to have an equivalent generalized operator.

My question:

What is the correct way to solve a shift-inverted generalized eigenvalue problem using Tpetra/Belos/Anasazi?

• For what it's worth, SLEPc has a dedicated infrastructure for shift-and-invert methods. Unfortunately, I don't use SLEPc (only PETSc, which SLEPc is built upon), and I don't use anything from Trilinos, so I can't be of more help. – Geoff Oxberry Feb 28 '14 at 0:12
• I think this is a question you need to ask the Epetra/Tpetra/Belos/Anasazi authors. – Wolfgang Bangerth Feb 28 '14 at 2:55
• @WolfgangBangerth You are probably right, this is a fairly localized question. I will try to contact the relevant developers. – OSE Feb 28 '14 at 16:06
• The Trilinos authors are pretty friendly folks, but honestly, the SLEPc package is likely better maintained/documented. – meawoppl Mar 2 '14 at 19:26