Skip to content

FLUE_SU3MatrixOps ​

Module FLUE_SU3MatrixOps Purpose Provides high-performance, pure procedures for manipulating SU(3) matrices and vectors in the context of lattice gauge theory.

Physical Context: In lattice QCD, the fundamental dynamical variables are SU(3)-valued link matrices:

   U_mu(x) ∈ SU(3)

representing parallel transporters of the colour gauge field between neighbouring lattice sites. These matrices are unitary and have determinant equal to 1.

This module supports: - Algebra on SU(3) group elements (matrix multiplication, traces) - Operations in the Lie algebra su(3) (traceless Hermitian matrices) - Projection/reunitarisation of matrices back onto SU(3) - Conversion between matrix and generator (Gell-Mann) representations - Efficient computation of exp(iQ), used in gauge updates

Typical Use in Simulations:

  • Gauge field updates (heatbath, overrelaxation)
  • Projection of numerically drifted matrices back to SU(3)
  • Observables such as Wilson loops involving traces of products

Mathematical Conventions:

  • Matrices are 3x3 complex arrays.
  • Hermitian conjugate: A^\dagger = CONJG(TRANSPOSE(A))
  • Trace: Tr(A)
  • Generators: λ_i (Gell-Mann matrices)

Dependencies:

  • FLUE_constants: working precisions WC (complex), WP (real)
  • FLUE_matrixConstants: identity matrix Ident3x3

Notes:

  • All procedures are pure and suitable for parallel execution.
  • Explicitly unrolled operations improve performance on CPUs/GPUs.

Source: src/SU3MatrixOps.f90

Dependencies

Contents ​

Subroutines ​

orthogonalise_vectors ​

Orthogonalise a colour vector against another.

Physical Interpretation: Used during reunitarisation of SU(3) link matrices, where rows (or columns) must form an orthonormal basis in complex colour space.

Mathematics: w←w−v(v†w)

Attributes: pure

fortran
subroutine orthogonalise_vectors(w, v)

Arguments

NameTypeIntentAttributesDescription
wcomplex(kind=WC)inoutdimension(3)Colour vector to be orthogonalised.
vcomplex(kind=WC)indimension(3)Reference vector (typically already normalised).

Call graph

vector_product ​

Compute SU(3) vector product.

Physical Interpretation: Constructs a third orthogonal colour vector from two existing ones, analogous to a cross product, ensuring a complete orthonormal basis.

Mathematics: xi=conjugate(vjwk−vkwj), cyclic indices.

Attributes: pure

fortran
subroutine vector_product(x, v, w)

Arguments

NameTypeIntentAttributesDescription
xcomplex(kind=WC)outdimension(3)Resulting orthogonal vector.
vcomplex(kind=WC)indimension(3)v,w : input colour vectors.
wcomplex(kind=WC)indimension(3)v,w : input colour vectors.

Call graph

FixSU3Matrix ​

Project a 3x3 matrix back onto SU(3).

Physical Interpretation: Numerical updates can cause link variables U_mu(x) to drift away from SU(3). This routine restores:

 - Unitarity: U U^\dagger = I
 - Determinant: det(U) ≈ 1

Method:

  • Gram-Schmidt orthonormalisation of rows
  • Third row constructed from SU(3) vector product

Usage: Typically called after each gauge update or smearing step.

Attributes: pure

fortran
subroutine FixSU3Matrix(U_x)

Arguments

NameTypeIntentAttributesDescription
U_xcomplex(kind=WC)inoutdimension(3, 3)Gauge link matrix, overwritten with SU(3)-projected version.

Call graph

normalise_vector ​

Normalise a colour vector.

Physical Interpretation: Ensures unit norm of vectors forming SU(3) matrix rows/columns.

Mathematics: v <- v / sqrt(sum(|v_i|^2))

Attributes: pure

fortran
subroutine normalise_vector(v)

Arguments

NameTypeIntentAttributesDescription
vcomplex(kind=WC)inoutdimension(3)vector which is normallised

Call graph

MultiplyMatMat ​

Multiply two SU(3) matrices.

Physical Interpretation: Represents sequential parallel transport of colour fields:

 U_total = U_1 * U_2

Common in staples, Wilson loops, and path-ordered products.

Arguments: left, right : input SU(3) matrices

MM : result

Attributes: pure

fortran
subroutine MultiplyMatMat(MM, left, right)

Arguments

NameTypeIntentAttributesDescription
MMcomplex(kind=WC)outdimension(3, 3)resulting matrix
leftcomplex(kind=WC)indimension(3, 3)input SU(3) matrices
rightcomplex(kind=WC)indimension(3, 3)input SU(3) matrices

Call graph

MultiplyMatMatDag ​

Multiply matrix by Hermitian conjugate.

Physical Interpretation: Appears in gauge-invariant quantities such as:

 U(x, μ) U^\dagger(x, μ)

Computes: MM = left * right^\dagger

Attributes: pure

fortran
subroutine MultiplyMatMatDag(MM, left, right)

Arguments

NameTypeIntentAttributesDescription
MMcomplex(kind=WC)outdimension(3, 3)Resulting matrix
leftcomplex(kind=WC)indimension(3, 3)Input SU(3) matrices
rightcomplex(kind=WC)indimension(3, 3)Input SU(3) matrices

Call graph

