Solvers

The module Solvers contains the functions to invert the Dirac operator as well as functions to obtain specific propagators.

CG.jl

The function CG! implements the Conjugate gradient algorith for the operator A

LatticeGPU.Solvers.CG!Function
function CG!(si, U, A, dpar::DiracParam, lp::SpaceParm, dws::DiracWorkspace{T}, maxiter::Int64 = 10, tol=1.0)

Solves the linear equation Ax = si

source

where the tolerance is normalized with respect to $|$$si$$|^2$. The operator A must have the same input structure as all the Dirac operators. If the maximum number of iterations maxiter is reached, the function will throw an error. The estimation for $A^{-1}x$ is stored in $si$, and the number of iterations is returned.

Note that all the fermion field in $dws$ are used inside the function and will be modified. In particular, the final residue is given by $|$$dws.sr$$|^2$.

Propagators.jl

In this file, we define a couple of useful functions to obtain certain propagators.

LatticeGPU.Solvers.propagator!Function
function propagator!(pro,U, dpar::DiracParam{T}, dws::DiracWorkspace,  lp::SpaceParm, maxiter::Int64, tol::Float64, y::NTuple{4,Int64}, c::Int64, s::Int64)

Saves the fermionic progapator in pro for a source at point y with color c and spin s. If the last three arguments are replaced by time::Int64, the source is replaced by a random source in spin and color at t = time.

source

Internally, this function solves the equation

\[ D_w^\dagger D_w \psi = \gamma_5 D_w \gamma_5 \eta\]

where $\eta$ is either a point-source with the specified color and spin or a random source in a time-slice and stores the value in $pro$. To solve this equation, the CG! function is used.

For the case of SF boundary conditions, we have the boundary-to-bulk propagator, implemented by the function bndpropagator!

LatticeGPU.Solvers.bndpropagator!Function
function bndpropagator!(pro,U, dpar::DiracParam{T}, dws::DiracWorkspace, lp::SpaceParm{4,6,1,D}, maxiter::Int64, tol::Float64, c::Int64, s::Int64)

Saves the propagator from the t=0 boundary to the bulk for the SF boundary conditions for a source with color 'c' and spin 's' in 'pro'. The factor c_t is included while the factor 1/sqrt(V) is not. For the propagator from T to the bulk, use the function Tbndpropagator(U, dpar::DiracParam{T}, dws::DiracWorkspace, lp::SpaceParm{4,6,1,D}, maxiter::Int64, tol::Float64, c::Int64, s::Int64)

source

This propagator is defined by the equation:

\[D_W S(x) = \frac{c_t}{\sqrt{V}} \delta_{x_0,1} U_0^\dagger(0,\vec{x}) P_+\]

The analog for the other boundary is implemented in the function Tbndpropagator!

LatticeGPU.Solvers.Tbndpropagator!Function
function Tbndpropagator!(pro, U, dpar::DiracParam{T}, dws::DiracWorkspace, lp::SpaceParm{4,6,1,D}, maxiter::Int64, tol::Float64, c::Int64, s::Int64)

Returns the propagator from the t=T boundary to the bulk for the SF boundary conditions for a source with color 'c' and spin 's'. The factor c_t is included while the factor 1/sqrt(V) is not. For the propagator from t=0 to the bulk, use the function bndpropagator(U, dpar::DiracParam{T}, dws::DiracWorkspace, lp::SpaceParm{4,6,1,D}, maxiter::Int64, tol::Float64, c::Int64, s::Int64)

source

defined by the equation:

\[D_W R(x) = \frac{c_t}{\sqrt{V}} \delta_{x_0,T-1} U_0(T-1,\vec{x}) P_-\]

Where $P_\pm = (1 \pm \gamma_0)/2$. The boundary-to-boundary propagator

\[ - \frac{c_t}{\sqrt{V}} \sum_\vec{x} U_0 ^\dagger (T-1,\vec{x}) P_+ S(T-1,\vec{x})\]

is computed by the function bndtobnd

LatticeGPU.Solvers.bndtobndFunction
function bndtobnd(bndpro, U, dpar, dws, lp)

Returns the boundary to boundary propagator of the Schrodinger functional given that bndpro is the propagator from t = 0 to the bulk, given by the function bndpropagator!.

source