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.WilsonDiracOperatorType
WilsonDiracOperator(::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 precision
  • TF: Type of the Spinorfield used to store intermediate results when using the Hermitian version of the operator
  • TG: Type of the underlying Gaugefield
  • C: Boolean declaring whether the operator is clover improved or not
  • BC: Boundary Condition in time direction
source
MetaQCD.DiracOperators.StaggeredDiracOperatorType
StaggeredDiracOperator(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 precision
  • TF: Type of the Spinorfield used to store intermediate results when using the Hermitian version of the operator
  • TG: Type of the underlying Gaugefield
  • BC: Boundary Condition in time direction
source
MetaQCD.DiracOperators.StaggeredEOPreDiracOperatorType
StaggeredEOPreDiracOperator(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 precision
  • TF: Type of the Spinorfield used to store intermediate results when using the Hermitian version of the operator
  • TG: Type of the underlying Gaugefield
  • BC: Boundary Condition in time direction
source
MetaQCD.DiracOperators.StaggeredHoelblingDiracOperatorType
StaggeredHoelblingDiracOperator{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 + M34
  • MT = 1324: M13 + M24
  • MT = 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 precision
  • TF: Type of the Spinorfield used to store intermediate results when using the Hermitian version of the operator
  • TG: Type of the underlying Gaugefield
  • BC: Boundary Condition in time direction
source