I now see what is happening. In the expression of the paper the antishift has 
different sign compared to the expression used in SLEPc (see the users manual):

(A-sigma*B)^{-1}*(A+nu*B)x = \theta x

So nu=-sigma is a forbidden value, otherwise both factors cancel out (I will 
fix the interface so that this is catched).

In your case you should do -eps_target -1 -st_cayley_antishift -1

Jose


> El 27 sept 2019, a las 13:54, Michael Werner <[email protected]> escribió:
> 
> Yes, with sinvert its working. And using -eps_target instead of
> -st_shift didn't change anything.
> 
> I also just sent you the matrices for reproduction of the issue.
> 
> Michael
> 
> Am 27.09.19 um 13:32 schrieb Jose E. Roman:
>> Try setting -eps_target -1 instead of -st_shift -1
>> Does sinvert work with target -1?
>> Can you send me the matrices so that I can reproduce the issue?
>> 
>> Jose
>> 
>> 
>>> El 27 sept 2019, a las 13:11, Michael Werner <[email protected]> 
>>> escribió:
>>> 
>>> Thank you for the link to the paper, it's quite interesting and pretty
>>> close to what I'm doing. I'm currently also using the "inexact" approach
>>> for my application, and in general it works, as long as the ksp
>>> tolerance is low enough. However, I was hoping to speed up convergence
>>> towards the "interesting" eigenvalues by using Cayley.
>>> 
>>> Now as a test I tried to follow the approach from your paper, choosing
>>> mu = -sigma, and mu in the order of magnitude of the imaginary part of
>>> the most amplified eigenvalue. I know the most amplified eigenvalue for
>>> my problem is -0.0398+0.724i, so I tried running SLEPc with the
>>> following settings:
>>> -st_type cayley
>>> -st_shift -1
>>> -st_cayley_antishift 1
>>> 
>>> But I never get the correct eigenvalue, instead SLEPc returns only the
>>> value of st_shift:
>>> [0]      Number of iterations of the method: 1
>>> [0]      Solution method: krylovschur
>>> [0]      Number of requested eigenvalues: 1
>>> [0]      Stopping condition: tol=1e-08, maxit=19382
>>> [0]      Number of converged eigenpairs: 16
>>> [0]     
>>> [0]              k          ||Ax-kx||/||kx||
>>> [0]      ----------------- ------------------
>>> [0]          -1.000000          0.0281754
>>> [0]          -1.000000          0.0286815
>>> [0]          -1.000000          0.0109186
>>> [0]          -1.000000           0.140883
>>> [0]          -1.000000           0.203036
>>> [0]          -1.000000         0.00801616
>>> [0]          -1.000000          0.0526871
>>> [0]          -1.000000           0.022244
>>> [0]          -1.000000          0.0182197
>>> [0]          -1.000000          0.0107924
>>> [0]          -1.000000         0.00963378
>>> [0]          -1.000000          0.0239422
>>> [0]          -1.000000         0.00472435
>>> [0]          -1.000000         0.00607732
>>> [0]          -1.000000          0.0124056
>>> [0]          -1.000000         0.00557715
>>> 
>>> Also, it doesn't matter if I'm using exact or inexact solves. Changing
>>> the values of shift and antishift also doesn't change the behaviour. Do
>>> I need to make additional adjustments to get cayley to work?
>>> 
>>> Best regards,
>>> Michael
>>> 
>>> 
>>> 
>>> Am 25.09.19 um 17:21 schrieb Jose E. Roman:
>>>>> El 25 sept 2019, a las 16:18, Michael Werner via petsc-users 
>>>>> <[email protected]> escribió:
>>>>> 
>>>>> Hello,
>>>>> 
>>>>> I'm looking for advice on how to set shift and antishift for the cayley
>>>>> spectral transformation. So far I've been using sinvert to find the
>>>>> eigenvalues with the smallest real part (but possibly large imaginary
>>>>> part). For this, I use the following options:
>>>>> -st_type sinvert
>>>>> -eps_target -0.05
>>>>> -eps_target_real
>>>>> 
>>>>> With sinvert, it is easy to understand how to chose the target, but for
>>>>> Cayley I'm not sure how to set shift and antishift. What is the
>>>>> mathematical meaning of the antishift?
>>>>> 
>>>>> Best regards,
>>>>> Michael Werner
>>>> In exact arithmetic, both shift-and-invert and Cayley build the same 
>>>> Krylov subspace, so no difference. If the linear solves are computed 
>>>> "inexactly" (iterative solver) then Cayley may have some advantage, but it 
>>>> depends on the application. Also, iterative solvers usually are not robust 
>>>> enough in this context. You can see the discussion here 
>>>> https://doi.org/10.1108/09615530410544328
>>>> 
>>>> Jose
>>>> 
> 
> 
> 
> 

Reply via email to