MultiplyMatdagMatdag ​

Compute dagger of matrix product.

Physical Interpretation: Used when reversing direction of transport paths in gauge loops.

Computes: MM = (left * right)^\dagger

Attributes: pure

fortran
subroutine MultiplyMatdagMatdag(MM, left, right)

Arguments

NameTypeIntentAttributesDescription
MMcomplex(kind=WC)outdimension(3, 3)Resulting Matrix
leftcomplex(kind=WC)indimension(3, 3)Input SU(3) matrices
rightcomplex(kind=WC)indimension(3, 3)Input SU(3) matrices

Call graph

TraceMultMatMat ​

Trace of a product of matrices.

Physical Interpretation: Used in evaluating gauge-invariant observables such as Wilson loops.

Computes: Tr(left * right)

Attributes: pure

fortran
subroutine TraceMultMatMat(TrMM, left, right)

Arguments

NameTypeIntentAttributesDescription
TrMMcomplex(kind=WC)outResulting (complex) trace
leftcomplex(kind=WC)indimension(3, 3)Input SU(3) matrices
rightcomplex(kind=WC)indimension(3, 3)Input SU(3) matrices

Call graph

RealTraceMultMatMat ​

Real trace of matrix product.

Physical Interpretation: Direct contribution to gauge action and observables.

Computes: Real(Tr(left * right))

Attributes: pure

fortran
subroutine RealTraceMultMatMat(RTrMM, left, right)

Arguments

NameTypeIntentAttributesDescription
RTrMMreal(kind=WP)outResulting ReTrace
leftcomplex(kind=WC)indimension(3, 3)Input SU(3) Matrices
rightcomplex(kind=WC)indimension(3, 3)Input SU(3) Matrices

Call graph

TraceLessConjgSubtract ​

Traceless anti-Hermitian projection.

Physical Interpretation: Maps matrices into the Lie algebra su(3), required for: - Gauge updates

Computes: TrSub = left - right^\dagger TrSub <- TrSub - (1/3) Tr(TrSub) I

Result: Traceless matrix in su(3).

Attributes: pure

fortran
subroutine TraceLessConjgSubtract(TrSub, left, right)

Arguments

NameTypeIntentAttributesDescription
TrSubcomplex(kind=WC)outdimension(3, 3)Resulting traceless conjgugate subtraction matrix
leftcomplex(kind=WC)indimension(3, 3)Input SU(3) matrices
rightcomplex(kind=WC)indimension(3, 3)Input SU(3) matrices

Call graph

colourDecomp ​

Decompose matrix into Gell-Mann basis.

Physical Interpretation: Converts matrix representation into Lie algebra coefficients:

 A = sum_i com(i) λ_i

Useful for: - Analysing gauge fields - Constructing Lie algebra updates - Diagnostics and measurements

Arguments: A : SU(3) or general complex matrix

com : coefficients in Gell-Mann basis (8 generators)

Attributes: pure

fortran
subroutine colourDecomp(com, A)

Arguments

NameTypeIntentAttributesDescription
comcomplex(kind=WC)outdimension(8)Output coefficients in Gell-Mann basis
Acomplex(kind=WC)indimension(3, 3)Input SU(3) matrice

Call graph

Functions ​

RealTraceMat ​

Real(Trace of a matrix.)

Physical Interpretation: Central observable in lattice QCD:

 - Action terms: Re Tr(U_plaquette)

Returns: Real trace.

Attributes: pure

Returns: real(kind=WP)

fortran
function RealTraceMat(left) result(TrMM)

Arguments

NameTypeIntentAttributesDescription
leftcomplex(kind=WC)indimension(3, 3)Input SU(3) matrix

Call graph

TraceMat ​

Trace of a matrix.

Physical Interpretation: Central observable in lattice QCD:

 - Wilson loops: Tr(path-ordered product)
 - Action terms: Re Tr(U_plaquette)

Attributes: pure

Returns: complex(kind=WC)

fortran
function TraceMat(left) result(TrMM)

Arguments

NameTypeIntentAttributesDescription
leftcomplex(kind=WC)indimension(3, 3)Input SU(3) matrix

Call graph

ExpIQ ​

Compute exponential of Lie algebra element.

Physical Interpretation: Core operation in gauge field evolution:

 U_new = exp(i Q) * U_old

where: Q ∈ su(3) is Hermitian and traceless (momentum field).

Used in: - Heatbath

Algorithm: Uses Cayley-Hamilton theorem to avoid explicit diagonalisation:

 exp(iQ) = f1 * I + f2 * Q + f3 * Q^2

with coefficients determined from invariants: c0 = (1/3) Tr(Q^3) c1 = (1/2) Tr(Q^2)

Numerical Stability:

  • Uses Taylor expansion for small eigenvalues
  • Clamps acos argument for safety
  • Handles sign structure explicitly

Arguments: Q : Hermitian, traceless matrix (su(3) element)

Returns: V : SU(3) matrix

Notes:

  • Produces unitary matrix up to numerical precision.
  • Avoids costly eigen-decomposition.

Attributes: pure

Returns: complex(kind=WC)

fortran
function ExpIQ(Q) result(V)

Arguments

NameTypeIntentAttributesDescription
Qcomplex(kind=WC)indimension(3, 3)Input Hermitian, traceless (su(3) element)

Call graph