Skip to content

FLUE_heatbath ​

SU(3) heatbath update using Cabibbo–Marinari SU(2) subgroups.

This module implements a lattice gauge heatbath update using three embedded SU(2) subgroup updates.

Algorithm:

  • Compute staple
  • Form W = U * staple
  • Apply SU(2) updates in (1,2), (1,3), (2,3)
  • Reunitarize

Update strategy:

  • Loop over direction mu
  • Loop over colour classes
  • Parallelise with do concurrent

Supported actions:

  • Wilson (2 colours)
  • Symanzik (4 colours)
  • Iwasaki (4 colours)

Source: src/gauge/heatbath.f90

Dependencies

Contents ​

Subroutines ​

apply_su2_subgroup_update ​

Apply one embedded SU(2) heatbath update inside SU(3).

Inputs: ULink : current SU(3) link being updated W : current product U * staple, updated in tandem with ULink i1, i2 : the two SU(3) row/column indices defining the subgroup subgroup_id : 1, 2, or 3, used for the Philox substream beta, key : heatbath parameters and Philox key counter0 : counter with site id in counter(1)

Method:

  1. Extract the 2x2 block from W.
  2. Project it to the SU(2) quaternion representation.
  3. Build the SU(2) heatbath matrix.
  4. Embed the result back into SU(3).
  5. Left-multiply both ULink and W by the embedded matrix.

Attributes: pure

fortran
subroutine apply_su2_subgroup_update(ULink, W, i1, i2, subgroup_id, beta, key, counter0)

Arguments

NameTypeIntentAttributesDescription
ULinkcomplex(kind=WC)inoutdimension(3, 3)Input link, output link
Wcomplex(kind=WC)inoutdimension(3, 3)Input link, output link
i1integerinSelect which 2x2 block
i2integerinSelect which 2x2 block
subgroup_idintegerinPhilox variable
betareal(kind=WP)inbeta variables
keyinteger(kind=C64)indimension(2)Philox key
counter0integer(kind=C64)indimension(4)Philox keys

Call graph

build_colour_sites ​

Construct checkerboard / multi-colour site lists The output layout is structure-of-arrays (SoA) for optimal memory access in do concurrent loops. Separates sites out into checkerboard Separate arrays for each of t, x, y, z

fortran
subroutine build_colour_sites(nt, nx, ny, nz, use_symanzik, sites_it, sites_ix, sites_iy, sites_iz, counts)

Arguments

