HILA
Loading...
Searching...
No Matches
sun_overrelax.h File Reference
#include "sun_matrix.h"
#include "su2.h"
Include dependency graph for sun_overrelax.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define USE_deForcrandJahn
 \( SU(N) \) full overrelaxation using SVD
 

Functions

template<typename T , int N>
void suN_overrelax (SU< N, T > &U, const SU< N, T > &staple)
 \( SU(N) \) Overrelaxation using SU(2) subgroups
 

Macro Definition Documentation

◆ USE_deForcrandJahn

#define USE_deForcrandJahn

\( SU(N) \) full overrelaxation using SVD

Following de Forcrand and Jahn, hep-lat/0503041

Algorithm:

  • let U be link matrix, S sum of staples so that action = -beta/N Re Tr U S^*
  • Calculate svd S = u D v.dagger(), where D is diagonal matrix of singular values, u,v \in U(N)
  • Now M = u v.dagger() maximizes Tr(M S.dagger()) (in U(N)), but not SU(N) in general
  • compute det S = rho exp(i\phi)
  • Now e^(-i phi/N) u v.dagger() is SU(N)
  • Optimize: find diagonal P = {e^{i\theta_j}} in SU(N), i.e. sum_i theta_i = 0 (mod 2pi), which maximizes ReTr( S.dagger() e^{-i phi/N} u P v.dagger()).
  • Now matrix Z = e^(-i phi/N) u P v.dagger() in SU(N), and overrelax update U_new = Z U_old.dagger() Z
  • accept/reject with change in action

Maximize ReTr( S.dagger() e^{-i phi/N} u P v.dagger()) = ReTr( e^{-i phi/N} D P ) = sum_j Re e^{i phi/N} e^{i\theta_j} D_j j = 0 .. (N-1) assuming D_min is smallest, def \theta_min = -\bar\theta = -sum_j \theta_j j != i_min

Taking derivatives d/d\theta_j and setting these == 0, we obtain N-1 eqns which can be linearized Re e^{-i \phi/N} (i e^{i\theta_j}) D_j - Re e^{-i \phi/N} (i e^{-i \bar\theta}) D_min = 0 (i - \theta_j) (i + \bar\theta)

Let c == cos(phi/N), s == sin(phi/N) => (s - c \theta_j) D_j + (-s - c\bar\theta) D_min = 0 => sum_k (D_j delta_jk + D_min ) \theta_k = (s/c)(D_j - D_min)

This is a matrix equation of form M = (A + b F) theta = (A + w w^T) theta = rhs where A is diagonal and F is filled with 1, and w = sqrt(b)[1 1 1 ..]^T.

This can be solved with the Sherman-Morrison formula

Definition at line 101 of file sun_overrelax.h.

Function Documentation

◆ suN_overrelax()

template<typename T , int N>
void suN_overrelax ( SU< N, T > &  U,
const SU< N, T > &  staple 
)

\( SU(N) \) Overrelaxation using SU(2) subgroups

Template Parameters
Tfloat/double/long double
NNumber of colors
Parameters
U\( SU(N) \) link to perform overrelaxation on
stapleStaple to compute overrelaxation with

Definition at line 19 of file sun_overrelax.h.