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:
-
dws.sr
:CG!
,flw_adapt
(fermion case),bfl_error
-
dws.st
:DwdagDw!
,bflw_step_vec!
-
dws.sp
:CG!
,flw
(fermion case),bflw_step!
,bflw_step_vec!
,propagator!
,bndpropagator!
,Tbndpropagator!
-
dws.sAp
:CG!
,flw
(fermion case),bflw_step!
,bflw_step_vec!
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:
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!
:
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
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
where
The correspondence between the tensor field and the GPU-Array is the following:
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