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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
| using DelimitedFiles using ProgressMeter @everywhere using SharedArrays, LinearAlgebra,Distributed,DelimitedFiles @everywhere function pauli() hn::Int64 = 2 g0 = zeros(ComplexF64,hn,hn) gx = zeros(ComplexF64,hn,hn) gy = zeros(ComplexF64,hn,hn) gz = zeros(ComplexF64,hn,hn) g0[1,1] = 1 g0[2,2] = 1
gx[1,2] = 1 gx[2,1] = 1
gy[1,2] = -im gy[2,1] = im
gz[1,1] = 1 gz[2,2] = -1 return g0,gx,gy,gz end
@everywhere function hamset(kx::Float64,ky::Float64,m0::Float64)::Matrix{ComplexF64} tx::Float64 = 1. ty::Float64 = 1. ax::Float64 = 1. ay::Float64 = 1. s0,sx,sy,sz = pauli() ham = (m0 - tx*cos(kx) - ty*cos(ky))*kron(s0,sz) + ax*sin(kx)*kron(sz,sx) + ay*sin(ky)*kron(s0,sy) return ham end
@everywhere function Wilson_kx(kx::Float64,m0::Float64) nky::Int64 = 100 hn::Int64 = 4 Nocc::Int64 = Int(hn/2) wave = zeros(ComplexF64,hn,hn,nky) wan = zeros(ComplexF64,Nocc,Nocc) F = zeros(ComplexF64,Nocc,Nocc) vec2 = zeros(ComplexF64,Nocc,Nocc) kylist = range(0, 2*pi, length = nky) for iy in 1:nky ky = kylist[iy] val,vec = eigen(hamset(kx,ky,m0)) wave[:,:,iy] = vec[:,:] end wave[:,:,nky] = wave[:,:,1] for i1 in 1:Nocc F[i1,i1] = 1 end for i1 in 1:nky - 1 for i2 in 1:Nocc for i3 in 1:Nocc wan[i2,i3] = wave[:,i2,i1]' * wave[:,i3,i1 + 1] end end F = wan * F end val,vec = eigen(F) val = map(angle,val) for i0 in 1:length(val) if val[i0] < 0 val[i0] += 1 end end return val end
@everywhere function Wilson_ky(ky::Float64,m0::Float64) nkx::Int64 = 100 hn::Int64 = 4 Nocc::Int64 = Int(hn/2) wave = zeros(ComplexF64,hn,hn,nkx) wan = zeros(ComplexF64,Nocc,Nocc) F = zeros(ComplexF64,Nocc,Nocc) vec2 = zeros(ComplexF64,Nocc,Nocc) kxlist = range(0, 2*pi, length = nkx) for ix in 1:nkx kx = kxlist[ix] val,vec = eigen(hamset(kx,ky,m0)) wave[:,:,ix] = vec[:,:] end wave[:,:,nkx] = wave[:,:,1] for i1 in 1:Nocc F[i1,i1] = 1 end for i1 in 1:nkx - 1 for i2 in 1:Nocc for i3 in 1:Nocc wan[i2,i3] = wave[:,i2,i1]' * wave[:,i3,i1 + 1] end end F = wan * F end val,vec = eigen(F) val = map(angle,val) for i0 in 1:length(val) if val[i0] < 0 val[i0] += 1 end end return val end
@everywhere function Wilsonloop(m0::Float64,cont::Int64) klist = -pi:0.1:pi re1 = zeros(Float64,length(klist),2) re2 = zeros(Float64,length(klist),2) i0 = 0 for kx in klist i0 += 1 x1 = Wilson_kx(kx,m0) x2 = Wilson_ky(kx,m0) re1[i0,:] = x1 re2[i0,:] = x2 end fx1 = "Wilson-kx-" * string(cont) * ".dat" f1 = open(fx1,"w") writedlm(f1,[klist re1],"\t") close(f1)
fx1 = "Wilson-ky-" * string(cont) * ".dat" f1 = open(fx1,"w") writedlm(f1,[klist re2],"\t") close(f1) end
function main() i0 = 1 for m0 in -1:0.1:1 Wilsonloop(m0,i0) i0 += 1 end end
@time Wilsonloop(1.5,1)
|