Menu

WavePacket (C++/Python) / Blog: Recent posts

Perils of compiling software under Windows

I have been planning for years to write something in praise of vcpkg as making Windows compilation less unbearable. While building a binary package of
Wavepacket
recently, I found, however, that there are also other issues when porting software from Unix, hence a shift in focus.

Introduction

Only after programming C++ under Windows for some time did I fully grasp how much of a hacker's system Unix is. You only need to master a few concepts, such as how the linker works or which package to install for the library headers, then adding external dependencies to your code becomes almost trivial, also for others. And things just work; you might spend ages blissfully unaware of problems such as ABI compatibility, symbol versioning, linker maps or the details of the ELF symbol resolution.... read more

Posted by Ulf Lorenz 2024-05-12

Wavepacket 0.3.6 released

The main focus of this release was an improved compilation. In particular, being able to provide Windows binaries, given that this is a recurring issue.

1. Windows binaries and simpler compilation

Version 0.3.6 is the first to ship a Windows distributable, consisting of a Python package with associated documentation and Demos. Everything is still somewhat crude (documentation, setup, required preparation), but it works at least.... read more

Posted by Ulf Lorenz 2024-05-09

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.... read more

Posted by Ulf Lorenz 2023-04-10

Wavepacket 0.3.4 released

New features in this version:

  • There is now a much simpler approach to build Wavepacket with a
    virtual machine.

    Install two programs (Vagrant + Virtualbox), modify a config file,
    open a console, type three to four commands, and you can execute
    Wavepacket Python code in your Web browser. For more details, see
    README_VirtualMachine in the root directory. Needs some more
    polishing, but should be reasonably plug&play.... read more

Posted by Ulf Lorenz 2022-01-11

Dependency management with DotNet or Why you should use Paket

Today something completely different. I wanted to write about this topic for a long time, and it also has nice overlap with vcpkg (which I also wanted to write up for some time now), so I finally decided to just do it.

This blog post was inspired by me learning more DotNet internals than I would normally care about. One of the rather frustrating experiences during this process was the lack of readily available information on how DotNet deals with dependencies. Hence this blog post.... read more

Posted by Ulf Lorenz 2021-09-09

Wavepacket 0.3.3 released

The version features two major improvements towards the goal of being more usable:

  • The Python interface has a plotting observer.
    There is now an Observer (written in Python and used in the C++ code) that utilizes Python's matplotlib to plot the wavefunction on the screen. This is currently not that impressive because it works only for one-dimensional wave functions . However, with the technological barriers now overcome, you can expect more plotting options for the Python interface in the future.
    See the DoubleWell Python demo for an example.
  • The operator hierarchy has been rectified a little.
    This may give a minor speed boost in certain situations, because real-valued and complex-valued operators are now disentangled and because real algebra is faster than complex algebra. The main gain is that it should be easier to reason about most operators in code, which is a prerequisite for things like better optimization of operators, or the split-operator scheme

Besides these two major improvements there have been a couple of smaller usability or special-usage improvements. The most noticable:... read more

Posted by Ulf Lorenz 2021-08-08

Convergence #2: time steps

Note: This post should probably be merged with the Wiki, in particular the page on the time-dependent Schödinger equation. The second part should be easy, but the first part uses a pretty different angle, so I first post the whole thing here.

This document describes how to propagate a wavefunction in time. The question should be answered are:... read more

Posted by Ulf Lorenz 2021-04-19

Convergence #1: Equally-spaced grids

I recently got an email from a user that had tried out Wavepacket with some highly accurate data, and found that the results did not match the data. While answering the email, my answer turned out to be a bit long. And I figured out that I may have accumulated quite some experience with respect to converging (wavepacket) calculations over the years. Also, these sort of issues come up every now and again, and there have been similar questions in the past. So I wanted to shape this knowledge into some blog posts about convergence, and how to minimise errors in a wavepacket calculation.... read more

Posted by Ulf Lorenz 2020-11-24

Building a Python interface to a CMake library

I have recently rewritten the way how the Python module for Wavepacket is built, and learned a lot about Python along the way. The learning curve was rather steep, and it felt a lot like learning the intricate details of Nuget and .Net assembly loading (this is not a compliment). However, while extension libraries for Python may not be ideally documented, the implementation is pretty robust and neat. So I thought, I'd write up what I tried and found out to assist others in a similar situation.... read more

Posted by Ulf Lorenz 2020-10-08

WavePacket 0.2.4 released

I just released the next C++-version of WavePacket. Some excerpts from the NEWS file:

  • renamed some key classes to disentangle the concept "operator" from "expression/equation/Liouvillian". The new naming system is hopefully much more intuitive. See this blog post for the explanations.
  • The Python interface can be installed as a regular Python module. There are still some loose ends here and there, but it works.
  • added a couple new demos
    • highlighted demo that explains how to setup thermal states (propagation in imaginary time, random wave functions etc.). See here.
    • demo that uses multiple electronic states (MolElectronic/OH/1 and 2)
    • unfinished demo that sets up a Lindblad relaxation (MolVibration/OH/3)
  • improved several PropagationObservers
    • LoggingObserver deals correctly with multiple electronic states
    • Plot1DObserver is way easier to setup, and can plot output for multiple electronic states
  • added a projection operator
  • some other minor fixes and improvements
Posted by Ulf Lorenz 2019-04-28

Naming the components of equations

Why this blog post

I have just finished Ticket [#124], which introduced some renaming of very basic classes. And while asking Burkhard for his opinion, he was not able to dig through my explanations. Plus, the Matlab version started a new blog, so I thought I would try to wrap up all the ideas why the new names are great in a blog post and explain along the way how a good part of the C++ version works.... read more

Posted by Ulf Lorenz 2019-03-08
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.