latticegpu.jl/docs/src/dirac.md
Fernando P. Panadero d58f236d8c Dirac documentation
2023-11-28 15:30:00 +01:00

3.2 KiB

Dirac operator

The module Dirac has the necessary stuctures and function 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 improvent.

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\psi (\vec{x} = x_1,x_2,x_3,x_4) = (4 + m_0)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(i)|=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 an extra term in Dw!:

    \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

    (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 to 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!, userfull for stochastic sources, is also present.

The generic interface of these functions reads

Dw!
g5Dw!
DwdagDw!
Csw!
pfrandomize!