From 40426f561ab8d7c902f509c24b4a92ce5721cb7b Mon Sep 17 00:00:00 2001 From: Alberto Ramos Date: Mon, 1 Sep 2025 10:10:54 +0200 Subject: [PATCH] + and - for SU3 elements produce M3x3 types --- src/Groups/M3x3.jl | 74 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/src/Groups/M3x3.jl b/src/Groups/M3x3.jl index f94fd1e..df41a3c 100644 --- a/src/Groups/M3x3.jl +++ b/src/Groups/M3x3.jl @@ -105,10 +105,84 @@ Base.:+(a::M3x3{T},b::M3x3{T}) where T <: AbstractFloat = M3x3{T}(a.u11+b.u11, a a.u21+b.u21, a.u22+b.u22, a.u23+b.u23, a.u31+b.u31, a.u32+b.u32, a.u33+b.u33) +function Base.:+(a::SU3{T},b::M3x3{T}) where T <: AbstractFloat + + au31 = conj(a.u12*a.u23 - a.u13*a.u22) + au32 = conj(a.u13*a.u21 - a.u11*a.u23) + au33 = conj(a.u11*a.u22 - a.u12*a.u21) + + return M3x3{T}(a.u11+b.u11, a.u12+b.u12, a.u13+b.u13, + a.u21+b.u21, a.u22+b.u22, a.u23+b.u23, + au31+b.u31, au32+b.u32, au33+b.u33) +end + +function Base.:+(a::M3x3{T},b::SU3{T}) where T <: AbstractFloat + + bu31 = conj(b.u12*b.u23 - b.u13*b.u22) + bu32 = conj(b.u13*b.u21 - b.u11*b.u23) + bu33 = conj(b.u11*b.u22 - b.u12*b.u21) + + return M3x3{T}(a.u11+b.u11, a.u12+b.u12, a.u13+b.u13, + a.u21+b.u21, a.u22+b.u22, a.u23+b.u23, + a.u31+bu31, a.u32+bu32, a.u33+bu33) +end + +function Base.:+(a::SU3{T},b::SU3{T}) where T <: AbstractFloat + + au31 = conj(a.u12*a.u23 - a.u13*a.u22) + au32 = conj(a.u13*a.u21 - a.u11*a.u23) + au33 = conj(a.u11*a.u22 - a.u12*a.u21) + + bu31 = conj(b.u12*b.u23 - b.u13*b.u22) + bu32 = conj(b.u13*b.u21 - b.u11*b.u23) + bu33 = conj(b.u11*b.u22 - b.u12*b.u21) + + return M3x3{T}(a.u11+b.u11, a.u12+b.u12, a.u13+b.u13, + a.u21+b.u21, a.u22+b.u22, a.u23+b.u23, + au31+bu31, au32+bu32, au33+bu33) +end + Base.:-(a::M3x3{T},b::M3x3{T}) where T <: AbstractFloat = M3x3{T}(a.u11-b.u11, a.u12-b.u12, a.u13-b-u13, a.u21-b.u21, a.u22-b.u22, a.u23-b-u23, a.u31-b.u31, a.u32-b.u32, a.u33-b-u33) +function Base.:-(a::SU3{T},b::M3x3{T}) where T <: AbstractFloat + + au31 = conj(a.u12*a.u23 - a.u13*a.u22) + au32 = conj(a.u13*a.u21 - a.u11*a.u23) + au33 = conj(a.u11*a.u22 - a.u12*a.u21) + + return M3x3{T}(a.u11-b.u11, a.u12-b.u12, a.u13-b.u13, + a.u21-b.u21, a.u22-b.u22, a.u23-b.u23, + au31-b.u31, au32-b.u32, au33-b.u33) +end + +function Base.:-(a::M3x3{T},b::SU3{T}) where T <: AbstractFloat + + bu31 = conj(b.u12*b.u23 - b.u13*b.u22) + bu32 = conj(b.u13*b.u21 - b.u11*b.u23) + bu33 = conj(b.u11*b.u22 - b.u12*b.u21) + + return M3x3{T}(a.u11-b.u11, a.u12-b.u12, a.u13-b.u13, + a.u21-b.u21, a.u22-b.u22, a.u23-b.u23, + a.u31-bu31, a.u32-bu32, a.u33-bu33) +end + +function Base.:-(a::SU3{T},b::SU3{T}) where T <: AbstractFloat + + au31 = conj(a.u12*a.u23 - a.u13*a.u22) + au32 = conj(a.u13*a.u21 - a.u11*a.u23) + au33 = conj(a.u11*a.u22 - a.u12*a.u21) + + bu31 = conj(b.u12*b.u23 - b.u13*b.u22) + bu32 = conj(b.u13*b.u21 - b.u11*b.u23) + bu33 = conj(b.u11*b.u22 - b.u12*b.u21) + + return M3x3{T}(a.u11-b.u11, a.u12-b.u12, a.u13-b.u13, + a.u21-b.u21, a.u22-b.u22, a.u23-b.u23, + au31-bu31, au32-bu32, au33-bu33) +end + Base.:-(b::M3x3{T}) where T <: AbstractFloat = M3x3{T}(-b.u11, -b.u12, -b.u13, -b.u21, -b.u22, -b.u23, -b.u31, -b.u32, -b.u33)