steady states with iterative methods

65 views
Skip to first unread message

Jake Iles-Smith

unread,
Apr 14, 2015, 6:54:06 AM4/14/15
to qu...@googlegroups.com
Hi, 

I was wondering whether anyone could give me some advice regarding the iterative methods for the steady state solver?

I have a very large system Hamiltonian (two bosonic modes and a 4 level system), and need to calculate the steady state for a Liouvillian of my own construction. The standard methods, e.g. 'power' 'eigen' and 'direct', take too much time and memory. The solution should be relatively close to the Gibbs state w.r.t. the full system, so I think I can give a decent starting point. So I have a couple of questions:

1) What is the correct form for the initial condition? When I use:

initial_guess = (-beta * H_S).expm()
initial_guess = initial_guess / initial_guess.tr()
steadystate(H_S, [L], x0 = initial_guess, method = 'iterative-bicgstab', use_precond = True)

I get the error: Type error: a float is required


2) If I choose some precondition what form should it take when fed into the steadystate() function?


Any help you can give would be greatly appreciated.

Cheers,
Jake

Paul Nation

unread,
Apr 14, 2015, 7:56:59 AM4/14/15
to qu...@googlegroups.com

The iterative methods are tricky,  but when they work the results are good. I would not set the initial guess,  switch to "iterative-gmres" as it is more stable,  and set "use_rcm=1". The other settings should be set to their default values. If you get a preconditioning failed error,  try increasing the fill_factor. There are new iterative methods in the github master, and if you want you can download and try switching to "power-bicgstab" and see how that goes.

Paul


--
You received this message because you are subscribed to the Google Groups "QuTiP: Quantum Toolbox in Python" group.
To unsubscribe from this group and stop receiving emails from it, send an email to qutip+un...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Jake Iles-Smith

unread,
Apr 14, 2015, 11:46:09 AM4/14/15
to qu...@googlegroups.com
Hi Paul,

Thanks for reply and advice. Your suggestion works nicely for (relatively) small system size, however when I try for a very large system, the preconditioner seems to fall over regardless of how large fill_factor is. Would another method be better, or am stuck with what I have?

Thanks again,
Jake 

Paul Nation

unread,
Apr 14, 2015, 7:40:09 PM4/14/15
to qu...@googlegroups.com
There should be a max fill_factor that you can set before it complains about memory.  The error should say something like

error: can't allocate region
MemoryError

If this is what you get, then you can not increase the fill_factor anymore.  Instead, you can increase the drop_tol to something like 1e-3 or 1e-2.  The preconditioner might succeed in this case, but you can never be quite sure about convergence.  Finding the right drop_tol and other parameters is more art than science unfortunately, especially in the case of non-Hermitian matrices.  Your system is naturally quite high in dimensionality, so it could be that you just do not have enough memory to simulate the size of system that you want.

Paul
Reply all
Reply to author
Forward
0 new messages