Hello all,

I wasn't sure if I should start a new thread as this is a very related and 
basic question. Before I got the impression that switching from an exact LU 
(UMFAPCK) to an ILU would be a good first try when UMFPACK started too much 
memory for my problem. However, it appears that the SparseILU class does 
not play nicely with BlockSparseMatrix. I know there are probably better 
options out there, but I am not yet to the point of needing a highly 
optimized code with an optimal preconditioner. Are there any simple 
workarounds that would allow me to compute an incomplete LU decomposition 
of a BlockSparseMatrix interpreted as one big matrix? I hope I'm not 
missing anything too obvious: It doesn't look like BlockSparseMatrix is a 
derived class of SparseMatrix. It also doesn't look like there is an easy 
way to convert a BlockSparseMatrix to SparseMatrix. At first I thought that 
I could just apply SparseILU to each block (make a BlockSparseMatrix with 
each block being of type SparseILU), but I do not think that is equivalent, 
and perhaps may not even be very helpful at all.

Thank you.

On Monday, November 15, 2021 at 6:13:26 PM UTC-5 Wolfgang Bangerth wrote:

>
> Kyle:
>
> > Additionally, due to that structure, where most of the matrix does not 
> > change, I could probably solve much more efficiently too. Currently I am 
> > using UMFPACK. Figuring out and implementing a nice preconditioner is 
> > another project for another time. However, what I'm hoping is possible 
> > is some sort of scheme like:
> > 
> > 1) Solve the system directly once, store the LU decomposition and how 
> > long it took to solve.
> > 2) Switch to GMRES (nonsymmetric problem) and precondition the next 
> > solve with the precomputed LU decomposition. Time the computation.
> > 3) If that solve took less time that the direct one took, do go back to 
> > stop 2 for the next solve. If it took longer go to step 1.
>
> Yes, that scheme makes sense. The SparseDirectUMFPACK::factorize() and 
> SparseDirectUMFPACK::solve() functions make that possible where you 
> would call the solve() function that only takes vector(s) as argument.
>
>
> > I understand every part of this except for how to store and reuse the 
> > LU. From what (little) I understand, UMFPACK does literally store the 
> > entire LU. How can I get access to it directly.
>
> You don't. UMFPACK stores it internally, and solve() uses it.
>
>
> > If I can't for whatever 
> > reason, I was thinking about using a similar setup with an ILU 
> > decomposition. However, I have the same problem there and am back to 
> > hoping that someone can tell me how to get access to such a thing. Note 
> > that I would like to avoid making a copy of the whole system matrix--as 
> > I notice many of the preconditioner types are pass by reference, I can't 
> > change it and then use the old values.
>
> The situation is actually the same with ILUs: There are separate 
> functions that *compute* a factorization and that *use* a factorization.
>
> Best
> W.
>
>
> -- 
> ------------------------------------------------------------------------
> Wolfgang Bangerth email: [email protected]
> www: http://www.math.colostate.edu/~bangerth/
>

-- 
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dealii/4018361c-45ad-411c-bedb-42a443aab78fn%40googlegroups.com.

Reply via email to