Dear Deal.II community,

I am working on implementing a vector eigenproblem in deal.ii, starting 
from the step-36 example. The question I am studying is the normal 
oscillation of a fluid planet. The eigenproblem is of this type:
 _                                                                      _
 I  I¯  A  0  ¯I    *eigenvalue     +  I¯    0 B ¯ I I  * eigenvector =0
 I  I_   0 0   _I                                  I_   C D   _I I
 ¯                                                                     ¯
where eigenvector consists of a vector displacement and a scalar pressure 
perturbation: 

eigenvector = transpose([U P])

It seems from the literature (e.g., Wang & Bathe 1997) that it is standard 
to rewrite this system to eliminate the pressure variable:

eigenvalue * A *  U - B * D^-1 * C * U = 0

or 

eigenvalue * A *  U + M * U = 0

with M = - B * D^-1 * C and P = -D^-1 * C * U 

What I am having trouble with is how to efficiently represent matrix 
products and inverses that go into matrix M. All the matrices (A, B, C, D) 
are sparse, but due to the inverse, it seems that M will be a full matrix 
and it might be unaffordable to store it in the memory. There was a 
discussion on a similar topic here:

https://groups.google.com/g/dealii/c/5P_fv0zg7jg/m/CPYcYrbsDQAJ

It seems that LinearOperator was used in that discussion to manipulate the 
matrix products and inverses, which seemed like an approach to follow if 
you use ARPACK eigensolvers. However, I am using SLEPc and it seems the 
inputs to SLEPc solvers would have to be objects of class 
PETScWrappers::MatrixBase 
<https://www.dealii.org/current/doxygen/deal.II/classPETScWrappers_1_1MatrixBase.html>
. 

So, my question is how to prepare such a matrix M involving matrix products 
and matrix inverse efficiently and represent it as PETScWrappers::MatrixBase 
<https://www.dealii.org/current/doxygen/deal.II/classPETScWrappers_1_1MatrixBase.html>
 suitable 
for a SLEPc eigensolver. 

In addition, I am interested in the interior eigenvalues. It seems that 
shift-invert spectral transformation is available in SLEPc - this is what I 
plan to use. However, SLEPc also has a polynomial filtering spectral 
transformation. It does not seem that deal.ii provides a wrapper to that 
one though. So, I wonder if anyone has had expertise with making an 
interface in deal.ii to use SLEPc's polynomial filtering transformation.

Thanks a lot,
Anton.



-- 
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to dealii+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dealii/426e3d15-a42f-4e90-a3f7-117c66e71c92n%40googlegroups.com.

Reply via email to