Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.

How to warm-start ILUT + GMRES

damienhocking
New Contributor I
416 Views
I'm bringing in the preconditioned gmres solver with ilut into my nonlinear solver. I want to make sure I get this right for warm-starting, and also for updating the preconditioner. I couldn't find what to do in the docs.

To warm start gmres after a first solve pass has gone through, do I need to call dfgmres_init and dfgmres_check again, or can I just update the rhs and go straight to iterations, starting with RCI_request = 0?

Also, to restart from a new preconditioner, do I need to clean up all the memory and reinitialise the whole solve cycle, or can I just stop iterating, call dfgmres_init, generate the preconditioner, call dfgmres_check and start again with RCI_request = 0?

Thanks in advance,

Damien

0 Kudos
5 Replies
Alexander_K_Intel2
416 Views

Hi,

Could you please clarify your problem: you try to solve nonlinear system by fgmres with preconditioner or try to solve nonlinear system by your own solver that use fgmres internally internal that allow several fgmres loops?

With best regards,

Alexander Kalinkin

0 Kudos
damienhocking
New Contributor I
416 Views
Sorry, I should have been clearer. It's my own nonlinear solver, using preconditioned gmres to solve the linear system internally.
0 Kudos
Alexander_K_Intel2
416 Views

Hi,

If I understood you correctly your solver could be organized by next way:

Loop over nonlinear solver

{.

On each nonlinear iteration

{dfgmres_init();

dcsrilut();

dfgmres_check();

loop over dfgmres();

dfgmres_get();}

.}

Its strongly recommended to call dfgmres_init() in beginning of each loop, in other way you need to set some parameters manually. Is it convenient for you?

With best regards,

Alexander Kalinkin

0 Kudos
damienhocking
New Contributor I
416 Views
Thanks. I'm hoping to be able to reuse the preconditioner from previous nonlinear iterations to speed things up; this will be used on very large problems and dcsrilut() isn't parallel. I ran into problems before but I think it's because I wasn't callingdfgmres_init() and dfgmres_check() on every nonlinear iteration, only the first one. I'll try this and see how it goes.

0 Kudos
Alexander_K_Intel2
416 Views
Hi,
Of course, you are able to reuse the preconditioner calculated on one nonlinear iteration on next iteration. As for me if you doesn't recalculate preconditioner several times on some nonlinear iteration your preconditioner will not good enoughprecond you linear system but it depends from your problem.
With best regards,
Alexander Kalinkin
0 Kudos
Reply