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!
— Functionfunction CG!(si, U, A, dpar::DiracParam, lp::SpaceParm, dws::DiracWorkspace{T}, maxiter::Int64 = 10, tol=1.0)
Solves the linear equation Ax = si
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!
— Functionfunction 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
.
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!
— Functionfunction 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)
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!
— Functionfunction 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)
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.bndtobnd
— Functionfunction 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!.