Recent Changes - Search:




Construct finite or infinite product states by specifying the local basis states and bond quantum numbers.


mp-construct [options] <states>



Show help message

-l, --lattice

Lattice filename [required]

-o, --output

Output wavefunction filename [required]

-f, --force

Force overwriting the output file


Create an infinite wavefunction [default behaviour]


Create a finite wavefunction


Increase verbosity


This tool will create a wavefunction which is written as a tensor product of the local basis states in the lattice file. The local basis states are specified in the positional argument of the tool. There are two ways to specify the state:

  • Only the local basis states are written, and are separated by colons, e.g. 0:1:0:1 for a bosehubbard-u1 lattice. This syntax is more suitable for lattices with Abelian symmetries, since then the quantum numbers at the bonds can be uniquely determined by the local basis states.
  • The local basis states and the bond quantum numbers are specified, where the quantum numbers are placed in brackets between the basis states, e.g. "(0.5)1(1.5)1(0.5)" for a spinchain-su2 lattice with -S 1 (note that both the initial and final quantum numbers need to be specified). This syntax is more suitable for lattices with non-Abelian symmetries, since the bond quantum numbers are not uniquely determined, and need to be specified.

It is not possible to mix these two syntaxes (e.g. by having a colon on some bonds and having the quantum number in brackets on some other bonds).

Whitespaces are ignored, so "(0.5) 1 (1.5) 1 (0.5)" and "0 : 1 : 0 : 1" are both valid: if using the syntax where only the basis states are specified, then it is also okay to use whitespace instead of colons, e.g. "0 1 0 1" (but note that we need to put the string in quotation marks if using whitespace so that the tool interprets it as a single argument).

If the local basis state or quantum number can be uniquely determined (e.g. if there is only one local basis state, as in spinchain-su2), then it can be left out, so (0.5)(1.5)(0.5) will be the same as (0.5)1(1.5)1(0.5).

To generate an infinite state, the string will specify the unit cell of the resulting wavefunction. For finite states, the string will specify the entire wavefunction. Note that in both cases, the number of sites in the string must be an integer multiple of the lattice unit cell (so if the lattice has a four-site unit cell, we must write either 4, 8, 12 etc. states for the infinite unit cell or finite wavefunction).


  • To generate an infinite NĂ©el state, we can use
$ spinchain-u1 -o lattice
$ mp-construct -l lattice -o psi 0.5:-0.5

Note that if we want to have the unit cell the other way around, we must use

$ mp-construct -l lattice -o psi " -0.5:0.5"

so the program doesn't interpret -0.5:0.5 as another option!

If we want a finite state, we must write out how many sites we want: e.g. for a 10-site state

$ mp-construct -l lattice -o psi --finite 0.5:-0.5:0.5:-0.5:0.5:-0.5:0.5:-0.5:0.5:-0.5
  • To generate the AKLT state, we can use
$ spinchain-su2 -o lattice
$ mp-construct -l lattice -o psi "(0.5)(0.5)"

Since the only local basis state is 1, we do not need to write it explicitly. Note that we put the string in quotation marks because brackets are special characters in bash.

Edit - History - Print - Recent Changes - Search
Page last modified on December 13, 2022, at 02:05 AM