Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Does ILU(0) applied to a symmetric matrix give a symmetric preconditioner? #1211

Open
nncarlson opened this issue Jan 21, 2025 · 4 comments
Open

Comments

@nncarlson
Copy link

I'm attempting to use ILU as a preconditioner for a Krylov method (not from Hypre). The matrix is symmetric and I require a symmetric preconditioner. My limited understanding is that a single iteration with ILU(0) ought to be symmetric, however it's immediately evident from the Krylov solver that this isn't the case. When I instead swap in BoomerAMG for ILU everything is good. I'm following the pattern outlined in the manual to configure ILU(0) as a preconditioner:

HYPRE_ILUCreate(&ilu_solver);
HYPRE_ILUSetType(ilu_solver, 0);
HYPRE_ILUSetLevelOfFill(ilu_solver, 0);
HYPRE_ILUSetMaxIter(ilu_solver, 1);
HYPRE_ILUSetTol(ilu_solver, 0.0);
HYPRE_ILUSetup(ilu_solver, parcsr_A, b, x);
HYPRE_ILUSolve(ilu_solver, parcsr_A, b, x);

Am I needing something additional here to ensure symmetry, or am I mistaken about ILU(0) being symmetric given a symmetric matrix?
FWIW, I've tried the exact same code as a preconditioner in a nonlinear iteration where symmetry isn't involved, and it works well.

@liruipeng
Copy link
Contributor

No, it doesn't ensure symmetry given a symmetric matrix. We may add ILDL-type preconditioner in the future to ensure symmetry or IC-type for SPD. But none is available now. Sorry.

@nncarlson
Copy link
Author

Thanks for the quick response. If you've got a feature request list, please do add this -- both ILDL (actually my present case) and IC. Do you happen to know whether PILUT or Euclid support this?

@liruipeng
Copy link
Contributor

@nncarlson We will add it. To the best of my knowledge, I don't think PILUT or Euclid supports this. Thanks

@victorapm
Copy link
Contributor

@nncarlson, given the problem is symmetric, you might want to take a look at our sparse approximate inverse (FSAI) preconditioner. It can also be used as relaxation method in BoomerAMG

More info can be found at: https://hypre.readthedocs.io/en/latest/solvers-fsai.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants