-
Notifications
You must be signed in to change notification settings - Fork 20
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
Update Metis.graph to support only one triangle of a sparse Hermitian matrix #53
Comments
Metis still needs the full graph right? Why not use the existing |
I checked a little bit and it seems that Metis always need the full graph. |
What do you mean? If someone is passing Hermitian we should only consider the one half (even if the other one is stored, it should be ignored). |
Yes, you answered before that I modified my last message. Metis.graph(G::Hermitian{<:All, <:SparseMatrixCSC}) = Metis.graph(G.data; check_hermitian=false; view=G.uplo) |
What I mean is, what would |
We could do everything with |
I am having some similar issues. How did you end up solving it @amontoison ? |
I still provide both triangles to METIS. 😕 |
Okay, I guess I have to do the same then. Not the most efficient for large problems 😬 |
Okay having looked at the code and the Metis documentation I think the issue is not as bad as I initially thought. Yes, we need to store each edge twice (to represent the full sparsity pattern), but the weights are not needed. I guess this is what Alexis hinted at earlier with the specialized graph assembly for when only |
It's what we do in the HSL linear solvers like MA57, the user only provides one triangle and after AMD or METIS is called to compute a fill-in reduction permutation. |
Yeah, that is pretty standard for sparse direct solvers. You also only provide one of the triangles in Pardiso and faer-rs. |
My rough solution so far is to get the sparsity pattern of the missing triangle by converting the original triangle using a "CSR to CSC" procedure without copying the non-zeros (the transpose of a CSC is simply a CSR with |
A rough implementation of the above can be seen in #54 . Any diagonal entries will be duplicated and subsequently ignored when creating the |
Closed by #54. |
We could add a keyword argument
view
in the following routine:such that the new signature is
With this modification, we can handle the cases where only the lower or upper triangle part of
G
is stored.cc @frapac @sshin23
The text was updated successfully, but these errors were encountered: