MBO
 All Data Structures Files Functions Variables Typedefs Enumerations Modules Pages
MBO documentation

What is MBO?

MBO is a library for the efficient numerical treatment of quantum mechanical many body operators. Quantum mechanical many body operators are linear operators constructed from small matrices (single body operators) that are embedded into a tensor product space. For example, in a system of $N$ spin 1/2 systems we have the operator $\sigma_-^{(j)}$, the spin lowering operator for particle $j$. Mathematically, $\sigma_-^{(j)}$ is obtained from the single particle two by two matrix, $\sigma_-$, by taking Kronecker products with identity operators for particle other than particle $j$.

This leads to the three core concepts of MBO:

MBO was designed to deal with these three concepts as efficiently as possible. Specifically, the goal of MBO is to run as fast as possible on a single core. MBO deliberately does not address parallelization via processes (e.g. MPI) or threads (e.g. via pthreads or OpenMP). This choice was made to facilitate using MBO with libraries that have their own strategies for parallelism (e.g. PETSc). Parallelization of the application of MBO operators is easily achieved at the application level (i.e. outside of MBO).

Quick start guide

Download, configure, build, and install the library:

git clone https://github.com/d-meiser/mbo
cd mbo
mkdir build
cd build
cmake ..
make
sudo make install

A simple example:

The following example illustrates the basic usage of MBO.

#include <Mbo.h>
int main()
{
MboProdSpace singleParticleSpace = mboProdSpaceCreate(2);
MboProdSpace manyParticleSpace = mboProdSpaceCreate(0);
int N = 20;
int i;
for (i = 0; i < N; ++i) {
mboProdSpaceMul(singleParticleSpace, &manyParticleSpace);
}
mboTensorOpNull(manyParticleSpace, &smj);
int j = 7;
mboTensorOpAddTo(sm, j, smj);
mboProdSpaceDestroy(&singleParticleSpace);
mboProdSpaceDestroy(&manyParticleSpace);
}