mirror of
https://igit.ific.uv.es/alramos/latticegpu.jl.git
synced 2025-05-14 19:23:42 +02:00
191 lines
3.7 KiB
Julia
191 lines
3.7 KiB
Julia
using LinearAlgebra, Random
|
|
|
|
import Pkg
|
|
#Pkg.activate("/lhome/ific/a/alramos/s.images/julia/workspace/LatticeGPU")
|
|
Pkg.activate("/home/alberto/code/julia/LatticeGPU")
|
|
using LatticeGPU
|
|
|
|
|
|
T = Float64
|
|
|
|
b = rand(SU2{T})
|
|
println(b)
|
|
|
|
ba = rand(SU2alg{T})
|
|
println("Ba: ", ba)
|
|
b = exp(ba)
|
|
println("B: ", b)
|
|
println(typeof(norm2(ba)))
|
|
|
|
c = inverse(b)
|
|
println("Inverse B: ", c)
|
|
|
|
d = b*c
|
|
println("Test: ", d)
|
|
|
|
c = exp(ba, -1.0)
|
|
println("Inverse B: ", c)
|
|
|
|
d = b*c
|
|
println("Test: ", d)
|
|
|
|
Ma = Array{SU2{T}}(undef, 2)
|
|
rand!(Ma)
|
|
println(Ma)
|
|
|
|
fill!(Ma, one(eltype(Ma)))
|
|
println(Ma)
|
|
|
|
println("## Aqui test M2x2")
|
|
ba = rand(SU2alg{T})
|
|
ga = exp(ba)
|
|
println("Matrix: ", alg2mat(ba))
|
|
println("Exp: ", ga)
|
|
|
|
|
|
mo = one(M2x2{T})
|
|
println(mo)
|
|
mp = mo*ga
|
|
println(mp)
|
|
println(projalg(mp))
|
|
println(projalg(ga))
|
|
|
|
println("## HERE test SU(2) fundamental")
|
|
a = rand(SU2fund{T})
|
|
println(a)
|
|
|
|
ft(x) = LatticeGPU.dot(x,x)
|
|
f2(x) = LatticeGPU.tr(dag(x)*x)
|
|
f3(x) = LatticeGPU.norm2(x)
|
|
|
|
S = ft(a)
|
|
println("Check 1: ", S)
|
|
S = f2(a)
|
|
println("Check 2: ", S)
|
|
S = f3(a)
|
|
println("Check 3: ", S)
|
|
|
|
h = 0.000001
|
|
xh = SU2fund{T}(a.t1+h, a.t2)
|
|
Sp = ft(xh)
|
|
xh = SU2fund{T}(a.t1-h, a.t2)
|
|
Sm = ft(xh)
|
|
println("Numerical derivative: ", (Sp-Sm)/(2*h))
|
|
xh = SU2fund{T}(a.t1, a.t2+h)
|
|
Sp = ft(xh)
|
|
xh = SU2fund{T}(a.t1, a.t2-h)
|
|
Sm = ft(xh)
|
|
println("Numerical derivative: ", (Sp-Sm)/(2*h))
|
|
h = 0.000001im
|
|
xh = SU2fund{T}(a.t1+h, a.t2)
|
|
Sp = ft(xh)
|
|
xh = SU2fund{T}(a.t1-h, a.t2)
|
|
Sm = ft(xh)
|
|
println("Numerical derivative: ", 1im * (Sp-Sm)/(2*h))
|
|
xh = SU2fund{T}(a.t1, a.t2+h)
|
|
Sp = ft(xh)
|
|
xh = SU2fund{T}(a.t1, a.t2-h)
|
|
Sm = ft(xh)
|
|
println("Numerical derivative: ", 1im * (Sp-Sm)/(2*h))
|
|
|
|
ad = a
|
|
println("Exact derivative: ", ad)
|
|
|
|
|
|
|
|
println("## Hamiltonian dynamics")
|
|
println(" # Mass terms")
|
|
H(p,a) = LatticeGPU.norm2(p)/2 + LatticeGPU.norm2(a)
|
|
function MD!(p, a, ns, ee)
|
|
for i in 1:ns
|
|
p = p - ee*a
|
|
a = a + ee*p
|
|
p = p - ee*a
|
|
end
|
|
return p, a
|
|
end
|
|
|
|
a = rand(SU2fund{T})
|
|
p = rand(SU2fund{T})
|
|
println(H(p,a))
|
|
|
|
ee = 0.0001
|
|
ns = 10000
|
|
p, a = MD!(p, a, ns, ee)
|
|
|
|
println(H(p,a))
|
|
|
|
println(" # Interaction terms")
|
|
H(p,a, M,kap) = LatticeGPU.norm2(p)/2 - (2*kap)*LatticeGPU.dot(a, M)
|
|
function MD!(p, a, M, kap, ns, ee)
|
|
for i in 1:ns
|
|
p = p + 0.5*( (2*kap)*ee*M )
|
|
a = a + ee*p
|
|
p = p + 0.5*( (2*kap)*ee*M )
|
|
end
|
|
return p, a
|
|
end
|
|
|
|
a = rand(SU2fund{T})
|
|
p = rand(SU2fund{T})
|
|
M = rand(SU2fund{T})
|
|
kap = 0.5
|
|
println(H(p,a, M,kap))
|
|
|
|
ee = 0.0001
|
|
ns = 10000
|
|
p, a = MD!(p, a, M,kap, ns, ee)
|
|
|
|
println(H(p,a, M,kap))
|
|
|
|
println(" # Gauge Interaction terms")
|
|
H(p,a, M,kap) = LatticeGPU.norm2(p)/2 - (2*kap)*LatticeGPU.tr(a*M)
|
|
function MD!(p, a, M, kap, ns, ee)
|
|
for i in 1:ns
|
|
p = p + 0.5*( - (2*kap)*ee*projalg(a*M) )
|
|
a = expm(a, p, ee)
|
|
p = p + 0.5*( - (2*kap)*ee*projalg(a*M) )
|
|
end
|
|
return p, a
|
|
end
|
|
|
|
a = rand(SU2{T})
|
|
p = rand(SU2alg{T})
|
|
M = rand(SU2fund{T})
|
|
#M = SU2fund{T}(0.0+rand()im, rand()+rand()im)
|
|
kap = 1.1
|
|
println(H(p,a, M,kap))
|
|
|
|
ee = 0.0001
|
|
ns = 10000
|
|
p, a = MD!(p, a, M,kap, ns, ee)
|
|
|
|
println(H(p,a, M,kap))
|
|
|
|
println(" # Gauge Interaction terms")
|
|
H(p,a, M1,M2,kap) = LatticeGPU.norm2(p)/2 - (2*kap)*LatticeGPU.dot(M1,a*M2)
|
|
#H(p,a, M1,M2,kap) = LatticeGPU.norm2(p)/2 - (2*kap)*LatticeGPU.tr(a*(M2*dag(M1)))
|
|
function MD!(p, a, M1, M2, kap, ns, ee)
|
|
for i in 1:ns
|
|
p = p + 0.5*( - (2*kap)*ee*projalg(a*M2*dag(M1)) )
|
|
a = expm(a, p, ee)
|
|
p = p + 0.5*( - (2*kap)*ee*projalg(a*M2*dag(M1)) )
|
|
end
|
|
return p, a
|
|
end
|
|
|
|
a = rand(SU2{T})
|
|
p = rand(SU2alg{T})
|
|
M1 = rand(SU2fund{T})
|
|
M2 = rand(SU2fund{T})
|
|
#M = SU2fund{T}(0.0+rand()im, rand()+rand()im)
|
|
kap = 1.1
|
|
println(H(p,a, M1,M2,kap))
|
|
|
|
ee = 0.0001
|
|
ns = 10000
|
|
p, a = MD!(p, a, M1,M2,kap, ns, ee)
|
|
|
|
println(H(p,a, M1,M2,kap))
|
|
|
|
|