Home - andrew0796/TwistedLattice.jl GitHub Wiki
Welcome to the TwistedLattice.jl wiki!
Here I will have documentation on how to use the code and maybe some background on how it all works
Background
This code is for $SU(N)$ Yang-Mills lattice gauge theory calculations. The basic variables of a lattice are the $SU(N)$-valued links $U_\mu(n)$ defined as pointing from site $n$ to $n+\hat{\mu}$. Here we take the lattice to be a four torus, so that each coordinate is periodic, $x_\mu\equiv x_\mu+L_\mu$. We are using twisted boundary conditions in the following sense. First, we will change our notation to let $\tilde U_\mu (n)$ represent links, for a reason which will become clear in a moment. Going around a cycle of the torus, we expect that the fields should be physically the same, ie related by a gauge transformation. To that end, define transition functions $\Omega_\mu(n)$ such that
\tilde{U}_\mu(n+L_\nu\hat{\nu})=\Omega_\nu(n)\tilde{U}_\mu(n)\Omega_\nu^{-1}(n+\hat{\mu})
In order for the transition functions to be consistent, we must have $\tilde U_\mu(n+L_\nu\hat{\nu}+L_\rho\hat{\rho})$ be the same whether we apply the transition function in the $\nu$ direction or the $\rho$ direction first. The most general way of enforcing this, in a theory with only adjoints, is via a relaxed co-cycle condition
\Omega_\mu(n+L_\nu\hat{\nu})\Omega_\nu(n)=e^{2\pi i n_{\mu\nu}/N}\Omega_\nu(n+L_\mu\hat{\mu})\Omega_\mu(n),
where $n_{\mu\nu}\equiv -n_{\nu\mu}\bmod{N}$ is an antisymmetric matrix of twists. The links used in this package though do not use transition functions, and are instead related by a redefinition
\tilde{U}_\mu(n)=\begin{cases} U_\mu(n) & n_\mu\neq L_\mu \\ U_\mu(n)\Omega_\mu^\dagger(n) & n_\mu=L_\mu\end{cases}
where $U_\mu(n)$ are defined to be periodic, and any Wilson loop containing the plaquette $(n_\mu,n_\nu)=(L_\mu,L_\nu)$ must be accompanied by a factor $e^{-2\pi in_{\mu\nu}/N}$. In practice, the code actually moves the location of the twist (which is perfectly fine and doesn't affect the physics) to be at $(n_\mu,n_\nu)=(1,1)$, which just makes for slightly neater code.
For more specifics on the implementation (as well as an interesting use of this package!) see appendix C of the paper 2504.06344. For more background on the lattice see eg David Tong's notes or lattice textbooks like Gattringer and Lang.
Minimization Procedures
Actions
The minimization procedures seek to minimize an action, which is here either the Wilson action or an improved action given in hep-lat/9309009, but the general principle is the same. The part of the action depending on a link $U_\mu(n)$ may be written as
S = -\Re\rm{Tr}\left(U_\mu(n)M_\mu(n)\right)
where $M_\mu(n)$ is the "staple" for $U_\mu(n)$ and is defined in terms of the surrounding links and the twists in a way that depends on the specific action. In both the cases used here though, $M_\mu(n)$ is a sum of $SU(N)$ matrices.
Cooling
Cooling minimizes the action by using deterministic updates on each link iteratively. When the gauge group is $SU(2)$, cooling is quite easy to understand. In that case, we can use the result that the sum of $SU(2)$ matrices is an $SU(2)$ matrix multiplied by a positive (real) constant, $M_\mu(n)=\alpha V_\mu(n)$. Then, to minimize the action with respect to $U_\mu(n)$, we want to maximize the real part of $\alpha \rm{Tr}\left(U_\mu(n)V_\mu(n)\right)$. Using the fact that the real part of the trace of any $SU(2)$ element is bounded by $\pm 2$, with the bounds being saturated by $\pm I$, we find that the action is minimized with respect to $U_\mu(n)$ when $U_\mu(n)=V_\mu^\dagger(n)$. Thus, the $SU(2)$ cooling procedure updates $U_\mu(n)\rightarrow V_\mu(n)$. This can be generalized to $SU(N)$ following Cabibbo and Marinari and Kennedy and Pendleton. We can also update using the polar decomposition of the staple: $M_\mu(n)$ can be written as $M_\mu(n)=V_\mu(n) P_\mu(n)$ where $V_\mu(n)$ is unitary and $P_\mu(n)$ is positive semi-definite. We can then update $U_\mu(n)\rightarrow V_\mu^\dagger(n)$ to minimize with respect to $U_\mu(n)$.
Parallelization
When minimizing the Wilson action, the staple $M_\mu(n)$ is given by
M_\mu(n)=\sum_{\nu\neq \mu}\left[U_\nu(n+\hat{\mu})U_\mu^\dagger(n+\hat{\nu})U_\nu^\dagger(n) + U^\dagger_\nu(n+\hat{\mu}-\hat{\nu})U^\dagger_\mu(n-\hat{\nu})U_\nu(n-\hat{\nu})\right].
Notice that $M_\mu(n)$ only depends on links in the $\mu$ direction which are one lattice unit away from $n$. We can use this property to parallelize the minimization procedure. We do a "checkerboard" decomposition of the lattice, where sites whose coordinates sum to an even number are called "red", and sites whose coordinates sum to an odd number are called "black". Since links starting from red sites are updated only based on black sites, we can update all the red sites at the same time without any issues. Similarly, we can update all the black sites in parallel. Note that we have to do this for each direction separately. There is an issue when the size of any direction of the lattice is odd, since in that case it actually isn't possible to uniquely partition the lattice into red and black sites. In that case though, we can just do it on a subset of the lattice which does have even dimensions, and then update the remaining sites after that.
Similarly, we may parallelize the improved action, which uses $2\times 2$ plaquettes, where there are not just two "colors" to give to sites. This is all done in constructor of Lattice
in the function setimprovedranges!
in lattice.jl.