[petsc-users] Solving tridiagonal hermitian generalized eigenvalue problem with SLEPC

Toon Weyens tweyens at fis.uc3m.es
Mon Aug 18 15:00:47 CDT 2014


Sorry, I forgot to mention: I am looking for the Eigenvalues that are the
largest, *not* in absolute value, but along the real axis.


On 18 August 2014 21:54, Toon Weyens <tweyens at fis.uc3m.es> wrote:

> Hi, thanks for the answers!
>
> I think I expressed myself wrong: I can indeed get it to work with just
> using AIJ matrices, as in example 13. This is the way that I am currently
> solving my problem. There are only two issues:
> 1. memory is indeed important so I would certainly like to decrease it by
> one third if possible :-) The goal is to make the simulations as fast and
> light as possible to be able to perform parameter studies (on the stability
> of MHD configurations).
>
> 2. I have played around a little bit with the different solvers but it
> appears that the standard method and the Arnoldi with explicit restart
> method are the best. Some of the others don't converge and some are slower.
>
> The thing is that in the end the matrices that I use are large but they
> have a very easy structure: hermitian tri-diagonal. That's why, I think,
> slepc usually converges in a few iterations (correct me if I'm wrong).
>
> The problem is that sometimes, when I consider more grid points, the
> solver doesn't work any more because apparently it uses the LU
> decomposition (not sure for the matrix A or B in A x = lambda B x) and
> there is a zero pivot element (see below for error message). In other
> words: the matrices become almost singular. This is a characteristic of the
> numerical method I think. Is there any way to fix this by setting a more
> precise threshold or something?
>
> Also, there is one more thing: is it possible and useful to use the
> non-zero structure of A when defining matrix B? Does this affect perfomance?
>
> Thanks in advance!
> Toon
>
>
> Error messages: identical for KRYLOV-SCHUR and ARNOLDI
>
> [0]PETSC ERROR: --------------------- Error Message
> ------------------------------------
> [0]PETSC ERROR: Detected zero pivot in LU factorization:
> see http://www.mcs.anl.gov/petsc/documentation/faq.html#ZeroPivot!
> [0]PETSC ERROR: Zero pivot row 19 value 6.57877e-16 tolerance 2.22045e-14!
> [0]PETSC ERROR:
> ------------------------------------------------------------------------
> [0]PETSC ERROR: Petsc Release Version 3.4.5, Jun, 29, 2014
> [0]PETSC ERROR: See docs/changes/index.html for recent updates.
> [0]PETSC ERROR: See docs/faq.html for hints about trouble shooting.
> [0]PETSC ERROR: See docs/index.html for manual pages.
> [0]PETSC ERROR:
> ------------------------------------------------------------------------
> [0]PETSC ERROR: ./PB3D on a debug-complex named toon-XPS-L501X by toon Mon
> Aug 18 21:47:41 2014
> [0]PETSC ERROR: Libraries linked from
> /opt/petsc/petsc-3.4.5/debug-complex/lib
> [0]PETSC ERROR: Configure run at Mon Aug 11 10:08:29 2014
> [0]PETSC ERROR: Configure options PETSC_ARCH=debug-complex
> --with-scalar-type=complex --with-debugging
> [0]PETSC ERROR:
> ------------------------------------------------------------------------
> [0]PETSC ERROR: MatPivotCheck_none() line 589 in
> /opt/petsc/petsc-3.4.5/include/petsc-private/matimpl.h
> [0]PETSC ERROR: MatPivotCheck() line 608 in
> /opt/petsc/petsc-3.4.5/include/petsc-private/matimpl.h
> [0]PETSC ERROR: MatLUFactorNumeric_SeqAIJ_Inode() line 1837 in
> /opt/petsc/petsc-3.4.5/src/mat/impls/aij/seq/inode.c
> [0]PETSC ERROR: MatLUFactorNumeric() line 2889 in
> /opt/petsc/petsc-3.4.5/src/mat/interface/matrix.c
> [0]PETSC ERROR: PCSetUp_LU() line 152 in
> /opt/petsc/petsc-3.4.5/src/ksp/pc/impls/factor/lu/lu.c
> [0]PETSC ERROR: PCSetUp() line 890 in
> /opt/petsc/petsc-3.4.5/src/ksp/pc/interface/precon.c
> [0]PETSC ERROR: KSPSetUp() line 278 in
> /opt/petsc/petsc-3.4.5/src/ksp/ksp/interface/itfunc.c
> [0]PETSC ERROR: PCSetUp_Redundant() line 170 in
> /opt/petsc/petsc-3.4.5/src/ksp/pc/impls/redundant/redundant.c
> [0]PETSC ERROR: PCSetUp() line 890 in
> /opt/petsc/petsc-3.4.5/src/ksp/pc/interface/precon.c
> [0]PETSC ERROR: KSPSetUp() line 278 in
> /opt/petsc/petsc-3.4.5/src/ksp/ksp/interface/itfunc.c
> [0]PETSC ERROR: STSetUp_Shift() line 126 in
> /opt/slepc/slepc-3.4.4/src/st/impls/shift/shift.c
> [0]PETSC ERROR: STSetUp() line 294 in
> /opt/slepc/slepc-3.4.4/src/st/interface/stsolve.c
> [0]PETSC ERROR: EPSSetUp() line 215 in
> /opt/slepc/slepc-3.4.4/src/eps/interface/setup.c
> [0]PETSC ERROR: EPSSolve() line 90 in
> /opt/slepc/slepc-3.4.4/src/eps/interface/solve.c
>
>
>
> On 18 August 2014 20:52, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
>>
>>    I would recommend just using AIJ matrices and not worry about SBAIJ at
>> this stage. SBAIJ can save you memory but not operations and unless memory
>> is really tight is not likely a useful optimization.
>>
>>    What eigensolvers have you tried and which eigenvalues do you want?
>>
>>    Barry
>>
>> On Aug 18, 2014, at 5:46 AM, Toon Weyens <tweyens at fis.uc3m.es> wrote:
>>
>> > Dear all,
>> >
>> > I am using PETSC and SLEPC to simulate a problem in MHD, described in
>> http://scitation.aip.org/content/aip/journal/pop/21/4/10.1063/1.4871859.
>> >
>> > I have a bit of experience with MPI but not too much with PETSC and
>> SLEPC. So after reading both user manuals and also the relevant chapters of
>> the PETSC developers manual, I still can't get it to work.
>> >
>> > The problem that I have to solve is a large generalized eigenvalue
>> system where the matrices are both Hermitian by blocks and tridiagonal,
>> e.g.:
>> >
>> > ( A11  A12    0     0       0   )                      ( B11  B12    0
>>    0       0   )
>> > ( A12* A22  A23   0      0   )                       ( B12* B22  B23
>>  0      0   )
>> > (   0    A23* A33  A34   0   )   =   lambda    (   0    B23* B33  B34
>>  0   )
>> > (   0      0    A34* A44  A45)                       (   0      0
>> B34* B44  B45)
>> > (   0      0    A45* A55    0  )                       (   0      0
>> B45* B55    0  )
>> >
>> > where Aii = Aii*, with * the Hermitian conjugate. I apologize for the
>> ugly representation.
>> >
>> > The dimensions of both A and B are around 50 to 100 blocks (as there is
>> a block per discretized point) and the blocks themselves can vary from 1 to
>> more than 100x100 as well (as they correspond to a spectral decomposition).
>> >
>> > Now, my question is: how to solve this economically?
>> >
>> > What I have been trying to do is to make use of the fact that the
>> matrices are Hermitian and by using matcreatesbaij and through the
>> recommended matcreate, matsettype(matsbaij), etc.
>> >
>> > Could someone help me out? All help would be greatly appreciated!
>> >
>> > Thank you in advance,
>> > Toon
>> > UC3M
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20140818/2701e535/attachment-0001.html>


More information about the petsc-users mailing list