3.6 KiB
Groups and Algebras
The module Groups
contain generic data types to deal with group and
algebra elements. Group elements g\in SU(N)
are represented in
some compact notation. For the case N=2
we use two complex numbers
(Caley-Dickson representation, i.e. g=(z_1,z_2)
with
|z_1|^2 + |z_2|^2=1
). For the case N=3
we only store two
rows of the N\times N
unitary matrix.
Group operations translate straightforwardly in matrix operations,
except for SU(2)
, where we use
\forall g=(z_1, z_2)\in SU(2)\, \Longrightarrow\, g^{-1} =
(\overline z_1, -z_2)
and
\forall g=(z_1, z_2), g'=(w_1,w_2)\in SU(2)\, \Longrightarrow \, g g'= (z_1w_1 - \overline w_2 z_2, w_2z_1 + z_2\overline w_1)\,.
Group elements can be "casted" into arrays. The abstract type
GMatrix
represent generic N\\times N
complex arrays.
Algebra elements X \in \mathfrak{su}(N)
are traceless
anti-hermitian matrices represented trough N^2-1
real numbers
X^a
. We have
X = \sum_{a=1}^{N^2-1} X^a T^a
where T^a
are a basis of the \mathfrak{su}(N)
algebra with
the conventions
(T^a)^+ = -T^a \,\qquad
{\rm Tr}(T^aT^b) = -\frac{1}{2}\delta_{ab}\,.
If we denote by \{\mathbf{e}_i\}
the usual ortonormal basis of
\mathbb R^N
, the N^2-1
matrices T^a
can always be written in the
following way
- symmetric matrices (
N(N-1)/2
)(T^a)_{ij} = \frac{\imath}{2}(\mathbf{e}_i\otimes\mathbf{e}_j + \mathbf{e}_j\otimes \mathbf{e}_i)\quad (1\le i < j \le N)
- anti-symmetric matrices (
N(N-1)/2
)(T^a)_{ij} = \frac{1}{2}(\mathbf{e}_i\otimes\mathbf{e}_j - \mathbf{e}_j\otimes \mathbf{e}_i)\quad (1\le i < j \le N)
- diagonal matrices (
N-1
). Withl=1,...,N-1
anda=l+N(N-1)
(T^a)_{ij} = \frac{\imath}{2}\sqrt{\frac{2}{l(l+1)}} \left(\sum_{j=1}^l\mathbf{e}_j\otimes\mathbf{e}_j - l\mathbf{e}_{l+1}\otimes \mathbf{e}_{l+1}\right) \quad (l=1,\dots,N-1;\, a=l+N(N-1))
For example in the case of \mathfrak{su}(2)
, and denoting the Pauli
matrices by \sigma^a
we have
T^a = \frac{\imath}{2}\sigma^a \quad(a=1,2,3)\,,
while for \mathfrak{su}(3)
we have T^a=\imath \lambda^a/2
(with
\lambda^a
the Gell-Mann matrices) up to a permutation.
Some examples
import Pkg # hide
Pkg.activate("/home/alberto/code/julia/LatticeGPU/") # hide
using LatticeGPU # hide
Here we just show some example codes playing with groups and elements. The objective is to get an idea on how group operations We can generate some random group elements.
# Generate random groups elements,
# check they are actually from the grup
g = rand(SU2{Float64})
println("Are we in a group?: ", isgroup(g))
g = rand(SU3{Float64})
println("Are we in a group?: ", isgroup(g))
We can also do some simple operations
X = rand(SU3alg{Float64})
g1 = exp(X);
g2 = exp(X, -2.0); # e^{-2X}
g = g1*g1*g2;
println("Is this one? ", dev_one(g))
Types
Groups
The generic interface reads
Group
Concrete supported implementations are
SU2
SU3
Algebras
The generic interface reads
Algebra
With the following concrete implementations
SU2alg
SU3alg
GMatrix
The generic interface reads
GMatrix
With the following concrete implementations
M2x2
M3x3
Generic Group
methods
inverse
dag
tr
dev_one
unitarize
isgroup
projalg
Generic Algebra
methods
dot
norm
norm2
normalize
exp
expm
alg2mat