/
AshkinTeller.jl
40 lines (35 loc) · 1.22 KB
/
AshkinTeller.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
@doc raw"""
AshkinTeller model with energy
``E = -\sum_{ij} J^\sigma_{ij} \sigma_i \sigma_j + J^\tau_{ij} \tau_i \tau_j + K_{ij} \sigma_i \sigma_j \tau_i \tau_j``,
where ``\sigma_i`` and ``\tau_i`` takes value of 1 (up spin) or -1 (down spin).
"""
mutable struct AshkinTeller <: Model
lat :: Lattice
spins :: Matrix{Int}
rng :: Random.MersenneTwister
function AshkinTeller(lat::Lattice, rng::Random.AbstractRNG)
model = new()
model.lat = lat
model.rng = rng
model.spins = rand(model.rng, [1,-1], 2, numsites(lat))
return model
end
end
AshkinTeller(lat::Lattice) = AshkinTeller(lat, Random.seed!(Random.MersenneTwister(0)))
AshkinTeller(lat::Lattice, seed) = AshkinTeller(lat, Random.seed!(Random.MersenneTwister(0), seed...))
@doc doc"""
AshkinTeller(param)
Generates `AshkinTeller` using `param["Lattice"]` and `param["Seed"]` (if defined).
Each spin will be initialized randomly and independently.
"""
function AshkinTeller(param::Parameter)
lat = generatelattice(param)
if "Seed" in keys(param)
return AshkinTeller(lat, param["Seed"])
else
return AshkinTeller(lat)
end
end
include("update.jl")
include("estimator.jl")
include("postproc.jl")