MC-04 Measurements
Correlation measurements in the directed loop and worm codes
In this tutorial we will look at measuring correlation functions in the directed loop and worm codes.
Two-dimensional Heisenberg square lattice
Preparing and running the simulation from the command line
The parameter file parm4
sets up Monte Carlo simulations of the quantum mechanical S=1/2 Heisenberg model on a square lattice and turns various measurement options on
MODEL="spin";
LATTICE="square lattice";
REPRESENTATION="SSE";
MEASURE[Correlations]=true;
MEASURE[Structure Factor]=true;
MEASURE[Green Function]=true;
THERMALIZATION=10000;
SWEEPS=500000;
J= 1;
L=4;
W=4;
T=0.3;
{h=0.1;}
Using the standard sequence of commands you can run the simulation using the quantum SSE code and then look at the results in the XML output files
parameter2xml parm4
dirloop_sse --Tmin 10 --write-xml parm4.in.xml
Preparing and running the simulation using Python
To set up and run the simulation in Python we use the script tutorial4.py
. The first parts of this script imports the required modules, prepares the input files as a list of Python dictionaries, writes the XML input files and runs the simulation:
import pyalps
parms = [{
'LATTICE' : "square lattice",
'MODEL' : "spin",
'MEASURE[Correlations]' : True,
'MEASURE[Structure Factor]' : True,
'MEASURE[Green Function]' : True,
'local_S' : 0.5,
'T' : 0.3,
'J' : 1 ,
'THERMALIZATION' : 10000,
'SWEEPS' : 500000,
'L' : 4,
'h' : 0.1
}]
input_file = pyalps.writeInputFiles('parm4',parms)
res = pyalps.runApplication('dirloop_sse',input_file,Tmin=5)
To run this, launch your python interpreter using the convenience scripts alpspython
or vispython
. We now have the same output files as in the command line version.
Evaluating the simulation and preparing plots using Python
To look at the results we now load ALL measurements from output files starting with parm4
. The script is again in tutorial4.py
data = pyalps.loadMeasurements(pyalps.getResultFiles())
We now loop through all measurements and print them:
for s in pyalps.flatten(data):
if len(s.x)==1:
print s.props['observable'], ' : ', s.y[0]
else:
for (x,y) in zip(s.x,s.y):
print s.props['observable'], x, ' : ', y
The if
statement checks whether the measured quantity is a scalar or vector-valued quantity.