Markov chain Monte Carlo solver for finite temperature problem of lattie spin system implemented by Julia language.
Pkg> add SpinMonteCarlo
The following program calculates temperature v.s. specific heat of the ferromagnetic Ising model on a
using SpinMonteCarlo
using Printf
const model = Ising
const lat = "square lattice"
const L = 16
const update = SW_update!
const Tc = 2.0/log1p(sqrt(2))
const Ts = Tc*range(0.85, stop=1.15, length=31)
const MCS = 8192
const Therm = MCS >> 3
for T in Ts
params = Dict{String,Any}("Model"=>model, "Lattice"=>lat,
"L"=>L, "T"=>T, "J"=>1.0,
"Update Method"=>update,
"MCS"=>MCS, "Thermalization"=>Therm,
)
result = runMC(params)
@printf("%f %.15f %.15f\n",
T, mean(result["Specific Heat"]), stderror(result["Specific Heat"]))
end
- Classical spin model
-
Ising
model -
Q
statePotts
model- order parameter defined as
$M = n_1(Q-1)/Q - (1-n_1)/Q$ , where$n_1$ is the number density of$q=1$ spins.
- order parameter defined as
-
XY
model -
Q
stateClock
model -
AshkinTeller
model
-
- Quantum spin model
- spin-
S
QuantumXXZ
model$\mathcal{H} = \sum_{ij} [ Jz_{ij} S_i^z S_j^z + \frac{Jxy_{ij}}{2} (S_i^+ S_j^- + S_i^-S_j^+) ] - \sum_i \Gamma_i S_i^x$
- spin-
chain lattice
L
bond-alternating chain lattice
L
square lattice
L * W
J1J2 square lattice
L * W
triangular lattice
L * W
cubic lattice
L * W * H
fully connected graph
N
- Classical spin
local_update!
SW_update!
Wolff_update!
- Quantum spin
loop_update!
-
Ising
,Potts
-
Magnetization
$\braket{m} := \braket{ M_\text{total}/N_\text{site} }$
-
|Magnetization|
$\braket{|m|} := \braket{|M_\text{total}/N_\text{site}|}$
-
Magnetization^2
$\braket{m^2} := \braket{(M_\text{total}/N_\text{site})^2}$
-
Magnetization^4
$\braket{m^4} := \braket{(M_\text{total}/N_\text{site})^4 }$
-
Binder Ratio
$U_{4,2} := \braket{m^4}/\braket{m^2}^2$
-
Susceptibility
$\chi := \partial_h \braket{m} = (N/T)(\braket{m^2} - \braket{m}^2)$
-
Connected Susceptibility
$\chi := (N/T)(\braket{m^2} - \braket{|m|}^2)$
-
Energy
$E := \braket{\mathcal{H}} = \braket{E_\text{total}}/N_\text{site}$
-
Energy^2
$E^2 := \braket{\mathcal{H}^2}$
-
Specific Heat
$C := \partial_\beta \braket{\mathcal{H}} = (N/T^2)(\braket{\mathcal{H}^2} - \braket{\mathcal{H}}^2)$
-
-
XY
,Clock
|Magnetization|
|Magnetization|^2
|Magnetization|^4
Binder Ratio
Susceptibility
Connected Susceptibility
Magnetization x
|Magnetization x|
Magnetization x^2
Magnetization x^4
Binder Ratio x
Susceptibility x
Connected Susceptibility x
Magnetization y
|Magnetization y|
Magnetization y^2
Magnetization y^4
Binder Ratio y
Susceptibility y
Connected Susceptibility y
Helicity Modulus x
Helicity Modulus y
Energy
Energy^2
Specific Heat
-
QuantumXXZ
-
Magnetization
$\braket{m} := \braket{\sum_i S_i^z } / N_\text{site}$
-
Magnetization^2
$\braket{m^2}:= \braket{(\sum_i S_i^z)^2 } / N_\text{site}^2$
-
Magnetization^4
$\braket{m^4}:= \braket{(\sum_i S_i^z)^4 } / N_\text{site}^4$
-
Binder Ratio
$U_{4,2} := \braket{m^4}/\braket{m^2}^2$
-
Susceptibility
$\chi := \partial_h \braket{m} = (N/T)(\braket{m^2} - \braket{m}^2)$
-
Energy
$E := \braket{\mathcal{H}}$
-
Energy^2
$E^2 := \braket{\mathcal{H}^2}$
-
Specific Heat
$C := \partial_\beta \braket{\mathcal{H}} = (N/T^2)(\braket{\mathcal{H}^2} - \braket{\mathcal{H}}^2)$
-
Model
- Classical model
- Heisenberg model
- antiferro interaction
- magnetic field
- Quantum model
- SU(N) model
- Classical model
Update Method
- worm algorithm
- Others
- random number parallelization
- NOTE: parameter parallelization can be realized simply by using
@parallel for
orpmap
.
- NOTE: parameter parallelization can be realized simply by using
- write algorithmic note
- especially, Foutuin-Kasteleyn representaion and improved estimators
- random number parallelization
Yuichi Motoyama, the University of Tokyo, 2016-
This package is distributed under the MIT license.