dirac.md 4.22 KB

Dirac operator

The module Dirac has the necessary structures and functions to simulate non-dynamical 4-dimensional Wilson fermions.

There are two main data structures in this module, the structure DiracParam

DiracParam

and the workspace DiracWorkspace

DiracWorkspace

The workspace stores four fermion fields, namely .sr, .sp, .sAp and .st, used for different purposes. If the representation is either SU2fund of SU3fund, an extra field with values in U2alg/U3alg is created to store the clover, used for the improvement.

The functions using the fields allocated in DiracWorkspace are the following:

Note that other functions may call some of these functions, like flw_adapt depending on flw, bflw! depending on bflw_step! or propagator! depending on CG!. The fields used in the innermost function will also be modified by the outermost methods.

Functions

The functions Dw!, g5Dw! and DwdagDw! are all related to the Wilson-Dirac operator.

The action of the Dirac operator Dw! is the following:

D_w\psi (\vec{x} = x_1,x_2,x_3,x_4) = (4 + m_0 + i \mu \gamma_5)\psi(\vec{x}) -
- \frac{1}{2}\sum_{\mu = 1}^4 \theta (\mu) (1-\gamma_\mu) U_\mu(\vec{x}) \psi(\vec{x} + \hat{\mu}) + \theta^* (\mu) (1 + \gamma_\mu) U^{-1}_\mu(\vec{x} - \hat{\mu}) \psi(\vec{x} - \hat{\mu})

where $$m_0$$ and $$\theta$$ are respectively the values .m0 and .th of DiracParam. Note that $$|\theta(\mu)|=1$$ is not built into the code, so it should be imposed explicitly.

Additionally, if |dpar.csw| > 1.0E-10, the clover term is assumed to be stored in ymws.csw, which can be done via the Csw! function. In this case we have the Sheikholeslami-Wohlert (SW) term in Dw!:

\delta D_w^{sw} = \frac{i}{2}c_{sw} \sum_{\pi = 1}^6 F^{cl}_\pi \sigma_\pi \psi(\vec{x})

where the $$\sigma$$ matrices are those described in the Spinors module and the index $$\pi$$ runs as specified in lp.plidx.

If the boudary conditions, defined in lp, are either BC_SF_ORBI,D or BC_SF_AFWB, the improvement term

\delta D_w^{SF} = (c_t -1) (\delta_{x_4,a} \psi(\vec{x}) + \delta_{x_4,T-a} \psi(\vec{x}))

is added. Since the time-slice $$t=T$$ is not stored, this accounts for modifying the second and last time-slice.

Note that the Dirac operator for SF boundary conditions assumes that the value of the field in the first time-slice is zero. To enforce this, we have the function

SF_bndfix!

The function Csw! is used to store the clover in dws.csw. It is computed according to the expression

F_{\mu,\nu} = \frac{1}{8} (Q_{\mu \nu} - Q_{\nu \mu})

where

Q_{\mu\nu} = U_\mu(\vec{x})U_{\nu}(x+\mu)U_{\mu}^{-1}(\vec{x}+\nu)U_{\nu}(\vec{x}) + U_{\nu}^{-1}(\vec{x}-\nu) U_\mu (\vec{x}-\nu) U_{\nu}(\vec{x} +\mu - \nu) U^{-1}_{\mu}(\vec{x}) +
+ U^{-1}_{\mu}(x-\mu)U_\nu^{-1}(\vec{x} - \mu - \nu)U_\mu(\vec{x} - \mu - \nu)U_\nu^{-1}(x-\nu) +
+U_{\nu}(\vec{x})U_{\mu}^{-1}(\vec{x} + \nu - \mu)U^{-1}_{\nu}(\vec{x} - \mu)U_\mu(\vec{x}-\mu)

The correspondence between the tensor field and the GPU-Array is the following:

F[b,1,r] \to F_{41}(b,r) ,\quad F[b,2,r] \to F_{42}(b,r) ,\quad F[b,3,r] \to F_{43}(b,r)
F[b,4,r] \to F_{31}(b,r) ,\quad F[b,5,r] \to F_{32}(b,r) ,\quad F[b,6,r] \to F_{21}(b,r)

where $$(b,r)$$ labels the lattice points as explained in the module Space

The function pfrandomize!, userful for stochastic sources, is also present. It randomizes a fermion field, either in all the space or in a specific time-slice.

The generic interface of these functions reads

Dw!
g5Dw!
DwdagDw!
Csw!
pfrandomize!
mtwmdpar