Dirac Operators
Dirac operators are structs that hold a reference to the gauge background U
, a temporary fermion field in case one wants to use the doubly flavoured Hermitian variant, the bare mass and a Boolean indicating whether there are antiperiodic boundary conditions in the time direction (yes, only periodic and antiperiodic BCs are supported so far).
To create a Dirac operator, the constructors below are used. One thing to note is that dirac operators can be constructed using any AbstractField
and so the gauge background is always set to nothing
on construction. In order to then add a gauge background you must use the dirac operator as a functor on a Gaugefield
, like D_U = D_free(U)
. This does not overwrite the U
in D_free
but creates a new dirac operator, that references the same temporary fermion fields as the parent and does therefore not introduce any new allocations of fields.
Instead of explicitly creating the Dirac operator, one can also create the corresponding fermion action, with similar syntax. Some extra parameters that can be specified are the number of flavors, RHMC-related parameters such as the spectral bounds and approximation order & precision and solver-related parameters such as the tolerance and the maximum number of solver iterations
MetaQCD.DiracOperators.WilsonDiracOperator
— TypeWilsonDiracOperator(::AbstractField, mass; bc_str="antiperiodic", r=1, csw=0)
WilsonDiracOperator(D::WilsonDiracOperator, U::Gaugefield)
Create a free Wilson Dirac Operator with mass mass
and Wilson parameter r
.
bc_str
can either be "periodic"
or "antiperiodic"
and specifies the boundary condition in the time direction.
If csw ≠ 0
, a clover term is included.
This object cannot be applied to a fermion vector, since it lacks a gauge background. A Wilson Dirac operator with gauge background is created by applying it to a Gaugefield
U
like D_gauge = D(U)
Type Parameters:
B
: Backend (CPU / CUDA / ROCm)T
: Floating point precisionTF
: Type of theSpinorfield
used to store intermediate results when using the Hermitian version of the operatorTG
: Type of the underlyingGaugefield
C
: Boolean declaring whether the operator is clover improved or notBC
: Boundary Condition in time direction
MetaQCD.DiracOperators.StaggeredDiracOperator
— TypeStaggeredDiracOperator(f::AbstractField, mass; bc_str="antiperiodic")
StaggeredDiracOperator(D::StaggeredDiracOperator, U::Gaugefield)
Create a free Staggered Dirac Operator with mass mass
.
bc_str
can either be "periodic"
or "antiperiodic"
and specifies the boundary condition in the time direction.
If csw ≠ 0
, a clover term is included.
This object cannot be directly applied to a fermion vector, since it lacks a gauge background. A Wilson Dirac operator with gauge background is created by applying it to a Gaugefield
U
like D_gauge = D(U)
Type Parameters:
B
: Backend (CPU / CUDA / ROCm)T
: Floating point precisionTF
: Type of theSpinorfield
used to store intermediate results when using the Hermitian version of the operatorTG
: Type of the underlyingGaugefield
BC
: Boundary Condition in time direction
MetaQCD.DiracOperators.StaggeredEOPreDiracOperator
— TypeStaggeredEOPreDiracOperator(f::AbstractField, mass; bc_str="antiperiodic")
StaggeredEOPreDiracOperator(
D::Union{StaggeredDiracOperator,StaggeredEOPreDiracOperator},
U::Gaugefield
)
Create a free even-odd preconditioned Staggered Dirac Operator with mass mass
.
bc_str
can either be "periodic"
or "antiperiodic"
and specifies the boundary condition in the time direction.
If csw ≠ 0
, a clover term is included.
This object cannot be directly applied to a fermion vector, since it lacks a gauge background. A Wilson Dirac operator with gauge background is created by applying it to a Gaugefield
U
like D_gauge = D(U)
Type Parameters:
B
: Backend (CPU / CUDA / ROCm)T
: Floating point precisionTF
: Type of theSpinorfield
used to store intermediate results when using the Hermitian version of the operatorTG
: Type of the underlyingGaugefield
BC
: Boundary Condition in time direction
MetaQCD.DiracOperators.StaggeredHoelblingDiracOperator
— TypeStaggeredHoelblingDiracOperator{MT}(f::AbstractField, mass; bc_str="antiperiodic")
StaggeredHoelblingDiracOperator(D::StaggeredHoelblingDiracOperator, U::Gaugefield)
Create a free Hölbling mass split Staggered Dirac Operator (arXiv:1009.5362) with mass mass
. The type-parameter MT
determines the kind of operator that is used:
MT = 1234
: M12 + M34MT = 1324
: M13 + M24MT = 1342
: M13 + M42
bc_str
can either be "periodic"
or "antiperiodic"
and specifies the boundary condition in the time direction.
This object cannot be directly applied to a fermion vector, since it lacks a gauge background. A Wilson Dirac operator with gauge background is created by applying it to a Gaugefield
U
like D_gauge = D(U)
Type Parameters:
B
: Backend (CPU / CUDA / ROCm)T
: Floating point precisionTF
: Type of theSpinorfield
used to store intermediate results when using the Hermitian version of the operatorTG
: Type of the underlyingGaugefield
BC
: Boundary Condition in time direction