Menu

Wavepacket 0.3.5 released

This release took unusually long; I usually strive for about two releases per year. This one was overdue due to some assistance with getting the underlying tensor library to use CMake, and a rather discouraging set of issues that I mostly dropped for an alternative approach. Anyway. What did change?

1. Much better support for open-system dynamics

Wavepacket can propagate a density matrix with some system-bath coupling completely in the DVR. That is pretty neat, but, as it turned out, mostly useless.

When you use a reduced density matrix for open system dynamics, you always set up your Lindblad or Redfield Liouvillian in the energy eigenstate basis. This has two reasons. One is that you generally go for the Caldeira-Leggett model where the bath consists of uncoupled harmonic oscillators at different frequencies, which defines the coupling in an energy eigenstate basis. The other reason is that you normally want to have relaxation to thermal equlibrium as limiting case, which is difficult to express outside of an energy eigenstate basis.

Version 0.3.5 offers functionality where you only need a system Hamiltonian and specify a spectral density and get a Lindblad Liouvillian with a moderate amount of work. See the example MolVibration/OH/3 for a slightly more involved example of that. This scheme, however, does not deal with the Lamb shift, which can be relevant, but is tricky to calculate in any case, so I will probably stop at the current level of assistance.

2. More consistent names

I was not happy with some of the names, sometimes even order of arguments. So there was a first round of API-breaking changes: consistent naming and ordering.

For the complete list of breaking changes, see the NEWS file. Just to highlight a few:

  • "PropagatorPrimitives" are now called "Solvers", so for example ChebychevPrimitive => ChebychevSolver
  • dropped useless prefixes and suffixes. For example, "Interval1D" is now called "Interval", or "PlotObserver" in the Python module "wavepacket.plot" is now called "Observer" (the module name says all about plotting)
  • switched the order of arguments in the constructor of "State": first grid, then the coefficients. That is the order used everywhere else, and I always mistyped that.
3. Build cleanups

I went over the (CMake) build and cleaned it up in a lot of places. There should be fewer test errors, generally more stability, a few less dependencies etc.

The most noticeable change is that I now try to use the installed googletest version before downloading something.

4. Smaller features

As usual, some things cropped up along the way:

  • new functors: Lorentzian and SoftRectangularFunction
  • function to get the lowest N functions from an eigenstate solver, function to orthonormalize a set of states
  • function to construct the adjoint of an operator
  • made Python demos always produce plot output where possible

Outook

At work, one of highlights in the last year has been to add a Python interface to some code. As a consequence, I am now way more familiar with Python than before, and would like to redo the Python integration. Also, the underlying tensor library has been adapted to CMake, which makes it way easier to compile, but requires code adjustments. Put together, I hope to finally provide a Python wheel, also for Windows, for the next release.

Breaking changes will continue, there is one large set of changes (Python is very opinionated about snake_case), and a few smaller issues with consistency, but I hope to get over these within the next two releases and finally keep the API mostly stable.

Otherwise, I am going to add a few more usability goodies. Wavepacket is already pretty usable, except for being slow when doing open systems and poor in the plotting department, so these would be the other focus areas.

Posted by Ulf Lorenz 2023-04-10

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.