Worm Algorithm

Introduction

The worm code provides a full generic implementation for Quantum Monte Carlo (QMC) simulations based on the worm algorithms which was invented by N. Prokof’ev and collaborators. Technically, it provides a continuous-time QMC code based on a path integral representation of the partition function.

The current implementation allows to simulate the following models on arbitrary lattices:

  • Quantum spin (unfrustrated) models with arbitrary spin size, magnetic field and anisotropy
  • (Softcore) bosonic models without a sign problem

Support for simulations with a sign problem could be added if desired.

Running a simulation

An example simulation is discussed in the tutorial.

Input parameters

The worm code uses the common input parameters discussed here.

Parameters for experts

In addition, specific simulations parameters can be assigned (use only if you see what it means!):

ParameterDefaultMeaning
SKIP1the number of Monte Carlo sweeps between each measurement
RESTRICT_MEASUREMENTS[N]if defined this restricts measurements to configurations where the quantum number N (particle number) has the value given as this parameter. Note that the simulation will still be performed in the grand canonical ensemble and the chemical potential needs to be tuned to the right range, to actually sample configurations with the desired particle number.
RESTRICT_MEASUREMENTS[Sz]if defined this restricts measurements to configurations where the quantum number Sz (magnetization) has the value given as this parameter. Note that the simulation will still be performed in the grand canonical ensemble and the magnetic field needs to be tuned to the right range, to actually sample configurations with the desiredmagnetization.
WORMS_PER_KINK1determines how often a worm should visit a kink on average per sweep.
MEASURE_GREENfalseflag that indicates whether the Green’s function should be measured. Don’t use - this is untested!

Compile time parameters

Furthermore, at compile time you can define the following variables in the file WRun.h

ParameterMeaning
NONLOCALundefine to speed up the code for local interactions.
USE_VECTORdefine to use a std::vector instead of a std::list as data structure.
USE_SETdefine to use a std::set instead of a std::list as data structure.

Measurements

The following observables are measured by the worm code application:

NameDescription
Energytotal energy of the system
Energy Densityenergy per site
Densityparticle number (for bosonic models)
Density^2square of the particle number (for bosonic models)
Stiffnessstiffness of the system (for bosonic models)
Green’s functionGreen’s function (works only for local interactions)

Contributors

The following persons have contributed to the worm application:

  • Simon Trebst
  • Matthias Troyer