Dear Barry,
Let S = B A^{-1} B^T be the Schur complement, and \hat{S} = B diag(A)^{-1} B^T
denotes the preconditioner.
I also tried KSPComputeExtremeSingularValues for rtol(A) = rtol(\hat{S}) =
1e-14 as you suggested. However, the results did not change much compared to
rtol(A) = rtol(S) = rtol(\hat{S}).
Additionally, I checked the identity preconditioner instead of \hat{S}. In this
case, the method firstly seems to converge when reaching rtol(S)=1e-6, but
then, with a further decrease of rtol(S), it begins to diverge slightly though.
I will try generalised EVP.
Thanks,
Vlad
________________________________
От: Barry Smith <[email protected]>
Отправлено: 10 ноября 2021 г. 17:45:55
Кому: Vladislav Pimanov
Копия: [email protected]
Тема: Re: [petsc-users] How to compute the condition number of
SchurComplementMat preconditioned with PCSHELL.
P is a diffusion matrix, which itself is inverted by KSPCG)
This worries me. Unless solved to full precision the action of solving with CG
is not a linear operator in the input variable b, this means that the action of
your Schur complement is not a linear operator and so iterative eigenvalue
algorithms may not work correctly (even if the linear system seems to be
converging).
I suggest you try a KSP tolerance of 10^-14 for the inner KSP solve when you
attempt the eigenvalue computation.
Barry
On Nov 10, 2021, at 9:09 AM, Vladislav Pimanov
<[email protected]<mailto:[email protected]>> wrote:
Great thanks, Matt!
The second option is what I was looking for.
Best Regards,
Vlad
________________________________
От: Matthew Knepley <[email protected]<mailto:[email protected]>>
Отправлено: 10 ноября 2021 г. 16:45:00
Кому: Vladislav Pimanov
Копия: [email protected]<mailto:[email protected]>
Тема: Re: [petsc-users] How to compute the condition number of
SchurComplementMat preconditioned with PCSHELL.
On Wed, Nov 10, 2021 at 8:42 AM Vladislav Pimanov
<[email protected]<mailto:[email protected]>> wrote:
Dear PETSc community,
I wonder if you could give me a hint on how to compute the condition number of
a preconditioned matrix in a proper way.
I have a MatSchurComplement matrix S and a preconditioner P of the type PCSHELL
(P is a diffusion matrix, which itself is inverted by KSPCG).
I tried to compute the condition number of P^{-1}S "for free" during the outer
PCG procedure using KSPComputeExtremeSingularValues() routine.
Unfortunately, \sigma_min does not converge even if the solution is computed
with very high precision.
I also looked at SLEPc interface, but did not realised how PC should be
included.
You can do this at least two ways:
1) Make a MatShell for P^{-1} S. This is easy, but you will not be able to
use any factorization-type PC on that matrix.
2) Solve instead the generalized EVP, S x = \lambda P x. Since you already
have P^{-1}, this should work well.
Thanks,
Matt
Thanks!
Sincerely,
Vladislav Pimanov
--
What most experimenters take for granted before they begin their experiments is
infinitely more interesting than any results to which their experiments lead.
-- Norbert Wiener
https://www.cse.buffalo.edu/~knepley/<http://www.cse.buffalo.edu/~knepley/>