mirror of
https://igit.ific.uv.es/alramos/latticegpu.jl.git
synced 2025-05-15 03:33:42 +02:00
Merged Fermion flow
This commit is contained in:
parent
b92f9c92e0
commit
55312a8f71
8 changed files with 776 additions and 50 deletions
|
@ -16,18 +16,22 @@ function propagator!(pro, U, dpar::DiracParam{T}, dws::DiracWorkspace, lp::Space
|
|||
src[b,r] = dmul(Gamma{5},src[b,r])
|
||||
return nothing
|
||||
end
|
||||
|
||||
fill!(dws.sp,zero(eltype(scalar_field(Spinor{4,SU3fund{Float64}},lp))))
|
||||
|
||||
CUDA.@allowscalar dws.sp[point_index(CartesianIndex{lp.ndim}(y),lp)...] = Spinor{4,SU3fund{Float64}}(ntuple(i -> (i==s)*SU3fund{Float64}(ntuple(j -> (j==c)*1.0,3)...),4))
|
||||
|
||||
CUDA.@sync begin
|
||||
CUDA.@cuda threads=lp.bsz blocks=lp.rsz krnlg5!(dws.sp)
|
||||
|
||||
@timeit "Propagator computation" begin
|
||||
|
||||
fill!(dws.sp,zero(eltype(scalar_field(Spinor{4,SU3fund{Float64}},lp))))
|
||||
|
||||
CUDA.@allowscalar dws.sp[point_index(CartesianIndex{lp.ndim}(y),lp)...] = Spinor{4,SU3fund{Float64}}(ntuple(i -> (i==s)*SU3fund{Float64}(ntuple(j -> (j==c)*1.0,3)...),4))
|
||||
|
||||
CUDA.@sync begin
|
||||
CUDA.@cuda threads=lp.bsz blocks=lp.rsz krnlg5!(dws.sp)
|
||||
end
|
||||
|
||||
g5Dw!(pro,U,dws.sp,mtwmdpar(dpar),dws,lp)
|
||||
|
||||
niter = CG!(pro,U,DwdagDw!,dpar,lp,dws,maxiter,tol)
|
||||
end
|
||||
|
||||
g5Dw!(pro,U,dws.sp,mtwmdpar(dpar),dws,lp)
|
||||
|
||||
niter = CG!(pro,U,DwdagDw!,dpar,lp,dws,maxiter,tol)
|
||||
|
||||
return niter
|
||||
end
|
||||
|
||||
|
@ -39,16 +43,21 @@ function propagator!(pro, U, dpar::DiracParam{T}, dws::DiracWorkspace, lp::Space
|
|||
src[b,r] = dmul(Gamma{5},src[b,r])
|
||||
return nothing
|
||||
end
|
||||
|
||||
pfrandomize!(dws.sp,lp,time)
|
||||
|
||||
CUDA.@sync begin
|
||||
CUDA.@cuda threads=lp.bsz blocks=lp.rsz krnlg5!(dws.sp)
|
||||
|
||||
@timeit "Propagator computation" begin
|
||||
fill!(dws.sp,zero(eltype(scalar_field(Spinor{4,SU3fund{Float64}},lp))))
|
||||
|
||||
pfrandomize!(dws.sp,lp,time)
|
||||
|
||||
CUDA.@sync begin
|
||||
CUDA.@cuda threads=lp.bsz blocks=lp.rsz krnlg5!(dws.sp)
|
||||
end
|
||||
|
||||
g5Dw!(pro,U,dws.sp,mtwmdpar(dpar),dws,lp)
|
||||
|
||||
niter = CG!(pro,U,DwdagDw!,dpar,lp,dws,maxiter,tol)
|
||||
end
|
||||
|
||||
g5Dw!(pro,U,dws.sp,mtwmdpar(dpar),dws,lp)
|
||||
|
||||
niter = CG!(pro,U,DwdagDw!,dpar,lp,dws,maxiter,tol)
|
||||
|
||||
return niter
|
||||
end
|
||||
|
||||
|
@ -74,27 +83,30 @@ function bndpropagator!(pro, U, dpar::DiracParam{T}, dws::DiracWorkspace, lp::Sp
|
|||
r=Int64(CUDA.blockIdx().x)
|
||||
|
||||
if (point_time((b,r),lp) == 2)
|
||||
bd4, rd4 = dw((b,r), 4, lp)
|
||||
src[b,r] = gdagpmul(Pgamma{4,1},U[bd4,4,rd4],Spinor{4,SU3fund{Float64}}(ntuple(i -> (i==s)*SU3fund{Float64}(ntuple(j -> (j==c)*1.0,3)...),4)))/2
|
||||
bd4, rd4 = dw((b,r), 4, lp)
|
||||
src[b,r] = gdagpmul(Pgamma{4,1},U[bd4,4,rd4],Spinor{4,SU3fund{Float64}}(ntuple(i -> (i==s)*SU3fund{Float64}(ntuple(j -> (j==c)*1.0,3)...),4)))/2
|
||||
end
|
||||
|
||||
return nothing
|
||||
end
|
||||
|
||||
SF_bndfix!(pro,lp)
|
||||
fill!(dws.sp,zero(eltype(scalar_field(Spinor{4,SU3fund{Float64}},lp))))
|
||||
|
||||
CUDA.@sync begin
|
||||
CUDA.@cuda threads=lp.bsz blocks=lp.rsz krnl_assign_bndsrc!(dws.sp, U, lp, c, s)
|
||||
@timeit "Propagator computation" begin
|
||||
SF_bndfix!(pro,lp)
|
||||
fill!(dws.sp,zero(eltype(scalar_field(Spinor{4,SU3fund{Float64}},lp))))
|
||||
|
||||
CUDA.@sync begin
|
||||
CUDA.@cuda threads=lp.bsz blocks=lp.rsz krnl_assign_bndsrc!(dws.sp, U, lp, c, s)
|
||||
end
|
||||
|
||||
CUDA.@sync begin
|
||||
CUDA.@cuda threads=lp.bsz blocks=lp.rsz krnlg5!(dws.sp)
|
||||
end
|
||||
|
||||
g5Dw!(pro,U,dpar.ct*dws.sp,mtwmdpar(dpar),dws,lp)
|
||||
|
||||
niter = CG!(pro,U,DwdagDw!,dpar,lp,dws,maxiter,tol)
|
||||
end
|
||||
|
||||
CUDA.@sync begin
|
||||
CUDA.@cuda threads=lp.bsz blocks=lp.rsz krnlg5!(dws.sp)
|
||||
end
|
||||
|
||||
g5Dw!(pro,U,dpar.ct*dws.sp,mtwmdpar(dpar),dws,lp)
|
||||
|
||||
niter = CG!(pro,U,DwdagDw!,dpar,lp,dws,maxiter,tol)
|
||||
return niter
|
||||
end
|
||||
|
||||
|
@ -120,26 +132,28 @@ function Tbndpropagator!(pro, U, dpar::DiracParam{T}, dws::DiracWorkspace, lp::S
|
|||
r=Int64(CUDA.blockIdx().x)
|
||||
|
||||
if (point_time((b,r),lp) == lp.iL[end])
|
||||
src[b,r] = gpmul(Pgamma{4,-1},U[b,4,r],Spinor{4,SU3fund{Float64}}(ntuple(i -> (i==s)*SU3fund{Float64}(ntuple(j -> (j==c)*1.0,3)...),4)))/2
|
||||
src[b,r] = gpmul(Pgamma{4,-1},U[b,4,r],Spinor{4,SU3fund{Float64}}(ntuple(i -> (i==s)*SU3fund{Float64}(ntuple(j -> (j==c)*1.0,3)...),4)))/2
|
||||
end
|
||||
|
||||
return nothing
|
||||
end
|
||||
|
||||
SF_bndfix!(pro,lp)
|
||||
fill!(dws.sp,zero(eltype(scalar_field(Spinor{4,SU3fund{Float64}},lp))))
|
||||
|
||||
CUDA.@sync begin
|
||||
CUDA.@cuda threads=lp.bsz blocks=lp.rsz krnl_assign_bndsrc!(dws.sp, U, lp, c, s)
|
||||
end
|
||||
@timeit "Propagator computation" begin
|
||||
fill!(dws.sp,zero(eltype(scalar_field(Spinor{4,SU3fund{Float64}},lp))))
|
||||
|
||||
CUDA.@sync begin
|
||||
CUDA.@sync begin
|
||||
CUDA.@cuda threads=lp.bsz blocks=lp.rsz krnl_assign_bndsrc!(dws.sp, U, lp, c, s)
|
||||
end
|
||||
|
||||
CUDA.@sync begin
|
||||
CUDA.@cuda threads=lp.bsz blocks=lp.rsz krnlg5!(dws.sp)
|
||||
end
|
||||
|
||||
|
||||
g5Dw!(pro,U,dpar.ct*dws.sp,mtwmdpar(dpar),dws,lp)
|
||||
|
||||
niter = CG!(pro,U,DwdagDw!,dpar,lp,dws,maxiter,tol)
|
||||
end
|
||||
|
||||
g5Dw!(pro,U,dpar.ct*dws.sp,mtwmdpar(dpar),dws,lp)
|
||||
|
||||
niter = CG!(pro,U,DwdagDw!,dpar,lp,dws,maxiter,tol)
|
||||
return niter
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue