The Heidelberg MCTDH code seems to be the de-facto standard for MCTDH calculations. However, for all the nice things, it has a few serious drawbacks:
- It is written in Fortran-77. This language is more than 30 years old, and it seriously shows. The MCTDH code is by far not the worst Fortran code out there, but it has a couple of clear limitations. Effectively it takes about two weeks to understand it sufficiently to work with it.
- Everything is done by global variables, and there are tons of them
- There are surprising side effects or magic settings of global variables throughout the code
- The variables tend to have obscure names; functions tend to have rather too many variables
- Dynamic resizing of arrays is rather difficult; the code goes around this with elaborate pointer arithmetic
- Documentation is sparse
- The build system is seriously screwed up. If you know build systems, it takes only about one hour to figure out how to build your own analyze programs, otherwise you are lost.
- The routines for accessing the various files are deeply embedded into the code. In other words, either you embrace the MCTDH code or you are lost.
- Testing (proper unit or integration testing, not a "looks good" application test) is close to impossible.
- The provided analysis tools tend to do almost exactly what you want to do, but not quite.
- For convergence tests, I want to have a look at the (FBR) populations of the primitive grid. There are tools to look at the DVR populations, and tools to sum up the last few FBR populations, but exactly this tool does not exist.
- For the same purpose, I may want to calculate the overlap between wave functions calculated with a different number of primitive basis functions. However, this is about the only thing that the overlap tool does not support.
So in any case, you will typically have to write your own analysis tools, which is quite a pain. To make life better, this project aims to provide some code to read in multilayer wave function data and a few tools to manipulate the wavefunction.