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)
"""
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))
if (dr == 0.0)
return SU2(0.0)

View file

@ -14,8 +14,22 @@ 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)
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
bu31 = conj(b.u12*b.u23 - b.u13*b.u22)

View file

@ -47,7 +47,7 @@ include("GroupU1.jl")
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

View file

@ -17,7 +17,7 @@ include("Groups/Groups.jl")
using .Groups
export Group, Algebra
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")

View file

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