Skip to content

Commit 8240d68

Browse files
committed
2 parents 0708b63 + 65111e3 commit 8240d68

File tree

6 files changed

+289
-224
lines changed

6 files changed

+289
-224
lines changed

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name = "MeanFieldToolkit"
22
uuid = "b00fcea2-f4b1-4480-b444-a0ed31c44801"
33
authors = ["Anjishnu Bose", "Samuel Vadnais"]
4-
version = "1.1.1"
4+
version = "1.1.2"
55

66
[deps]
77
Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
@@ -20,7 +20,7 @@ Tullio = "^0.3"
2020
Logging = "^1.6.7"
2121
Plots = "^1.38"
2222
FixedPointToolkit = "^1"
23-
TightBindingToolkit = "^2.3"
23+
TightBindingToolkit = "^2.3.4"
2424
julia = "^1.7, ^1.9"
2525

2626
[extras]

Sample/KagomeHeis.jl

Lines changed: 53 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,84 @@
1-
using MeanFieldToolkit, LinearAlgebra, TightBindingToolkit, Distributions, LaTeXStrings
2-
1+
using MeanFieldToolkit, TightBindingToolkit, FixedPointToolkit
2+
using LinearAlgebra, Distributions, Distributions, LaTeXStrings, Base.Threads
3+
##### YOU NEED TO CREATE THE FOLDER Sample/KagomeHeis_Data BEFORE RUNNING THIS SCRIPT
34
########## Defining Kagome lattice with the doubled unit cell
45
##### Primitives
5-
const a1 = [4.0, 0.0]
6-
const a2 = [1.0, sqrt(3)]
6+
const a1 = [4.0, 0.0]
7+
const a2 = [1.0, sqrt(3)]
78
##### 6 sublattices
8-
const b1 = [0.0, 0.0]
9-
const b2 = [1.0, 0.0]
10-
const b3 = [0.5, sqrt(3)/2]
11-
const b4 = [2.0 + 0.0, 0.0]
12-
const b5 = [2.0 + 1.0, 0.0]
13-
const b6 = [2.0 + 0.5, sqrt(3)/2]
9+
const b1 = [0.0, 0.0]
10+
const b2 = [1.0, 0.0]
11+
const b3 = [0.5, sqrt(3) / 2]
12+
const b4 = [2.0 + 0.0, 0.0]
13+
const b5 = [2.0 + 1.0, 0.0]
14+
const b6 = [2.0 + 0.5, sqrt(3) / 2]
1415
##### On-site spin matrices
15-
const InitialField = zeros(Float64, 4)
16-
const OnSite = SpinMats(1//2)
16+
const InitialField = zeros(Float64, 4)
17+
const OnSite = SpinMats(1 // 2)
1718
##### Unit cell with local dimensions of 2, and tracking rank-2 bonds
18-
UC = UnitCell([a1, a2], 2, 2)
19-
AddBasisSite!.(Ref(UC), [b1, b2, b3, b4, b5, b6], Ref(InitialField) , Ref(OnSite))
19+
UC = UnitCell([a1, a2], 2, 2)
20+
AddBasisSite!.(Ref(UC), [b1, b2, b3, b4, b5, b6], Ref(InitialField), Ref(OnSite))
2021
##### Strength of the Heisenberg interaction
21-
const J = 1.0
22+
const J = 1.0
2223
##### Heisenberg spin exchange matrix
23-
Jmatrix = Matrix{Float64}(I, 3, 3)
24+
Jmatrix = Matrix{Float64}(I, 3, 3)
2425
##### Heisenberg interaction written in terms of 4-parton interactions --> rank-4 array.
25-
U = SpinToPartonCoupling(Jmatrix, 1//2)
26+
U = SpinToPartonCoupling(Jmatrix, 1 // 2)
2627
###### Interaction parameter which is isotropic.
27-
JParam = Param(J, 4)
28+
JParam = Param(J, 4)
2829
AddIsotropicBonds!(JParam, UC, 1.0, U, "Heisenberg Interaction")
29-
Interactions= [JParam]
30+
Interactions = [JParam]
3031
##### Brillouin zone
31-
const n = 10
32-
const kSize = 6 * n + 3
33-
bz = BZ([kSize, kSize])
32+
const n = 10
33+
const kSize = 6 * n + 3
34+
bz = BZ([kSize, kSize])
3435
FillBZ!(bz, UC)
3536
##### Thermodynamic parameters
36-
const T = 0.001
37-
const filling = 0.5
38-
const stat = -1
37+
const T = 0.001
38+
const filling = 0.5
39+
const stat = -1
3940
##### Mixing alpha used for self-consistency solver
40-
const mixingAlpha = 0.5
41+
const mixingAlpha = 0.5
4142
##### Different flux configuration ansatzes to be tested.
42-
phis = collect(LinRange(-pi/2, pi/2, 21))
43+
phis = collect(LinRange(-pi / 2, pi / 2, 21))
4344

4445
for ϕ in phis
4546

4647
##### Hopping expectation params
4748
##### Hopping with flux ϕ through the triangles, and π-2ϕ through the hexagons
48-
t_flux = Param(1.0, 2)
49-
AddAnisotropicBond!(t_flux, UC, 1, 2, [ 0, 0], exp( im * ϕ/3) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
50-
AddAnisotropicBond!(t_flux, UC, 2, 3, [ 0, 0], exp( im * ϕ/3) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
51-
AddAnisotropicBond!(t_flux, UC, 3, 1, [ 0, 0], exp( im * ϕ/3) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
52-
AddAnisotropicBond!(t_flux, UC, 4, 5, [ 0, 0], exp( im * ϕ/3) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
53-
AddAnisotropicBond!(t_flux, UC, 5, 6, [ 0, 0], exp( im * ϕ/3) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
54-
AddAnisotropicBond!(t_flux, UC, 6, 4, [ 0, 0], exp( im * ϕ/3) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
55-
AddAnisotropicBond!(t_flux, UC, 4, 2, [ 0, 0], exp( im * ϕ/3) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
49+
t_flux = Param(1.0, 2)
50+
AddAnisotropicBond!(t_flux, UC, 1, 2, [0, 0], exp(im * ϕ / 3) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
51+
AddAnisotropicBond!(t_flux, UC, 2, 3, [0, 0], exp(im * ϕ / 3) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
52+
AddAnisotropicBond!(t_flux, UC, 3, 1, [0, 0], exp(im * ϕ / 3) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
53+
AddAnisotropicBond!(t_flux, UC, 4, 5, [0, 0], exp(im * ϕ / 3) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
54+
AddAnisotropicBond!(t_flux, UC, 5, 6, [0, 0], exp(im * ϕ / 3) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
55+
AddAnisotropicBond!(t_flux, UC, 6, 4, [0, 0], exp(im * ϕ / 3) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
56+
AddAnisotropicBond!(t_flux, UC, 4, 2, [0, 0], exp(im * ϕ / 3) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
5657

57-
AddAnisotropicBond!(t_flux, UC, 2, 6, [ 0, -1], exp( im * (pi + ϕ/3)) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
58-
AddAnisotropicBond!(t_flux, UC, 4, 6, [ 0, -1], exp(-im * (pi + ϕ/3)) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
59-
AddAnisotropicBond!(t_flux, UC, 5, 3, [ 1, -1], exp( im * (pi + ϕ/3)) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
60-
AddAnisotropicBond!(t_flux, UC, 5, 1, [ 1, 0], exp(-im * (pi + ϕ/3)) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
61-
AddAnisotropicBond!(t_flux, UC, 3, 1, [ 0, 1], exp( im * ϕ/3) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
58+
AddAnisotropicBond!(t_flux, UC, 2, 6, [0, -1], exp(im * (pi + ϕ / 3)) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
59+
AddAnisotropicBond!(t_flux, UC, 4, 6, [0, -1], exp(-im * (pi + ϕ / 3)) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
60+
AddAnisotropicBond!(t_flux, UC, 5, 3, [1, -1], exp(im * (pi + ϕ / 3)) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
61+
AddAnisotropicBond!(t_flux, UC, 5, 1, [1, 0], exp(-im * (pi + ϕ / 3)) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
62+
AddAnisotropicBond!(t_flux, UC, 3, 1, [0, 1], exp(im * ϕ / 3) * OnSite[4], 1.0, "[ϕ, ϕ, π - 2*ϕ] Hopping with ϕ/π = $(ϕ/pi)")
6263

6364
######### Weiss fields for ordering
64-
Ordering = Param(1.0, 2)
65-
AddAnisotropicBond!(Ordering, UC, 1, 1, [ 0, 0], sum([ -sqrt(3)/2, -1/2, 0.0] .* OnSite[1:3]), 0.0, "120 degree ordering")
66-
AddAnisotropicBond!(Ordering, UC, 2, 2, [ 0, 0], sum([ sqrt(3)/2, -1/2, 0.0] .* OnSite[1:3]), 0.0, "120 degree ordering")
67-
AddAnisotropicBond!(Ordering, UC, 3, 3, [ 0, 0], sum([ 0.0, 1.0, 0.0] .* OnSite[1:3]), 0.0, "120 degree ordering")
68-
AddAnisotropicBond!(Ordering, UC, 4, 4, [ 0, 0], sum([ -sqrt(3)/2, -1/2, 0.0] .* OnSite[1:3]), 0.0, "120 degree ordering")
69-
AddAnisotropicBond!(Ordering, UC, 5, 5, [ 0, 0], sum([ sqrt(3)/2, -1/2, 0.0] .* OnSite[1:3]), 0.0, "120 degree ordering")
70-
AddAnisotropicBond!(Ordering, UC, 6, 6, [ 0, 0], sum([ 0.0, 1.0, 0.0] .* OnSite[1:3]), 0.0, "120 degree ordering")
65+
Ordering = Param(1.0, 2)
66+
AddAnisotropicBond!(Ordering, UC, 1, 1, [0, 0], sum([-sqrt(3) / 2, -1 / 2, 0.0] .* OnSite[1:3]), 0.0, "120 degree ordering")
67+
AddAnisotropicBond!(Ordering, UC, 2, 2, [0, 0], sum([sqrt(3) / 2, -1 / 2, 0.0] .* OnSite[1:3]), 0.0, "120 degree ordering")
68+
AddAnisotropicBond!(Ordering, UC, 3, 3, [0, 0], sum([0.0, 1.0, 0.0] .* OnSite[1:3]), 0.0, "120 degree ordering")
69+
AddAnisotropicBond!(Ordering, UC, 4, 4, [0, 0], sum([-sqrt(3) / 2, -1 / 2, 0.0] .* OnSite[1:3]), 0.0, "120 degree ordering")
70+
AddAnisotropicBond!(Ordering, UC, 5, 5, [0, 0], sum([sqrt(3) / 2, -1 / 2, 0.0] .* OnSite[1:3]), 0.0, "120 degree ordering")
71+
AddAnisotropicBond!(Ordering, UC, 6, 6, [0, 0], sum([0.0, 1.0, 0.0] .* OnSite[1:3]), 0.0, "120 degree ordering")
7172

72-
HoppingOrders = [t_flux, Ordering]
73+
HoppingOrders = [t_flux, Ordering]
7374
##### Build the model (trivial since we are looking at the pure spin Heisenberg model)
74-
H = Hamiltonian(UC, bz)
75+
H = Hamiltonian(UC, bz)
7576
DiagonalizeHamiltonian!(H)
76-
M = Model(UC, bz, H ; T=T, filling=filling, stat=stat)
77+
M = Model(UC, bz, H; T=T, filling=filling, stat=stat)
7778
##### Build the mean-field theory object, with chosen scaling such that on-site ordering is suppressed.
78-
mft = TightBindingMFT(M, HoppingOrders, Interactions, Function[InterQuarticToHopping], Dict{String, Float64}("ij" => 1.0, "ii" => 0.0, "jj" => 0.0) )
79+
mft = TightBindingMFT(M, HoppingOrders, Interactions, Function[InterQuarticToHopping], Dict{String,Float64}("ij" => 1.0, "ii" => 0.0, "jj" => 0.0))
7980
##### File to save data to
80-
fileName = "./KagomeHeis_Data/J=$(round(J, digits=3))_phi=$(round/pi, digits=3))Pi_New.jld2"
81+
fileName = "./KagomeHeis_Data/J=$(round(J, digits=3))_phi=$(round/pi, digits=3))Pi_New.jld2"
8182
##### Solve the mean-field theory and save the results in fileName
8283
SolveMFT!(mft, fileName)
8384

Sample/RenormalizedSquaretJ.jl

Lines changed: 40 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,90 +1,88 @@
1-
include("../src/MeanFieldToolkit.jl")
2-
using .MeanFieldToolkit
3-
4-
using LinearAlgebra, TightBindingToolkit, Distributions, Base.Threads
5-
1+
using MeanFieldToolkit, TightBindingToolkit, FixedPointToolkit
2+
using LinearAlgebra, Distributions, Distributions, LaTeXStrings, Base.Threads
3+
##### YOU NEED TO CREATE THE FOLDER Sample/SquaretJ_Data BEFORE RUNNING THIS SCRIPT
64
################### Square lattice with the doubles Unit Cell
7-
##### Primitive vectors
8-
const a1 = [1.0, 1.0]
9-
const a2 = [1.0, -1.0]
5+
##### Primitives
6+
const a1 = [1.0, 1.0]
7+
const a2 = [1.0, -1.0]
108

11-
const b1 = [0.0, 0.0]
12-
const b2 = [1.0, 0.0]
9+
const b1 = [0.0, 0.0]
10+
const b2 = [1.0, 0.0]
1311

14-
HoppingUC = UnitCell([a1, a2], 2, 2)
15-
PairingUC = UnitCell([a1, a2], 2, 2)
12+
HoppingUC = UnitCell([a1, a2], 2, 2)
13+
PairingUC = UnitCell([a1, a2], 2, 2)
1614

1715
AddBasisSite!(HoppingUC, b1)
1816
AddBasisSite!(HoppingUC, b2)
1917

2018
AddBasisSite!(PairingUC, b1)
2119
AddBasisSite!(PairingUC, b2)
2220

23-
SpinVec = SpinMats(1//2)
21+
SpinVec = SpinMats(1 // 2)
2422

2523
##### HoppingParams
26-
const t = 1.0
27-
t1Param = Param(t, 2)
24+
const t = 1.0
25+
t1Param = Param(t, 2)
2826
AddIsotropicBonds!(t1Param, HoppingUC, 1.0, SpinVec[4], "t1")
2927

30-
const J = t/5
31-
Jmatrix = Matrix{Float64}(I, 3, 3)
32-
U = SpinToPartonCoupling(Jmatrix, 1//2)
33-
JParam = Param(J, 4)
28+
const J = t / 5
29+
Jmatrix = Matrix{Float64}(I, 3, 3)
30+
U = SpinToPartonCoupling(Jmatrix, 1 // 2)
31+
JParam = Param(J, 4)
3432
AddIsotropicBonds!(JParam, HoppingUC, 1.0, U, "Heisenberg Interaction")
3533

36-
const n = 10
37-
const kSize = 6 * n + 3
38-
bz = BZ([kSize, kSize])
39-
FillBZ!(bz, HoppingUC)
34+
const n = 10
35+
const kSize = 6 * n + 3
36+
bz = BZ([kSize, kSize])
37+
FillBZ!(bz, HoppingUC)
4038

4139

4240

4341
##### Thermodynamic parameters
44-
const T = 0.001
45-
const stat = -1
42+
const T = 0.001
43+
const stat = -1
4644

47-
const mixingAlpha = 0.5
45+
const mixingAlpha = 0.5
4846

4947
##### Renormalized MFT from https://arxiv.org/pdf/cond-mat/0311604.pdf
5048

5149
fillings = collect(LinRange(0.2, 0.49, 2))
5250

5351
for filling in fillings
5452

55-
delta = 1-2*filling
56-
rnorm_hopping_factor = 2*delta/(1+delta)
57-
rnorm_int_factor = 4/((1+delta)^2)
53+
delta = 1 - 2 * filling
54+
rnorm_hopping_factor = 2 * delta / (1 + delta)
55+
rnorm_int_factor = 4 / ((1 + delta)^2)
5856

5957
push!(t1Param.value, -t * rnorm_hopping_factor)
6058
push!(JParam.value, J * rnorm_int_factor)
6159

6260
ModifyUnitCell!(HoppingUC, [t1Param])
63-
Interactions = [JParam]
61+
Interactions = [JParam]
6462

6563
##### Hopping expectation params
66-
t_s = Param(1.0, 2)
64+
t_s = Param(1.0, 2)
6765
AddIsotropicBonds!(t_s, HoppingUC, 1.0, SpinVec[4], "s Hopping")
6866

69-
HoppingOrders = [t_s]
67+
HoppingOrders = [t_s]
7068

7169
##### Pairing expectation params
72-
p_dx2y2 = Param(1.0, 2)
73-
AddAnisotropicBond!(p_dx2y2, PairingUC, 1, 2, [ 0, 0], (SpinVec[2]), 1.0, "d_x^2-y^2 Pairing")
74-
AddAnisotropicBond!(p_dx2y2, PairingUC, 1, 2, [-1 , -1], (SpinVec[2]), 1.0, "d_x^2-y^2 Pairing")
75-
AddAnisotropicBond!(p_dx2y2, PairingUC, 1, 2, [ 0, -1], -(SpinVec[2]), 1.0, "d_x^2-y^2 Pairing")
76-
AddAnisotropicBond!(p_dx2y2, PairingUC, 1, 2, [ -1, 0], -(SpinVec[2]), 1.0, "d_x^2-y^2 Pairing")
70+
p_dx2y2 = Param(1.0, 2)
71+
AddAnisotropicBond!(p_dx2y2, PairingUC, 1, 2, [0, 0], (SpinVec[2]), 1.0, "d_x^2-y^2 Pairing")
72+
AddAnisotropicBond!(p_dx2y2, PairingUC, 1, 2, [-1, -1], (SpinVec[2]), 1.0, "d_x^2-y^2 Pairing")
73+
AddAnisotropicBond!(p_dx2y2, PairingUC, 1, 2, [0, -1], -(SpinVec[2]), 1.0, "d_x^2-y^2 Pairing")
74+
AddAnisotropicBond!(p_dx2y2, PairingUC, 1, 2, [-1, 0], -(SpinVec[2]), 1.0, "d_x^2-y^2 Pairing")
7775

78-
PairingOrders = [p_dx2y2]
76+
PairingOrders = [p_dx2y2]
7977

80-
bdgH = Hamiltonian(HoppingUC, PairingUC, bz)
78+
bdgH = Hamiltonian(HoppingUC, PairingUC, bz)
8179
DiagonalizeHamiltonian!(bdgH)
8280

83-
bdgModel = BdGModel(HoppingUC, PairingUC, bz, bdgH ; T=T, filling=filling, stat=stat)
81+
bdgModel = BdGModel(HoppingUC, PairingUC, bz, bdgH; T=T, filling=filling, stat=stat)
8482
SolveModel!(bdgModel)
8583

86-
bdgmft = BdGMFT(bdgModel, HoppingOrders, PairingOrders, Interactions, InterQuarticToHopping, InterQuarticToPairing)
87-
fileName = "./Sample/SquaretJ_Data/filling=$(round(filling, digits=3))_t1=$(round(t1Param.value[end], digits=3))_J=$(round(J, digits=3))_wtWeiss.jld2"
84+
bdgmft = BdGMFT(bdgModel, HoppingOrders, PairingOrders, Interactions, InterQuarticToHopping, InterQuarticToPairing)
85+
fileName = "./SquaretJ_Data/filling=$(round(filling, digits=3))_t1=$(round(t1Param.value[end], digits=3))_J=$(round(J, digits=3))_wtWeiss.jld2"
8886
SolveMFT!(bdgmft, fileName)
8987

9088
end

0 commit comments

Comments
 (0)