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!