qlat.fermion_action — Fermion Action Parameters for Domain-Wall Fermions¶
Source: qlat/qlat/fermion_action.py
Note: Update this document when updating the source file.
Outline¶
Overview¶
fermion_action provides the FermionAction class, which encapsulates the
parameters of a domain-wall fermion action. Two variants are supported:
Mobius — a single
mobius_scaleparameter controls the extent of the fifth dimension. This is the standard formulation used in most lattice QCD simulations with domain-wall fermions.ZMobius — an explicit list of
omegacoefficients replaces the uniform Mobius scale, allowing finer control over the approximation to the sign function in the fifth dimension.
The class manages the lifetime of a C++ FermionAction object through the
cdata attribute and the qlat.c backend.
FermionAction Class¶
Constructor¶
FermionAction(*, mass: float, ls: int, m5: float,
mobius_scale: float = 1.0, omega: list = None)
Create a fermion action descriptor. If omega is None, a standard Mobius
action is created. If omega is provided (a list of length ls), a ZMobius
action is created instead.
Parameter |
Type |
Default |
Description |
|---|---|---|---|
|
|
— |
Quark mass |
|
|
— |
Extent of the fifth dimension |
|
|
— |
Domain-wall height (typically 1.0–1.8) |
|
|
|
Mobius scale parameter (Mobius variant only) |
|
|
|
ZMobius coefficients; must have length |
Raises: AssertionError if parameter types are incorrect, or if
len(omega) != ls for the ZMobius variant.
Attribute Accessors¶
mass()¶
mass() -> float
Return the quark mass.
ls()¶
ls() -> int
Return the extent of the fifth dimension.
m5()¶
m5() -> float
Return the domain-wall height.
omega()¶
omega() -> list[float]
Return the ZMobius omega coefficients. For a standard Mobius action this
returns the uniform omega values derived from mobius_scale.
mobius_scale()¶
mobius_scale() -> float
Return the Mobius scale parameter.
Assignment¶
__imatmul__ (@=)¶
fa1 @= fa2
Copy the contents of fa2 into fa1. Both must be FermionAction
instances. This delegates to qlat.c.set_fermion_action.
Examples¶
Create a Mobius Fermion Action¶
import qlat as q
size_node_list = [
[1, 1, 1, 1],
]
q.begin_with_mpi(size_node_list)
fa = q.FermionAction(mass=0.01, ls=24, m5=1.8, mobius_scale=2.0)
print(f"mass = {fa.mass()}")
print(f"ls = {fa.ls()}")
print(f"m5 = {fa.m5()}")
print(f"mobius_scale = {fa.mobius_scale()}")
q.end_with_mpi()
Create a ZMobius Fermion Action¶
import qlat as q
size_node_list = [
[1, 1, 1, 1],
]
q.begin_with_mpi(size_node_list)
omega = [0.5 + 0.1 * i for i in range(12)]
fa = q.FermionAction(mass=0.01, ls=12, m5=1.8, omega=omega)
print(f"mass = {fa.mass()}")
print(f"ls = {fa.ls()}")
print(f"m5 = {fa.m5()}")
print(f"omega = {fa.omega()}")
q.end_with_mpi()
Copy a Fermion Action¶
import qlat as q
size_node_list = [
[1, 1, 1, 1],
]
q.begin_with_mpi(size_node_list)
fa1 = q.FermionAction(mass=0.01, ls=24, m5=1.8, mobius_scale=2.0)
fa2 = q.FermionAction(mass=0.08, ls=16, m5=1.0, mobius_scale=1.0)
fa2 @= fa1
print(f"fa2 mass = {fa2.mass()}") # 0.01
print(f"fa2 ls = {fa2.ls()}") # 24
q.end_with_mpi()