Added reunitarization after trajectory

This commit is contained in:
Alberto Ramos 2021-11-03 15:08:51 +01:00
parent 23930e14cf
commit 860f725d99
5 changed files with 22 additions and 6 deletions

View file

@ -24,11 +24,11 @@ tr(g::SU2{T}) where T <: AbstractFloat = complex(2.0*real(g.t1), 0.0)
dev_one(g::SU2{T}) where T <: AbstractFloat = sqrt(( abs2(g.t1 - one(T)) + abs2(g.t2))/2) dev_one(g::SU2{T}) where T <: AbstractFloat = sqrt(( abs2(g.t1 - one(T)) + abs2(g.t2))/2)
""" """
function normalize(a::T) where {T <: Group} function unitarize(a::T) where {T <: Group}
Return a normalized element of the group. Return a unitarized element of the group.
""" """
function normalize(a::SU2{T}) where T <: AbstractFloat function unitarize(a::SU2{T}) where T <: AbstractFloat
dr = sqrt(abs2(a.t1) + abs2(a.t2)) dr = sqrt(abs2(a.t1) + abs2(a.t2))
if (dr == 0.0) if (dr == 0.0)
return SU2(0.0) return SU2(0.0)

View file

@ -14,7 +14,21 @@ dag(a::SU3{T}) where T <: AbstractFloat = inverse(a)
tr(a::SU3{T}) where T <: AbstractFloat = a.u11+a.u22+conj(a.u11*a.u22 - a.u12*a.u21) tr(a::SU3{T}) where T <: AbstractFloat = a.u11+a.u22+conj(a.u11*a.u22 - a.u12*a.u21)
dev_one(g::SU3{T}) where T <: AbstractFloat = sqrt(( abs2(g.u11 - one(T)) + abs2(g.u12) + abs2(g.u13) + abs2(g.u21) + abs2(g.u22 - one(T)) + abs2(g.u23) )/6) dev_one(g::SU3{T}) where T <: AbstractFloat = sqrt(( abs2(g.u11 - one(T)) + abs2(g.u12) + abs2(g.u13) + abs2(g.u21) + abs2(g.u22 - one(T)) + abs2(g.u23) )/6)
function unitarize(g::SU3{T}) where T <: AbstractFloat
dv = sqrt(abs2(g.u11)+abs2(g.u12)+abs2(g.u13))
gu11 = g.u11/dv
gu12 = g.u12/dv
gu13 = g.u13/dv
z = g.u21*conj(gu11) + g.u22*conj(gu12) + g.u23*conj(gu13)
gu21 = g.u21 - z*gu11
gu22 = g.u22 - z*gu12
gu23 = g.u23 - z*gu13
dv = sqrt(abs2(gu21)+abs2(gu22)+abs2(gu23))
return SU3{T}(gu11, gu12, gu13, gu21/dv, gu22/dv, gu23/dv)
end
function Base.:*(a::SU3{T},b::SU3{T}) where T <: AbstractFloat function Base.:*(a::SU3{T},b::SU3{T}) where T <: AbstractFloat

View file

@ -47,7 +47,7 @@ include("GroupU1.jl")
export U1, U1alg export U1, U1alg
export dot, expm, exp, dag, normalize, inverse, tr, projalg, norm, norm2, isgroup, alg2mat, dev_one export dot, expm, exp, dag, unitarize, inverse, tr, projalg, norm, norm2, isgroup, alg2mat, dev_one
end # module end # module

View file

@ -17,7 +17,7 @@ include("Groups/Groups.jl")
using .Groups using .Groups
export Group, Algebra export Group, Algebra
export SU2, SU2alg, SU3, SU3alg, M3x3, M2x2, U1, U1alg export SU2, SU2alg, SU3, SU3alg, M3x3, M2x2, U1, U1alg
export dot, expm, exp, dag, normalize, inverse, tr, projalg, norm, norm2, isgroup, alg2mat, dev_one export dot, expm, exp, dag, unitarize, inverse, tr, projalg, norm, norm2, isgroup, alg2mat, dev_one
include("Space/Space.jl") include("Space/Space.jl")

View file

@ -85,6 +85,8 @@ function HMC!(U, int::IntrScheme, lp::SpaceParm, gp::GaugeParm, ymws::YMworkspac
end end
end end
U .= unitarize.(U)
end end
return dh, acc return dh, acc
end end