NameTypeIntentAttributesDescription
ntintegerinLattice dimensions
nxintegerinLattice dimensions
nyintegerinLattice dimensions
nzintegerinLattice dimensions
use_symanziklogicalinSelects checkerboard scheme
sites_itintegeroutallocatable, dimension(:, :, 😃T: Output coordinate arrays (SoA layout)
sites_ixintegeroutallocatable, dimension(:, :, 😃X: Output coordinate arrays (SoA layout)
sites_iyintegeroutallocatable, dimension(:, :, 😃Y: Output coordinate arrays (SoA layout)
sites_izintegeroutallocatable, dimension(:, :, 😃Z: Output coordinate arrays (SoA layout)
countsintegeroutallocatable, dimension(:, 😃Number of sites per colour/checkerboard and direction

Call graph

Perform one full heatbath sweep of the lattice

fortran
subroutine updateLinks(U, beta, UUpdated, master_key, sweep_id, sites_it, sites_ix, sites_iy, sites_iz, counts, actionTag, xi)

Arguments

NameTypeIntentAttributesDescription
Ucomplex(kind=WC)indimension(:, :, :, :, :, :, 😃Input gaugefield [3,3,4,nt,nx,ny,nz]
betareal(kind=WP)inThe beta value
UUpdatedcomplex(kind=WC)inoutdimension(:,:,:,:,:,:😅Updated gaugefield [3,3,4,nt,nx,ny,nz]
master_keyinteger(kind=C64)indimension(2)Master key for philox
sweep_idintegerinwhich sweep/trajectory it is. Used for Philox
sites_itintegerindimension(:,:😅T: Output coordinates array in Structure of Arrays for better memomry access
sites_ixintegerindimension(:,:😅X: Output coordinates array in Structure of Arrays for better memomry access
sites_iyintegerindimension(:,:😅Y: Output coordinates array in Structure of Arrays for better memomry access
sites_izintegerindimension(:,:😅Z: Output coordinates array in Structure of Arrays for better memomry access
countsintegerindimension(:😅Number of sites per colour and direction
actionTagcharacter(len=*)inoptionalSpecifies the action
xireal(kind=WP)inoptionalgauge anisotropy

Call graph

stapleWilson ​

Compute the Wilson staple for one site

V = sum_{nu != mu} [ path(nu,-mu,-nu) + path(-nu,-mu,nu) ] with the starting coordinate shifted to x + mu.

Attributes: pure

fortran
subroutine stapleWilson(U, V, coord, mu, xi)

Arguments

NameTypeIntentAttributesDescription
Ucomplex(kind=WC)indimension(:, :, :, :, :, :, 😃Input gaugefield [3,3,4,nt,nx,ny,nz]
Vcomplex(kind=WC)outdimension(3, 3)Output Wilson staple at this coordinate
coordintegerindimension(4)Coordinate of the staple [it,ix,iy,iz]
muintegerinStaple is along mu direction
xireal(kind=WP)inThe gauge anisotropy

Call graph

stapleRectangle ​

Computes the rectangle staple (1x2) as in the Symanzik improved action for one site

Attributes: pure

fortran
subroutine stapleRectangle(U, V, coord, mu, xi)

Arguments

NameTypeIntentAttributesDescription
Ucomplex(kind=WC)indimension(:, :, :, :, :, :, 😃Input gaugefield [3,3,4,nt,nx,ny,nz]
Vcomplex(kind=WC)outdimension(3, 3)Output rectangle staple at this coordinate
coordintegerindimension(4)Coordinate of the staple [it,ix,iy,iz]
muintegerinStaple is along mu direction
xireal(kind=WP)inThe gauge anisotropy

Call graph

stapleSymanzik ​

Compute the tree-level Symanzik staple for one SU(3) link.

This consists of:

  • the plaquette staple contribution (Wilson staple),

Attributes: pure

fortran
subroutine stapleSymanzik(U, V, coord, mu, xi)

Arguments

NameTypeIntentAttributesDescription
Ucomplex(kind=WC)indimension(:, :, :, :, :, :, 😃Input gaugefield [3,3,4,nt,nx,ny,nz]
Vcomplex(kind=WC)outdimension(3, 3)Output tree-level Symanzik staple at this coordinate
coordintegerindimension(4)Coordinate of the staple [it,ix,iy,iz]
muintegerinStaple is along mu direction
xireal(kind=WP)inThe gauge anisotropy

Call graph

stapleIwasaki ​

Compute the Iwasaki staple for one SU(3) link.

This consists of:

  • the plaquette staple contribution (Wilson staple),
  • minus the weighted rectangle contribution.

With c0= 3.648, c1 = -0.331

Attributes: pure

fortran
subroutine stapleIwasaki(U, V, coord, mu, xi)

Arguments

NameTypeIntentAttributesDescription
Ucomplex(kind=WC)indimension(:, :, :, :, :, :, 😃Input gaugefield [3,3,4,nt,nx,ny,nz]
Vcomplex(kind=WC)outdimension(3, 3)Output Iwasaki staple at this coordinate
coordintegerindimension(4)Coordinate of the staple [it,ix,iy,iz]
muintegerinStaple is along mu direction
xireal(kind=WP)inThe gauge anisotropy

Call graph

Functions ​

Compute updated SU(3) link at a single lattice site

Compute the updated SU(3) link at one site and one direction.

Steps:

  1. Extract the current link U_mu(coord).
  2. Compute either the Wilson or Symanzik staple.
  3. Form W = U * staple.
  4. Apply the three Cabibbo-Marinari SU(2) subgroup updates: (1,2), (1,3), (2,3)
  5. Reunitarize the final matrix.

Attributes: pure

Returns: complex(kind=WC)

fortran
function su3_updated_link(U, beta, coord, mu, key, dims4, stapleKernel, xi) result(Uout)

Arguments

NameTypeIntentAttributesDescription
Ucomplex(kind=WC)indimension(:, :, :, :, :, :, 😃Input gaugefield [3,3,4,nt,nx,ny,nz]
betareal(kind=WP)inbeta value
coordintegerindimension(4)Coordinate of link to be updated [it,ix,iy,iz]
muintegerinDirection of link
keyinteger(kind=C64)indimension(2)Philox variable
dims4integerindimension(4)Lattice dimensions [nt,nx,ny,nz]
stapleKernelprocedure(stapleInterface)inpointerPointer used to switch which action is used
xireal(kind=WP)inThe gauge anisotropy

Call graph