Markov chain Monte Carlo solver for finite temperature problem of lattie spin system implemented by Julia language.
Pkg> add SpinMonteCarloThe 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
-
Isingmodel -
QstatePottsmodel- 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
-
XYmodel -
QstateClockmodel -
AshkinTellermodel
-
- Quantum spin model
- spin-
SQuantumXXZmodel$\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 latticeL
bond-alternating chain latticeL
square latticeL * W
J1J2 square latticeL * W
triangular latticeL * W
cubic latticeL * W * H
fully connected graphN
- 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|^4Binder RatioSusceptibilityConnected SusceptibilityMagnetization x|Magnetization x|Magnetization x^2Magnetization x^4Binder Ratio xSusceptibility xConnected Susceptibility xMagnetization y|Magnetization y|Magnetization y^2Magnetization y^4Binder Ratio ySusceptibility yConnected Susceptibility yHelicity Modulus xHelicity Modulus yEnergyEnergy^2Specific 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 fororpmap.
- 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.