DWA-01 Revisiting MC05
Quantum phase transitions in the Bose-Hubbard model
Attention: this implementation of the directed worm algorithm is an experimental code and should be used only for the Bose Hubbard model without interactions between neighbors. Otherwise the code may crash or yield incorrect results.
As an example of the directed worm algorithm QMC code, we will study a quantum phase transition in the Bose-Hubbard mode.
Superfluid density in the Bose Hubbard model
Preparing and running the simulation from the command line
We create the parameter file parm1a
to set up Monte Carlo simulations of the quantum Bose Hubbard model on a square lattice with 4x4 sites for a couple of hopping parameters (t=0.01, 0.02, …, 0.1) using the dwa code.
LATTICE="square lattice";
L=4;
MODEL="boson Hubbard";
Nmax = 2;
U = 1.0;
mu = 0.5;
T = 0.1;
SWEEPS=5000000;
THERMALIZATION=100000;
SKIP=500;
MEASURE[Winding Number]=1
{ t=0.01; }
{ t=0.02; }
{ t=0.03; }
{ t=0.04; }
{ t=0.05; }
{ t=0.06; }
{ t=0.07; }
{ t=0.08; }
{ t=0.09; }
{ t=0.1; }
Using the standard sequence of commands we can run the simulation using the quantum dwa
code:
parameter2xml parm1a
dwa --Tmin 5 --write-xml parm1a.in.xml
We may also run the code using the usual Python methods.
Evaluating the simulation and preparing plots using Python
We load the results from all output files starting with parm1a
and collect the magnetization density as a function of magnetic field.
import pyalps
import matplotlib.pyplot as plt
import pyalps.plot as aplt
data = pyalps.loadMeasurements(pyalps.getResultFiles(prefix='parm1a'),'Stiffness')
rhos = pyalps.collectXY(data,x='t',y='Stiffness')
plt.figure()
aplt.plot(rhos)
plt.xlabel('Hopping $t/U$')
plt.ylabel('Superfluid density $\\rho _s$')
plt.show()
The transition from the Mott insulator to the superfluid
We next want to pin down the location of the phase transition more accurately. For this we simulate a two-dimensional square lattice for various system sizes and look for a crossing of the quantity $\rho_s L$.
Preparing and running the simulation from the command line
In the parameter file parm1b
, we focus on the region around the critical point for three system sizes L=4,6, and 8:
LATTICE="square lattice";
MODEL="boson Hubbard";
Nmax =2;
U = 1.0;
mu = 0.5;
T = 0.05;
SWEEPS=2000000;
THERMALIZATION=150000;
SKIP=500;
{ L=4; t=0.01; }
{ L=4; t=0.02; }
{ L=4; t=0.03; }
{ L=4; t=0.04; }
{ L=4; t=0.05; }
{ L=4; t=0.06; }
{ L=4; t=0.07; }
{ L=4; t=0.08; }
{ L=4; t=0.09; }
{ L=4; t=0.1; }
{ L=6; t=0.01; }
{ L=6; t=0.02; }
{ L=6; t=0.03; }
{ L=6; t=0.04; }
{ L=6; t=0.05; }
{ L=6; t=0.06; }
{ L=6; t=0.07; }
{ L=6; t=0.08; }
{ L=6; t=0.09; }
{ L=6; t=0.1; }
{ L=8; t=0.01; }
{ L=8; t=0.02; }
{ L=8; t=0.03; }
{ L=8; t=0.04; }
{ L=8; t=0.05; }
{ L=8; t=0.06; }
{ L=8; t=0.07; }
{ L=8; t=0.08; }
{ L=8; t=0.09; }
{ L=8; t=0.1; }
Evaluating the simulation and preparing plots using Python
We load the results from all output files starting with parm1b
and collect the magntization density as a function of magnetic field.
import pyalps
import matplotlib.pyplot as plt
import pyalps.plot as aplt
data = pyalps.loadMeasurements(pyalps.getResultFiles(prefix='parm1b'),'Stiffness')
rhos = pyalps.collectXY(data,x='t',y='Stiffness',foreach=['L'])
for rho in rhos:
rho.y = rho.y * float(rho.props['L'])
plt.figure()
aplt.plot(rhos)
plt.xlabel('Hopping $t/U$')
plt.ylabel('$\\rho _sL$')
plt.legend()
plt.title('Scaling plot for Bose-Hubbard model')
plt.show()
Note the legend and labels that are nicely set up.
Contributors
- Matthias Troyer
- Ping Nang Ma