From 0bb74d120fea39b45efcb64ae45e37f4ee9626c3 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Thu, 22 Jul 2021 11:18:12 -0300 Subject: [PATCH 01/62] moved origs to inside conditional --- src/CellListMap.jl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/CellListMap.jl b/src/CellListMap.jl index 778b1003..dc155431 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -899,12 +899,12 @@ function inner_loop!(f,box,icell,cl::CellList,output) xpᵢ = pᵢ.coordinates pⱼ = cl.np[i] j = pⱼ.index - i_orig = pᵢ.index_original while j > 0 xpⱼ = pⱼ.coordinates d2 = distance_sq(xpᵢ,xpⱼ) - j_orig = pⱼ.index_original if d2 <= cutoff_sq + i_orig = pᵢ.index_original + j_orig = pⱼ.index_original output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) end pⱼ = cl.np[pⱼ.index] @@ -935,12 +935,12 @@ function cell_output!(f,box,cell,cl,output,jc_cartesian) xpᵢ = pᵢ.coordinates pⱼ = cl.fp[jc] j = pⱼ.index - i_orig = pᵢ.index_original while j > 0 xpⱼ = pⱼ.coordinates d2 = distance_sq(xpᵢ,xpⱼ) - j_orig = pⱼ.index_original if d2 <= cutoff_sq + i_orig = pᵢ.index_original + j_orig = pⱼ.index_original output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) end pⱼ = cl.np[pⱼ.index] @@ -999,10 +999,10 @@ function inner_loop!(f,output,i,box,cl::CellListPair) j = pⱼ.index # loop over particles of cell jc while j > 0 - j_orig = pⱼ.index_original xpⱼ = pⱼ.coordinates d2 = distance_sq(xpᵢ,xpⱼ) if d2 <= cutoff_sq + j_orig = pⱼ.index_original output = f(xpᵢ,xpⱼ,i,j_orig,d2,output) end pⱼ = cl.large.np[j] From 24db5c9dda84b3ad28a63bc0089c9d175b07640d Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Thu, 22 Jul 2021 14:28:36 -0300 Subject: [PATCH 02/62] up --- src/CellListMap.jl | 97 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 85 insertions(+), 12 deletions(-) diff --git a/src/CellListMap.jl b/src/CellListMap.jl index dc155431..cf4a7a53 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -190,6 +190,8 @@ Base.@kwdef struct CellList{N,T} fp::Vector{AtomWithIndex{N,T}} " Next particle of cell " np::Vector{AtomWithIndex{N,T}} + " Number of particles in of cell " + npcell::Vector{Int} end function Base.show(io::IO,::MIME"text/plain",cl::CellList) println(typeof(cl)) @@ -243,7 +245,8 @@ function CellList(x::AbstractVector{SVector{N,T}},box::Box;parallel::Bool=true) cwp = Vector{Cell{N}}(undef,number_of_cells) fp = Vector{AtomWithIndex{N,T}}(undef,number_of_cells) np = Vector{AtomWithIndex{N,T}}(undef,number_of_particles) - cl = CellList{N,T}(ncwp,ncp,cwp,fp,np) + npcell = Vector{Int}(undef,number_of_cells) + cl = CellList{N,T}(ncwp,ncp,cwp,fp,np,npcell) return UpdateCellList!(x,box,cl,parallel=parallel) end @@ -321,13 +324,14 @@ function UpdateCellList!( cl::CellList{N,T}; parallel::Bool=true ) where {N,T} - @unpack cwp, fp, np = cl + @unpack cwp, fp, np, npcell = cl number_of_cells = prod(box.nc) if number_of_cells > length(cwp) number_of_cells = ceil(Int,1.1*number_of_cells) # some margin in case of box size variations resize!(cwp,number_of_cells) resize!(fp,number_of_cells) + resize!(npcell,number_of_cells) end @set! cl.ncwp = 0 @@ -335,6 +339,7 @@ function UpdateCellList!( @threads for i in eachindex(cwp) cwp[i] = Cell{N}(0,zero(CartesianIndex{N})) fp[i] = AtomWithIndex{N,T}() + npcell[i] = 0 end @threads for i in eachindex(np) np[i] = AtomWithIndex{N,T}() @@ -343,6 +348,7 @@ function UpdateCellList!( fill!(cwp,Cell{N}(0,zero(CartesianIndex{N}))) fill!(fp,AtomWithIndex{N,T}()) fill!(np,AtomWithIndex{N,T}()) + fill!(npcell,0) end # @@ -500,14 +506,19 @@ Set one index of a cell list """ function add_particle_to_celllist!(ip,x::SVector{N,T},box,cl;real_particle::Bool=true) where {N,T} - @unpack cwp, fp, np = cl + @unpack cwp, fp, np, npcell = cl @set! cl.ncp += 1 icell_cartesian = particle_cell(x,box) icell = cell_linear_index(box.nc,icell_cartesian) # Cells starting with real particles are annotated to be run over - if real_particle && fp[icell].index == 0 - @set! cl.ncwp += 1 - cwp[cl.ncwp] = Cell{N}(icell,icell_cartesian) + if fp[icell] == 0 + npcell[icell] = 1 + if real_particle + @set! cl.ncwp += 1 + cwp[cl.ncwp] = Cell{N}(icell,icell_cartesian) + end + else + npcell[icell] += 1 end if cl.ncp > length(np) old_length = length(np) @@ -921,10 +932,49 @@ function inner_loop!(f,box,icell,cl::CellList,output) return output end +""" +``` +partialsort_cutoff!(x,cutoff) +``` +Function that reorders x vector by putting in the first positions the +elements with values smaller than cutoff + +""" +function partialsort_cutoff!(x,cutoff;by=isequal(x)) + iswap = 1 + @inbounds for i in 1:length(x) + if by(x[i]) <= cutoff + if iswap != i + xtmp = x[iswap] + x[iswap] = x[i] + x[i] = xtmp + end + iswap = iswap + 1 + end + end + return iswap - 1 +end + +struct DIPair + i::Int + d::Float64 + x::SVector{3,Float64} +end + + +using LoopVectorization + +struct S + n::Int + s::Vector{DIPair} +end +const s = S(0,[ DIPair(0,0.,zero(SVector{3,Float64})) for i in 1:100_000 ]) + # # loops over the particles of a neighbour cell # function cell_output!(f,box,cell,cl,output,jc_cartesian) + global s @unpack nc, cutoff_sq = box jc = cell_linear_index(nc,jc_cartesian) @@ -933,19 +983,42 @@ function cell_output!(f,box,cell,cl,output,jc_cartesian) i = pᵢ.index while i > 0 xpᵢ = pᵢ.coordinates + + for is in 1:s.n + s.s[is] = DIPair(0,0.,zero(SVector{3,Float64})) + end + @set! s.n = cl.npcell[jc] + pⱼ = cl.fp[jc] j = pⱼ.index - while j > 0 + for is in 1:cl.npcell[jc] xpⱼ = pⱼ.coordinates d2 = distance_sq(xpᵢ,xpⱼ) - if d2 <= cutoff_sq - i_orig = pᵢ.index_original - j_orig = pⱼ.index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) - end + s.s[is] = DIPair(pⱼ.index_original,d2,xpⱼ) pⱼ = cl.np[pⱼ.index] j = pⱼ.index end + n = partialsort_cutoff!(@view(s.s[1:n]),cutoff_sq,by=x->x.d) + + for is in 1:n + j_orig = s.s[is].i + d2 = s.s[is].d + xpⱼ = s.s[is].x + i_orig = pᵢ.index_original + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + end + + #while j > 0 + # xpⱼ = pⱼ.coordinates + # d2 = distance_sq(xpᵢ,xpⱼ) + # if d2 <= cutoff_sq + # i_orig = pᵢ.index_original + # j_orig = pⱼ.index_original + # output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + # end + # pⱼ = cl.np[pⱼ.index] + # j = pⱼ.index + #end pᵢ = cl.np[pᵢ.index] i = pᵢ.index end From bc495eaa7327271b4913e8f784166fb637205446 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Thu, 22 Jul 2021 14:32:49 -0300 Subject: [PATCH 03/62] up --- src/CellListMap.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CellListMap.jl b/src/CellListMap.jl index cf4a7a53..471222c9 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -511,7 +511,7 @@ function add_particle_to_celllist!(ip,x::SVector{N,T},box,cl;real_particle::Bool icell_cartesian = particle_cell(x,box) icell = cell_linear_index(box.nc,icell_cartesian) # Cells starting with real particles are annotated to be run over - if fp[icell] == 0 + if fp[icell].index == 0 npcell[icell] = 1 if real_particle @set! cl.ncwp += 1 From 50283a5b44a6e0555a53031ad45caf23b16ac0ca Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 23 Jul 2021 18:20:38 -0300 Subject: [PATCH 04/62] serial version working, but slower for low density --- Project.toml | 2 +- src/CellListMap.jl | 196 +++++++++++++++++++++++++++++++-------------- src/examples.jl | 12 ++- 3 files changed, 147 insertions(+), 63 deletions(-) diff --git a/Project.toml b/Project.toml index 35a48ac6..afb03ddd 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "CellListMap" uuid = "69e1c6dd-3888-40e6-b3c8-31ac5f578864" authors = ["Leandro Martinez and contributors"] -version = "0.5.1" +version = "0.5.2" [deps] DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" diff --git a/src/CellListMap.jl b/src/CellListMap.jl index 471222c9..2bd44799 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -6,6 +6,7 @@ using StaticArrays using DocStringExtensions using ProgressMeter using Setfield +using LoopVectorization export Box export CellList, UpdateCellList! @@ -155,7 +156,8 @@ struct AtomWithIndex{N,T} index_original::Int coordinates::SVector{N,T} end -AtomWithIndex{N,T}() where {N,T} = AtomWithIndex{N,T}(0,0,zero(SVector{N,T})) +Base.zero(::Type{AtomWithIndex{N,T}}) where {N,T} = + AtomWithIndex{N,T}(0,0,zeros(SVector{N,T})) """ @@ -165,10 +167,27 @@ This structure contains the cell linear index and the information about if this is in the border of the box (such that its neighbouring cells need to be wrapped) """ -struct Cell{N} +struct Cell{N,T} icell::Int cartesian::CartesianIndex{N} + center::SVector{N,T} end +Base.zero(::Type{Cell{N,T}}) where {N,T} = + Cell{N,T}(0,CartesianIndex{N}(0,0,0),zeros(SVector{N,T})) + +""" + +``` +cell_center(c::CartesianIndex{N},cutoff::T) where {N,T} +``` + +Computes the geometric center of a cell, to be used in the projection +of points. Returns a `SVector{N,T}` + +""" +cell_center(c::CartesianIndex{N},cutoff::T) where {N,T} = + SVector{N,T}(ntuple(i-> cutoff*c[i]/2, N)) + """ @@ -185,7 +204,7 @@ Base.@kwdef struct CellList{N,T} " *mutable* number of particles in the computing box " ncp::Int " Indices of the unique cells with Particles " - cwp::Vector{Cell{N}} + cwp::Vector{Cell{N,T}} " First particle of cell " fp::Vector{AtomWithIndex{N,T}} " Next particle of cell " @@ -242,7 +261,7 @@ function CellList(x::AbstractVector{SVector{N,T}},box::Box;parallel::Bool=true) number_of_particles = length(x) ncwp = 0 ncp = 0 - cwp = Vector{Cell{N}}(undef,number_of_cells) + cwp = Vector{Cell{N,T}}(undef,number_of_cells) fp = Vector{AtomWithIndex{N,T}}(undef,number_of_cells) np = Vector{AtomWithIndex{N,T}}(undef,number_of_particles) npcell = Vector{Int}(undef,number_of_cells) @@ -337,17 +356,17 @@ function UpdateCellList!( @set! cl.ncwp = 0 if parallel @threads for i in eachindex(cwp) - cwp[i] = Cell{N}(0,zero(CartesianIndex{N})) - fp[i] = AtomWithIndex{N,T}() + cwp[i] = zero(Cell{N,T}) + fp[i] = zero(AtomWithIndex{N,T}) npcell[i] = 0 end @threads for i in eachindex(np) - np[i] = AtomWithIndex{N,T}() + np[i] = zero(AtomWithIndex{N,T}) end else - fill!(cwp,Cell{N}(0,zero(CartesianIndex{N}))) - fill!(fp,AtomWithIndex{N,T}()) - fill!(np,AtomWithIndex{N,T}()) + fill!(cwp,zero(Cell{N,T})) + fill!(fp,zero(AtomWithIndex{N,T})) + fill!(np,zero(AtomWithIndex{N,T})) fill!(npcell,0) end @@ -506,6 +525,7 @@ Set one index of a cell list """ function add_particle_to_celllist!(ip,x::SVector{N,T},box,cl;real_particle::Bool=true) where {N,T} + @unpack cutoff = box @unpack cwp, fp, np, npcell = cl @set! cl.ncp += 1 icell_cartesian = particle_cell(x,box) @@ -515,7 +535,7 @@ function add_particle_to_celllist!(ip,x::SVector{N,T},box,cl;real_particle::Bool npcell[icell] = 1 if real_particle @set! cl.ncwp += 1 - cwp[cl.ncwp] = Cell{N}(icell,icell_cartesian) + cwp[cl.ncwp] = Cell{N,T}(icell,icell_cartesian,cell_center(icell_cartesian,cutoff)) end else npcell[icell] += 1 @@ -524,7 +544,7 @@ function add_particle_to_celllist!(ip,x::SVector{N,T},box,cl;real_particle::Bool old_length = length(np) resize!(np,ceil(Int,1.2*old_length)) for i in old_length+1:length(np) - np[i] = AtomWithIndex{N,T}() + np[i] = zero(AtomWithIndex{N,T}) end end np[cl.ncp] = fp[icell] @@ -704,6 +724,41 @@ end """ +``` +norm(v::SVector{N,T}) where {N,T} +``` + +Computes the norm of a static vector. + +""" +@inline function norm(v::AbstractVector{T}) where T + norm = zero(T) + for x in v + norm += x^2 + end + return sqrt(norm) +end + +""" + +``` +dot(x::SVector{N,T},y::SVector{N,T}) where {N,T} +``` + +Computes the norm of a static vector. + +""" +@inline function dot(x::AbstractVector{T},y::AbstractVector{T}) where T + @assert length(x) == length(y) + dot = zero(T) + for i in eachindex(x) + @inbounds dot += x[i]*y[i] + end + return dot +end + +""" + ``` distance_sq(x,y) ``` @@ -955,71 +1010,92 @@ function partialsort_cutoff!(x,cutoff;by=isequal(x)) return iswap - 1 end -struct DIPair - i::Int - d::Float64 - x::SVector{3,Float64} +struct ProjectedParticle + index_original::Int + xproj::Float64 + coordinates::SVector{3,Float64} end - -using LoopVectorization - -struct S - n::Int - s::Vector{DIPair} +struct ProjectedParticleVector + n::Vector{Int} + p::Vector{ProjectedParticle} end -const s = S(0,[ DIPair(0,0.,zero(SVector{3,Float64})) for i in 1:100_000 ]) + +const projected_particles = ProjectedParticleVector( + [0], [ ProjectedParticle(0,0.,zero(SVector{3,Float64})) for i in 1:100_000 ] +) # # loops over the particles of a neighbour cell # function cell_output!(f,box,cell,cl,output,jc_cartesian) - global s - @unpack nc, cutoff_sq = box + global projected_particles + @unpack nc, cutoff, cutoff_sq = box jc = cell_linear_index(nc,jc_cartesian) - # loop over list of non-repeated particles of cell ic + # compute vector connecting cell centers + dc = cell.center - cell_center(jc_cartesian,cutoff) + dc = dc / norm(dc) + + # reset array of projections + pⱼ = cl.fp[jc] + npcell = cl.npcell[jc] + j = pⱼ.index + @turbo for jp in 1:npcell + j_orig = pⱼ.index_original + xpⱼ = pⱼ.coordinates + projected_particles.p[jp] = ProjectedParticle(j_orig,0.,xpⱼ) + pⱼ = cl.np[j] + j = pⱼ.index + end + projected_particles.n[1] = npcell + + @turbo for jp in 1:npcell + j_orig = projected_particles.p[jp].index_original + xpⱼ = projected_particles.p[jp].coordinates + xproj = dot(xpⱼ,dc) + projected_particles.p[jp] = ProjectedParticle(j_orig,xproj,xpⱼ) + end + + # Sort particles according to projection + pp = @view(projected_particles.p[1:npcell]) + sort!(pp,by=x->x.xproj,alg=InsertionSort) + + # Loop over particles of cell icell pᵢ = cl.fp[cell.icell] i = pᵢ.index while i > 0 xpᵢ = pᵢ.coordinates - - for is in 1:s.n - s.s[is] = DIPair(0,0.,zero(SVector{3,Float64})) - end - @set! s.n = cl.npcell[jc] - - pⱼ = cl.fp[jc] - j = pⱼ.index - for is in 1:cl.npcell[jc] - xpⱼ = pⱼ.coordinates + xproj = dot(xpᵢ,dc) + # Now loop over particles of icell, until abs(xproj - yproj) < cutoff + ipos = searchsortedfirst( + pp, + ProjectedParticle(0,xproj,zero(SVector{3,Float64})), + by=x->x.xproj + ) + j = ipos - 1 + while j >= 1 && xproj - pp[j].xproj <= cutoff + xpⱼ = pp[j].coordinates d2 = distance_sq(xpᵢ,xpⱼ) - s.s[is] = DIPair(pⱼ.index_original,d2,xpⱼ) - pⱼ = cl.np[pⱼ.index] - j = pⱼ.index + if d2 < cutoff_sq + i_orig = pᵢ.index_original + j_orig = pp[j].index_original + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + end + j -= 1 end - n = partialsort_cutoff!(@view(s.s[1:n]),cutoff_sq,by=x->x.d) - - for is in 1:n - j_orig = s.s[is].i - d2 = s.s[is].d - xpⱼ = s.s[is].x - i_orig = pᵢ.index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + j = ipos + while j <= npcell && pp[j].xproj - xproj <= cutoff + xpⱼ = pp[j].coordinates + d2 = distance_sq(xpᵢ,xpⱼ) + if d2 < cutoff_sq + i_orig = pᵢ.index_original + j_orig = pp[j].index_original + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + end + j += 1 end - - #while j > 0 - # xpⱼ = pⱼ.coordinates - # d2 = distance_sq(xpᵢ,xpⱼ) - # if d2 <= cutoff_sq - # i_orig = pᵢ.index_original - # j_orig = pⱼ.index_original - # output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) - # end - # pⱼ = cl.np[pⱼ.index] - # j = pⱼ.index - #end - pᵢ = cl.np[pᵢ.index] + pᵢ = cl.np[i] i = pᵢ.index end diff --git a/src/examples.jl b/src/examples.jl index 98810bdd..99422b37 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -377,7 +377,7 @@ function florpi(;N=100_000,cd=true,parallel=true) positions = reshape(reinterpret(SVector{3,Float64},positions),n) velocities = reshape(reinterpret(SVector{3,Float64},velocities),n) - box = Box(Lbox, r_max) + box = Box(Lbox, r_max, lcell=1) cl = CellList(positions,box,parallel=parallel) hist = (zeros(Int,length(rbins)-1), zeros(Float64,length(rbins)-1)) @@ -400,6 +400,14 @@ function florpi(;N=100_000,cd=true,parallel=true) n_pairs = hist[1] mean_v_r = hist[2] mean_v_r[n_pairs .> 0] = mean_v_r[n_pairs .> 0]./n_pairs[n_pairs .> 0] - return mean_v_r + + correct_result = [ + 0.0007883474482652579 + -0.0035662371878635722 + -0.00040742008823982926 + 0.0003623877989466509 + -0.0010441334538614498 + ] + return mean_v_r ≈ correct_result, mean_v_r end From 92b3b6e3b5b6424ee083037f1b576504dec369e3 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Sat, 24 Jul 2021 15:34:12 -0300 Subject: [PATCH 05/62] deleting projections --- src/CellListMap.jl | 106 ++++++++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/src/CellListMap.jl b/src/CellListMap.jl index 2bd44799..af0dabea 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -188,6 +188,11 @@ of points. Returns a `SVector{N,T}` cell_center(c::CartesianIndex{N},cutoff::T) where {N,T} = SVector{N,T}(ntuple(i-> cutoff*c[i]/2, N)) +struct ProjectedParticle{N,T} + index_original::Int + xproj::T + coordinates::SVector{N,T} +end """ @@ -211,6 +216,8 @@ Base.@kwdef struct CellList{N,T} np::Vector{AtomWithIndex{N,T}} " Number of particles in of cell " npcell::Vector{Int} + " Auxiliar vector to store projected particles. " + projected_particles::Vector{ProjectedParticle{N,T}} end function Base.show(io::IO,::MIME"text/plain",cl::CellList) println(typeof(cl)) @@ -265,7 +272,8 @@ function CellList(x::AbstractVector{SVector{N,T}},box::Box;parallel::Bool=true) fp = Vector{AtomWithIndex{N,T}}(undef,number_of_cells) np = Vector{AtomWithIndex{N,T}}(undef,number_of_particles) npcell = Vector{Int}(undef,number_of_cells) - cl = CellList{N,T}(ncwp,ncp,cwp,fp,np,npcell) + projected_particles = Vector{ProjectedParticle{N,T}}(undef,number_of_particles) + cl = CellList{N,T}(ncwp,ncp,cwp,fp,np,npcell,projected_particles) return UpdateCellList!(x,box,cl,parallel=parallel) end @@ -992,7 +1000,8 @@ end partialsort_cutoff!(x,cutoff) ``` Function that reorders x vector by putting in the first positions the -elements with values smaller than cutoff +elements with values smaller than cutoff. Returns the number of elements +that satisfy the condition. """ function partialsort_cutoff!(x,cutoff;by=isequal(x)) @@ -1010,91 +1019,82 @@ function partialsort_cutoff!(x,cutoff;by=isequal(x)) return iswap - 1 end -struct ProjectedParticle - index_original::Int - xproj::Float64 - coordinates::SVector{3,Float64} -end - -struct ProjectedParticleVector - n::Vector{Int} - p::Vector{ProjectedParticle} -end - -const projected_particles = ProjectedParticleVector( - [0], [ ProjectedParticle(0,0.,zero(SVector{3,Float64})) for i in 1:100_000 ] -) - # # loops over the particles of a neighbour cell # function cell_output!(f,box,cell,cl,output,jc_cartesian) - global projected_particles + @unpack projected_particles = cl @unpack nc, cutoff, cutoff_sq = box jc = cell_linear_index(nc,jc_cartesian) - # compute vector connecting cell centers - dc = cell.center - cell_center(jc_cartesian,cutoff) - dc = dc / norm(dc) - - # reset array of projections +# # Compute projected coordinates of particles of cell j +# pⱼ = cl.fp[jc] +# npcell = cl.npcell[jc] +# j = pⱼ.index +# for jp in 1:npcell +# j_orig = pⱼ.index_original +# xpⱼ = pⱼ.coordinates +# xproj = dot(xpⱼ-cell.center,dc) +# projected_particles[jp] = ProjectedParticle(j_orig,xproj,xpⱼ) +# pⱼ = cl.np[j] +# j = pⱼ.index +# end + + # Compute projected coordinates of particles of cell j pⱼ = cl.fp[jc] npcell = cl.npcell[jc] j = pⱼ.index - @turbo for jp in 1:npcell + for jp in 1:npcell j_orig = pⱼ.index_original xpⱼ = pⱼ.coordinates - projected_particles.p[jp] = ProjectedParticle(j_orig,0.,xpⱼ) + projected_particles[jp] = ProjectedParticle(j_orig,0.,xpⱼ) pⱼ = cl.np[j] j = pⱼ.index end - projected_particles.n[1] = npcell - - @turbo for jp in 1:npcell - j_orig = projected_particles.p[jp].index_original - xpⱼ = projected_particles.p[jp].coordinates - xproj = dot(xpⱼ,dc) - projected_particles.p[jp] = ProjectedParticle(j_orig,xproj,xpⱼ) - end # Sort particles according to projection - pp = @view(projected_particles.p[1:npcell]) - sort!(pp,by=x->x.xproj,alg=InsertionSort) + pp = @view(projected_particles[1:npcell]) + #sort!(pp,by=x->x.xproj,alg=InsertionSort) # Loop over particles of cell icell pᵢ = cl.fp[cell.icell] i = pᵢ.index while i > 0 xpᵢ = pᵢ.coordinates - xproj = dot(xpᵢ,dc) - # Now loop over particles of icell, until abs(xproj - yproj) < cutoff - ipos = searchsortedfirst( - pp, - ProjectedParticle(0,xproj,zero(SVector{3,Float64})), - by=x->x.xproj - ) - j = ipos - 1 - while j >= 1 && xproj - pp[j].xproj <= cutoff +# xproj = dot(xpᵢ-cell.center,dc) + + @turbo for j in 1:npcell + j_orig = pp[j].index_original xpⱼ = pp[j].coordinates d2 = distance_sq(xpᵢ,xpⱼ) - if d2 < cutoff_sq - i_orig = pᵢ.index_original - j_orig = pp[j].index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) - end - j -= 1 + projected_particles[j] = ProjectedParticle(j_orig,d2,xpⱼ) end - j = ipos - while j <= npcell && pp[j].xproj - xproj <= cutoff + n = partialsort_cutoff!(pp,cutoff_sq,by= x -> x.xproj) + + for j in 1:n xpⱼ = pp[j].coordinates d2 = distance_sq(xpᵢ,xpⱼ) +global n1 += 1 if d2 < cutoff_sq +global n2 += 1 i_orig = pᵢ.index_original j_orig = pp[j].index_original output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) end - j += 1 end + + # Now loop over particles of icell, until abs(xproj - yproj) < cutoff + #j = 1 + #while j <= npcell && pp[j].xproj - xproj <= cutoff + # xpⱼ = pp[j].coordinates + # d2 = distance_sq(xpᵢ,xpⱼ) + # if d2 < cutoff_sq + # i_orig = pᵢ.index_original + # j_orig = pp[j].index_original + # output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + # end + # j += 1 + #end pᵢ = cl.np[i] i = pᵢ.index end From 38dcb8b04ef69dea1a599c76838e18c5b9e2b6da Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Sat, 24 Jul 2021 16:46:40 -0300 Subject: [PATCH 06/62] removed repeated computations --- src/CellListMap.jl | 53 +++++++++------------------------------------- 1 file changed, 10 insertions(+), 43 deletions(-) diff --git a/src/CellListMap.jl b/src/CellListMap.jl index af0dabea..80580be1 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -996,9 +996,11 @@ function inner_loop!(f,box,icell,cl::CellList,output) end """ + ``` partialsort_cutoff!(x,cutoff) ``` + Function that reorders x vector by putting in the first positions the elements with values smaller than cutoff. Returns the number of elements that satisfy the condition. @@ -1006,14 +1008,12 @@ that satisfy the condition. """ function partialsort_cutoff!(x,cutoff;by=isequal(x)) iswap = 1 - @inbounds for i in 1:length(x) + @inbounds for i in eachindex(x) if by(x[i]) <= cutoff if iswap != i - xtmp = x[iswap] - x[iswap] = x[i] - x[i] = xtmp + x[iswap], x[i] = x[i], x[iswap] end - iswap = iswap + 1 + iswap += 1 end end return iswap - 1 @@ -1027,20 +1027,7 @@ function cell_output!(f,box,cell,cl,output,jc_cartesian) @unpack nc, cutoff, cutoff_sq = box jc = cell_linear_index(nc,jc_cartesian) -# # Compute projected coordinates of particles of cell j -# pⱼ = cl.fp[jc] -# npcell = cl.npcell[jc] -# j = pⱼ.index -# for jp in 1:npcell -# j_orig = pⱼ.index_original -# xpⱼ = pⱼ.coordinates -# xproj = dot(xpⱼ-cell.center,dc) -# projected_particles[jp] = ProjectedParticle(j_orig,xproj,xpⱼ) -# pⱼ = cl.np[j] -# j = pⱼ.index -# end - - # Compute projected coordinates of particles of cell j + # Copy coordinates of particles of cell jcell into continuous array pⱼ = cl.fp[jc] npcell = cl.npcell[jc] j = pⱼ.index @@ -1051,17 +1038,13 @@ function cell_output!(f,box,cell,cl,output,jc_cartesian) pⱼ = cl.np[j] j = pⱼ.index end - - # Sort particles according to projection pp = @view(projected_particles[1:npcell]) - #sort!(pp,by=x->x.xproj,alg=InsertionSort) # Loop over particles of cell icell pᵢ = cl.fp[cell.icell] i = pᵢ.index while i > 0 xpᵢ = pᵢ.coordinates -# xproj = dot(xpᵢ-cell.center,dc) @turbo for j in 1:npcell j_orig = pp[j].index_original @@ -1073,28 +1056,12 @@ function cell_output!(f,box,cell,cl,output,jc_cartesian) for j in 1:n xpⱼ = pp[j].coordinates - d2 = distance_sq(xpᵢ,xpⱼ) -global n1 += 1 - if d2 < cutoff_sq -global n2 += 1 - i_orig = pᵢ.index_original - j_orig = pp[j].index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) - end + d2 = pp[j].xproj + i_orig = pᵢ.index_original + j_orig = pp[j].index_original + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) end - # Now loop over particles of icell, until abs(xproj - yproj) < cutoff - #j = 1 - #while j <= npcell && pp[j].xproj - xproj <= cutoff - # xpⱼ = pp[j].coordinates - # d2 = distance_sq(xpᵢ,xpⱼ) - # if d2 < cutoff_sq - # i_orig = pᵢ.index_original - # j_orig = pp[j].index_original - # output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) - # end - # j += 1 - #end pᵢ = cl.np[i] i = pᵢ.index end From 077a123fc48a69a5721a5c3b63dae9e663247dd2 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Sat, 24 Jul 2021 20:28:07 -0300 Subject: [PATCH 07/62] up --- src/CellListMap.jl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/CellListMap.jl b/src/CellListMap.jl index 80580be1..44338fd3 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -1006,10 +1006,10 @@ elements with values smaller than cutoff. Returns the number of elements that satisfy the condition. """ -function partialsort_cutoff!(x,cutoff;by=isequal(x)) +function partialsort_cutoff!(x,cutoff) iswap = 1 @inbounds for i in eachindex(x) - if by(x[i]) <= cutoff + if x[i].xproj <= cutoff if iswap != i x[iswap], x[i] = x[i], x[iswap] end @@ -1052,7 +1052,7 @@ function cell_output!(f,box,cell,cl,output,jc_cartesian) d2 = distance_sq(xpᵢ,xpⱼ) projected_particles[j] = ProjectedParticle(j_orig,d2,xpⱼ) end - n = partialsort_cutoff!(pp,cutoff_sq,by= x -> x.xproj) + n = partialsort_cutoff!(pp, cutoff_sq) for j in 1:n xpⱼ = pp[j].coordinates From b1241aad66802074fa90c88ffff92790981c132b Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Mon, 26 Jul 2021 14:04:54 -0300 Subject: [PATCH 08/62] up (projection implementation serial) --- src/CellListMap.jl | 49 ++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/src/CellListMap.jl b/src/CellListMap.jl index 44338fd3..9b09d5f0 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -998,18 +998,18 @@ end """ ``` -partialsort_cutoff!(x,cutoff) +partition!(x::AbstractVector,by) ``` -Function that reorders x vector by putting in the first positions the -elements with values smaller than cutoff. Returns the number of elements +Function that reorders `x` vector by putting in the first positions the +elements with values satisfying `by(el)`. Returns the number of elements that satisfy the condition. """ -function partialsort_cutoff!(x,cutoff) +function partition!(x::AbstractVector,by) where T iswap = 1 @inbounds for i in eachindex(x) - if x[i].xproj <= cutoff + if by(x[i]) if iswap != i x[iswap], x[i] = x[i], x[iswap] end @@ -1022,46 +1022,49 @@ end # # loops over the particles of a neighbour cell # -function cell_output!(f,box,cell,cl,output,jc_cartesian) +function cell_output!(f,box,icell,cl,output,jc_cartesian) @unpack projected_particles = cl @unpack nc, cutoff, cutoff_sq = box jc = cell_linear_index(nc,jc_cartesian) - # Copy coordinates of particles of cell jcell into continuous array + # Vector connecting cell centers + Δc = cell_center(jc_cartesian,cutoff) - icell.center + + # Copy coordinates of particles of icell jcell into continuous array, + # and project them into the vector connecting cell centers pⱼ = cl.fp[jc] npcell = cl.npcell[jc] j = pⱼ.index for jp in 1:npcell j_orig = pⱼ.index_original xpⱼ = pⱼ.coordinates - projected_particles[jp] = ProjectedParticle(j_orig,0.,xpⱼ) + xproj = dot(xpⱼ - icell.center,Δc) + projected_particles[jp] = ProjectedParticle(j_orig,xproj,xpⱼ) pⱼ = cl.np[j] j = pⱼ.index end pp = @view(projected_particles[1:npcell]) + # Sort particles according to projection norm + sort!(pp, by=el->el.xproj,alg=InsertionSort) + # Loop over particles of cell icell - pᵢ = cl.fp[cell.icell] + pᵢ = cl.fp[icell.icell] i = pᵢ.index while i > 0 xpᵢ = pᵢ.coordinates - - @turbo for j in 1:npcell - j_orig = pp[j].index_original + xproj = dot(xpᵢ-icell.center,Δc) + j = 1 + while j <= npcell && xproj - pp[j].xproj <= cutoff xpⱼ = pp[j].coordinates d2 = distance_sq(xpᵢ,xpⱼ) - projected_particles[j] = ProjectedParticle(j_orig,d2,xpⱼ) - end - n = partialsort_cutoff!(pp, cutoff_sq) - - for j in 1:n - xpⱼ = pp[j].coordinates - d2 = pp[j].xproj - i_orig = pᵢ.index_original - j_orig = pp[j].index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + if d2 <= cutoff_sq + i_orig = pᵢ.index_original + j_orig = pp[j].index_original + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + end + j += 1 end - pᵢ = cl.np[i] i = pᵢ.index end From e6156ce6818644cdb94864cd4eac6dab27f30ca3 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Mon, 26 Jul 2021 15:48:15 -0300 Subject: [PATCH 09/62] split files --- src/CellListMap.jl | 592 +-------------------------------------- src/LargeDenseSystems.jl | 329 ++++++++++++++++++++++ src/StructTypes.jl | 312 +++++++++++++++++++++ 3 files changed, 645 insertions(+), 588 deletions(-) create mode 100644 src/LargeDenseSystems.jl create mode 100644 src/StructTypes.jl diff --git a/src/CellListMap.jl b/src/CellListMap.jl index 9b09d5f0..cd226f65 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -12,168 +12,8 @@ export Box export CellList, UpdateCellList! export map_pairwise! -""" - -$(TYPEDEF) - -$(TYPEDFIELDS) - -Structure that contains some data required to compute the linked cells. To -be initialized with the box size and cutoff. - -## Example - -```julia-repl -julia> sides = [250,250,250]; - -julia> cutoff = 10; - -julia> box = Box(sides,cutoff) -Box{3, Float64} - sides: [250.0, 250.0, 250.0] - cutoff: 10.0 - number of cells on each dimension: [25, 25, 25] (lcell: 1) - Total number of cells: 15625 - -``` - -""" -Base.@kwdef struct Box{N,T,M} - unit_cell::SMatrix{N,N,T,M} - unit_cell_max::SVector{N,T} - lcell::Int - nc::SVector{N,Int} - cutoff::T - cutoff_sq::T - ranges::SVector{N,UnitRange{Int}} -end - -""" - -``` -Box(unit_cell::AbstractMatrix, cutoff; T::DataType=Float64, lcell::Int=1) -``` - -Construct box structure given the cell matrix of lattice vectors. - -### Example -```julia -julia> unit_cell = [ 100 50 0 - 0 120 0 - 0 0 130 ]; - -julia> box = Box(unit_cell,10) -Box{3, Float64} - unit cell: [100.0 50.0 0.0; 0.0 120.0 0.0; 0.0 0.0 130.0] - cutoff: 10.0 - number of cells on each dimension: [16, 13, 14] (lcell: 1) - Total number of cells: 2912 - -``` - -""" -function Box(unit_cell::AbstractMatrix, cutoff, T::DataType, lcell::Int=1) - N = size(unit_cell)[1] - @assert N == size(unit_cell)[2] "Unit cell matrix must be square." - @assert count(unit_cell .< 0) == 0 "Unit cell lattice vectors must only contain non-negative coordinates." - unit_cell_max = SVector{N,T}(sum(@view(unit_cell[:,i]) for i in 1:N)) - unit_cell = SMatrix{N,N,T}(unit_cell) - nc = SVector{N,Int}( - ceil.(Int,max.(1,(unit_cell_max .+ 2*cutoff)/(cutoff/lcell))) - ) - ranges = ranges_of_replicas(cutoff,nc,unit_cell,unit_cell_max) - return Box{N,T,N*N}( - unit_cell, - unit_cell_max, - lcell, nc, - cutoff, - cutoff^2, - ranges - ) -end -Box(unit_cell::AbstractMatrix,cutoff;T::DataType=Float64,lcell::Int=1) = - Box(unit_cell,cutoff,T,lcell) - -function Base.show(io::IO,::MIME"text/plain",box::Box) - println(typeof(box)) - println(" unit cell: ", box.unit_cell) - println(" unit cell maximum: ", box.unit_cell_max) - println(" cutoff: ", box.cutoff) - println(" number of cells on each dimension: ",box.nc, " (lcell: ",box.lcell,")") - print(" Total number of cells: ", prod(box.nc)) -end - -""" - -``` -Box(sides::AbstractVector, cutoff; T::DataType=Float64, lcell::Int=1) -``` - -For orthorhombic unit cells, `Box` can be initialized with a vector of the length of each side. - -### Example -```julia -julia> box = Box([120,150,100],10) -Box{3, Float64} - unit cell: [120.0 0.0 0.0; 0.0 150.0 0.0; 0.0 0.0 100.0] - cutoff: 10.0 - number of cells on each dimension: [13, 16, 11] (lcell: 1) - Total number of cells: 2288 - -``` - -""" -function Box(sides::AbstractVector, cutoff, T::DataType, lcell::Int=1) - N = length(sides) - cart_idxs = CartesianIndices((1:N,1:N)) - # Build unit cell matrix from lengths - unit_cell = SMatrix{N,N,T,N*N}( - ntuple(N*N) do i - c = cart_idxs[i] - if c[1] == c[2] - return sides[c[1]] - else - return zero(T) - end - end - ) - return Box(unit_cell,cutoff,T,lcell) -end -Box(sides::AbstractVector,cutoff;T::DataType=Float64,lcell::Int=1) = - Box(sides,cutoff,T,lcell) - -""" - -$(TYPEDEF) - -Copies particle coordinates and associated index, to build contiguous particle lists -in memory when building the cell lists. This strategy duplicates the particle coordinates -data, but is probably worth the effort. - -""" -struct AtomWithIndex{N,T} - index::Int - index_original::Int - coordinates::SVector{N,T} -end -Base.zero(::Type{AtomWithIndex{N,T}}) where {N,T} = - AtomWithIndex{N,T}(0,0,zeros(SVector{N,T})) - -""" - -$(TYPEDEF) - -This structure contains the cell linear index and the information about if this cell -is in the border of the box (such that its neighbouring cells need to be wrapped) - -""" -struct Cell{N,T} - icell::Int - cartesian::CartesianIndex{N} - center::SVector{N,T} -end -Base.zero(::Type{Cell{N,T}}) where {N,T} = - Cell{N,T}(0,CartesianIndex{N}(0,0,0),zeros(SVector{N,T})) +include("./StructTypes.jl") +include("./LargeDenseSystems.jl") """ @@ -188,221 +28,9 @@ of points. Returns a `SVector{N,T}` cell_center(c::CartesianIndex{N},cutoff::T) where {N,T} = SVector{N,T}(ntuple(i-> cutoff*c[i]/2, N)) -struct ProjectedParticle{N,T} - index_original::Int - xproj::T - coordinates::SVector{N,T} -end - -""" - -$(TYPEDEF) - -$(TYPEDFIELDS) - -Structure that contains the cell lists information. - -""" -Base.@kwdef struct CellList{N,T} - " *mutable* number of cells with particles " - ncwp::Int - " *mutable* number of particles in the computing box " - ncp::Int - " Indices of the unique cells with Particles " - cwp::Vector{Cell{N,T}} - " First particle of cell " - fp::Vector{AtomWithIndex{N,T}} - " Next particle of cell " - np::Vector{AtomWithIndex{N,T}} - " Number of particles in of cell " - npcell::Vector{Int} - " Auxiliar vector to store projected particles. " - projected_particles::Vector{ProjectedParticle{N,T}} -end -function Base.show(io::IO,::MIME"text/plain",cl::CellList) - println(typeof(cl)) - println(" $(cl.ncwp) cells with real particles.") - print(" $(cl.ncp) particles in computing box, including images.") -end - -# Structure that will cointain the cell lists of two independent sets of -# particles for cross-computation of interactions -@with_kw struct CellListPair{V,N,T} - small::V - large::CellList{N,T} - swap::Bool -end -function Base.show(io::IO,::MIME"text/plain",cl::CellListPair) - print(typeof(cl),"\n") - print(" $(length(cl.small)) particles in the smallest vector.\n") - print(" $(cl.large.ncwp) cells with particles.") -end - -""" - -``` -CellList(x::AbstractVector{SVector{N,T}},box::Box,parallel=true) where {N,T} -``` - -Function that will initialize a `CellList` structure from scracth, given a vector -or particle coordinates (as `SVector`s) and a `Box`, which contain the size ofthe -system, cutoff, etc. - -### Example - -```julia-repl -julia> box = Box([250,250,250],10); - -julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:100000 ]; - -julia> cl = CellListMap.CellList(x,box) -CellList{3, Float64} - with 15597 cells with particles. - -``` - -""" -function CellList(x::AbstractVector{SVector{N,T}},box::Box;parallel::Bool=true) where {N,T} - number_of_cells = ceil(Int,prod(box.nc)) - # number_of_particles is a lower bound, will be resized when necessary to incorporate particle images - number_of_particles = length(x) - ncwp = 0 - ncp = 0 - cwp = Vector{Cell{N,T}}(undef,number_of_cells) - fp = Vector{AtomWithIndex{N,T}}(undef,number_of_cells) - np = Vector{AtomWithIndex{N,T}}(undef,number_of_particles) - npcell = Vector{Int}(undef,number_of_cells) - projected_particles = Vector{ProjectedParticle{N,T}}(undef,number_of_particles) - cl = CellList{N,T}(ncwp,ncp,cwp,fp,np,npcell,projected_particles) - return UpdateCellList!(x,box,cl,parallel=parallel) -end - -""" - -``` -CellList(x::AbstractVector{SVector{N,T}},y::AbstractVector{SVector{N,T}},box::Box;parallel=true) where {N,T} -``` - -Function that will initialize a `CellListPair` structure from scracth, given two vectors -of particle coordinates and a `Box`, which contain the size ofthe system, cutoff, etc. The cell lists -will be constructed for the largest vector, and a reference to the smallest vector is annotated. - - -### Example - -```julia-repl -julia> box = Box([250,250,250],10); - -julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:1000 ]; - -julia> y = [ 250*rand(SVector{3,Float64}) for i in 1:10000 ]; - -julia> cl = CellList(x,y,box) -CellListMap.CellListPair{3, Float64} - 1000 particles in the smallest vector. - 7452 cells with particles. - -``` - -""" -function CellList( - x::AbstractVector{SVector{N,T}}, - y::AbstractVector{SVector{N,T}}, - box::Box; - parallel::Bool=true -) where {N,T} - if length(x) <= length(y) - y_cl = CellList(y,box,parallel=parallel) - cl_pair = CellListPair(small=x,large=y_cl,swap=false) - else - x_cl = CellList(x,box,parallel=parallel) - cl_pair = CellListPair(small=y,large=x_cl,swap=true) - end - return cl_pair -end - -""" - -``` -UpdateCellList!(x::AbstractVector{SVector{N,T}},box::Box,cl:CellList{N,T},parallel=true) where {N,T} -``` - -Function that will update a previously allocated `CellList` structure, given new updated particle positions, for example. - -```julia-repl -julia> box = Box([250,250,250],10); - -julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:1000 ]; - -julia> cl = CellList(x,box); - -julia> box = Box([260,260,260],10); - -julia> x = [ 260*rand(SVector{3,Float64}) for i in 1:1000 ]; - -julia> cl = UpdateCellList!(x,box,cl); # update lists - -``` - -""" -function UpdateCellList!( - x::AbstractVector{SVector{N,T}}, - box::Box, - cl::CellList{N,T}; - parallel::Bool=true -) where {N,T} - @unpack cwp, fp, np, npcell = cl - - number_of_cells = prod(box.nc) - if number_of_cells > length(cwp) - number_of_cells = ceil(Int,1.1*number_of_cells) # some margin in case of box size variations - resize!(cwp,number_of_cells) - resize!(fp,number_of_cells) - resize!(npcell,number_of_cells) - end - - @set! cl.ncwp = 0 - if parallel - @threads for i in eachindex(cwp) - cwp[i] = zero(Cell{N,T}) - fp[i] = zero(AtomWithIndex{N,T}) - npcell[i] = 0 - end - @threads for i in eachindex(np) - np[i] = zero(AtomWithIndex{N,T}) - end - else - fill!(cwp,zero(Cell{N,T})) - fill!(fp,zero(AtomWithIndex{N,T})) - fill!(np,zero(AtomWithIndex{N,T})) - fill!(npcell,0) - end - - # - # The following part cannot be *easily* paralelized, because - # there is concurrency on the construction of the cell lists - # - - # - # Add virtual particles to edge cells - # - for (ip,particle) in pairs(x) - p = wrap_to_first(particle,box.unit_cell) - cl = replicate_particle!(ip,p,box,cl) - end - # - # Add true particles, such that the first particle of each cell is - # always a true particle - # - for (ip,particle) in pairs(x) - p = wrap_to_first(particle,box.unit_cell) - cl = add_particle_to_celllist!(ip,p,box,cl) - end - - return cl -end - +# # Function that checks if the particule is outside the computation bounding box +# function out_of_bounding_box(x::SVector{N,T},box::Box{N,T,M}) where {N,T,M} for i in 1:N (x[i] >= box.unit_cell_max[i] + box.cutoff) && return true @@ -529,39 +157,6 @@ end """ -Set one index of a cell list - -""" -function add_particle_to_celllist!(ip,x::SVector{N,T},box,cl;real_particle::Bool=true) where {N,T} - @unpack cutoff = box - @unpack cwp, fp, np, npcell = cl - @set! cl.ncp += 1 - icell_cartesian = particle_cell(x,box) - icell = cell_linear_index(box.nc,icell_cartesian) - # Cells starting with real particles are annotated to be run over - if fp[icell].index == 0 - npcell[icell] = 1 - if real_particle - @set! cl.ncwp += 1 - cwp[cl.ncwp] = Cell{N,T}(icell,icell_cartesian,cell_center(icell_cartesian,cutoff)) - end - else - npcell[icell] += 1 - end - if cl.ncp > length(np) - old_length = length(np) - resize!(np,ceil(Int,1.2*old_length)) - for i in old_length+1:length(np) - np[i] = zero(AtomWithIndex{N,T}) - end - end - np[cl.ncp] = fp[icell] - fp[icell] = AtomWithIndex(cl.ncp,ip,x) - return cl -end - -""" - ``` wrap_cell_fraction(x,cell) ``` @@ -924,77 +519,10 @@ function map_pairwise!(f::F1, output, box::Box, cl::CellListPair; return output end -# -# Serial version for self-pairwise computations -# -function map_pairwise_serial!( - f::F, output, box::Box, cl::CellList; - show_progress::Bool=false -) where {F} - show_progress && (p = Progress(cl.ncwp,dt=1)) - for icell in 1:cl.ncwp - output = inner_loop!(f,box,icell,cl,output) - show_progress && next!(p) - end - return output -end - # Chunck splitter, we jump over cells such that possible # heterogeneities have greater changes of getting split into different chuncks splitter(it,n) = it:nthreads():n -# -# Parallel version for self-pairwise computations -# -function map_pairwise_parallel!(f::F1, output, box::Box, cl::CellList; - output_threaded=output_threaded, - reduce::F2=reduce, - show_progress::Bool=false -) where {F1,F2} - show_progress && (p = Progress(cl.ncwp,dt=1)) - @threads for it in 1:nthreads() - for icell in splitter(it,cl.ncwp) - output_threaded[it] = inner_loop!(f,box,icell,cl,output_threaded[it]) - show_progress && next!(p) - end - end - output = reduce(output,output_threaded) - return output -end - -function inner_loop!(f,box,icell,cl::CellList,output) - @unpack cutoff_sq = box - cell = cl.cwp[icell] - - # loop over list of non-repeated particles of cell ic - pᵢ = cl.fp[cell.icell] - i = pᵢ.index - while i > 0 - xpᵢ = pᵢ.coordinates - pⱼ = cl.np[i] - j = pⱼ.index - while j > 0 - xpⱼ = pⱼ.coordinates - d2 = distance_sq(xpᵢ,xpⱼ) - if d2 <= cutoff_sq - i_orig = pᵢ.index_original - j_orig = pⱼ.index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) - end - pⱼ = cl.np[pⱼ.index] - j = pⱼ.index - end - pᵢ = cl.np[pᵢ.index] - i = pᵢ.index - end - - for jcell in neighbour_cells(box) - output = cell_output!(f,box,cell,cl,output,cell.cartesian+jcell) - end - - return output -end - """ ``` @@ -1019,118 +547,6 @@ function partition!(x::AbstractVector,by) where T return iswap - 1 end -# -# loops over the particles of a neighbour cell -# -function cell_output!(f,box,icell,cl,output,jc_cartesian) - @unpack projected_particles = cl - @unpack nc, cutoff, cutoff_sq = box - jc = cell_linear_index(nc,jc_cartesian) - - # Vector connecting cell centers - Δc = cell_center(jc_cartesian,cutoff) - icell.center - - # Copy coordinates of particles of icell jcell into continuous array, - # and project them into the vector connecting cell centers - pⱼ = cl.fp[jc] - npcell = cl.npcell[jc] - j = pⱼ.index - for jp in 1:npcell - j_orig = pⱼ.index_original - xpⱼ = pⱼ.coordinates - xproj = dot(xpⱼ - icell.center,Δc) - projected_particles[jp] = ProjectedParticle(j_orig,xproj,xpⱼ) - pⱼ = cl.np[j] - j = pⱼ.index - end - pp = @view(projected_particles[1:npcell]) - - # Sort particles according to projection norm - sort!(pp, by=el->el.xproj,alg=InsertionSort) - - # Loop over particles of cell icell - pᵢ = cl.fp[icell.icell] - i = pᵢ.index - while i > 0 - xpᵢ = pᵢ.coordinates - xproj = dot(xpᵢ-icell.center,Δc) - j = 1 - while j <= npcell && xproj - pp[j].xproj <= cutoff - xpⱼ = pp[j].coordinates - d2 = distance_sq(xpᵢ,xpⱼ) - if d2 <= cutoff_sq - i_orig = pᵢ.index_original - j_orig = pp[j].index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) - end - j += 1 - end - pᵢ = cl.np[i] - i = pᵢ.index - end - - return output -end - -# -# Serial version for cross-interaction computations -# -function map_pairwise_serial!(f::F, output, box::Box, cl::CellListPair; - show_progress=show_progress -) where {F} - show_progress && (p = Progress(length(cl.small),dt=1)) - for i in eachindex(cl.small) - output = inner_loop!(f,output,i,box,cl) - show_progress && next!(p) - end - return output -end - -# -# Parallel version for cross-interaction computations -# -function map_pairwise_parallel!(f::F1, output, box::Box, cl::CellListPair; - output_threaded=output_threaded, - reduce::F2=reduce, - show_progress=show_progress -) where {F1,F2} - show_progress && (p = Progress(length(cl.small),dt=1)) - @threads for it in 1:nthreads() - for i in splitter(it,length(cl.small)) - output_threaded[it] = inner_loop!(f,output_threaded[it],i,box,cl) - show_progress && next!(p) - end - end - output = reduce(output,output_threaded) - return output -end - -# -# Inner loop of cross-interaction computations -# -function inner_loop!(f,output,i,box,cl::CellListPair) - @unpack unit_cell, nc, cutoff_sq = box - xpᵢ = wrap_to_first(cl.small[i],unit_cell) - ic = particle_cell(xpᵢ,box) - for neighbour_cell in neighbour_cells_all(box) - jc = cell_linear_index(nc,neighbour_cell+ic) - pⱼ = cl.large.fp[jc] - j = pⱼ.index - # loop over particles of cell jc - while j > 0 - xpⱼ = pⱼ.coordinates - d2 = distance_sq(xpᵢ,xpⱼ) - if d2 <= cutoff_sq - j_orig = pⱼ.index_original - output = f(xpᵢ,xpⱼ,i,j_orig,d2,output) - end - pⱼ = cl.large.np[j] - j = pⱼ.index - end - end - return output -end - # # Functions to reduce the output of common options (vectors of numbers # and vectors of vectors) diff --git a/src/LargeDenseSystems.jl b/src/LargeDenseSystems.jl new file mode 100644 index 00000000..2d2bd946 --- /dev/null +++ b/src/LargeDenseSystems.jl @@ -0,0 +1,329 @@ +# +# Functions to deal with large and dense system, avoiding the maximum number +# of unnecessary loop iterations over non-interacting particles +# + +""" + +``` +UpdateCellList!( + x::AbstractVector{SVector{N,T}}, + box::Box,cl:CellList{LargeDenseSystem,N,T}, + parallel=true +) where {N,T} +``` + +Function that will update a previously allocated `CellList` structure, given new updated particle +positions of large and dense systems. + +## Example + +```julia-repl +julia> box = Box([250,250,250],10); + +julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:1000 ]; + +julia> cl = CellList(x,box); + +julia> box = Box([260,260,260],10); + +julia> x = [ 260*rand(SVector{3,Float64}) for i in 1:1000 ]; + +julia> cl = UpdateCellList!(x,box,cl); # update lists + +``` + +""" +function UpdateCellList!( + x::AbstractVector{SVector{N,T}}, + box::Box, + cl::CellList{LargeDenseSystem,N,T}; + parallel::Bool=true +) where {N,T} + @unpack cwp, fp, np, npcell = cl + + number_of_cells = prod(box.nc) + if number_of_cells > length(cwp) + number_of_cells = ceil(Int,1.1*number_of_cells) # some margin in case of box size variations + resize!(cwp,number_of_cells) + resize!(fp,number_of_cells) + resize!(npcell,number_of_cells) + end + + cl.ncwp[1] = 0 + if parallel + @threads for i in eachindex(cwp) + cwp[i] = zero(Cell{N,T}) + fp[i] = zero(AtomWithIndex{N,T}) + npcell[i] = 0 + end + @threads for i in eachindex(np) + np[i] = zero(AtomWithIndex{N,T}) + end + else + fill!(cwp,zero(Cell{N,T})) + fill!(fp,zero(AtomWithIndex{N,T})) + fill!(np,zero(AtomWithIndex{N,T})) + fill!(npcell,0) + end + + # + # The following part cannot be *easily* paralelized, because + # there is concurrency on the construction of the cell lists + # + + # + # Add virtual particles to edge cells + # + for (ip,particle) in pairs(x) + p = wrap_to_first(particle,box.unit_cell) + cl = replicate_particle!(ip,p,box,cl) + end + # + # Add true particles, such that the first particle of each cell is + # always a true particle + # + for (ip,particle) in pairs(x) + p = wrap_to_first(particle,box.unit_cell) + cl = add_particle_to_celllist!(ip,p,box,cl) + end + + return cl +end + +""" + +Set one index of a cell list + +""" +function add_particle_to_celllist!( + ip, + x::SVector{N,T}, + box, + cl::CellList{LargeDenseSystem,N,T}; + real_particle::Bool=true +) where {N,T} + @unpack cutoff = box + @unpack ncp, ncwp, cwp, fp, np, npcell = cl + ncp[1] += 1 + icell_cartesian = particle_cell(x,box) + icell = cell_linear_index(box.nc,icell_cartesian) + # Cells starting with real particles are annotated to be run over + if fp[icell].index == 0 + npcell[icell] = 1 + if real_particle + ncwp[1] += 1 + cwp[ncwp[1]] = Cell{N,T}(icell,icell_cartesian,cell_center(icell_cartesian,cutoff)) + end + else + npcell[icell] += 1 + end + if ncp[1] > length(np) + old_length = length(np) + resize!(np,ceil(Int,1.2*old_length)) + for i in old_length+1:length(np) + np[i] = zero(AtomWithIndex{N,T}) + end + end + np[ncp[1]] = fp[icell] + fp[icell] = AtomWithIndex(ncp[1],ip,x) + return cl +end + +# +# Serial version for self-pairwise computations +# +function map_pairwise_serial!( + f::F, output, box::Box, cl::CellList{LargeDenseSystem,N,T}; + show_progress::Bool=false +) where {F,N,T} + show_progress && (p = Progress(cl.ncwp[1],dt=1)) + for icell in 1:cl.ncwp[1] + output = inner_loop!(f,box,icell,cl,output) + show_progress && next!(p) + end + return output +end + +# +# Parallel version for self-pairwise computations +# +function map_pairwise_parallel!( + f::F1, output, box::Box, cl::CellList{LargeDenseSystem,N,T}; + output_threaded=output_threaded, + reduce::F2=reduce, + show_progress::Bool=false +) where {F1,F2,N,T} + show_progress && (p = Progress(cl.ncwp[1],dt=1)) + @threads for it in 1:nthreads() + for icell in splitter(it,cl.ncwp[1]) + output_threaded[it] = inner_loop!(f,box,icell,cl,output_threaded[it]) + show_progress && next!(p) + end + end + output = reduce(output,output_threaded) + return output +end + +function inner_loop!( + f,box,icell, + cl::CellList{LargeDenseSystem,N,T}, + output +) where {N,T} + @unpack cutoff_sq = box + cell = cl.cwp[icell] + + # loop over list of non-repeated particles of cell ic + pᵢ = cl.fp[cell.icell] + i = pᵢ.index + while i > 0 + xpᵢ = pᵢ.coordinates + pⱼ = cl.np[i] + j = pⱼ.index + while j > 0 + xpⱼ = pⱼ.coordinates + d2 = distance_sq(xpᵢ,xpⱼ) + if d2 <= cutoff_sq + i_orig = pᵢ.index_original + j_orig = pⱼ.index_original + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + end + pⱼ = cl.np[pⱼ.index] + j = pⱼ.index + end + pᵢ = cl.np[pᵢ.index] + i = pᵢ.index + end + + for jcell in neighbour_cells(box) + output = cell_output!(f,box,cell,cl,output,cell.cartesian+jcell) + end + + return output +end + +# +# loops over the particles of a neighbour cell +# +function cell_output!( + f, + box, + icell, + cl::CellList{LargeDenseSystem,N,T}, + output, + jc_cartesian +) where {N,T} + @unpack projected_particles = cl + @unpack nc, cutoff, cutoff_sq = box + jc = cell_linear_index(nc,jc_cartesian) + + # Vector connecting cell centers + Δc = cell_center(jc_cartesian,cutoff) - icell.center + + # Copy coordinates of particles of icell jcell into continuous array, + # and project them into the vector connecting cell centers + pⱼ = cl.fp[jc] + npcell = cl.npcell[jc] + j = pⱼ.index + for jp in 1:npcell + j_orig = pⱼ.index_original + xpⱼ = pⱼ.coordinates + xproj = dot(xpⱼ - icell.center,Δc) + projected_particles[jp] = ProjectedParticle(j_orig,xproj,xpⱼ) + pⱼ = cl.np[j] + j = pⱼ.index + end + pp = @view(projected_particles[1:npcell]) + + # Sort particles according to projection norm + sort!(pp, by=el->el.xproj,alg=InsertionSort) + + # Loop over particles of cell icell + pᵢ = cl.fp[icell.icell] + i = pᵢ.index + while i > 0 + xpᵢ = pᵢ.coordinates + xproj = dot(xpᵢ-icell.center,Δc) + j = 1 + while j <= npcell && xproj - pp[j].xproj <= cutoff + xpⱼ = pp[j].coordinates + d2 = distance_sq(xpᵢ,xpⱼ) + if d2 <= cutoff_sq + i_orig = pᵢ.index_original + j_orig = pp[j].index_original + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + end + j += 1 + end + pᵢ = cl.np[i] + i = pᵢ.index + end + + return output +end + +# +# Serial version for cross-interaction computations +# +function map_pairwise_serial!( + f::F, output, box::Box, + cl::CellListPair{LargeDenseSystem,N,T}; + show_progress=show_progress +) where {F,N,T} + show_progress && (p = Progress(length(cl.small),dt=1)) + for i in eachindex(cl.small) + output = inner_loop!(f,output,i,box,cl) + show_progress && next!(p) + end + return output +end + +# +# Parallel version for cross-interaction computations +# +function map_pairwise_parallel!( + f::F1, output, box::Box, + cl::CellListPair{LargeDenseSystem,N,T}; + output_threaded=output_threaded, + reduce::F2=reduce, + show_progress=show_progress +) where {F1,F2,N,T} + show_progress && (p = Progress(length(cl.small),dt=1)) + @threads for it in 1:nthreads() + for i in splitter(it,length(cl.small)) + output_threaded[it] = inner_loop!(f,output_threaded[it],i,box,cl) + show_progress && next!(p) + end + end + output = reduce(output,output_threaded) + return output +end + +# +# Inner loop of cross-interaction computations +# +function inner_loop!( + f,output,i,box, + cl::CellListPair{LargeDenseSystem,N,T} +) where {N,T} + @unpack unit_cell, nc, cutoff_sq = box + xpᵢ = wrap_to_first(cl.small[i],unit_cell) + ic = particle_cell(xpᵢ,box) + for neighbour_cell in neighbour_cells_all(box) + jc = cell_linear_index(nc,neighbour_cell+ic) + pⱼ = cl.large.fp[jc] + j = pⱼ.index + # loop over particles of cell jc + while j > 0 + xpⱼ = pⱼ.coordinates + d2 = distance_sq(xpᵢ,xpⱼ) + if d2 <= cutoff_sq + j_orig = pⱼ.index_original + output = f(xpᵢ,xpⱼ,i,j_orig,d2,output) + end + pⱼ = cl.large.np[j] + j = pⱼ.index + end + end + return output +end diff --git a/src/StructTypes.jl b/src/StructTypes.jl new file mode 100644 index 00000000..c6542706 --- /dev/null +++ b/src/StructTypes.jl @@ -0,0 +1,312 @@ + +# +# Type of systems, to dispatch methods accordingly +# +struct TinySystem end +struct MediumSparseSystem end +struct MediumDenseSystem end +struct LargeSparseSystem end +struct LargeDenseSystem end + +""" + +$(TYPEDEF) + +$(TYPEDFIELDS) + +Structure that contains some data required to compute the linked cells. To +be initialized with the box size and cutoff. + +## Example + +```julia-repl +julia> sides = [250,250,250]; + +julia> cutoff = 10; + +julia> box = Box(sides,cutoff) +Box{3, Float64} + sides: [250.0, 250.0, 250.0] + cutoff: 10.0 + number of cells on each dimension: [25, 25, 25] (lcell: 1) + Total number of cells: 15625 + +``` + +""" +Base.@kwdef struct Box{N,T,M} + unit_cell::SMatrix{N,N,T,M} + unit_cell_max::SVector{N,T} + lcell::Int + nc::SVector{N,Int} + cutoff::T + cutoff_sq::T + ranges::SVector{N,UnitRange{Int}} +end + +""" + +``` +Box(unit_cell::AbstractMatrix, cutoff; T::DataType=Float64, lcell::Int=1) +``` + +Construct box structure given the cell matrix of lattice vectors. + +### Example +```julia +julia> unit_cell = [ 100 50 0 + 0 120 0 + 0 0 130 ]; + +julia> box = Box(unit_cell,10) +Box{3, Float64} + unit cell: [100.0 50.0 0.0; 0.0 120.0 0.0; 0.0 0.0 130.0] + cutoff: 10.0 + number of cells on each dimension: [16, 13, 14] (lcell: 1) + Total number of cells: 2912 + +``` + +""" +function Box(unit_cell::AbstractMatrix, cutoff, T::DataType, lcell::Int=1) + N = size(unit_cell)[1] + @assert N == size(unit_cell)[2] "Unit cell matrix must be square." + @assert count(unit_cell .< 0) == 0 "Unit cell lattice vectors must only contain non-negative coordinates." + unit_cell_max = SVector{N,T}(sum(@view(unit_cell[:,i]) for i in 1:N)) + unit_cell = SMatrix{N,N,T}(unit_cell) + nc = SVector{N,Int}( + ceil.(Int,max.(1,(unit_cell_max .+ 2*cutoff)/(cutoff/lcell))) + ) + ranges = ranges_of_replicas(cutoff,nc,unit_cell,unit_cell_max) + return Box{N,T,N*N}( + unit_cell, + unit_cell_max, + lcell, nc, + cutoff, + cutoff^2, + ranges + ) +end +Box(unit_cell::AbstractMatrix,cutoff;T::DataType=Float64,lcell::Int=1) = + Box(unit_cell,cutoff,T,lcell) + +function Base.show(io::IO,::MIME"text/plain",box::Box) + println(typeof(box)) + println(" unit cell: ", box.unit_cell) + println(" unit cell maximum: ", box.unit_cell_max) + println(" cutoff: ", box.cutoff) + println(" number of cells on each dimension: ",box.nc, " (lcell: ",box.lcell,")") + print(" Total number of cells: ", prod(box.nc)) +end + +""" + +``` +Box(sides::AbstractVector, cutoff; T::DataType=Float64, lcell::Int=1) +``` + +For orthorhombic unit cells, `Box` can be initialized with a vector of the length of each side. + +### Example +```julia +julia> box = Box([120,150,100],10) +Box{3, Float64} + unit cell: [120.0 0.0 0.0; 0.0 150.0 0.0; 0.0 0.0 100.0] + cutoff: 10.0 + number of cells on each dimension: [13, 16, 11] (lcell: 1) + Total number of cells: 2288 + +``` + +""" +function Box(sides::AbstractVector, cutoff, T::DataType, lcell::Int=1) + N = length(sides) + cart_idxs = CartesianIndices((1:N,1:N)) + # Build unit cell matrix from lengths + unit_cell = SMatrix{N,N,T,N*N}( + ntuple(N*N) do i + c = cart_idxs[i] + if c[1] == c[2] + return sides[c[1]] + else + return zero(T) + end + end + ) + return Box(unit_cell,cutoff,T,lcell) +end +Box(sides::AbstractVector,cutoff;T::DataType=Float64,lcell::Int=1) = + Box(sides,cutoff,T,lcell) + +""" + +$(TYPEDEF) + +Copies particle coordinates and associated index, to build contiguous particle lists +in memory when building the cell lists. This strategy duplicates the particle coordinates +data, but is probably worth the effort. + +""" +struct AtomWithIndex{N,T} + index::Int + index_original::Int + coordinates::SVector{N,T} +end +Base.zero(::Type{AtomWithIndex{N,T}}) where {N,T} = + AtomWithIndex{N,T}(0,0,zeros(SVector{N,T})) + +""" + +$(TYPEDEF) + +This structure contains the cell linear index and the information about if this cell +is in the border of the box (such that its neighbouring cells need to be wrapped) + +""" +struct Cell{N,T} + icell::Int + cartesian::CartesianIndex{N} + center::SVector{N,T} +end +Base.zero(::Type{Cell{N,T}}) where {N,T} = + Cell{N,T}(0,CartesianIndex{N}(0,0,0),zeros(SVector{N,T})) + +""" + +Auxiliary structure to contain projected particles in large and +and dense systems. + +""" +struct ProjectedParticle{N,T} + index_original::Int + xproj::T + coordinates::SVector{N,T} +end + +""" + +$(TYPEDEF) + +$(TYPEDFIELDS) + +Structure that contains the cell lists information. + +""" +Base.@kwdef struct CellList{SystemType,N,T} + " *mutable* number of cells with particles " + ncwp::Vector{Int} + " *mutable* number of particles in the computing box " + ncp::Vector{Int} + " Indices of the unique cells with Particles " + cwp::Vector{Cell{N,T}} + " First particle of cell " + fp::Vector{AtomWithIndex{N,T}} + " Next particle of cell " + np::Vector{AtomWithIndex{N,T}} + " Number of particles in of cell " + npcell::Vector{Int} + " Auxiliar vector to store projected particles. " + projected_particles::Vector{ProjectedParticle{N,T}} +end +function Base.show(io::IO,::MIME"text/plain",cl::CellList) + println(typeof(cl)) + println(" $(cl.ncwp[1]) cells with real particles.") + print(" $(cl.ncp[1]) particles in computing box, including images.") +end + +# Structure that will cointain the cell lists of two independent sets of +# particles for cross-computation of interactions +@with_kw struct CellListPair{SystemType,V,N,T} + small::V + large::CellList{SystemType,N,T} + swap::Bool +end +function Base.show(io::IO,::MIME"text/plain",cl::CellListPair) + print(typeof(cl),"\n") + print(" $(length(cl.small)) particles in the smallest vector.\n") + print(" $(cl.large.ncwp[1]) cells with particles.") +end + +""" + +``` +CellList(x::AbstractVector{SVector{N,T}},box::Box,parallel=true) where {N,T} +``` + +Function that will initialize a `CellList` structure from scracth, given a vector +or particle coordinates (as `SVector`s) and a `Box`, which contain the size ofthe +system, cutoff, etc. + +### Example + +```julia-repl +julia> box = Box([250,250,250],10); + +julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:100000 ]; + +julia> cl = CellListMap.CellList(x,box) +CellList{3, Float64} + with 15597 cells with particles. + +``` + +""" +function CellList(x::AbstractVector{SVector{N,T}},box::Box;parallel::Bool=true) where {N,T} + number_of_cells = ceil(Int,prod(box.nc)) + # number_of_particles is a lower bound, will be resized when necessary to incorporate particle images + number_of_particles = length(x) + ncwp = [0] + ncp = [0] + cwp = Vector{Cell{N,T}}(undef,number_of_cells) + fp = Vector{AtomWithIndex{N,T}}(undef,number_of_cells) + np = Vector{AtomWithIndex{N,T}}(undef,number_of_particles) + npcell = Vector{Int}(undef,number_of_cells) + projected_particles = Vector{ProjectedParticle{N,T}}(undef,number_of_particles) + cl = CellList{LargeDenseSystem,N,T}(ncwp,ncp,cwp,fp,np,npcell,projected_particles) + return UpdateCellList!(x,box,cl,parallel=parallel) +end + +""" + +``` +CellList(x::AbstractVector{SVector{N,T}},y::AbstractVector{SVector{N,T}},box::Box;parallel=true) where {N,T} +``` + +Function that will initialize a `CellListPair` structure from scracth, given two vectors +of particle coordinates and a `Box`, which contain the size ofthe system, cutoff, etc. The cell lists +will be constructed for the largest vector, and a reference to the smallest vector is annotated. + + +### Example + +```julia-repl +julia> box = Box([250,250,250],10); + +julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:1000 ]; + +julia> y = [ 250*rand(SVector{3,Float64}) for i in 1:10000 ]; + +julia> cl = CellList(x,y,box) +CellListMap.CellListPair{3, Float64} + 1000 particles in the smallest vector. + 7452 cells with particles. + +``` + +""" +function CellList( + x::AbstractVector{SVector{N,T}}, + y::AbstractVector{SVector{N,T}}, + box::Box; + parallel::Bool=true +) where {N,T} + if length(x) <= length(y) + y_cl = CellList(y,box,parallel=parallel) + cl_pair = CellListPair(small=x,large=y_cl,swap=false) + else + x_cl = CellList(x,box,parallel=parallel) + cl_pair = CellListPair(small=y,large=x_cl,swap=true) + end + return cl_pair +end + From 43eda1a6d155149ba229c395e6115f14cc039c86 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Mon, 26 Jul 2021 15:54:54 -0300 Subject: [PATCH 10/62] split files --- src/CellListMap.jl | 308 +-------------------------------------- src/CellOperations.jl | 297 +++++++++++++++++++++++++++++++++++++ src/LargeDenseSystems.jl | 13 ++ 3 files changed, 311 insertions(+), 307 deletions(-) create mode 100644 src/CellOperations.jl diff --git a/src/CellListMap.jl b/src/CellListMap.jl index cd226f65..44273ef7 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -13,229 +13,11 @@ export CellList, UpdateCellList! export map_pairwise! include("./StructTypes.jl") +include("./CellOperations.jl") include("./LargeDenseSystems.jl") """ -``` -cell_center(c::CartesianIndex{N},cutoff::T) where {N,T} -``` - -Computes the geometric center of a cell, to be used in the projection -of points. Returns a `SVector{N,T}` - -""" -cell_center(c::CartesianIndex{N},cutoff::T) where {N,T} = - SVector{N,T}(ntuple(i-> cutoff*c[i]/2, N)) - -# -# Function that checks if the particule is outside the computation bounding box -# -function out_of_bounding_box(x::SVector{N,T},box::Box{N,T,M}) where {N,T,M} - for i in 1:N - (x[i] >= box.unit_cell_max[i] + box.cutoff) && return true - (x[i] < -box.cutoff) && return true - end - return false -end -out_of_bounding_box(p::AtomWithIndex,box::Box{N,T,M}) where {N,T,M} = - out_of_bounding_box(p.coordinates,box) - -""" - -``` -replicate_particle!(ip,p::T,box,cl) where {T <: SVector{2,S} where S} -``` - -Replicates the particle as many times as necessary to fill the computing box. - -""" -function replicate_particle!(ip,p::T,box,cl) where {T <: SVector{2,S} where S} - @unpack ranges = box - for i in ranges[1] - for j in ranges[2] - i == 0 && j == 0 && continue - x = translation_image(p,box.unit_cell,(i,j)) - if ! out_of_bounding_box(x,box) - cl = add_particle_to_celllist!(ip,x,box,cl;real_particle=false) - end - end - end - return cl -end - -""" - -``` -replicate_particle!(ip,p::T,box,cl) where {T <: SVector{3,S} where S} -``` - -Replicates the particle as many times as necessary to fill the computing box. - -""" -function replicate_particle!(ip,p::T,box,cl) where {T <: SVector{3,S} where S} - @unpack ranges = box - for i in ranges[1] - for j in ranges[2] - for k in ranges[3] - i == 0 && j == 0 && k == 0 && continue - x = translation_image(p,box.unit_cell,(i,j,k)) - if ! out_of_bounding_box(x,box) - cl = add_particle_to_celllist!(ip,x,box,cl;real_particle=false) - end - end - end - end - return cl -end - -function ranges_of_replicas(cutoff,nc,unit_cell,unit_cell_max::SVector{3,T}) where T - V = SVector{3,T} - c = cutoff - um = unit_cell_max - cell_vertices = SVector{8,V}( - V( -c, -c, -c ), - V( um[1] + c, -c, -c ), - V( um[1] + c, um[2] + c, -c ), - V( um[1] + c, -c, um[3] + c ), - V( um[1] + c, um[2] + c, um[3] + c ), - V( -c, um[2] + c, -c ), - V( -c, um[2] + c, um[3] + c ), - V( -c, -c, um[3] + c ) - ) - r_min, r_max = _ranges_of_replicas( - nc, - SVector{3,Int}(-1,-1,-1), - unit_cell, - cell_vertices - ) - ranges = SVector{3,UnitRange{Int}}( - r_min[1]:r_max[1], - r_min[2]:r_max[2], - r_min[3]:r_max[3] - ) - return ranges -end - -function ranges_of_replicas(cutoff,nc,unit_cell,unit_cell_max::SVector{2,T}) where T - V = SVector{2,T} - c = cutoff - um = unit_cell_max - cell_vertices = SVector{4,V}( - V( -c, -c ), - V( um[1] + c, -c ), - V( -c, um[2] + c ), - V( um[1] + c, um[2] + c ) - ) - r_min, r_max = _ranges_of_replicas( - nc, - SVector{2,Int}(-1,-1), - unit_cell, - cell_vertices - ) - ranges = SVector{2,UnitRange{Int}}( - r_min[1]:r_max[1], - r_min[2]:r_max[2] - ) - return ranges -end - -function _ranges_of_replicas(r_min,r_max,unit_cell,cell_vertices) - for vert in cell_vertices - r = unit_cell \ vert - ri = @. ceil(Int,abs(r)) - for (i,el) in pairs(r) - if el < 0 - @set! ri[i] = -ri[i] - end - end - r_min = min.(ri,r_min) - r_max = max.(ri,r_max) - end - return r_min, r_max -end - -""" - -``` -wrap_cell_fraction(x,cell) -``` - -`x` is a vector of dimension `N` and `cell` a matrix of dimension `NxN` - -""" -@inline function wrap_cell_fraction(x,cell) - p = rem.(cell\x,1) - for i in eachindex(p) - if p[i] < 0 - @set! p[i] += 1 - end - end - return p -end - -""" - -``` -wrap_to_first(x::SVector{N,T},cell) where {N,T} -``` - -Wraps the coordinates of point `x` such that the returning coordinates are in the -first unit cell with all-positive coordinates. - -""" -@inline function wrap_to_first(x,cell) - p = wrap_cell_fraction(x,cell) - return cell*p -end -""" - -``` -wrap_to_first(x::SVector{N,T},box::Box) -``` - -Wraps the coordinates of point `x` such that the returning coordinates are in the -first unit cell with all-positive coordinates, given the `Box` structure. - -""" -@inline wrap_to_first(x,box::Box) = wrap_to_first(x,box.unit_cell) - -""" - -``` -wrap_relative_to(x::T, xref, cell) where T<:AbstractVector -``` - -Wraps the coordinates of point `x` such that it is the minimum image relative to `xref`. - -""" -function wrap_relative_to(x::T, xref, cell) where T<:AbstractVector - p = SVector{length(x),eltype(x)}(rem.(cell\(x-xref),1)) - for i in eachindex(p) - if p[i] > 0.5 - @set! p[i] -= 1 - elseif p[i] < -0.5 - @set! p[i] += 1 - end - end - return cell*p + xref -end - -""" - -``` -translation_image(x::SVector{N,T},unit_cell,indices) where {N,T} -``` - -Translate vector `x` according to the `unit_cell` lattice vectors and the `indices` -provided. - -""" -translation_image(x::SVector{N,T},unit_cell,indices) where {T,N} = - x + unit_cell*SVector{N,T}(ntuple(i -> indices[i],N)) - -""" - ``` UpdateCellList!( x::AbstractVector{SVector{N,T}},y::AbstractVector{SVector{N,T}}, @@ -277,56 +59,6 @@ end """ -``` -neighbour_cells(box::Box{N,T,M}) where {N,M} -``` - -Function that returns the iterator of the cartesian indices of the cells that must be -evaluated (forward, i. e. to avoid repeated interactions) -if the cells have sides of length `box.cutoff/box.lcell`. `N` can be -`2` or `3`, for two- or three-dimensional systems. - -""" -function neighbour_cells(box::Box{3,T,9}) where T - @unpack lcell = box - nb = Iterators.flatten(( - CartesianIndices((1:lcell,-lcell:lcell,-lcell:lcell)), - CartesianIndices((0:0,1:lcell,-lcell:lcell)), - CartesianIndices((0:0,0:0,1:lcell)) - )) - return nb -end -function neighbour_cells(box::Box{2,T,4}) where T - @unpack lcell = box - nb = Iterators.flatten(( - CartesianIndices((1:lcell,-lcell:lcell)), - CartesianIndices((0:0,1:lcell)) - )) - return nb -end - -""" - -``` -neighbour_cells_all(box::Box{N,T,M}) where {N,M} -``` - -Function that returns the iterator of the cartesian indices of all neighbouring -cells of a cell if the cells have sides of `box.cutoff/box.lcell`. `N` can be -`2` or `3`, for two- or three-dimensional systems. - -""" -function neighbour_cells_all(box::Box{3,T,9}) where T - @unpack lcell = box - return CartesianIndices((-lcell:lcell,-lcell:lcell,-lcell:lcell)) -end -function neighbour_cells_all(box::Box{2,T,4}) where T - @unpack lcell = box - return CartesianIndices((-lcell:lcell,-lcell:lcell)) -end - -""" - ``` norm(v::SVector{N,T}) where {N,T} ``` @@ -392,44 +124,6 @@ Function to compute Euclidean distances between two n-dimensional vectors. """ -``` -particle_cell(x::SVector{N,T}, box::Box) where {N,T} -``` - -Returns the coordinates of the computing cell to which a particle belongs, given its coordinates -and the cutoff/cell. - -""" -@inline particle_cell(x::SVector{N,T}, box::Box) where {N,T} = - CartesianIndex(ntuple(i -> floor(Int,(x[i] .+ box.cutoff)/(box.cutoff/box.lcell) + 1), N)) - -""" - -``` -cell_cartesian_indices(nc::SVector{N,Int}, i1D) where {N} -``` - -Given the linear index of the cell in the cell list, returns the cartesian indices -of the cell (for arbitrary dimension N). - -""" -@inline cell_cartesian_indices(nc::SVector{N,Int}, i1D) where {N} = - CartesianIndices(ntuple(i -> nc[i],N))[i1D] - -""" - -``` -cell_linear_index(nc::SVector{N,Int}, indices) where N -``` - -Returns the index of the cell, in the 1D representation, from its cartesian coordinates. - -""" -@inline cell_linear_index(nc::SVector{N,Int}, indices) where N = - LinearIndices(ntuple(i -> nc[i],N))[ntuple(i->indices[i],N)...] - -""" - ``` map_pairwise!(f::Function,output,box::Box,cl::CellList;parallel::Bool=true,show_progress::Bool=false) ``` diff --git a/src/CellOperations.jl b/src/CellOperations.jl new file mode 100644 index 00000000..ff1d987a --- /dev/null +++ b/src/CellOperations.jl @@ -0,0 +1,297 @@ +# +# Function that checks if the particule is outside the computation bounding box +# +function out_of_bounding_box(x::SVector{N,T},box::Box{N,T,M}) where {N,T,M} + for i in 1:N + (x[i] >= box.unit_cell_max[i] + box.cutoff) && return true + (x[i] < -box.cutoff) && return true + end + return false +end +out_of_bounding_box(p::AtomWithIndex,box::Box{N,T,M}) where {N,T,M} = + out_of_bounding_box(p.coordinates,box) + +""" + +``` +replicate_particle!(ip,p::T,box,cl) where {T <: SVector{2,S} where S} +``` + +Replicates the particle as many times as necessary to fill the computing box. + +""" +function replicate_particle!(ip,p::T,box,cl) where {T <: SVector{2,S} where S} + @unpack ranges = box + for i in ranges[1] + for j in ranges[2] + i == 0 && j == 0 && continue + x = translation_image(p,box.unit_cell,(i,j)) + if ! out_of_bounding_box(x,box) + cl = add_particle_to_celllist!(ip,x,box,cl;real_particle=false) + end + end + end + return cl +end + +""" + +``` +replicate_particle!(ip,p::T,box,cl) where {T <: SVector{3,S} where S} +``` + +Replicates the particle as many times as necessary to fill the computing box. + +""" +function replicate_particle!(ip,p::T,box,cl) where {T <: SVector{3,S} where S} + @unpack ranges = box + for i in ranges[1] + for j in ranges[2] + for k in ranges[3] + i == 0 && j == 0 && k == 0 && continue + x = translation_image(p,box.unit_cell,(i,j,k)) + if ! out_of_bounding_box(x,box) + cl = add_particle_to_celllist!(ip,x,box,cl;real_particle=false) + end + end + end + end + return cl +end + +function ranges_of_replicas(cutoff,nc,unit_cell,unit_cell_max::SVector{3,T}) where T + V = SVector{3,T} + c = cutoff + um = unit_cell_max + cell_vertices = SVector{8,V}( + V( -c, -c, -c ), + V( um[1] + c, -c, -c ), + V( um[1] + c, um[2] + c, -c ), + V( um[1] + c, -c, um[3] + c ), + V( um[1] + c, um[2] + c, um[3] + c ), + V( -c, um[2] + c, -c ), + V( -c, um[2] + c, um[3] + c ), + V( -c, -c, um[3] + c ) + ) + r_min, r_max = _ranges_of_replicas( + nc, + SVector{3,Int}(-1,-1,-1), + unit_cell, + cell_vertices + ) + ranges = SVector{3,UnitRange{Int}}( + r_min[1]:r_max[1], + r_min[2]:r_max[2], + r_min[3]:r_max[3] + ) + return ranges +end + +function ranges_of_replicas(cutoff,nc,unit_cell,unit_cell_max::SVector{2,T}) where T + V = SVector{2,T} + c = cutoff + um = unit_cell_max + cell_vertices = SVector{4,V}( + V( -c, -c ), + V( um[1] + c, -c ), + V( -c, um[2] + c ), + V( um[1] + c, um[2] + c ) + ) + r_min, r_max = _ranges_of_replicas( + nc, + SVector{2,Int}(-1,-1), + unit_cell, + cell_vertices + ) + ranges = SVector{2,UnitRange{Int}}( + r_min[1]:r_max[1], + r_min[2]:r_max[2] + ) + return ranges +end + +function _ranges_of_replicas(r_min,r_max,unit_cell,cell_vertices) + for vert in cell_vertices + r = unit_cell \ vert + ri = @. ceil(Int,abs(r)) + for (i,el) in pairs(r) + if el < 0 + @set! ri[i] = -ri[i] + end + end + r_min = min.(ri,r_min) + r_max = max.(ri,r_max) + end + return r_min, r_max +end + +""" + +``` +wrap_cell_fraction(x,cell) +``` + +`x` is a vector of dimension `N` and `cell` a matrix of dimension `NxN` + +""" +@inline function wrap_cell_fraction(x,cell) + p = rem.(cell\x,1) + for i in eachindex(p) + if p[i] < 0 + @set! p[i] += 1 + end + end + return p +end + +""" + +``` +wrap_to_first(x::SVector{N,T},cell) where {N,T} +``` + +Wraps the coordinates of point `x` such that the returning coordinates are in the +first unit cell with all-positive coordinates. + +""" +@inline function wrap_to_first(x,cell) + p = wrap_cell_fraction(x,cell) + return cell*p +end +""" + +``` +wrap_to_first(x::SVector{N,T},box::Box) +``` + +Wraps the coordinates of point `x` such that the returning coordinates are in the +first unit cell with all-positive coordinates, given the `Box` structure. + +""" +@inline wrap_to_first(x,box::Box) = wrap_to_first(x,box.unit_cell) + +""" + +``` +wrap_relative_to(x::T, xref, cell) where T<:AbstractVector +``` + +Wraps the coordinates of point `x` such that it is the minimum image relative to `xref`. + +""" +function wrap_relative_to(x::T, xref, cell) where T<:AbstractVector + p = SVector{length(x),eltype(x)}(rem.(cell\(x-xref),1)) + for i in eachindex(p) + if p[i] > 0.5 + @set! p[i] -= 1 + elseif p[i] < -0.5 + @set! p[i] += 1 + end + end + return cell*p + xref +end + +""" + +``` +translation_image(x::SVector{N,T},unit_cell,indices) where {N,T} +``` + +Translate vector `x` according to the `unit_cell` lattice vectors and the `indices` +provided. + +""" +translation_image(x::SVector{N,T},unit_cell,indices) where {T,N} = + x + unit_cell*SVector{N,T}(ntuple(i -> indices[i],N)) + +""" + +``` +neighbour_cells(box::Box{N,T,M}) where {N,M} +``` + +Function that returns the iterator of the cartesian indices of the cells that must be +evaluated (forward, i. e. to avoid repeated interactions) +if the cells have sides of length `box.cutoff/box.lcell`. `N` can be +`2` or `3`, for two- or three-dimensional systems. + +""" +function neighbour_cells(box::Box{3,T,9}) where T + @unpack lcell = box + nb = Iterators.flatten(( + CartesianIndices((1:lcell,-lcell:lcell,-lcell:lcell)), + CartesianIndices((0:0,1:lcell,-lcell:lcell)), + CartesianIndices((0:0,0:0,1:lcell)) + )) + return nb +end +function neighbour_cells(box::Box{2,T,4}) where T + @unpack lcell = box + nb = Iterators.flatten(( + CartesianIndices((1:lcell,-lcell:lcell)), + CartesianIndices((0:0,1:lcell)) + )) + return nb +end + +""" + +``` +neighbour_cells_all(box::Box{N,T,M}) where {N,M} +``` + +Function that returns the iterator of the cartesian indices of all neighbouring +cells of a cell if the cells have sides of `box.cutoff/box.lcell`. `N` can be +`2` or `3`, for two- or three-dimensional systems. + +""" +function neighbour_cells_all(box::Box{3,T,9}) where T + @unpack lcell = box + return CartesianIndices((-lcell:lcell,-lcell:lcell,-lcell:lcell)) +end +function neighbour_cells_all(box::Box{2,T,4}) where T + @unpack lcell = box + return CartesianIndices((-lcell:lcell,-lcell:lcell)) +end + +""" + +``` +particle_cell(x::SVector{N,T}, box::Box) where {N,T} +``` + +Returns the coordinates of the computing cell to which a particle belongs, given its coordinates +and the cutoff/cell. + +""" +@inline particle_cell(x::SVector{N,T}, box::Box) where {N,T} = + CartesianIndex(ntuple(i -> floor(Int,(x[i] .+ box.cutoff)/(box.cutoff/box.lcell) + 1), N)) + +""" + +``` +cell_cartesian_indices(nc::SVector{N,Int}, i1D) where {N} +``` + +Given the linear index of the cell in the cell list, returns the cartesian indices +of the cell (for arbitrary dimension N). + +""" +@inline cell_cartesian_indices(nc::SVector{N,Int}, i1D) where {N} = + CartesianIndices(ntuple(i -> nc[i],N))[i1D] + +""" + +``` +cell_linear_index(nc::SVector{N,Int}, indices) where N +``` + +Returns the index of the cell, in the 1D representation, from its cartesian coordinates. + +""" +@inline cell_linear_index(nc::SVector{N,Int}, indices) where N = + LinearIndices(ntuple(i -> nc[i],N))[ntuple(i->indices[i],N)...] + + + + diff --git a/src/LargeDenseSystems.jl b/src/LargeDenseSystems.jl index 2d2bd946..df9aafde 100644 --- a/src/LargeDenseSystems.jl +++ b/src/LargeDenseSystems.jl @@ -1,3 +1,16 @@ +""" + +``` +cell_center(c::CartesianIndex{N},cutoff::T) where {N,T} +``` + +Computes the geometric center of a cell, to be used in the projection +of points. Returns a `SVector{N,T}` + +""" +cell_center(c::CartesianIndex{N},cutoff::T) where {N,T} = + SVector{N,T}(ntuple(i-> cutoff*c[i]/2, N)) + # # Functions to deal with large and dense system, avoiding the maximum number # of unnecessary loop iterations over non-interacting particles From a901b72b60769b0b097a41035e3385b760c0bb62 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Mon, 26 Jul 2021 16:15:51 -0300 Subject: [PATCH 11/62] uses linearalgebra functions --- src/CellListMap.jl | 149 +-------------------------------------- src/LargeDenseSystems.jl | 6 +- src/SystemCommons.jl | 81 +++++++++++++++++++++ src/testing.jl | 4 +- 4 files changed, 89 insertions(+), 151 deletions(-) create mode 100644 src/SystemCommons.jl diff --git a/src/CellListMap.jl b/src/CellListMap.jl index 44273ef7..db2b1926 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -1,5 +1,7 @@ module CellListMap +using StaticArrays +using LinearAlgebra: dot, norm, norm_sqr using Base.Threads using Parameters using StaticArrays @@ -15,112 +17,7 @@ export map_pairwise! include("./StructTypes.jl") include("./CellOperations.jl") include("./LargeDenseSystems.jl") - -""" - -``` -UpdateCellList!( - x::AbstractVector{SVector{N,T}},y::AbstractVector{SVector{N,T}}, - box::Box,cl:CellListPair,parallel=true -) where {N,T} -``` - -Function that will update a previously allocated `CellListPair` structure, given new updated particle positions, for example. - -```julia-repl -julia> box = Box([250,250,250],10); - -julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:1000 ]; - -julia> y = [ 250*rand(SVector{3,Float64}) for i in 1:10000 ]; - -julia> cl = CellList(x,y,box); - -julia> cl = UpdateCellList!(x,y,box,cl); # update lists - -``` - -""" -function UpdateCellList!( - x::AbstractVector{SVector{N,T}}, - y::AbstractVector{SVector{N,T}}, - box::Box,cl_pair::CellListPair; - parallel::Bool=true -) where {N,T} - - if length(x) <= length(y) - UpdateCellList!(y,box,cl_pair.large,parallel=parallel) - else - UpdateCellList!(x,box,cl_pair.large,parallel=parallel) - end - - return cl_pair -end - -""" - -``` -norm(v::SVector{N,T}) where {N,T} -``` - -Computes the norm of a static vector. - -""" -@inline function norm(v::AbstractVector{T}) where T - norm = zero(T) - for x in v - norm += x^2 - end - return sqrt(norm) -end - -""" - -``` -dot(x::SVector{N,T},y::SVector{N,T}) where {N,T} -``` - -Computes the norm of a static vector. - -""" -@inline function dot(x::AbstractVector{T},y::AbstractVector{T}) where T - @assert length(x) == length(y) - dot = zero(T) - for i in eachindex(x) - @inbounds dot += x[i]*y[i] - end - return dot -end - -""" - -``` -distance_sq(x,y) -``` - -Function to compute squared Euclidean distances between two n-dimensional vectors. - -""" -@inline function distance_sq(x::AbstractVector{T}, y::AbstractVector{T}) where T - @assert length(x) == length(y) - d = zero(T) - @inbounds for i in eachindex(x) - d += (x[i]-y[i])^2 - end - return d -end - -""" - -``` -distance(x,y) -``` - -Function to compute Euclidean distances between two n-dimensional vectors. - -""" -@inline distance(x::AbstractVector{T}, y::AbstractVector{T}) where T = - sqrt(distance_sq(x,y)) +include("./SystemCommons.jl") """ @@ -213,46 +110,6 @@ function map_pairwise!(f::F1, output, box::Box, cl::CellListPair; return output end -# Chunck splitter, we jump over cells such that possible -# heterogeneities have greater changes of getting split into different chuncks -splitter(it,n) = it:nthreads():n - -""" - -``` -partition!(x::AbstractVector,by) -``` - -Function that reorders `x` vector by putting in the first positions the -elements with values satisfying `by(el)`. Returns the number of elements -that satisfy the condition. - -""" -function partition!(x::AbstractVector,by) where T - iswap = 1 - @inbounds for i in eachindex(x) - if by(x[i]) - if iswap != i - x[iswap], x[i] = x[i], x[iswap] - end - iswap += 1 - end - end - return iswap - 1 -end - -# -# Functions to reduce the output of common options (vectors of numbers -# and vectors of vectors) -# -reduce(output::Number, output_threaded::Vector{<:Number}) = sum(output_threaded) -function reduce(output::AbstractVector, output_threaded::AbstractVector{<:AbstractVector}) - for i in 1:nthreads() - @. output += output_threaded[i] - end - return output -end - # # Test and example functions # diff --git a/src/LargeDenseSystems.jl b/src/LargeDenseSystems.jl index df9aafde..17c927b1 100644 --- a/src/LargeDenseSystems.jl +++ b/src/LargeDenseSystems.jl @@ -195,7 +195,7 @@ function inner_loop!( j = pⱼ.index while j > 0 xpⱼ = pⱼ.coordinates - d2 = distance_sq(xpᵢ,xpⱼ) + d2 = norm_sqr(xpᵢ - xpⱼ) if d2 <= cutoff_sq i_orig = pᵢ.index_original j_orig = pⱼ.index_original @@ -260,7 +260,7 @@ function cell_output!( j = 1 while j <= npcell && xproj - pp[j].xproj <= cutoff xpⱼ = pp[j].coordinates - d2 = distance_sq(xpᵢ,xpⱼ) + d2 = norm_sqr(xpᵢ - xpⱼ) if d2 <= cutoff_sq i_orig = pᵢ.index_original j_orig = pp[j].index_original @@ -329,7 +329,7 @@ function inner_loop!( # loop over particles of cell jc while j > 0 xpⱼ = pⱼ.coordinates - d2 = distance_sq(xpᵢ,xpⱼ) + d2 = norm_sqr(xpᵢ - xpⱼ) if d2 <= cutoff_sq j_orig = pⱼ.index_original output = f(xpᵢ,xpⱼ,i,j_orig,d2,output) diff --git a/src/SystemCommons.jl b/src/SystemCommons.jl new file mode 100644 index 00000000..5ba969ca --- /dev/null +++ b/src/SystemCommons.jl @@ -0,0 +1,81 @@ + +""" + +``` +UpdateCellList!( + x::AbstractVector{SVector{N,T}},y::AbstractVector{SVector{N,T}}, + box::Box,cl:CellListPair,parallel=true +) where {N,T} +``` + +Function that will update a previously allocated `CellListPair` structure, given new updated particle positions, for example. + +```julia-repl +julia> box = Box([250,250,250],10); + +julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:1000 ]; + +julia> y = [ 250*rand(SVector{3,Float64}) for i in 1:10000 ]; + +julia> cl = CellList(x,y,box); + +julia> cl = UpdateCellList!(x,y,box,cl); # update lists + +``` + +""" +function UpdateCellList!( + x::AbstractVector{SVector{N,T}}, + y::AbstractVector{SVector{N,T}}, + box::Box,cl_pair::CellListPair; + parallel::Bool=true +) where {N,T} + + if length(x) <= length(y) + UpdateCellList!(y,box,cl_pair.large,parallel=parallel) + else + UpdateCellList!(x,box,cl_pair.large,parallel=parallel) + end + + return cl_pair +end + +""" + +``` +partition!(x::AbstractVector,by) +``` + +Function that reorders `x` vector by putting in the first positions the +elements with values satisfying `by(el)`. Returns the number of elements +that satisfy the condition. + +""" +function partition!(x::AbstractVector,by) where T + iswap = 1 + @inbounds for i in eachindex(x) + if by(x[i]) + if iswap != i + x[iswap], x[i] = x[i], x[iswap] + end + iswap += 1 + end + end + return iswap - 1 +end + +# Chunck splitter, we jump over cells such that possible +# heterogeneities have greater changes of getting split into different chuncks +splitter(it,n) = it:nthreads():n + +# +# Functions to reduce the output of common options (vectors of numbers +# and vectors of vectors) +# +reduce(output::Number, output_threaded::Vector{<:Number}) = sum(output_threaded) +function reduce(output::AbstractVector, output_threaded::AbstractVector{<:AbstractVector}) + for i in 1:nthreads() + @. output += output_threaded[i] + end + return output +end diff --git a/src/testing.jl b/src/testing.jl index 151aa30d..29363f71 100644 --- a/src/testing.jl +++ b/src/testing.jl @@ -7,7 +7,7 @@ function map_naive!(f,output,x,box) xᵢ = x[i] for j in i+1:length(x) xⱼ = wrap_relative_to(x[j],xᵢ,unit_cell) - d2 = distance_sq(xᵢ,xⱼ) + d2 = norm_sqr(xᵢ - xⱼ) if d2 <= cutoff_sq output = f(xᵢ,xⱼ,i,j,d2,output) end @@ -25,7 +25,7 @@ function map_naive_two!(f,output,x,y,box) xᵢ = x[i] for j in 1:length(y) yⱼ = wrap_relative_to(y[j],xᵢ,unit_cell) - d2 = distance_sq(xᵢ,yⱼ) + d2 = norm_sqr(xᵢ - yⱼ) if d2 <= cutoff_sq output = f(xᵢ,yⱼ,i,j,d2,output) end From f66f374bbf5f03ba3c0d928b4573425d1cbc9d46 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Mon, 26 Jul 2021 16:17:58 -0300 Subject: [PATCH 12/62] remove repeated using --- src/CellListMap.jl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/CellListMap.jl b/src/CellListMap.jl index db2b1926..354d2ab9 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -1,6 +1,5 @@ module CellListMap -using StaticArrays using LinearAlgebra: dot, norm, norm_sqr using Base.Threads using Parameters From b816c8fb525fc3cce60079305798697c510e1608 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 27 Jul 2021 11:32:52 -0300 Subject: [PATCH 13/62] up --- src/CellListMap.jl | 19 ++- src/CellOperations.jl | 54 +++---- src/LargeDenseSystems.jl | 27 ++-- src/StructTypes.jl | 58 +++++-- src/SystemCommons.jl | 15 ++ src/TinySystems.jl | 329 +++++++++++++++++++++++++++++++++++++++ src/examples.jl | 2 +- src/testing.jl | 17 +- 8 files changed, 448 insertions(+), 73 deletions(-) create mode 100644 src/TinySystems.jl diff --git a/src/CellListMap.jl b/src/CellListMap.jl index 354d2ab9..7022a6e0 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -24,16 +24,25 @@ include("./SystemCommons.jl") map_pairwise!(f::Function,output,box::Box,cl::CellList;parallel::Bool=true,show_progress::Bool=false) ``` -This function will run over every pair of particles which are closer than `box.cutoff` and compute -the Euclidean distance between the particles, considering the periodic boundary conditions given -in the `Box` structure. If the distance is smaller than the cutoff, a function `f` of the coordinates -of the two particles will be computed. +This function will run over every pair of particles which are closer than +`box.cutoff` and compute the Euclidean distance between the particles, +considering the periodic boundary conditions given in the `Box` structure. +If the distance is smaller than the cutoff, a function `f` of the +coordinates of the two particles will be computed. The function `f` receives six arguments as input: ``` f(x,y,i,j,d2,output) ``` -Which are the coordinates of one particle, the coordinates of the second particle, the index of the first particle, the index of the second particle, the squared distance between them, and the `output` variable. It has also to return the same `output` variable. Thus, `f` may or not mutate `output`, but in either case it must return it. With that, it is possible to compute an average property of the distance of the particles or, for example, build a histogram. The squared distance `d2` is computed internally for comparison with the `cutoff`, and is passed to the `f` because many times it is used for the desired computation. +Which are the coordinates of one particle, the coordinates of the +second particle, the index of the first particle, the index of the second +particle, the squared distance between them, and the `output` variable. +It has also to return the same `output` variable. Thus, `f` may or not +mutate `output`, but in either case it must return it. With that, it is +possible to compute an average property of the distance of the particles +or, for example, build a histogram. The squared distance `d2` is computed internally for comparison with the +`cutoff`, and is passed to the `f` because many times it is used for the +desired computation. ## Example diff --git a/src/CellOperations.jl b/src/CellOperations.jl index ff1d987a..366de30e 100644 --- a/src/CellOperations.jl +++ b/src/CellOperations.jl @@ -2,9 +2,10 @@ # Function that checks if the particule is outside the computation bounding box # function out_of_bounding_box(x::SVector{N,T},box::Box{N,T,M}) where {N,T,M} + @unpack cell_size, nc, lcell = box for i in 1:N - (x[i] >= box.unit_cell_max[i] + box.cutoff) && return true - (x[i] < -box.cutoff) && return true + (x[i] < -cell_size*lcell) && return true + (x[i] >= (nc[i]-lcell)*cell_size) && return true end return false end @@ -34,6 +35,7 @@ function replicate_particle!(ip,p::T,box,cl) where {T <: SVector{2,S} where S} return cl end + """ ``` @@ -59,23 +61,23 @@ function replicate_particle!(ip,p::T,box,cl) where {T <: SVector{3,S} where S} return cl end -function ranges_of_replicas(cutoff,nc,unit_cell,unit_cell_max::SVector{3,T}) where T +function ranges_of_replicas(cell_size, lcell, nc, unit_cell::SMatrix{3,3,T,9}) where T V = SVector{3,T} - c = cutoff - um = unit_cell_max + cmin = ntuple(i->-lcell*cell_size,3) + cmax = ntuple(i->(nc[i]-lcell)*cell_size,3) cell_vertices = SVector{8,V}( - V( -c, -c, -c ), - V( um[1] + c, -c, -c ), - V( um[1] + c, um[2] + c, -c ), - V( um[1] + c, -c, um[3] + c ), - V( um[1] + c, um[2] + c, um[3] + c ), - V( -c, um[2] + c, -c ), - V( -c, um[2] + c, um[3] + c ), - V( -c, -c, um[3] + c ) + V( cmin[1], cmin[2], cmin[3] ), + V( cmin[1], cmin[2], cmax[3] ), + V( cmin[1], cmax[2], cmin[3] ), + V( cmin[1], cmax[2], cmax[3] ), + V( cmax[1], cmin[2], cmin[3] ), + V( cmax[1], cmin[2], cmax[3] ), + V( cmax[1], cmax[2], cmin[3] ), + V( cmax[1], cmax[2], cmax[3] ) ) r_min, r_max = _ranges_of_replicas( nc, - SVector{3,Int}(-1,-1,-1), + SVector{3,Int}(-lcell,-lcell,-lcell), unit_cell, cell_vertices ) @@ -87,19 +89,19 @@ function ranges_of_replicas(cutoff,nc,unit_cell,unit_cell_max::SVector{3,T}) whe return ranges end -function ranges_of_replicas(cutoff,nc,unit_cell,unit_cell_max::SVector{2,T}) where T +function ranges_of_replicas(lcell,cell_size,nc,unit_cell::SMatrix{2,2,T,4}) where T V = SVector{2,T} - c = cutoff - um = unit_cell_max + cmin = ntuple(i->-lcell*cell_size,2) + cmax = ntuple(i->(nc[i]-lcell)*cell_size,2) cell_vertices = SVector{4,V}( - V( -c, -c ), - V( um[1] + c, -c ), - V( -c, um[2] + c ), - V( um[1] + c, um[2] + c ) + V( cmin[1], cmin[2] ), + V( cmin[1], cmax[2] ), + V( cmax[1], cmin[2] ), + V( cmax[1], cmax[2] ), ) r_min, r_max = _ranges_of_replicas( nc, - SVector{2,Int}(-1,-1), + SVector{2,Int}(-lcell,-lcell), unit_cell, cell_vertices ) @@ -212,7 +214,7 @@ neighbour_cells(box::Box{N,T,M}) where {N,M} Function that returns the iterator of the cartesian indices of the cells that must be evaluated (forward, i. e. to avoid repeated interactions) -if the cells have sides of length `box.cutoff/box.lcell`. `N` can be +if the cells have sides of length `box.cell_size`. `N` can be `2` or `3`, for two- or three-dimensional systems. """ @@ -241,7 +243,7 @@ neighbour_cells_all(box::Box{N,T,M}) where {N,M} ``` Function that returns the iterator of the cartesian indices of all neighbouring -cells of a cell if the cells have sides of `box.cutoff/box.lcell`. `N` can be +cells of a cell if the cells have sides of `box.cell_size`. `N` can be `2` or `3`, for two- or three-dimensional systems. """ @@ -261,11 +263,11 @@ particle_cell(x::SVector{N,T}, box::Box) where {N,T} ``` Returns the coordinates of the computing cell to which a particle belongs, given its coordinates -and the cutoff/cell. +and the cell_size. """ @inline particle_cell(x::SVector{N,T}, box::Box) where {N,T} = - CartesianIndex(ntuple(i -> floor(Int,(x[i] .+ box.cutoff)/(box.cutoff/box.lcell) + 1), N)) + CartesianIndex(ntuple(i -> floor(Int,(x[i] .+ box.cell_size*box.lcell)/box.cell_size + 1), N)) """ diff --git a/src/LargeDenseSystems.jl b/src/LargeDenseSystems.jl index 17c927b1..5a02d702 100644 --- a/src/LargeDenseSystems.jl +++ b/src/LargeDenseSystems.jl @@ -1,16 +1,3 @@ -""" - -``` -cell_center(c::CartesianIndex{N},cutoff::T) where {N,T} -``` - -Computes the geometric center of a cell, to be used in the projection -of points. Returns a `SVector{N,T}` - -""" -cell_center(c::CartesianIndex{N},cutoff::T) where {N,T} = - SVector{N,T}(ntuple(i-> cutoff*c[i]/2, N)) - # # Functions to deal with large and dense system, avoiding the maximum number # of unnecessary loop iterations over non-interacting particles @@ -116,7 +103,7 @@ function add_particle_to_celllist!( cl::CellList{LargeDenseSystem,N,T}; real_particle::Bool=true ) where {N,T} - @unpack cutoff = box + @unpack cell_size = box @unpack ncp, ncwp, cwp, fp, np, npcell = cl ncp[1] += 1 icell_cartesian = particle_cell(x,box) @@ -126,7 +113,11 @@ function add_particle_to_celllist!( npcell[icell] = 1 if real_particle ncwp[1] += 1 - cwp[ncwp[1]] = Cell{N,T}(icell,icell_cartesian,cell_center(icell_cartesian,cutoff)) + cwp[ncwp[1]] = Cell{N,T}( + icell, + icell_cartesian, + cell_center(icell_cartesian,cell_size) + ) end else npcell[icell] += 1 @@ -227,11 +218,11 @@ function cell_output!( jc_cartesian ) where {N,T} @unpack projected_particles = cl - @unpack nc, cutoff, cutoff_sq = box + @unpack nc, cell_size, cutoff, cutoff_sq = box jc = cell_linear_index(nc,jc_cartesian) # Vector connecting cell centers - Δc = cell_center(jc_cartesian,cutoff) - icell.center + Δc = cell_center(jc_cartesian,cell_size) - icell.center # Copy coordinates of particles of icell jcell into continuous array, # and project them into the vector connecting cell centers @@ -241,7 +232,7 @@ function cell_output!( for jp in 1:npcell j_orig = pⱼ.index_original xpⱼ = pⱼ.coordinates - xproj = dot(xpⱼ - icell.center,Δc) + xproj = dot(xpⱼ-icell.center,Δc) projected_particles[jp] = ProjectedParticle(j_orig,xproj,xpⱼ) pⱼ = cl.np[j] j = pⱼ.index diff --git a/src/StructTypes.jl b/src/StructTypes.jl index c6542706..5e4f0d7d 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -36,12 +36,13 @@ Box{3, Float64} """ Base.@kwdef struct Box{N,T,M} unit_cell::SMatrix{N,N,T,M} - unit_cell_max::SVector{N,T} lcell::Int nc::SVector{N,Int} cutoff::T cutoff_sq::T ranges::SVector{N,UnitRange{Int}} + scale_cutoff::T + cell_size::T end """ @@ -68,32 +69,50 @@ Box{3, Float64} ``` """ -function Box(unit_cell::AbstractMatrix, cutoff, T::DataType, lcell::Int=1) +function Box( + unit_cell::AbstractMatrix, + cutoff, + T::DataType, + lcell::Int=1, + scale_cutoff=1.0 +) + + @assert lcell >= 1 "lcell must be greater or equal to 1" + @assert scale_cutoff >= 1 "scale_cutoff must be greater or equal to 1.0" + N = size(unit_cell)[1] @assert N == size(unit_cell)[2] "Unit cell matrix must be square." @assert count(unit_cell .< 0) == 0 "Unit cell lattice vectors must only contain non-negative coordinates." - unit_cell_max = SVector{N,T}(sum(@view(unit_cell[:,i]) for i in 1:N)) + unit_cell = SMatrix{N,N,T}(unit_cell) + cell_size = scale_cutoff*cutoff/lcell + unit_cell_max = sum(@view(unit_cell[:,i]) for i in 1:N) nc = SVector{N,Int}( - ceil.(Int,max.(1,(unit_cell_max .+ 2*cutoff)/(cutoff/lcell))) + ceil.(Int,max.(1,(unit_cell_max .+ 2*(lcell*cell_size))/cell_size)) ) - ranges = ranges_of_replicas(cutoff,nc,unit_cell,unit_cell_max) + + ranges = ranges_of_replicas(cell_size, lcell, nc, unit_cell) return Box{N,T,N*N}( unit_cell, - unit_cell_max, lcell, nc, cutoff, cutoff^2, - ranges + ranges, + scale_cutoff, + cell_size ) end -Box(unit_cell::AbstractMatrix,cutoff;T::DataType=Float64,lcell::Int=1) = - Box(unit_cell,cutoff,T,lcell) +Box( + unit_cell::AbstractMatrix, + cutoff; + T::DataType=Float64, + lcell::Int=1, + scale_cutoff=1.0 +) = Box(unit_cell,cutoff,T,lcell,scale_cutoff) function Base.show(io::IO,::MIME"text/plain",box::Box) println(typeof(box)) println(" unit cell: ", box.unit_cell) - println(" unit cell maximum: ", box.unit_cell_max) println(" cutoff: ", box.cutoff) println(" number of cells on each dimension: ",box.nc, " (lcell: ",box.lcell,")") print(" Total number of cells: ", prod(box.nc)) @@ -119,7 +138,13 @@ Box{3, Float64} ``` """ -function Box(sides::AbstractVector, cutoff, T::DataType, lcell::Int=1) +function Box( + sides::AbstractVector, + cutoff, + T::DataType, + lcell::Int=1, + scale_cutoff=1.0 +) N = length(sides) cart_idxs = CartesianIndices((1:N,1:N)) # Build unit cell matrix from lengths @@ -133,10 +158,15 @@ function Box(sides::AbstractVector, cutoff, T::DataType, lcell::Int=1) end end ) - return Box(unit_cell,cutoff,T,lcell) + return Box(unit_cell,cutoff,T,lcell,scale_cutoff) end -Box(sides::AbstractVector,cutoff;T::DataType=Float64,lcell::Int=1) = - Box(sides,cutoff,T,lcell) +Box( + sides::AbstractVector, + cutoff; + T::DataType=Float64, + lcell::Int=1, + scale_cutoff=1.0 +) = Box(sides,cutoff,T,lcell,scale_cutoff) """ diff --git a/src/SystemCommons.jl b/src/SystemCommons.jl index 5ba969ca..2ec69bbc 100644 --- a/src/SystemCommons.jl +++ b/src/SystemCommons.jl @@ -79,3 +79,18 @@ function reduce(output::AbstractVector, output_threaded::AbstractVector{<:Abstra end return output end + +""" + +``` +cell_center(c::CartesianIndex{N},cell_size::T) where {N,T} +``` + +Computes the geometric center of a computin cell, to be used in the projection +of points. Returns a `SVector{N,T}` + +""" +cell_center(c::CartesianIndex{N},cell_size::T) where {N,T} = + SVector{N,T}(ntuple(i-> cell_size*c[i]/2, N)) + + diff --git a/src/TinySystems.jl b/src/TinySystems.jl new file mode 100644 index 00000000..84a8da4f --- /dev/null +++ b/src/TinySystems.jl @@ -0,0 +1,329 @@ +# +# Functions to deal with large and dense system, avoiding the maximum number +# of unnecessary loop iterations over non-interacting particles +# + +""" + +``` +UpdateCellList!( + x::AbstractVector{SVector{N,T}}, + box::Box,cl:CellList{LargeDenseSystem,N,T}, + parallel=true +) where {N,T} +``` + +Function that will update a previously allocated `CellList` structure, given new updated particle +positions of large and dense systems. + +## Example + +```julia-repl +julia> box = Box([250,250,250],10); + +julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:1000 ]; + +julia> cl = CellList(x,box); + +julia> box = Box([260,260,260],10); + +julia> x = [ 260*rand(SVector{3,Float64}) for i in 1:1000 ]; + +julia> cl = UpdateCellList!(x,box,cl); # update lists + +``` + +""" +function UpdateCellList!( + x::AbstractVector{SVector{N,T}}, + box::Box, + cl::CellList{LargeDenseSystem,N,T}; + parallel::Bool=true +) where {N,T} + @unpack cwp, fp, np, npcell = cl + + number_of_cells = prod(box.nc) + if number_of_cells > length(cwp) + number_of_cells = ceil(Int,1.1*number_of_cells) # some margin in case of box size variations + resize!(cwp,number_of_cells) + resize!(fp,number_of_cells) + resize!(npcell,number_of_cells) + end + + cl.ncwp[1] = 0 + if parallel + @threads for i in eachindex(cwp) + cwp[i] = zero(Cell{N,T}) + fp[i] = zero(AtomWithIndex{N,T}) + npcell[i] = 0 + end + @threads for i in eachindex(np) + np[i] = zero(AtomWithIndex{N,T}) + end + else + fill!(cwp,zero(Cell{N,T})) + fill!(fp,zero(AtomWithIndex{N,T})) + fill!(np,zero(AtomWithIndex{N,T})) + fill!(npcell,0) + end + + # + # The following part cannot be *easily* paralelized, because + # there is concurrency on the construction of the cell lists + # + + # + # Add virtual particles to edge cells + # + for (ip,particle) in pairs(x) + p = wrap_to_first(particle,box.unit_cell) + cl = replicate_particle!(ip,p,box,cl) + end + # + # Add true particles, such that the first particle of each cell is + # always a true particle + # + for (ip,particle) in pairs(x) + p = wrap_to_first(particle,box.unit_cell) + cl = add_particle_to_celllist!(ip,p,box,cl) + end + + return cl +end + +""" + +Set one index of a cell list + +""" +function add_particle_to_celllist!( + ip, + x::SVector{N,T}, + box, + cl::CellList{LargeDenseSystem,N,T}; + real_particle::Bool=true +) where {N,T} + @unpack cell_size = box + @unpack ncp, ncwp, cwp, fp, np, npcell = cl + ncp[1] += 1 + icell_cartesian = particle_cell(x,box) + icell = cell_linear_index(box.nc,icell_cartesian) + # Cells starting with real particles are annotated to be run over + if fp[icell].index == 0 + npcell[icell] = 1 + if real_particle + ncwp[1] += 1 + cwp[ncwp[1]] = Cell{N,T}(icell,icell_cartesian,cell_center(icell_cartesian,cell_size)) + end + else + npcell[icell] += 1 + end + if ncp[1] > length(np) + old_length = length(np) + resize!(np,ceil(Int,1.2*old_length)) + for i in old_length+1:length(np) + np[i] = zero(AtomWithIndex{N,T}) + end + end + np[ncp[1]] = fp[icell] + fp[icell] = AtomWithIndex(ncp[1],ip,x) + return cl +end + +# +# Serial version for self-pairwise computations +# +function map_pairwise_serial!( + f::F, output, box::Box, cl::CellList{LargeDenseSystem,N,T}; + show_progress::Bool=false +) where {F,N,T} + show_progress && (p = Progress(cl.ncwp[1],dt=1)) + for icell in 1:cl.ncwp[1] + output = inner_loop!(f,box,icell,cl,output) + show_progress && next!(p) + end + return output +end + +# +# Parallel version for self-pairwise computations +# +function map_pairwise_parallel!( + f::F1, output, box::Box, cl::CellList{LargeDenseSystem,N,T}; + output_threaded=output_threaded, + reduce::F2=reduce, + show_progress::Bool=false +) where {F1,F2,N,T} + show_progress && (p = Progress(cl.ncwp[1],dt=1)) + @threads for it in 1:nthreads() + for icell in splitter(it,cl.ncwp[1]) + output_threaded[it] = inner_loop!(f,box,icell,cl,output_threaded[it]) + show_progress && next!(p) + end + end + output = reduce(output,output_threaded) + return output +end + +function inner_loop!( + f,box,icell, + cl::CellList{LargeDenseSystem,N,T}, + output +) where {N,T} + @unpack cutoff_sq = box + cell = cl.cwp[icell] + + # loop over list of non-repeated particles of cell ic + pᵢ = cl.fp[cell.icell] + i = pᵢ.index + while i > 0 + xpᵢ = pᵢ.coordinates + pⱼ = cl.np[i] + j = pⱼ.index + while j > 0 + xpⱼ = pⱼ.coordinates + d2 = norm_sqr(xpᵢ - xpⱼ) + if d2 <= cutoff_sq + i_orig = pᵢ.index_original + j_orig = pⱼ.index_original + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + end + pⱼ = cl.np[pⱼ.index] + j = pⱼ.index + end + pᵢ = cl.np[pᵢ.index] + i = pᵢ.index + end + + for jcell in neighbour_cells(box) + output = cell_output!(f,box,cell,cl,output,cell.cartesian+jcell) + end + + return output +end + +# +# loops over the particles of a neighbour cell +# +function cell_output!( + f, + box, + icell, + cl::CellList{LargeDenseSystem,N,T}, + output, + jc_cartesian +) where {N,T} + @unpack projected_particles = cl + @unpack nc, cutoff, cutoff_sq, cell_size = box + jc = cell_linear_index(nc,jc_cartesian) + + # Vector connecting cell centers + Δc = cell_center(jc_cartesian,cell_size) - icell.center + + # Copy coordinates of particles of icell jcell into continuous array, + # and project them into the vector connecting cell centers + pⱼ = cl.fp[jc] + npcell = cl.npcell[jc] + j = pⱼ.index + for jp in 1:npcell + j_orig = pⱼ.index_original + xpⱼ = pⱼ.coordinates + xproj = dot(xpⱼ - icell.center,Δc) + projected_particles[jp] = ProjectedParticle(j_orig,xproj,xpⱼ) + pⱼ = cl.np[j] + j = pⱼ.index + end + pp = @view(projected_particles[1:npcell]) + + # Sort particles according to projection norm + sort!(pp, by=el->el.xproj,alg=InsertionSort) + + # Loop over particles of cell icell + pᵢ = cl.fp[icell.icell] + i = pᵢ.index + while i > 0 + xpᵢ = pᵢ.coordinates + xproj = dot(xpᵢ-icell.center,Δc) + j = 1 + while j <= npcell && xproj - pp[j].xproj <= cutoff + xpⱼ = pp[j].coordinates + d2 = norm_sqr(xpᵢ - xpⱼ) + if d2 <= cutoff_sq + i_orig = pᵢ.index_original + j_orig = pp[j].index_original + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + end + j += 1 + end + pᵢ = cl.np[i] + i = pᵢ.index + end + + return output +end + +# +# Serial version for cross-interaction computations +# +function map_pairwise_serial!( + f::F, output, box::Box, + cl::CellListPair{LargeDenseSystem,N,T}; + show_progress=show_progress +) where {F,N,T} + show_progress && (p = Progress(length(cl.small),dt=1)) + for i in eachindex(cl.small) + output = inner_loop!(f,output,i,box,cl) + show_progress && next!(p) + end + return output +end + +# +# Parallel version for cross-interaction computations +# +function map_pairwise_parallel!( + f::F1, output, box::Box, + cl::CellListPair{LargeDenseSystem,N,T}; + output_threaded=output_threaded, + reduce::F2=reduce, + show_progress=show_progress +) where {F1,F2,N,T} + show_progress && (p = Progress(length(cl.small),dt=1)) + @threads for it in 1:nthreads() + for i in splitter(it,length(cl.small)) + output_threaded[it] = inner_loop!(f,output_threaded[it],i,box,cl) + show_progress && next!(p) + end + end + output = reduce(output,output_threaded) + return output +end + +# +# Inner loop of cross-interaction computations +# +function inner_loop!( + f,output,i,box, + cl::CellListPair{LargeDenseSystem,N,T} +) where {N,T} + @unpack unit_cell, nc, cutoff_sq = box + xpᵢ = wrap_to_first(cl.small[i],unit_cell) + ic = particle_cell(xpᵢ,box) + for neighbour_cell in neighbour_cells_all(box) + jc = cell_linear_index(nc,neighbour_cell+ic) + pⱼ = cl.large.fp[jc] + j = pⱼ.index + # loop over particles of cell jc + while j > 0 + xpⱼ = pⱼ.coordinates + d2 = norm_sqr(xpᵢ - xpⱼ) + if d2 <= cutoff_sq + j_orig = pⱼ.index_original + output = f(xpᵢ,xpⱼ,i,j_orig,d2,output) + end + pⱼ = cl.large.np[j] + j = pⱼ.index + end + end + return output +end diff --git a/src/examples.jl b/src/examples.jl index 99422b37..c28d35cf 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -377,7 +377,7 @@ function florpi(;N=100_000,cd=true,parallel=true) positions = reshape(reinterpret(SVector{3,Float64},positions),n) velocities = reshape(reinterpret(SVector{3,Float64},velocities),n) - box = Box(Lbox, r_max, lcell=1) + box = Box(Lbox, r_max, lcell=1, scale_cutoff=1.2) cl = CellList(positions,box,parallel=parallel) hist = (zeros(Int,length(rbins)-1), zeros(Float64,length(rbins)-1)) diff --git a/src/testing.jl b/src/testing.jl index 29363f71..61d3a25d 100644 --- a/src/testing.jl +++ b/src/testing.jl @@ -47,23 +47,22 @@ for computing purposes. ```julia julia> box = Box([ 100 50; 50 100 ],10); -julia> p = [ box.unit_cell_max .* rand(SVector{2,Float64}) for i in 1:1000 ]; +julia> x = [ box.unit_cell_max .* rand(SVector{2,Float64}) for i in 1:1000 ]; -julia> cl = CellList(p,box); +julia> cl = CellList(x,box); -julia> x, y = CellListMap.view_celllist_particles(cl); +julia> p = CellListMap.view_celllist_particles(cl); julia> using Plots -julia> scatter(x,y,label=nothing,xlims=(-10,180),ylims=(-10,180)) +julia> scatter(Tuple.(p),label=nothing,xlims=(-10,180),ylims=(-10,180)) ``` """ -function view_celllist_particles(cl::CellList{N,T},box::Box) where {N,T} - @unpack nc = box - @unpack cwp, ncp, fp, np = cl - x = Vector{SVector{N,T}}(undef,ncp) +function view_celllist_particles(cl::CellList{SystemType,N,T}) where {SystemType,N,T} + @unpack ncp, np = cl + x = Vector{SVector{N,T}}(undef,ncp[1]) ip = 0 for p in cl.fp p.index == 0 && continue @@ -75,6 +74,6 @@ function view_celllist_particles(cl::CellList{N,T},box::Box) where {N,T} p = np[p.index] end end - return [SVector{N,T}(ntuple(j -> x[i][j],N)) for i in 1:ncp] + return [SVector{N,T}(ntuple(j -> x[i][j],N)) for i in 1:ncp[1]] end From d8f16e8a5e54b7dc289a28a1e3e954df9072a5b9 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 27 Jul 2021 14:29:13 -0300 Subject: [PATCH 14/62] fixed view particles --- src/testing.jl | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/testing.jl b/src/testing.jl index 61d3a25d..932f4916 100644 --- a/src/testing.jl +++ b/src/testing.jl @@ -65,10 +65,7 @@ function view_celllist_particles(cl::CellList{SystemType,N,T}) where {SystemType x = Vector{SVector{N,T}}(undef,ncp[1]) ip = 0 for p in cl.fp - p.index == 0 && continue - ip += 1 - x[ip] = p.coordinates - while np[p.index].index > 0 + while p.index > 0 ip += 1 x[ip] = p.coordinates p = np[p.index] From 895272599fa6a1def9b9ed1884f29b202a17011b Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 27 Jul 2021 16:41:06 -0300 Subject: [PATCH 15/62] up --- src/CellOperations.jl | 9 +++++---- src/LargeDenseSystems.jl | 31 ++++++++++++++++++------------- src/StructTypes.jl | 22 ++++++++++++++++------ src/SystemCommons.jl | 6 +++--- src/TinySystems.jl | 5 ++--- src/examples.jl | 15 +++++++-------- 6 files changed, 51 insertions(+), 37 deletions(-) diff --git a/src/CellOperations.jl b/src/CellOperations.jl index 366de30e..6eda4574 100644 --- a/src/CellOperations.jl +++ b/src/CellOperations.jl @@ -2,10 +2,11 @@ # Function that checks if the particule is outside the computation bounding box # function out_of_bounding_box(x::SVector{N,T},box::Box{N,T,M}) where {N,T,M} - @unpack cell_size, nc, lcell = box + @unpack cutoff, unit_cell = box + unit_cell_max = sum(@view(unit_cell[:,i]) for i in 1:N) for i in 1:N - (x[i] < -cell_size*lcell) && return true - (x[i] >= (nc[i]-lcell)*cell_size) && return true + (x[i] < -cutoff) && return true + (x[i] >= unit_cell_max[i]+cutoff) && return true end return false end @@ -267,7 +268,7 @@ and the cell_size. """ @inline particle_cell(x::SVector{N,T}, box::Box) where {N,T} = - CartesianIndex(ntuple(i -> floor(Int,(x[i] .+ box.cell_size*box.lcell)/box.cell_size + 1), N)) + CartesianIndex(ntuple(i -> ceil(Int,x[i]/box.cell_size) + box.lcell, N)) """ diff --git a/src/LargeDenseSystems.jl b/src/LargeDenseSystems.jl index 5a02d702..f11cbf57 100644 --- a/src/LargeDenseSystems.jl +++ b/src/LargeDenseSystems.jl @@ -40,11 +40,12 @@ function UpdateCellList!( cl::CellList{LargeDenseSystem,N,T}; parallel::Bool=true ) where {N,T} - @unpack cwp, fp, np, npcell = cl + @unpack contains_real, cwp, fp, np, npcell = cl number_of_cells = prod(box.nc) if number_of_cells > length(cwp) number_of_cells = ceil(Int,1.1*number_of_cells) # some margin in case of box size variations + resize!(contains_real,number_of_cells) resize!(cwp,number_of_cells) resize!(fp,number_of_cells) resize!(npcell,number_of_cells) @@ -53,6 +54,7 @@ function UpdateCellList!( cl.ncwp[1] = 0 if parallel @threads for i in eachindex(cwp) + contains_real[i] = false cwp[i] = zero(Cell{N,T}) fp[i] = zero(AtomWithIndex{N,T}) npcell[i] = 0 @@ -61,6 +63,7 @@ function UpdateCellList!( np[i] = zero(AtomWithIndex{N,T}) end else + fill!(contains_real,false) fill!(cwp,zero(Cell{N,T})) fill!(fp,zero(AtomWithIndex{N,T})) fill!(np,zero(AtomWithIndex{N,T})) @@ -103,22 +106,24 @@ function add_particle_to_celllist!( cl::CellList{LargeDenseSystem,N,T}; real_particle::Bool=true ) where {N,T} - @unpack cell_size = box - @unpack ncp, ncwp, cwp, fp, np, npcell = cl + @unpack contains_real, ncp, ncwp, cwp, fp, np, npcell = cl ncp[1] += 1 icell_cartesian = particle_cell(x,box) icell = cell_linear_index(box.nc,icell_cartesian) + # # Cells starting with real particles are annotated to be run over + # + if real_particle && (!contains_real[icell]) + contains_real[icell] = true + ncwp[1] += 1 + cwp[ncwp[1]] = Cell{N,T}( + icell, + icell_cartesian, + cell_center(icell_cartesian,box) + ) + end if fp[icell].index == 0 npcell[icell] = 1 - if real_particle - ncwp[1] += 1 - cwp[ncwp[1]] = Cell{N,T}( - icell, - icell_cartesian, - cell_center(icell_cartesian,cell_size) - ) - end else npcell[icell] += 1 end @@ -218,11 +223,11 @@ function cell_output!( jc_cartesian ) where {N,T} @unpack projected_particles = cl - @unpack nc, cell_size, cutoff, cutoff_sq = box + @unpack nc, cutoff, cutoff_sq = box jc = cell_linear_index(nc,jc_cartesian) # Vector connecting cell centers - Δc = cell_center(jc_cartesian,cell_size) - icell.center + Δc = cell_center(jc_cartesian,box) - icell.center # Copy coordinates of particles of icell jcell into continuous array, # and project them into the vector connecting cell centers diff --git a/src/StructTypes.jl b/src/StructTypes.jl index 5e4f0d7d..cc3cd5b2 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -87,9 +87,7 @@ function Box( unit_cell = SMatrix{N,N,T}(unit_cell) cell_size = scale_cutoff*cutoff/lcell unit_cell_max = sum(@view(unit_cell[:,i]) for i in 1:N) - nc = SVector{N,Int}( - ceil.(Int,max.(1,(unit_cell_max .+ 2*(lcell*cell_size))/cell_size)) - ) + nc = SVector{N,Int}(ceil.(Int,unit_cell_max/cell_size) .+ 2) ranges = ranges_of_replicas(cell_size, lcell, nc, unit_cell) return Box{N,T,N*N}( @@ -223,11 +221,13 @@ Structure that contains the cell lists information. """ Base.@kwdef struct CellList{SystemType,N,T} - " *mutable* number of cells with particles " + " *mutable* number of cells with real particles. " ncwp::Vector{Int} " *mutable* number of particles in the computing box " ncp::Vector{Int} - " Indices of the unique cells with Particles " + " Auxiliary array to annotate if the cell contains real particles. " + contains_real::Vector{Bool} + " Indices of the unique cells with real particles. " cwp::Vector{Cell{N,T}} " First particle of cell " fp::Vector{AtomWithIndex{N,T}} @@ -288,11 +288,21 @@ function CellList(x::AbstractVector{SVector{N,T}},box::Box;parallel::Bool=true) ncwp = [0] ncp = [0] cwp = Vector{Cell{N,T}}(undef,number_of_cells) + contains_real = Vector{Bool}(undef,number_of_cells) fp = Vector{AtomWithIndex{N,T}}(undef,number_of_cells) np = Vector{AtomWithIndex{N,T}}(undef,number_of_particles) npcell = Vector{Int}(undef,number_of_cells) projected_particles = Vector{ProjectedParticle{N,T}}(undef,number_of_particles) - cl = CellList{LargeDenseSystem,N,T}(ncwp,ncp,cwp,fp,np,npcell,projected_particles) + cl = CellList{LargeDenseSystem,N,T}( + ncwp, + ncp, + contains_real, + cwp, + fp, + np, + npcell, + projected_particles + ) return UpdateCellList!(x,box,cl,parallel=parallel) end diff --git a/src/SystemCommons.jl b/src/SystemCommons.jl index 2ec69bbc..7d2c1a37 100644 --- a/src/SystemCommons.jl +++ b/src/SystemCommons.jl @@ -83,14 +83,14 @@ end """ ``` -cell_center(c::CartesianIndex{N},cell_size::T) where {N,T} +cell_center(c::CartesianIndex{N},box::Box{N,T,M}) where {N,T,M} ``` Computes the geometric center of a computin cell, to be used in the projection of points. Returns a `SVector{N,T}` """ -cell_center(c::CartesianIndex{N},cell_size::T) where {N,T} = - SVector{N,T}(ntuple(i-> cell_size*c[i]/2, N)) +@inline cell_center(c::CartesianIndex{N},box::Box{N,T,M}) where {N,T,M} = + SVector{N,T}(ntuple(i -> box.cell_size*(c[i] - 0.5 - box.lcell), N)) diff --git a/src/TinySystems.jl b/src/TinySystems.jl index 84a8da4f..2f270cb0 100644 --- a/src/TinySystems.jl +++ b/src/TinySystems.jl @@ -103,7 +103,6 @@ function add_particle_to_celllist!( cl::CellList{LargeDenseSystem,N,T}; real_particle::Bool=true ) where {N,T} - @unpack cell_size = box @unpack ncp, ncwp, cwp, fp, np, npcell = cl ncp[1] += 1 icell_cartesian = particle_cell(x,box) @@ -113,7 +112,7 @@ function add_particle_to_celllist!( npcell[icell] = 1 if real_particle ncwp[1] += 1 - cwp[ncwp[1]] = Cell{N,T}(icell,icell_cartesian,cell_center(icell_cartesian,cell_size)) + cwp[ncwp[1]] = Cell{N,T}(icell,icell_cartesian,cell_center(icell_cartesian,box)) end else npcell[icell] += 1 @@ -218,7 +217,7 @@ function cell_output!( jc = cell_linear_index(nc,jc_cartesian) # Vector connecting cell centers - Δc = cell_center(jc_cartesian,cell_size) - icell.center + Δc = cell_center(jc_cartesian,box) - icell.center # Copy coordinates of particles of icell jcell into continuous array, # and project them into the vector connecting cell centers diff --git a/src/examples.jl b/src/examples.jl index c28d35cf..a3702ada 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -8,7 +8,7 @@ function test1(;N=100_000,parallel=true,x=nothing) # Number of particles, sides and cutoff sides = @SVector [250,250,250] cutoff = 10 - box = Box(sides,cutoff) + box = Box(sides,cutoff,scale_cutoff=1) # Particle positions Random.seed!(321) @@ -27,8 +27,9 @@ function test1(;N=100_000,parallel=true,x=nothing) 0.,box,cl, parallel=parallel ) - return avg_dx + correct_result = 100.5799271448272 + return avg_dx ≈ correct_result, avg_dx end # @@ -377,16 +378,14 @@ function florpi(;N=100_000,cd=true,parallel=true) positions = reshape(reinterpret(SVector{3,Float64},positions),n) velocities = reshape(reinterpret(SVector{3,Float64},velocities),n) - box = Box(Lbox, r_max, lcell=1, scale_cutoff=1.2) + box = Box(Lbox, r_max) cl = CellList(positions,box,parallel=parallel) hist = (zeros(Int,length(rbins)-1), zeros(Float64,length(rbins)-1)) # Needs this to stabilize the type of velocities and hist, probably - function barrier(f,velocities,rbins,Lbox,hist,positions,box,cl,reduce_hist,parallel) + function barrier(f!,velocities,rbins,Lbox,hist,box,cl,reduce_hist,parallel) hist = map_pairwise!( - (x,y,i,j,d2,hist) -> compute_pairwise_mean_cell_lists!( - x,y,i,j,d2,hist,velocities,rbins,Lbox - ), + (x,y,i,j,d2,hist) -> f!(x,y,i,j,d2,hist,velocities,rbins,Lbox), hist, box, cl, reduce=reduce_hist, parallel=parallel @@ -395,7 +394,7 @@ function florpi(;N=100_000,cd=true,parallel=true) end hist = barrier(compute_pairwise_mean_cell_lists!, - velocities,rbins,Lbox,hist,positions,box,cl,reduce_hist,parallel) + velocities,rbins,Lbox,hist,box,cl,reduce_hist,parallel) n_pairs = hist[1] mean_v_r = hist[2] From 2120546dd6336abf27d5291b26ef35074b14a306 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 27 Jul 2021 16:42:17 -0300 Subject: [PATCH 16/62] up --- src/SystemCommons.jl | 2 +- src/examples.jl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SystemCommons.jl b/src/SystemCommons.jl index 7d2c1a37..e5450ec8 100644 --- a/src/SystemCommons.jl +++ b/src/SystemCommons.jl @@ -66,7 +66,7 @@ end # Chunck splitter, we jump over cells such that possible # heterogeneities have greater changes of getting split into different chuncks -splitter(it,n) = it:nthreads():n +@inline splitter(it,n) = it:nthreads():n # # Functions to reduce the output of common options (vectors of numbers diff --git a/src/examples.jl b/src/examples.jl index a3702ada..aa2a4a4b 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -8,7 +8,7 @@ function test1(;N=100_000,parallel=true,x=nothing) # Number of particles, sides and cutoff sides = @SVector [250,250,250] cutoff = 10 - box = Box(sides,cutoff,scale_cutoff=1) + box = Box(sides,cutoff,scale_cutoff=2) # Particle positions Random.seed!(321) From 8762239eb6753d1ffcb460dea3c79459da67165d Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 27 Jul 2021 21:42:58 -0300 Subject: [PATCH 17/62] up --- src/CellOperations.jl | 10 +++++----- src/StructTypes.jl | 2 +- src/TinySystems.jl | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/CellOperations.jl b/src/CellOperations.jl index 6eda4574..04fb9d49 100644 --- a/src/CellOperations.jl +++ b/src/CellOperations.jl @@ -77,8 +77,8 @@ function ranges_of_replicas(cell_size, lcell, nc, unit_cell::SMatrix{3,3,T,9}) w V( cmax[1], cmax[2], cmax[3] ) ) r_min, r_max = _ranges_of_replicas( - nc, - SVector{3,Int}(-lcell,-lcell,-lcell), + SVector{3,Int}(10^6,10^6,10^6), #min + SVector{3,Int}(-1,-1,-1), #max unit_cell, cell_vertices ) @@ -101,8 +101,8 @@ function ranges_of_replicas(lcell,cell_size,nc,unit_cell::SMatrix{2,2,T,4}) wher V( cmax[1], cmax[2] ), ) r_min, r_max = _ranges_of_replicas( - nc, - SVector{2,Int}(-lcell,-lcell), + SVector{2,Int}(10^6,10^6), #min + SVector{2,Int}(-1,-1), #max unit_cell, cell_vertices ) @@ -268,7 +268,7 @@ and the cell_size. """ @inline particle_cell(x::SVector{N,T}, box::Box) where {N,T} = - CartesianIndex(ntuple(i -> ceil(Int,x[i]/box.cell_size) + box.lcell, N)) + CartesianIndex(ntuple(i -> floor(Int,x[i]/box.cell_size) + box.lcell + 1, N)) """ diff --git a/src/StructTypes.jl b/src/StructTypes.jl index cc3cd5b2..15a0904a 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -284,7 +284,7 @@ CellList{3, Float64} function CellList(x::AbstractVector{SVector{N,T}},box::Box;parallel::Bool=true) where {N,T} number_of_cells = ceil(Int,prod(box.nc)) # number_of_particles is a lower bound, will be resized when necessary to incorporate particle images - number_of_particles = length(x) + number_of_particles = ceil(Int,1.2*length(x)) ncwp = [0] ncp = [0] cwp = Vector{Cell{N,T}}(undef,number_of_cells) diff --git a/src/TinySystems.jl b/src/TinySystems.jl index 2f270cb0..fd8d96a4 100644 --- a/src/TinySystems.jl +++ b/src/TinySystems.jl @@ -213,7 +213,7 @@ function cell_output!( jc_cartesian ) where {N,T} @unpack projected_particles = cl - @unpack nc, cutoff, cutoff_sq, cell_size = box + @unpack nc, cutoff, cutoff_sq = box jc = cell_linear_index(nc,jc_cartesian) # Vector connecting cell centers From b145f7e349b9b9330619092583ec1f7d31438b33 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 27 Jul 2021 22:07:35 -0300 Subject: [PATCH 18/62] fixed 2D call order --- src/CellOperations.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CellOperations.jl b/src/CellOperations.jl index 04fb9d49..c2000ad3 100644 --- a/src/CellOperations.jl +++ b/src/CellOperations.jl @@ -90,7 +90,7 @@ function ranges_of_replicas(cell_size, lcell, nc, unit_cell::SMatrix{3,3,T,9}) w return ranges end -function ranges_of_replicas(lcell,cell_size,nc,unit_cell::SMatrix{2,2,T,4}) where T +function ranges_of_replicas(cell_size, lcell, nc,unit_cell::SMatrix{2,2,T,4}) where T V = SVector{2,T} cmin = ntuple(i->-lcell*cell_size,2) cmax = ntuple(i->(nc[i]-lcell)*cell_size,2) From 53c98254202817cdeed5438931bbce20bc32b50f Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 27 Jul 2021 22:25:07 -0300 Subject: [PATCH 19/62] fixed generality of zero function --- src/StructTypes.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/StructTypes.jl b/src/StructTypes.jl index 15a0904a..2018a070 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -197,7 +197,7 @@ struct Cell{N,T} center::SVector{N,T} end Base.zero(::Type{Cell{N,T}}) where {N,T} = - Cell{N,T}(0,CartesianIndex{N}(0,0,0),zeros(SVector{N,T})) + Cell{N,T}(0,CartesianIndex{N}(ntuple(i->0,N)),zeros(SVector{N,T})) """ From a33461b685f0a2a8cc6387dd99646a9dae86539d Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 27 Jul 2021 22:53:33 -0300 Subject: [PATCH 20/62] identation fix --- src/CellOperations.jl | 4 +++- src/StructTypes.jl | 6 +++++- src/examples.jl | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/CellOperations.jl b/src/CellOperations.jl index c2000ad3..650c08b0 100644 --- a/src/CellOperations.jl +++ b/src/CellOperations.jl @@ -2,11 +2,13 @@ # Function that checks if the particule is outside the computation bounding box # function out_of_bounding_box(x::SVector{N,T},box::Box{N,T,M}) where {N,T,M} - @unpack cutoff, unit_cell = box + @unpack cutoff, unit_cell, cell_size, lcell, nc = box unit_cell_max = sum(@view(unit_cell[:,i]) for i in 1:N) for i in 1:N (x[i] < -cutoff) && return true (x[i] >= unit_cell_max[i]+cutoff) && return true +# (x[i] < -lcell*cell_size) && return true +# (x[i] >= (nc[i]-lcell)*cell_size) && return true end return false end diff --git a/src/StructTypes.jl b/src/StructTypes.jl index 2018a070..db386f8c 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -88,11 +88,15 @@ function Box( cell_size = scale_cutoff*cutoff/lcell unit_cell_max = sum(@view(unit_cell[:,i]) for i in 1:N) nc = SVector{N,Int}(ceil.(Int,unit_cell_max/cell_size) .+ 2) + @show unit_cell_max/cell_size + @show ceil.(Int,unit_cell_max/cell_size) + @show nc ranges = ranges_of_replicas(cell_size, lcell, nc, unit_cell) return Box{N,T,N*N}( unit_cell, - lcell, nc, + lcell, + nc, cutoff, cutoff^2, ranges, diff --git a/src/examples.jl b/src/examples.jl index aa2a4a4b..a3702ada 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -8,7 +8,7 @@ function test1(;N=100_000,parallel=true,x=nothing) # Number of particles, sides and cutoff sides = @SVector [250,250,250] cutoff = 10 - box = Box(sides,cutoff,scale_cutoff=2) + box = Box(sides,cutoff,scale_cutoff=1) # Particle positions Random.seed!(321) From 94bd4f3d62fd9085e5dc4fd3fb15f034e0c9e61e Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Wed, 28 Jul 2021 15:04:00 -0300 Subject: [PATCH 21/62] huge and large working: good version to progreed --- src/CellListMap.jl | 2 +- src/CellOperations.jl | 2 - src/LargeDenseSystems.jl | 178 +++++++++++++++++++-------------------- src/StructTypes.jl | 24 +++--- src/SystemCommons.jl | 74 +++++++++++++++- 5 files changed, 175 insertions(+), 105 deletions(-) diff --git a/src/CellListMap.jl b/src/CellListMap.jl index 7022a6e0..df3671ba 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -1,5 +1,6 @@ module CellListMap +using Base: project_deps_get using LinearAlgebra: dot, norm, norm_sqr using Base.Threads using Parameters @@ -7,7 +8,6 @@ using StaticArrays using DocStringExtensions using ProgressMeter using Setfield -using LoopVectorization export Box export CellList, UpdateCellList! diff --git a/src/CellOperations.jl b/src/CellOperations.jl index 650c08b0..058ccc26 100644 --- a/src/CellOperations.jl +++ b/src/CellOperations.jl @@ -7,8 +7,6 @@ function out_of_bounding_box(x::SVector{N,T},box::Box{N,T,M}) where {N,T,M} for i in 1:N (x[i] < -cutoff) && return true (x[i] >= unit_cell_max[i]+cutoff) && return true -# (x[i] < -lcell*cell_size) && return true -# (x[i] >= (nc[i]-lcell)*cell_size) && return true end return false end diff --git a/src/LargeDenseSystems.jl b/src/LargeDenseSystems.jl index f11cbf57..3a022ce4 100644 --- a/src/LargeDenseSystems.jl +++ b/src/LargeDenseSystems.jl @@ -3,6 +3,8 @@ # of unnecessary loop iterations over non-interacting particles # +const UnionLargeDense = Union{LargeDenseSystem,HugeDenseSystem} + """ ``` @@ -37,14 +39,14 @@ julia> cl = UpdateCellList!(x,box,cl); # update lists function UpdateCellList!( x::AbstractVector{SVector{N,T}}, box::Box, - cl::CellList{LargeDenseSystem,N,T}; + cl::CellList{SystemType,N,T}; parallel::Bool=true -) where {N,T} - @unpack contains_real, cwp, fp, np, npcell = cl +) where {SystemType<:UnionLargeDense,N,T} + @unpack contains_real, cwp, fp, np, npcell, projected_particles = cl number_of_cells = prod(box.nc) if number_of_cells > length(cwp) - number_of_cells = ceil(Int,1.1*number_of_cells) # some margin in case of box size variations + number_of_cells = ceil(Int,1.2*number_of_cells) # some margin in case of box size variations resize!(contains_real,number_of_cells) resize!(cwp,number_of_cells) resize!(fp,number_of_cells) @@ -91,6 +93,13 @@ function UpdateCellList!( cl = add_particle_to_celllist!(ip,p,box,cl) end + maximum_npcell = maximum(npcell) + if maximum_npcell > length(projected_particles[1]) + for i in 1:nthreads() + resize!(projected_particles[i],ceil(Int,1.2*maximum_npcell)) + end + end + return cl end @@ -103,9 +112,9 @@ function add_particle_to_celllist!( ip, x::SVector{N,T}, box, - cl::CellList{LargeDenseSystem,N,T}; + cl::CellList{SystemType,N,T}; real_particle::Bool=true -) where {N,T} +) where {SystemType<:UnionLargeDense,N,T} @unpack contains_real, ncp, ncwp, cwp, fp, np, npcell = cl ncp[1] += 1 icell_cartesian = particle_cell(x,box) @@ -143,9 +152,9 @@ end # Serial version for self-pairwise computations # function map_pairwise_serial!( - f::F, output, box::Box, cl::CellList{LargeDenseSystem,N,T}; + f::F, output, box::Box, cl::CellList{SystemType,N,T}; show_progress::Bool=false -) where {F,N,T} +) where {F,SystemType<:UnionLargeDense,N,T} show_progress && (p = Progress(cl.ncwp[1],dt=1)) for icell in 1:cl.ncwp[1] output = inner_loop!(f,box,icell,cl,output) @@ -158,11 +167,11 @@ end # Parallel version for self-pairwise computations # function map_pairwise_parallel!( - f::F1, output, box::Box, cl::CellList{LargeDenseSystem,N,T}; + f::F1, output, box::Box, cl::CellList{SystemType,N,T}; output_threaded=output_threaded, reduce::F2=reduce, show_progress::Bool=false -) where {F1,F2,N,T} +) where {F1,F2,SystemType<:UnionLargeDense,N,T} show_progress && (p = Progress(cl.ncwp[1],dt=1)) @threads for it in 1:nthreads() for icell in splitter(it,cl.ncwp[1]) @@ -176,9 +185,9 @@ end function inner_loop!( f,box,icell, - cl::CellList{LargeDenseSystem,N,T}, + cl::CellList{SystemType,N,T}, output -) where {N,T} +) where {SystemType<:UnionLargeDense,N,T} @unpack cutoff_sq = box cell = cl.cwp[icell] @@ -195,7 +204,7 @@ function inner_loop!( if d2 <= cutoff_sq i_orig = pᵢ.index_original j_orig = pⱼ.index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) end pⱼ = cl.np[pⱼ.index] j = pⱼ.index @@ -211,27 +220,12 @@ function inner_loop!( return output end -# -# loops over the particles of a neighbour cell -# -function cell_output!( - f, - box, - icell, - cl::CellList{LargeDenseSystem,N,T}, - output, - jc_cartesian -) where {N,T} - @unpack projected_particles = cl - @unpack nc, cutoff, cutoff_sq = box +function project_particles(jc_cartesian,cl,Δc,icell,box) + @unpack nc = box + @unpack fp = cl + projected_particles = cl.projected_particles[threadid()] jc = cell_linear_index(nc,jc_cartesian) - - # Vector connecting cell centers - Δc = cell_center(jc_cartesian,box) - icell.center - - # Copy coordinates of particles of icell jcell into continuous array, - # and project them into the vector connecting cell centers - pⱼ = cl.fp[jc] + pⱼ = fp[jc] npcell = cl.npcell[jc] j = pⱼ.index for jp in 1:npcell @@ -243,6 +237,29 @@ function cell_output!( j = pⱼ.index end pp = @view(projected_particles[1:npcell]) + return pp +end + +# +# loops over the particles of a neighbour cell, for HugeDenseSystem +# +# all efforts are made to not run anything on unnecessary pairs +# of particles, this includes sorting the projections +# +function cell_output!( + f, + box, + icell, + cl::CellList{HugeDenseSystem,N,T}, + output, + jc_cartesian +) where {N,T} + @unpack cutoff, cutoff_sq = box + + # Project particles into vector connection cell centers + Δc = cell_center(jc_cartesian,box) - icell.center + Δc = Δc/norm(Δc) + pp = project_particles(jc_cartesian,cl,Δc,icell,box) # Sort particles according to projection norm sort!(pp, by=el->el.xproj,alg=InsertionSort) @@ -253,8 +270,8 @@ function cell_output!( while i > 0 xpᵢ = pᵢ.coordinates xproj = dot(xpᵢ-icell.center,Δc) - j = 1 - while j <= npcell && xproj - pp[j].xproj <= cutoff + for j in eachindex(pp) + xproj - pp[j].xproj > cutoff && break xpⱼ = pp[j].coordinates d2 = norm_sqr(xpᵢ - xpⱼ) if d2 <= cutoff_sq @@ -262,7 +279,6 @@ function cell_output!( j_orig = pp[j].index_original output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) end - j += 1 end pᵢ = cl.np[i] i = pᵢ.index @@ -272,67 +288,47 @@ function cell_output!( end # -# Serial version for cross-interaction computations +# loops over the particles of a neighbour cell, for LargeDenseSystem +# not large enough such that sorting the projections is useful # -function map_pairwise_serial!( - f::F, output, box::Box, - cl::CellListPair{LargeDenseSystem,N,T}; - show_progress=show_progress -) where {F,N,T} - show_progress && (p = Progress(length(cl.small),dt=1)) - for i in eachindex(cl.small) - output = inner_loop!(f,output,i,box,cl) - show_progress && next!(p) - end - return output -end +function cell_output!( + f, + box, + icell, + cl::CellList{LargeDenseSystem,N,T}, + output, + jc_cartesian +) where {N,T} + @unpack cutoff, cutoff_sq = box -# -# Parallel version for cross-interaction computations -# -function map_pairwise_parallel!( - f::F1, output, box::Box, - cl::CellListPair{LargeDenseSystem,N,T}; - output_threaded=output_threaded, - reduce::F2=reduce, - show_progress=show_progress -) where {F1,F2,N,T} - show_progress && (p = Progress(length(cl.small),dt=1)) - @threads for it in 1:nthreads() - for i in splitter(it,length(cl.small)) - output_threaded[it] = inner_loop!(f,output_threaded[it],i,box,cl) - show_progress && next!(p) - end - end - output = reduce(output,output_threaded) - return output -end + # Vector connecting cell centers + Δc = cell_center(jc_cartesian,box) - icell.center + Δc = Δc/norm(Δc) + pp = project_particles(jc_cartesian,cl,Δc,icell,box) -# -# Inner loop of cross-interaction computations -# -function inner_loop!( - f,output,i,box, - cl::CellListPair{LargeDenseSystem,N,T} -) where {N,T} - @unpack unit_cell, nc, cutoff_sq = box - xpᵢ = wrap_to_first(cl.small[i],unit_cell) - ic = particle_cell(xpᵢ,box) - for neighbour_cell in neighbour_cells_all(box) - jc = cell_linear_index(nc,neighbour_cell+ic) - pⱼ = cl.large.fp[jc] - j = pⱼ.index - # loop over particles of cell jc - while j > 0 - xpⱼ = pⱼ.coordinates + # Loop over particles of cell icell + pᵢ = cl.fp[icell.icell] + i = pᵢ.index + while i > 0 + xpᵢ = pᵢ.coordinates + xproj = dot(xpᵢ-icell.center,Δc) + + # Partition pp array according to the current projections + n = partition!(pp, el -> el.xproj - xproj <= cutoff) + + # Compute the interactions + for j in 1:n + xpⱼ = pp[j].coordinates d2 = norm_sqr(xpᵢ - xpⱼ) if d2 <= cutoff_sq - j_orig = pⱼ.index_original - output = f(xpᵢ,xpⱼ,i,j_orig,d2,output) + i_orig = pᵢ.index_original + j_orig = pp[j].index_original + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) end - pⱼ = cl.large.np[j] - j = pⱼ.index - end + end + pᵢ = cl.np[i] + i = pᵢ.index end + return output end diff --git a/src/StructTypes.jl b/src/StructTypes.jl index db386f8c..4aca003f 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -7,6 +7,7 @@ struct MediumSparseSystem end struct MediumDenseSystem end struct LargeSparseSystem end struct LargeDenseSystem end +struct HugeDenseSystem end """ @@ -87,10 +88,10 @@ function Box( unit_cell = SMatrix{N,N,T}(unit_cell) cell_size = scale_cutoff*cutoff/lcell unit_cell_max = sum(@view(unit_cell[:,i]) for i in 1:N) + +### lcell*cell_size must be == unit_cell_max + nc = SVector{N,Int}(ceil.(Int,unit_cell_max/cell_size) .+ 2) - @show unit_cell_max/cell_size - @show ceil.(Int,unit_cell_max/cell_size) - @show nc ranges = ranges_of_replicas(cell_size, lcell, nc, unit_cell) return Box{N,T,N*N}( @@ -191,8 +192,9 @@ Base.zero(::Type{AtomWithIndex{N,T}}) where {N,T} = $(TYPEDEF) -This structure contains the cell linear index and the information about if this cell -is in the border of the box (such that its neighbouring cells need to be wrapped) +This structure contains the cell linear index and the information +about if this cell is in the border of the box (such that its +neighbouring cells need to be wrapped) """ struct Cell{N,T} @@ -233,14 +235,14 @@ Base.@kwdef struct CellList{SystemType,N,T} contains_real::Vector{Bool} " Indices of the unique cells with real particles. " cwp::Vector{Cell{N,T}} - " First particle of cell " + " First particle of cell. " fp::Vector{AtomWithIndex{N,T}} " Next particle of cell " np::Vector{AtomWithIndex{N,T}} - " Number of particles in of cell " + " Number of particles of cell. " npcell::Vector{Int} - " Auxiliar vector to store projected particles. " - projected_particles::Vector{ProjectedParticle{N,T}} + " Auxiliar array to store projected particles. " + projected_particles::Vector{Vector{ProjectedParticle{N,T}}} end function Base.show(io::IO,::MIME"text/plain",cl::CellList) println(typeof(cl)) @@ -296,7 +298,9 @@ function CellList(x::AbstractVector{SVector{N,T}},box::Box;parallel::Bool=true) fp = Vector{AtomWithIndex{N,T}}(undef,number_of_cells) np = Vector{AtomWithIndex{N,T}}(undef,number_of_particles) npcell = Vector{Int}(undef,number_of_cells) - projected_particles = Vector{ProjectedParticle{N,T}}(undef,number_of_particles) + projected_particles = [ + Vector{ProjectedParticle{N,T}}(undef,0) for i in 1:nthreads() + ] cl = CellList{LargeDenseSystem,N,T}( ncwp, ncp, diff --git a/src/SystemCommons.jl b/src/SystemCommons.jl index e5450ec8..426334b1 100644 --- a/src/SystemCommons.jl +++ b/src/SystemCommons.jl @@ -51,7 +51,7 @@ elements with values satisfying `by(el)`. Returns the number of elements that satisfy the condition. """ -function partition!(x::AbstractVector,by) where T +function partition!(x::AbstractVector,by) iswap = 1 @inbounds for i in eachindex(x) if by(x[i]) @@ -93,4 +93,76 @@ of points. Returns a `SVector{N,T}` @inline cell_center(c::CartesianIndex{N},box::Box{N,T,M}) where {N,T,M} = SVector{N,T}(ntuple(i -> box.cell_size*(c[i] - 0.5 - box.lcell), N)) +# +# Currently the methods for cross-interaction computations are the +# same for all types of systems +# + +# +# Serial version for cross-interaction computations +# +function map_pairwise_serial!( + f::F, output, box::Box, + cl::CellListPair{SystemType,N,T}; + show_progress=show_progress +) where {F,SystemType,N,T} + show_progress && (p = Progress(length(cl.small),dt=0)) + for i in eachindex(cl.small) + output = inner_loop!(f,output,i,box,cl) + show_progress && next!(p) + end + return output +end + +# +# Parallel version for cross-interaction computations +# +function map_pairwise_parallel!( + f::F1, output, box::Box, + cl::CellListPair{SystemType,N,T}; + output_threaded=output_threaded, + reduce::F2=reduce, + show_progress=show_progress +) where {F1,F2,SystemType,N,T} + show_progress && (p = Progress(length(cl.small),dt=1)) + @threads for it in 1:nthreads() + for i in splitter(it,length(cl.small)) + output_threaded[it] = inner_loop!(f,output_threaded[it],i,box,cl) + show_progress && next!(p) + end + end + output = reduce(output,output_threaded) + return output +end + +# +# Inner loop of cross-interaction computations +# +function inner_loop!( + f,output,i,box, + cl::CellListPair{SystemType,N,T} +) where {SystemType,N,T} + @unpack unit_cell, nc, cutoff_sq = box + xpᵢ = wrap_to_first(cl.small[i],unit_cell) + ic = particle_cell(xpᵢ,box) + for neighbour_cell in neighbour_cells_all(box) + jc = cell_linear_index(nc,neighbour_cell+ic) + pⱼ = cl.large.fp[jc] + j = pⱼ.index + # loop over particles of cell jc + while j > 0 + xpⱼ = pⱼ.coordinates + d2 = norm_sqr(xpᵢ - xpⱼ) + if d2 <= cutoff_sq + j_orig = pⱼ.index_original + output = f(xpᵢ,xpⱼ,i,j_orig,d2,output) + end + pⱼ = cl.large.np[j] + j = pⱼ.index + end + end + return output +end + + From 13e48293a1bcd3b1331e679f71b2f087e94c85f3 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Wed, 28 Jul 2021 22:02:29 -0300 Subject: [PATCH 22/62] added mediumdensesystem function --- src/LargeDenseSystems.jl | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/src/LargeDenseSystems.jl b/src/LargeDenseSystems.jl index 3a022ce4..dd5a4d37 100644 --- a/src/LargeDenseSystems.jl +++ b/src/LargeDenseSystems.jl @@ -332,3 +332,42 @@ function cell_output!( return output end + +# +# loops over the particles of a neighbour cell +# +function cell_output!( + f, + box, + icell, + cl::CellList{MediumDenseSystem,N,T}, + output, + jc_cartesian +) where {N,T} + @unpack nc, cutoff_sq = box + jc = cell_linear_index(nc,jc_cartesian) + + # loop over list of non-repeated particles of cell ic + pᵢ = cl.fp[icell.icell] + i = pᵢ.index + while i > 0 + xpᵢ = pᵢ.coordinates + pⱼ = cl.fp[jc] + j = pⱼ.index + i_orig = pᵢ.index_original + while j > 0 + xpⱼ = pⱼ.coordinates + d2 = norm_sqr(xpᵢ-xpⱼ) + j_orig = pⱼ.index_original + if d2 <= cutoff_sq + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + end + pⱼ = cl.np[pⱼ.index] + j = pⱼ.index + end + pᵢ = cl.np[pᵢ.index] + i = pᵢ.index + end + + return output +end From 937b07005c4074ff512a48dd534c1e0ae49ad854 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Thu, 29 Jul 2021 17:32:01 -0300 Subject: [PATCH 23/62] high density systems working --- src/CellListMap.jl | 9 +- src/HighDensitySystems.jl | 347 ++++++++++++++++++ ...geDenseSystems.jl => LowDensitySystems.jl} | 8 +- src/StructTypes.jl | 47 ++- src/TinySystems.jl | 320 ++++------------ 5 files changed, 461 insertions(+), 270 deletions(-) create mode 100644 src/HighDensitySystems.jl rename src/{LargeDenseSystems.jl => LowDensitySystems.jl} (97%) diff --git a/src/CellListMap.jl b/src/CellListMap.jl index df3671ba..582a3df7 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -13,9 +13,16 @@ export Box export CellList, UpdateCellList! export map_pairwise! +export TinySystem +export LowDensitySystem +export HighDensitySystem +export LargeHighDensitySystem + + include("./StructTypes.jl") include("./CellOperations.jl") -include("./LargeDenseSystems.jl") +include("./TinySystems.jl") +include("./HighDensitySystems.jl") include("./SystemCommons.jl") """ diff --git a/src/HighDensitySystems.jl b/src/HighDensitySystems.jl new file mode 100644 index 00000000..ab8c491a --- /dev/null +++ b/src/HighDensitySystems.jl @@ -0,0 +1,347 @@ +# +# Functions to deal with large and dense system, avoiding the maximum number +# of unnecessary loop iterations over non-interacting particles +# + +""" + +``` +UpdateCellList!( + x::AbstractVector{SVector{N,T}}, + box::Box,cl:CellList{SystemType,N,T}, + parallel=true +) where {SystemType<:UnionLargeDense,N,T} +``` + +Function that will update a previously allocated `CellList` structure, given new updated particle +positions of large and dense systems. + +## Example + +```julia-repl +julia> box = Box([250,250,250],10); + +julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:1000 ]; + +julia> cl = CellList(x,box); + +julia> box = Box([260,260,260],10); + +julia> x = [ 260*rand(SVector{3,Float64}) for i in 1:1000 ]; + +julia> cl = UpdateCellList!(x,box,cl); # update lists + +``` + +""" +function UpdateCellList!( + x::AbstractVector{SVector{N,T}}, + box::Box, + cl::CellList{SystemType,N,T}; + parallel::Bool=true +) where {SystemType<:UnionLargeDense,N,T} + @unpack contains_real, cwp, fp, np, npcell, projected_particles = cl + + number_of_cells = prod(box.nc) + if number_of_cells > length(cwp) + number_of_cells = ceil(Int,1.2*number_of_cells) # some margin in case of box size variations + resize!(contains_real,number_of_cells) + resize!(cwp,number_of_cells) + resize!(fp,number_of_cells) + resize!(npcell,number_of_cells) + end + + cl.ncwp[1] = 0 + if parallel + @threads for i in eachindex(cwp) + contains_real[i] = false + cwp[i] = zero(Cell{N,T}) + fp[i] = zero(AtomWithIndex{N,T}) + npcell[i] = 0 + end + @threads for i in eachindex(np) + np[i] = zero(AtomWithIndex{N,T}) + end + else + fill!(contains_real,false) + fill!(cwp,zero(Cell{N,T})) + fill!(fp,zero(AtomWithIndex{N,T})) + fill!(np,zero(AtomWithIndex{N,T})) + fill!(npcell,0) + end + + # + # The following part cannot be *easily* paralelized, because + # there is concurrency on the construction of the cell lists + # + + # + # Add virtual particles to edge cells + # + for (ip,particle) in pairs(x) + p = wrap_to_first(particle,box.unit_cell) + cl = replicate_particle!(ip,p,box,cl) + end + # + # Add true particles, such that the first particle of each cell is + # always a true particle + # + for (ip,particle) in pairs(x) + p = wrap_to_first(particle,box.unit_cell) + cl = add_particle_to_celllist!(ip,p,box,cl) + end + + maximum_npcell = maximum(npcell) + if maximum_npcell > length(projected_particles[1]) + for i in 1:nthreads() + resize!(projected_particles[i],ceil(Int,1.2*maximum_npcell)) + end + end + + return cl +end + +""" + +Set one index of a cell list + +""" +function add_particle_to_celllist!( + ip, + x::SVector{N,T}, + box, + cl::CellList{SystemType,N,T}; + real_particle::Bool=true +) where {SystemType<:UnionLargeDense,N,T} + @unpack contains_real, ncp, ncwp, cwp, fp, np, npcell = cl + ncp[1] += 1 + icell_cartesian = particle_cell(x,box) + icell = cell_linear_index(box.nc,icell_cartesian) + # + # Cells starting with real particles are annotated to be run over + # + if real_particle && (!contains_real[icell]) + contains_real[icell] = true + ncwp[1] += 1 + cwp[ncwp[1]] = Cell{N,T}( + icell, + icell_cartesian, + cell_center(icell_cartesian,box) + ) + end + if fp[icell].index == 0 + npcell[icell] = 1 + else + npcell[icell] += 1 + end + if ncp[1] > length(np) + old_length = length(np) + resize!(np,ceil(Int,1.2*old_length)) + for i in old_length+1:length(np) + np[i] = zero(AtomWithIndex{N,T}) + end + end + np[ncp[1]] = fp[icell] + fp[icell] = AtomWithIndex(ncp[1],ip,x) + return cl +end + +# +# Serial version for self-pairwise computations +# +function map_pairwise_serial!( + f::F, output, box::Box, cl::CellList{SystemType,N,T}; + show_progress::Bool=false +) where {F,SystemType<:UnionLargeDense,N,T} + show_progress && (p = Progress(cl.ncwp[1],dt=1)) + for icell in 1:cl.ncwp[1] + output = inner_loop!(f,box,icell,cl,output) + show_progress && next!(p) + end + return output +end + +# +# Parallel version for self-pairwise computations +# +function map_pairwise_parallel!( + f::F1, output, box::Box, cl::CellList{SystemType,N,T}; + output_threaded=output_threaded, + reduce::F2=reduce, + show_progress::Bool=false +) where {F1,F2,SystemType<:UnionLargeDense,N,T} + show_progress && (p = Progress(cl.ncwp[1],dt=1)) + @threads for it in 1:nthreads() + for icell in splitter(it,cl.ncwp[1]) + output_threaded[it] = inner_loop!(f,box,icell,cl,output_threaded[it]) + show_progress && next!(p) + end + end + output = reduce(output,output_threaded) + return output +end + +function inner_loop!( + f,box,icell, + cl::CellList{SystemType,N,T}, + output +) where {SystemType<:UnionLargeDense,N,T} + @unpack cutoff_sq = box + cell = cl.cwp[icell] + + # loop over list of non-repeated particles of cell ic + pᵢ = cl.fp[cell.icell] + i = pᵢ.index + while i > 0 + xpᵢ = pᵢ.coordinates + pⱼ = cl.np[i] + j = pⱼ.index + while j > 0 + xpⱼ = pⱼ.coordinates + d2 = norm_sqr(xpᵢ - xpⱼ) + if d2 <= cutoff_sq + i_orig = pᵢ.index_original + j_orig = pⱼ.index_original + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + end + pⱼ = cl.np[pⱼ.index] + j = pⱼ.index + end + pᵢ = cl.np[pᵢ.index] + i = pᵢ.index + end + + for jcell in neighbour_cells(box) + output = cell_output!(f,box,cell,cl,output,cell.cartesian+jcell) + end + + return output +end + +""" + +``` +project_particles(jc_cartesian,cl,Δc,icell,box) +``` + +Projects all particles of the cell of cartesian coordinates +`jc_cartesian` into the unnitary vector `Δc` with direction +connecting `icell.center` and the center of cell `jc_cartesian`. +Returns a view of the array of projected particles, with length +equal to the number of particles of cell `jc_cartesian`. + +""" +function project_particles(jc_cartesian,cl,Δc,icell,box) + @unpack nc = box + @unpack fp = cl + projected_particles = cl.projected_particles[threadid()] + jc = cell_linear_index(nc,jc_cartesian) + pⱼ = fp[jc] + npcell = cl.npcell[jc] + j = pⱼ.index + for jp in 1:npcell + j_orig = pⱼ.index_original + xpⱼ = pⱼ.coordinates + xproj = dot(xpⱼ-icell.center,Δc) + projected_particles[jp] = ProjectedParticle(j_orig,xproj,xpⱼ) + pⱼ = cl.np[j] + j = pⱼ.index + end + pp = @view(projected_particles[1:npcell]) + return pp +end + +# +# loops over the particles of a neighbour cell, for LargeDenseSystem +# not large enough such that sorting the projections is useful +# +function cell_output!( + f, + box, + icell, + cl::CellList{HighDensitySystem,N,T}, + output, + jc_cartesian +) where {N,T} + @unpack cutoff, cutoff_sq = box + + # Vector connecting cell centers + Δc = cell_center(jc_cartesian,box) - icell.center + Δc = Δc/norm(Δc) + pp = project_particles(jc_cartesian,cl,Δc,icell,box) + + # Loop over particles of cell icell + pᵢ = cl.fp[icell.icell] + i = pᵢ.index + while i > 0 + xpᵢ = pᵢ.coordinates + xproj = dot(xpᵢ-icell.center,Δc) + + # Partition pp array according to the current projections + n = partition!(pp, el -> el.xproj - xproj <= cutoff) + + # Compute the interactions + for j in 1:n + xpⱼ = pp[j].coordinates + d2 = norm_sqr(xpᵢ - xpⱼ) + if d2 <= cutoff_sq + i_orig = pᵢ.index_original + j_orig = pp[j].index_original + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + end + end + pᵢ = cl.np[i] + i = pᵢ.index + end + + return output +end + +# +# loops over the particles of a neighbour cell, for +# a LargeHighDensitySystem +# +# all efforts are made to not run anything on unnecessary pairs +# of particles, this includes sorting the projections of the +# particles on the vector connecting cell centers +# +function cell_output!( + f, + box, + icell, + cl::CellList{LargeHighDensitySystem,N,T}, + output, + jc_cartesian +) where {N,T} + @unpack cutoff, cutoff_sq = box + + # Project particles into vector connection cell centers + Δc = cell_center(jc_cartesian,box) - icell.center + Δc = Δc/norm(Δc) + pp = project_particles(jc_cartesian,cl,Δc,icell,box) + + # Sort particles according to projection norm + sort!(pp, by=el->el.xproj, alg=QuickSort) + + # Loop over particles of cell icell + pᵢ = cl.fp[icell.icell] + i = pᵢ.index + while i > 0 + xpᵢ = pᵢ.coordinates + xproj = dot(xpᵢ-icell.center,Δc) + for j in eachindex(pp) + xproj - pp[j].xproj > cutoff && break + xpⱼ = pp[j].coordinates + d2 = norm_sqr(xpᵢ - xpⱼ) + if d2 <= cutoff_sq + i_orig = pᵢ.index_original + j_orig = pp[j].index_original + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + end + end + pᵢ = cl.np[i] + i = pᵢ.index + end + + return output +end diff --git a/src/LargeDenseSystems.jl b/src/LowDensitySystems.jl similarity index 97% rename from src/LargeDenseSystems.jl rename to src/LowDensitySystems.jl index dd5a4d37..aaf0e2d9 100644 --- a/src/LargeDenseSystems.jl +++ b/src/LowDensitySystems.jl @@ -1,10 +1,8 @@ # -# Functions to deal with large and dense system, avoiding the maximum number -# of unnecessary loop iterations over non-interacting particles +# Functions to deal with systems of medium size, for which some +# pre-processing of the cell list brings too much overhead. # -const UnionLargeDense = Union{LargeDenseSystem,HugeDenseSystem} - """ ``` @@ -262,7 +260,7 @@ function cell_output!( pp = project_particles(jc_cartesian,cl,Δc,icell,box) # Sort particles according to projection norm - sort!(pp, by=el->el.xproj,alg=InsertionSort) + sort!(pp, by=el->el.xproj, alg=HeapSort) # Loop over particles of cell icell pᵢ = cl.fp[icell.icell] diff --git a/src/StructTypes.jl b/src/StructTypes.jl index 4aca003f..93192d6f 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -3,11 +3,13 @@ # Type of systems, to dispatch methods accordingly # struct TinySystem end -struct MediumSparseSystem end -struct MediumDenseSystem end -struct LargeSparseSystem end -struct LargeDenseSystem end -struct HugeDenseSystem end +struct LowDensitySystem end +struct HighDensitySystem end +struct LargeHighDensitySystem end + +const UnionLargeDense = + Union{HighDensitySystem,LargeHighDensitySystem} + """ @@ -247,7 +249,7 @@ end function Base.show(io::IO,::MIME"text/plain",cl::CellList) println(typeof(cl)) println(" $(cl.ncwp[1]) cells with real particles.") - print(" $(cl.ncp[1]) particles in computing box, including images.") + println(" $(cl.ncp[1]) particles in computing box, including images.") end # Structure that will cointain the cell lists of two independent sets of @@ -287,7 +289,12 @@ CellList{3, Float64} ``` """ -function CellList(x::AbstractVector{SVector{N,T}},box::Box;parallel::Bool=true) where {N,T} +function CellList( + x::AbstractVector{SVector{N,T}}, + box::Box; + parallel::Bool=true, + SystemType=nothing +) where {N,T} number_of_cells = ceil(Int,prod(box.nc)) # number_of_particles is a lower bound, will be resized when necessary to incorporate particle images number_of_particles = ceil(Int,1.2*length(x)) @@ -301,7 +308,14 @@ function CellList(x::AbstractVector{SVector{N,T}},box::Box;parallel::Bool=true) projected_particles = [ Vector{ProjectedParticle{N,T}}(undef,0) for i in 1:nthreads() ] - cl = CellList{LargeDenseSystem,N,T}( + + # Set automatically the system type, as a function of the + # total number of particles and the number of particles per cell + if isnothing(SystemType) + SystemType = set_system_type(x,box) + end + + cl = CellList{SystemType,N,T}( ncwp, ncp, contains_real, @@ -314,6 +328,21 @@ function CellList(x::AbstractVector{SVector{N,T}},box::Box;parallel::Bool=true) return UpdateCellList!(x,box,cl,parallel=parallel) end +function set_system_type(x,box) + + if length(x) <= 20 + return TinySystem + end + + particles_per_cell = length(x) / prod(box.nc) + + if particles_per_cell < 32 + return LowDensitySystem + end + + return HighDensitySystem +end + """ ``` @@ -358,3 +387,5 @@ function CellList( return cl_pair end +particles_per_cell(cl::CellList,box::Box) = cl.ncp[1] / prod(box.nc) + diff --git a/src/TinySystems.jl b/src/TinySystems.jl index fd8d96a4..32c5aa24 100644 --- a/src/TinySystems.jl +++ b/src/TinySystems.jl @@ -1,20 +1,20 @@ # -# Functions to deal with large and dense system, avoiding the maximum number -# of unnecessary loop iterations over non-interacting particles +# TinySystems: even constructing the cell list may be avoided +# also, these functions are very simple and serve for testing +# purposes # - """ ``` UpdateCellList!( x::AbstractVector{SVector{N,T}}, - box::Box,cl:CellList{LargeDenseSystem,N,T}, + box::Box,cl:CellList{TinySystem,N,T}, parallel=true ) where {N,T} ``` -Function that will update a previously allocated `CellList` structure, given new updated particle -positions of large and dense systems. +Function that will update a previously allocated `CellList` structure, +given new updated particle positions very small systems. ## Example @@ -37,292 +37,100 @@ julia> cl = UpdateCellList!(x,box,cl); # update lists function UpdateCellList!( x::AbstractVector{SVector{N,T}}, box::Box, - cl::CellList{LargeDenseSystem,N,T}; + cl::CellList{TinySystem,N,T}; parallel::Bool=true ) where {N,T} - @unpack cwp, fp, np, npcell = cl - - number_of_cells = prod(box.nc) - if number_of_cells > length(cwp) - number_of_cells = ceil(Int,1.1*number_of_cells) # some margin in case of box size variations - resize!(cwp,number_of_cells) - resize!(fp,number_of_cells) - resize!(npcell,number_of_cells) - end + @unpack np, ncp, projected_particles = cl - cl.ncwp[1] = 0 - if parallel - @threads for i in eachindex(cwp) - cwp[i] = zero(Cell{N,T}) - fp[i] = zero(AtomWithIndex{N,T}) - npcell[i] = 0 - end - @threads for i in eachindex(np) - np[i] = zero(AtomWithIndex{N,T}) - end - else - fill!(cwp,zero(Cell{N,T})) - fill!(fp,zero(AtomWithIndex{N,T})) - fill!(np,zero(AtomWithIndex{N,T})) - fill!(npcell,0) - end - - # - # The following part cannot be *easily* paralelized, because - # there is concurrency on the construction of the cell lists - # - - # - # Add virtual particles to edge cells - # - for (ip,particle) in pairs(x) - p = wrap_to_first(particle,box.unit_cell) - cl = replicate_particle!(ip,p,box,cl) - end - # - # Add true particles, such that the first particle of each cell is - # always a true particle - # - for (ip,particle) in pairs(x) - p = wrap_to_first(particle,box.unit_cell) - cl = add_particle_to_celllist!(ip,p,box,cl) + # This copy is of course redundant, but for the moment + # it is what it takes to use the same CellList structure + ncp[1] = length(x) + for (ip,coordinates) in pairs(x) + np[ip] = AtomWithIndex(ip,ip,coordinates) end + resize!(projected_particles[1],ncp[1]) return cl end -""" - -Set one index of a cell list - -""" -function add_particle_to_celllist!( - ip, - x::SVector{N,T}, - box, - cl::CellList{LargeDenseSystem,N,T}; - real_particle::Bool=true -) where {N,T} - @unpack ncp, ncwp, cwp, fp, np, npcell = cl - ncp[1] += 1 - icell_cartesian = particle_cell(x,box) - icell = cell_linear_index(box.nc,icell_cartesian) - # Cells starting with real particles are annotated to be run over - if fp[icell].index == 0 - npcell[icell] = 1 - if real_particle - ncwp[1] += 1 - cwp[ncwp[1]] = Cell{N,T}(icell,icell_cartesian,cell_center(icell_cartesian,box)) - end - else - npcell[icell] += 1 - end - if ncp[1] > length(np) - old_length = length(np) - resize!(np,ceil(Int,1.2*old_length)) - for i in old_length+1:length(np) - np[i] = zero(AtomWithIndex{N,T}) - end - end - np[ncp[1]] = fp[icell] - fp[icell] = AtomWithIndex(ncp[1],ip,x) - return cl -end +using LoopVectorization # # Serial version for self-pairwise computations # function map_pairwise_serial!( - f::F, output, box::Box, cl::CellList{LargeDenseSystem,N,T}; + f::F, output, box::Box, cl::CellList{TinySystem,N,T}; show_progress::Bool=false ) where {F,N,T} - show_progress && (p = Progress(cl.ncwp[1],dt=1)) - for icell in 1:cl.ncwp[1] - output = inner_loop!(f,box,icell,cl,output) - show_progress && next!(p) - end - return output -end - -# -# Parallel version for self-pairwise computations -# -function map_pairwise_parallel!( - f::F1, output, box::Box, cl::CellList{LargeDenseSystem,N,T}; - output_threaded=output_threaded, - reduce::F2=reduce, - show_progress::Bool=false -) where {F1,F2,N,T} - show_progress && (p = Progress(cl.ncwp[1],dt=1)) - @threads for it in 1:nthreads() - for icell in splitter(it,cl.ncwp[1]) - output_threaded[it] = inner_loop!(f,box,icell,cl,output_threaded[it]) - show_progress && next!(p) - end - end - output = reduce(output,output_threaded) - return output -end - -function inner_loop!( - f,box,icell, - cl::CellList{LargeDenseSystem,N,T}, - output -) where {N,T} - @unpack cutoff_sq = box - cell = cl.cwp[icell] - - # loop over list of non-repeated particles of cell ic - pᵢ = cl.fp[cell.icell] - i = pᵢ.index - while i > 0 - xpᵢ = pᵢ.coordinates - pⱼ = cl.np[i] - j = pⱼ.index - while j > 0 - xpⱼ = pⱼ.coordinates - d2 = norm_sqr(xpᵢ - xpⱼ) + show_progress && println("TinySystems do not show progress.") + @unpack ncp, np = cl + @unpack unit_cell, cutoff_sq = box + for i in 1:ncp[1]-1 + xᵢ = np[i].coordinates + for j in i+1:ncp[1] + xⱼ = wrap_relative_to(np[j].coordinates,xᵢ,unit_cell) + d2 = norm_sqr(xᵢ - xⱼ) if d2 <= cutoff_sq - i_orig = pᵢ.index_original - j_orig = pⱼ.index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + output = f(xᵢ,xⱼ,i,j,d2,output) end - pⱼ = cl.np[pⱼ.index] - j = pⱼ.index end - pᵢ = cl.np[pᵢ.index] - i = pᵢ.index - end - - for jcell in neighbour_cells(box) - output = cell_output!(f,box,cell,cl,output,cell.cartesian+jcell) end - return output end -# -# loops over the particles of a neighbour cell -# -function cell_output!( - f, - box, - icell, - cl::CellList{LargeDenseSystem,N,T}, - output, - jc_cartesian -) where {N,T} - @unpack projected_particles = cl - @unpack nc, cutoff, cutoff_sq = box - jc = cell_linear_index(nc,jc_cartesian) +""" - # Vector connecting cell centers - Δc = cell_center(jc_cartesian,box) - icell.center +``` +iuppert(k::Integer,n::Integer) +``` - # Copy coordinates of particles of icell jcell into continuous array, - # and project them into the vector connecting cell centers - pⱼ = cl.fp[jc] - npcell = cl.npcell[jc] - j = pⱼ.index - for jp in 1:npcell - j_orig = pⱼ.index_original - xpⱼ = pⱼ.coordinates - xproj = dot(xpⱼ - icell.center,Δc) - projected_particles[jp] = ProjectedParticle(j_orig,xproj,xpⱼ) - pⱼ = cl.np[j] - j = pⱼ.index - end - pp = @view(projected_particles[1:npcell]) +Returns the cartesian indexes of of the elements of the upper +triangular part of a square matrix of dimension `n×n`, given +the linear index `k`. - # Sort particles according to projection norm - sort!(pp, by=el->el.xproj,alg=InsertionSort) +### Examples - # Loop over particles of cell icell - pᵢ = cl.fp[icell.icell] - i = pᵢ.index - while i > 0 - xpᵢ = pᵢ.coordinates - xproj = dot(xpᵢ-icell.center,Δc) - j = 1 - while j <= npcell && xproj - pp[j].xproj <= cutoff - xpⱼ = pp[j].coordinates - d2 = norm_sqr(xpᵢ - xpⱼ) - if d2 <= cutoff_sq - i_orig = pᵢ.index_original - j_orig = pp[j].index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) - end - j += 1 - end - pᵢ = cl.np[i] - i = pᵢ.index - end +```julia-repl +julia> iupper(1,3) +(1,2) - return output -end +julia> iupper(3,3) +(2,2) -# -# Serial version for cross-interaction computations -# -function map_pairwise_serial!( - f::F, output, box::Box, - cl::CellListPair{LargeDenseSystem,N,T}; - show_progress=show_progress -) where {F,N,T} - show_progress && (p = Progress(length(cl.small),dt=1)) - for i in eachindex(cl.small) - output = inner_loop!(f,output,i,box,cl) - show_progress && next!(p) - end - return output +julia> iuppert(3,4) +(1,4) + +``` + +""" +@inline function iuppert(k::Integer,n::Integer) + i = n - 1 - floor(Int,sqrt(-8*k + 4*n*(n-1) + 1)/2 - 0.5) + j = k + i + ( (n-i+1)*(n-i) - n*(n-1) )÷2 + return i, j end -# -# Parallel version for cross-interaction computations -# function map_pairwise_parallel!( - f::F1, output, box::Box, - cl::CellListPair{LargeDenseSystem,N,T}; + f::F1, output, box::Box, cl::CellList{TinySystem,N,T}; output_threaded=output_threaded, reduce::F2=reduce, - show_progress=show_progress + show_progress::Bool=false ) where {F1,F2,N,T} - show_progress && (p = Progress(length(cl.small),dt=1)) - @threads for it in 1:nthreads() - for i in splitter(it,length(cl.small)) - output_threaded[it] = inner_loop!(f,output_threaded[it],i,box,cl) - show_progress && next!(p) - end - end - output = reduce(output,output_threaded) - return output -end - -# -# Inner loop of cross-interaction computations -# -function inner_loop!( - f,output,i,box, - cl::CellListPair{LargeDenseSystem,N,T} -) where {N,T} - @unpack unit_cell, nc, cutoff_sq = box - xpᵢ = wrap_to_first(cl.small[i],unit_cell) - ic = particle_cell(xpᵢ,box) - for neighbour_cell in neighbour_cells_all(box) - jc = cell_linear_index(nc,neighbour_cell+ic) - pⱼ = cl.large.fp[jc] - j = pⱼ.index - # loop over particles of cell jc - while j > 0 - xpⱼ = pⱼ.coordinates - d2 = norm_sqr(xpᵢ - xpⱼ) + @unpack ncp, np = cl + @unpack unit_cell, cutoff_sq = box + show_progress && println("TinySystems do not show progress.") + npairs = ncp[1]*(ncp[1]-1)÷2 + @threads for it in 1:nthreads() + for ipair in it:nthreads():npairs + i, j = iuppert(ipair,ncp[1]) + xᵢ = np[i].coordinates + xⱼ = wrap_relative_to(np[j].coordinates,xᵢ,unit_cell) + d2 = norm_sqr(xᵢ - xⱼ) if d2 <= cutoff_sq - j_orig = pⱼ.index_original - output = f(xpᵢ,xpⱼ,i,j_orig,d2,output) + output_threaded[it] = f(xᵢ,xⱼ,i,j,d2,output_threaded[it]) end - pⱼ = cl.large.np[j] - j = pⱼ.index - end + end end + + output = reduce(output,output_threaded) return output end From 4e3da2d09e170d48bb2685ddc817344db9da22ed Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Thu, 29 Jul 2021 17:32:53 -0300 Subject: [PATCH 24/62] deleted LargeHighDensitySystem (not worthwhile) --- src/HighDensitySystems.jl | 49 --------------------------------------- 1 file changed, 49 deletions(-) diff --git a/src/HighDensitySystems.jl b/src/HighDensitySystems.jl index ab8c491a..7f71d464 100644 --- a/src/HighDensitySystems.jl +++ b/src/HighDensitySystems.jl @@ -296,52 +296,3 @@ function cell_output!( return output end - -# -# loops over the particles of a neighbour cell, for -# a LargeHighDensitySystem -# -# all efforts are made to not run anything on unnecessary pairs -# of particles, this includes sorting the projections of the -# particles on the vector connecting cell centers -# -function cell_output!( - f, - box, - icell, - cl::CellList{LargeHighDensitySystem,N,T}, - output, - jc_cartesian -) where {N,T} - @unpack cutoff, cutoff_sq = box - - # Project particles into vector connection cell centers - Δc = cell_center(jc_cartesian,box) - icell.center - Δc = Δc/norm(Δc) - pp = project_particles(jc_cartesian,cl,Δc,icell,box) - - # Sort particles according to projection norm - sort!(pp, by=el->el.xproj, alg=QuickSort) - - # Loop over particles of cell icell - pᵢ = cl.fp[icell.icell] - i = pᵢ.index - while i > 0 - xpᵢ = pᵢ.coordinates - xproj = dot(xpᵢ-icell.center,Δc) - for j in eachindex(pp) - xproj - pp[j].xproj > cutoff && break - xpⱼ = pp[j].coordinates - d2 = norm_sqr(xpᵢ - xpⱼ) - if d2 <= cutoff_sq - i_orig = pᵢ.index_original - j_orig = pp[j].index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) - end - end - pᵢ = cl.np[i] - i = pᵢ.index - end - - return output -end From baa51690d0b7594e45a4c4efbe8f9e85f319d851 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Thu, 29 Jul 2021 17:48:03 -0300 Subject: [PATCH 25/62] HighDensity ready --- src/HighDensitySystems.jl | 26 +++++++++++++------------- src/StructTypes.jl | 11 +++-------- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/HighDensitySystems.jl b/src/HighDensitySystems.jl index 7f71d464..e3cadc20 100644 --- a/src/HighDensitySystems.jl +++ b/src/HighDensitySystems.jl @@ -8,9 +8,9 @@ ``` UpdateCellList!( x::AbstractVector{SVector{N,T}}, - box::Box,cl:CellList{SystemType,N,T}, + box::Box,cl:CellList{HighDensitySystem,N,T}, parallel=true -) where {SystemType<:UnionLargeDense,N,T} +) where {N,T} ``` Function that will update a previously allocated `CellList` structure, given new updated particle @@ -37,9 +37,9 @@ julia> cl = UpdateCellList!(x,box,cl); # update lists function UpdateCellList!( x::AbstractVector{SVector{N,T}}, box::Box, - cl::CellList{SystemType,N,T}; + cl::CellList{HighDensitySystem,N,T}; parallel::Bool=true -) where {SystemType<:UnionLargeDense,N,T} +) where {N,T} @unpack contains_real, cwp, fp, np, npcell, projected_particles = cl number_of_cells = prod(box.nc) @@ -110,9 +110,9 @@ function add_particle_to_celllist!( ip, x::SVector{N,T}, box, - cl::CellList{SystemType,N,T}; + cl::CellList{HighDensitySystem,N,T}; real_particle::Bool=true -) where {SystemType<:UnionLargeDense,N,T} +) where {N,T} @unpack contains_real, ncp, ncwp, cwp, fp, np, npcell = cl ncp[1] += 1 icell_cartesian = particle_cell(x,box) @@ -150,9 +150,9 @@ end # Serial version for self-pairwise computations # function map_pairwise_serial!( - f::F, output, box::Box, cl::CellList{SystemType,N,T}; + f::F, output, box::Box, cl::CellList{HighDensitySystem,N,T}; show_progress::Bool=false -) where {F,SystemType<:UnionLargeDense,N,T} +) where {F,N,T} show_progress && (p = Progress(cl.ncwp[1],dt=1)) for icell in 1:cl.ncwp[1] output = inner_loop!(f,box,icell,cl,output) @@ -165,14 +165,14 @@ end # Parallel version for self-pairwise computations # function map_pairwise_parallel!( - f::F1, output, box::Box, cl::CellList{SystemType,N,T}; + f::F1, output, box::Box, cl::CellList{HighDensitySystem,N,T}; output_threaded=output_threaded, reduce::F2=reduce, show_progress::Bool=false -) where {F1,F2,SystemType<:UnionLargeDense,N,T} +) where {F1,F2,N,T} show_progress && (p = Progress(cl.ncwp[1],dt=1)) @threads for it in 1:nthreads() - for icell in splitter(it,cl.ncwp[1]) + for icell in it:nthreads():cl.ncwp[1] output_threaded[it] = inner_loop!(f,box,icell,cl,output_threaded[it]) show_progress && next!(p) end @@ -183,9 +183,9 @@ end function inner_loop!( f,box,icell, - cl::CellList{SystemType,N,T}, + cl::CellList{HighDensitySystem,N,T}, output -) where {SystemType<:UnionLargeDense,N,T} +) where {N,T} @unpack cutoff_sq = box cell = cl.cwp[icell] diff --git a/src/StructTypes.jl b/src/StructTypes.jl index 93192d6f..68bf4f4c 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -5,11 +5,6 @@ struct TinySystem end struct LowDensitySystem end struct HighDensitySystem end -struct LargeHighDensitySystem end - -const UnionLargeDense = - Union{HighDensitySystem,LargeHighDensitySystem} - """ @@ -336,9 +331,9 @@ function set_system_type(x,box) particles_per_cell = length(x) / prod(box.nc) - if particles_per_cell < 32 - return LowDensitySystem - end +# if particles_per_cell < 32 +# return LowDensitySystem +# end return HighDensitySystem end From 332f2b2713219d388d318563028cff2eaba00bbf Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Thu, 29 Jul 2021 17:48:22 -0300 Subject: [PATCH 26/62] need to recover low density --- src/StructTypes.jl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/StructTypes.jl b/src/StructTypes.jl index 68bf4f4c..fc81d088 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -331,9 +331,9 @@ function set_system_type(x,box) particles_per_cell = length(x) / prod(box.nc) -# if particles_per_cell < 32 -# return LowDensitySystem -# end + if particles_per_cell < 32 + return LowDensitySystem + end return HighDensitySystem end From 44044401f9d4a1dc33d2cc7ae2291552b948a1b0 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 13:01:44 -0300 Subject: [PATCH 27/62] added types of cells --- src/CellListMap.jl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/CellListMap.jl b/src/CellListMap.jl index 582a3df7..7d56053d 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -18,10 +18,13 @@ export LowDensitySystem export HighDensitySystem export LargeHighDensitySystem +export TriclinicCell +export OrthorhombicCell include("./StructTypes.jl") include("./CellOperations.jl") include("./TinySystems.jl") +include("./LowDensitySystems.jl") include("./HighDensitySystems.jl") include("./SystemCommons.jl") From 32d8ba5068e704c11296044cc36a10b252d9e042 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 13:02:09 -0300 Subject: [PATCH 28/62] adapted calls to types of cells --- src/CellOperations.jl | 84 ++++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 41 deletions(-) diff --git a/src/CellOperations.jl b/src/CellOperations.jl index 058ccc26..bd7252ae 100644 --- a/src/CellOperations.jl +++ b/src/CellOperations.jl @@ -1,16 +1,15 @@ # # Function that checks if the particule is outside the computation bounding box # -function out_of_bounding_box(x::SVector{N,T},box::Box{N,T,M}) where {N,T,M} - @unpack cutoff, unit_cell, cell_size, lcell, nc = box - unit_cell_max = sum(@view(unit_cell[:,i]) for i in 1:N) +function out_of_bounding_box(x::SVector{N},box::Box) where N + @unpack cutoff, unit_cell_max = box for i in 1:N (x[i] < -cutoff) && return true (x[i] >= unit_cell_max[i]+cutoff) && return true end return false end -out_of_bounding_box(p::AtomWithIndex,box::Box{N,T,M}) where {N,T,M} = +out_of_bounding_box(p::AtomWithIndex,box::Box) = out_of_bounding_box(p.coordinates,box) """ @@ -22,12 +21,12 @@ replicate_particle!(ip,p::T,box,cl) where {T <: SVector{2,S} where S} Replicates the particle as many times as necessary to fill the computing box. """ -function replicate_particle!(ip,p::T,box,cl) where {T <: SVector{2,S} where S} +function replicate_particle!(ip,p::SVector{2},box,cl) @unpack ranges = box for i in ranges[1] for j in ranges[2] i == 0 && j == 0 && continue - x = translation_image(p,box.unit_cell,(i,j)) + x = translation_image(p,box.unit_cell.matrix,(i,j)) if ! out_of_bounding_box(x,box) cl = add_particle_to_celllist!(ip,x,box,cl;real_particle=false) end @@ -46,13 +45,13 @@ replicate_particle!(ip,p::T,box,cl) where {T <: SVector{3,S} where S} Replicates the particle as many times as necessary to fill the computing box. """ -function replicate_particle!(ip,p::T,box,cl) where {T <: SVector{3,S} where S} +function replicate_particle!(ip,p::SVector{3},box,cl) @unpack ranges = box for i in ranges[1] for j in ranges[2] for k in ranges[3] i == 0 && j == 0 && k == 0 && continue - x = translation_image(p,box.unit_cell,(i,j,k)) + x = translation_image(p,box.unit_cell.matrix,(i,j,k)) if ! out_of_bounding_box(x,box) cl = add_particle_to_celllist!(ip,x,box,cl;real_particle=false) end @@ -62,7 +61,7 @@ function replicate_particle!(ip,p::T,box,cl) where {T <: SVector{3,S} where S} return cl end -function ranges_of_replicas(cell_size, lcell, nc, unit_cell::SMatrix{3,3,T,9}) where T +function ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix::SMatrix{3,3,T}) where T V = SVector{3,T} cmin = ntuple(i->-lcell*cell_size,3) cmax = ntuple(i->(nc[i]-lcell)*cell_size,3) @@ -79,7 +78,7 @@ function ranges_of_replicas(cell_size, lcell, nc, unit_cell::SMatrix{3,3,T,9}) w r_min, r_max = _ranges_of_replicas( SVector{3,Int}(10^6,10^6,10^6), #min SVector{3,Int}(-1,-1,-1), #max - unit_cell, + unit_cell_matrix, cell_vertices ) ranges = SVector{3,UnitRange{Int}}( @@ -90,7 +89,7 @@ function ranges_of_replicas(cell_size, lcell, nc, unit_cell::SMatrix{3,3,T,9}) w return ranges end -function ranges_of_replicas(cell_size, lcell, nc,unit_cell::SMatrix{2,2,T,4}) where T +function ranges_of_replicas(cell_size, lcell, nc,unit_cell_matrix::SMatrix{2,2,T}) where T V = SVector{2,T} cmin = ntuple(i->-lcell*cell_size,2) cmax = ntuple(i->(nc[i]-lcell)*cell_size,2) @@ -103,7 +102,7 @@ function ranges_of_replicas(cell_size, lcell, nc,unit_cell::SMatrix{2,2,T,4}) wh r_min, r_max = _ranges_of_replicas( SVector{2,Int}(10^6,10^6), #min SVector{2,Int}(-1,-1), #max - unit_cell, + unit_cell_matrix, cell_vertices ) ranges = SVector{2,UnitRange{Int}}( @@ -137,53 +136,56 @@ wrap_cell_fraction(x,cell) `x` is a vector of dimension `N` and `cell` a matrix of dimension `NxN` """ -@inline function wrap_cell_fraction(x,cell) - p = rem.(cell\x,1) - for i in eachindex(p) - if p[i] < 0 - @set! p[i] += 1 - end - end +@inline function wrap_cell_fraction(x,unit_cell_matrix) + p = rem.(unit_cell_matrix\x,1) + p = @. ifelse(p < 0, p + 1, p) return p end """ ``` -wrap_to_first(x::SVector{N,T},cell) where {N,T} +wrap_to_first(x,unit_cell_matrix) ``` Wraps the coordinates of point `x` such that the returning coordinates are in the first unit cell with all-positive coordinates. """ -@inline function wrap_to_first(x,cell) - p = wrap_cell_fraction(x,cell) - return cell*p +@inline function wrap_to_first(x,unit_cell_matrix) + p = wrap_cell_fraction(x,unit_cell_matrix) + return unit_cell_matrix*p end """ ``` -wrap_to_first(x::SVector{N,T},box::Box) +wrap_to_first(x,box::Box) ``` Wraps the coordinates of point `x` such that the returning coordinates are in the first unit cell with all-positive coordinates, given the `Box` structure. """ -@inline wrap_to_first(x,box::Box) = wrap_to_first(x,box.unit_cell) +@inline wrap_to_first(x,box::Box) = wrap_to_first(x,box.unit_cell.matrix) + +@inline function wrap_to_first(x,box::Box{OrthorhombicCell,N,T}) where {N,T} + sides = SVector{N,T}(ntuple(i->box.unit_cell.matrix[i,i],N)) + x = rem.(x,sides) + x = @. ifelse(x < 0, x + sides, x) + return x +end """ ``` -wrap_relative_to(x::T, xref, cell) where T<:AbstractVector +wrap_relative_to(x, xref, unit_cell_matrix::SMatrix{N,N,T}) where {N,T} ``` Wraps the coordinates of point `x` such that it is the minimum image relative to `xref`. """ -function wrap_relative_to(x::T, xref, cell) where T<:AbstractVector - p = SVector{length(x),eltype(x)}(rem.(cell\(x-xref),1)) +@inline function wrap_relative_to(x, xref, unit_cell_matrix::SMatrix{N,N,T}) where {N,T} + p = SVector{N,T}(rem.(unit_cell_matrix\(x-xref),1)) for i in eachindex(p) if p[i] > 0.5 @set! p[i] -= 1 @@ -191,26 +193,26 @@ function wrap_relative_to(x::T, xref, cell) where T<:AbstractVector @set! p[i] += 1 end end - return cell*p + xref + return unit_cell_matrix*p + xref end """ ``` -translation_image(x::SVector{N,T},unit_cell,indices) where {N,T} +translation_image(x::SVector{N,T},unit_cell_matrix,indices) where {N,T} ``` -Translate vector `x` according to the `unit_cell` lattice vectors and the `indices` +Translate vector `x` according to the `unit_cell_matrix` lattice vectors and the `indices` provided. """ -translation_image(x::SVector{N,T},unit_cell,indices) where {T,N} = - x + unit_cell*SVector{N,T}(ntuple(i -> indices[i],N)) +@inline translation_image(x::SVector{N,T},unit_cell_matrix,indices) where {N,T} = + x + unit_cell_matrix*SVector{N,T}(ntuple(i -> indices[i],N)) """ ``` -neighbour_cells(box::Box{N,T,M}) where {N,M} +neighbour_cells(box::Box{UnitCellType,N}) where {UnitCellType,N} ``` Function that returns the iterator of the cartesian indices of the cells that must be @@ -219,7 +221,7 @@ if the cells have sides of length `box.cell_size`. `N` can be `2` or `3`, for two- or three-dimensional systems. """ -function neighbour_cells(box::Box{3,T,9}) where T +function neighbour_cells(box::Box{UnitCellType,3}) where UnitCellType @unpack lcell = box nb = Iterators.flatten(( CartesianIndices((1:lcell,-lcell:lcell,-lcell:lcell)), @@ -228,7 +230,7 @@ function neighbour_cells(box::Box{3,T,9}) where T )) return nb end -function neighbour_cells(box::Box{2,T,4}) where T +function neighbour_cells(box::Box{UnitCellType,2}) where UnitCellType @unpack lcell = box nb = Iterators.flatten(( CartesianIndices((1:lcell,-lcell:lcell)), @@ -240,7 +242,7 @@ end """ ``` -neighbour_cells_all(box::Box{N,T,M}) where {N,M} +neighbour_cells_all(box::Box{UnitCellType,N}) where N ``` Function that returns the iterator of the cartesian indices of all neighbouring @@ -248,11 +250,11 @@ cells of a cell if the cells have sides of `box.cell_size`. `N` can be `2` or `3`, for two- or three-dimensional systems. """ -function neighbour_cells_all(box::Box{3,T,9}) where T +function neighbour_cells_all(box::Box{UnitCellType,3}) where UnitCellType @unpack lcell = box return CartesianIndices((-lcell:lcell,-lcell:lcell,-lcell:lcell)) end -function neighbour_cells_all(box::Box{2,T,4}) where T +function neighbour_cells_all(box::Box{UnitCellType,2}) where UnitCellType @unpack lcell = box return CartesianIndices((-lcell:lcell,-lcell:lcell)) end @@ -267,7 +269,7 @@ Returns the coordinates of the computing cell to which a particle belongs, given and the cell_size. """ -@inline particle_cell(x::SVector{N,T}, box::Box) where {N,T} = +@inline particle_cell(x::SVector{N}, box::Box) where N = CartesianIndex(ntuple(i -> floor(Int,x[i]/box.cell_size) + box.lcell + 1, N)) """ @@ -280,7 +282,7 @@ Given the linear index of the cell in the cell list, returns the cartesian indic of the cell (for arbitrary dimension N). """ -@inline cell_cartesian_indices(nc::SVector{N,Int}, i1D) where {N} = +@inline cell_cartesian_indices(nc::SVector{N,Int}, i1D) where N = CartesianIndices(ntuple(i -> nc[i],N))[i1D] """ From 1ec1b99e869e28ddd19f6feecd05b0750b1b9518 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 13:02:23 -0300 Subject: [PATCH 29/62] example receives sytem type --- src/examples.jl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/examples.jl b/src/examples.jl index a3702ada..297aa261 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -336,7 +336,7 @@ end # # florpi # -function florpi(;N=100_000,cd=true,parallel=true) +function florpi(;N=100_000,cd=true,parallel=true,SystemType=nothing) @inline dot(x::SVector{3,Float64},y::SVector{3,Float64}) = x[1]*y[1] + x[2]*y[2] + x[3]*y[3] @@ -378,8 +378,8 @@ function florpi(;N=100_000,cd=true,parallel=true) positions = reshape(reinterpret(SVector{3,Float64},positions),n) velocities = reshape(reinterpret(SVector{3,Float64},velocities),n) - box = Box(Lbox, r_max) - cl = CellList(positions,box,parallel=parallel) + box = Box(Lbox, r_max, UnitCellType=OrthorhombicCell) + cl = CellList(positions,box,parallel=parallel,SystemType=SystemType) hist = (zeros(Int,length(rbins)-1), zeros(Float64,length(rbins)-1)) # Needs this to stabilize the type of velocities and hist, probably From 3857e24a9c77d8ada55bc1983043c24cb0586d98 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 13:02:38 -0300 Subject: [PATCH 30/62] removed threading of initialization --- src/HighDensitySystems.jl | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/src/HighDensitySystems.jl b/src/HighDensitySystems.jl index e3cadc20..c9d10dbf 100644 --- a/src/HighDensitySystems.jl +++ b/src/HighDensitySystems.jl @@ -52,23 +52,11 @@ function UpdateCellList!( end cl.ncwp[1] = 0 - if parallel - @threads for i in eachindex(cwp) - contains_real[i] = false - cwp[i] = zero(Cell{N,T}) - fp[i] = zero(AtomWithIndex{N,T}) - npcell[i] = 0 - end - @threads for i in eachindex(np) - np[i] = zero(AtomWithIndex{N,T}) - end - else - fill!(contains_real,false) - fill!(cwp,zero(Cell{N,T})) - fill!(fp,zero(AtomWithIndex{N,T})) - fill!(np,zero(AtomWithIndex{N,T})) - fill!(npcell,0) - end + fill!(contains_real,false) + fill!(cwp,zero(Cell{N,T})) + fill!(fp,zero(AtomWithIndex{N,T})) + fill!(np,zero(AtomWithIndex{N,T})) + fill!(npcell,0) # # The following part cannot be *easily* paralelized, because @@ -79,7 +67,7 @@ function UpdateCellList!( # Add virtual particles to edge cells # for (ip,particle) in pairs(x) - p = wrap_to_first(particle,box.unit_cell) + p = wrap_to_first(particle,box) cl = replicate_particle!(ip,p,box,cl) end # @@ -87,7 +75,7 @@ function UpdateCellList!( # always a true particle # for (ip,particle) in pairs(x) - p = wrap_to_first(particle,box.unit_cell) + p = wrap_to_first(particle,box) cl = add_particle_to_celllist!(ip,p,box,cl) end From b912baf21c977357ab9e76c5feeaec3ee6532c11 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 13:03:25 -0300 Subject: [PATCH 31/62] changed type information on calls --- src/LowDensitySystems.jl | 198 +++++++-------------------------------- src/StructTypes.jl | 73 ++++++++++----- src/SystemCommons.jl | 8 +- src/TinySystems.jl | 2 - 4 files changed, 85 insertions(+), 196 deletions(-) diff --git a/src/LowDensitySystems.jl b/src/LowDensitySystems.jl index aaf0e2d9..6bbc77ed 100644 --- a/src/LowDensitySystems.jl +++ b/src/LowDensitySystems.jl @@ -1,6 +1,5 @@ # -# Functions to deal with systems of medium size, for which some -# pre-processing of the cell list brings too much overhead. +# Functions for low density systems # """ @@ -8,7 +7,7 @@ ``` UpdateCellList!( x::AbstractVector{SVector{N,T}}, - box::Box,cl:CellList{LargeDenseSystem,N,T}, + box::Box,cl:CellList{LowDensitySystem,N,T}, parallel=true ) where {N,T} ``` @@ -37,10 +36,10 @@ julia> cl = UpdateCellList!(x,box,cl); # update lists function UpdateCellList!( x::AbstractVector{SVector{N,T}}, box::Box, - cl::CellList{SystemType,N,T}; + cl::CellList{LowDensitySystem,N,T}; parallel::Bool=true -) where {SystemType<:UnionLargeDense,N,T} - @unpack contains_real, cwp, fp, np, npcell, projected_particles = cl +) where {N,T} + @unpack contains_real, cwp, fp, np, npcell = cl number_of_cells = prod(box.nc) if number_of_cells > length(cwp) @@ -52,23 +51,11 @@ function UpdateCellList!( end cl.ncwp[1] = 0 - if parallel - @threads for i in eachindex(cwp) - contains_real[i] = false - cwp[i] = zero(Cell{N,T}) - fp[i] = zero(AtomWithIndex{N,T}) - npcell[i] = 0 - end - @threads for i in eachindex(np) - np[i] = zero(AtomWithIndex{N,T}) - end - else - fill!(contains_real,false) - fill!(cwp,zero(Cell{N,T})) - fill!(fp,zero(AtomWithIndex{N,T})) - fill!(np,zero(AtomWithIndex{N,T})) - fill!(npcell,0) - end + fill!(contains_real,false) + fill!(cwp,zero(Cell{N,T})) + fill!(fp,zero(AtomWithIndex{N,T})) + fill!(np,zero(AtomWithIndex{N,T})) + fill!(npcell,0) # # The following part cannot be *easily* paralelized, because @@ -79,7 +66,7 @@ function UpdateCellList!( # Add virtual particles to edge cells # for (ip,particle) in pairs(x) - p = wrap_to_first(particle,box.unit_cell) + p = wrap_to_first(particle,box) cl = replicate_particle!(ip,p,box,cl) end # @@ -87,17 +74,10 @@ function UpdateCellList!( # always a true particle # for (ip,particle) in pairs(x) - p = wrap_to_first(particle,box.unit_cell) + p = wrap_to_first(particle,box) cl = add_particle_to_celllist!(ip,p,box,cl) end - maximum_npcell = maximum(npcell) - if maximum_npcell > length(projected_particles[1]) - for i in 1:nthreads() - resize!(projected_particles[i],ceil(Int,1.2*maximum_npcell)) - end - end - return cl end @@ -110,9 +90,9 @@ function add_particle_to_celllist!( ip, x::SVector{N,T}, box, - cl::CellList{SystemType,N,T}; + cl::CellList{LowDensitySystem,N,T}; real_particle::Bool=true -) where {SystemType<:UnionLargeDense,N,T} +) where {N,T} @unpack contains_real, ncp, ncwp, cwp, fp, np, npcell = cl ncp[1] += 1 icell_cartesian = particle_cell(x,box) @@ -126,7 +106,7 @@ function add_particle_to_celllist!( cwp[ncwp[1]] = Cell{N,T}( icell, icell_cartesian, - cell_center(icell_cartesian,box) + zeros(SVector{N,T}) ) end if fp[icell].index == 0 @@ -152,7 +132,8 @@ end function map_pairwise_serial!( f::F, output, box::Box, cl::CellList{SystemType,N,T}; show_progress::Bool=false -) where {F,SystemType<:UnionLargeDense,N,T} +) where {F,SystemType,N,T} +@show cl.ncwp[1] show_progress && (p = Progress(cl.ncwp[1],dt=1)) for icell in 1:cl.ncwp[1] output = inner_loop!(f,box,icell,cl,output) @@ -165,14 +146,14 @@ end # Parallel version for self-pairwise computations # function map_pairwise_parallel!( - f::F1, output, box::Box, cl::CellList{SystemType,N,T}; + f::F1, output, box::Box, cl::CellList{LowDensitySystem,N,T}; output_threaded=output_threaded, reduce::F2=reduce, show_progress::Bool=false -) where {F1,F2,SystemType<:UnionLargeDense,N,T} +) where {F1,F2,N,T} show_progress && (p = Progress(cl.ncwp[1],dt=1)) @threads for it in 1:nthreads() - for icell in splitter(it,cl.ncwp[1]) + for icell in it:nthreads():cl.ncwp[1] output_threaded[it] = inner_loop!(f,box,icell,cl,output_threaded[it]) show_progress && next!(p) end @@ -183,9 +164,9 @@ end function inner_loop!( f,box,icell, - cl::CellList{SystemType,N,T}, + cl::CellList{LowDensitySystem,N,T}, output -) where {SystemType<:UnionLargeDense,N,T} +) where {N,T} @unpack cutoff_sq = box cell = cl.cwp[icell] @@ -202,7 +183,7 @@ function inner_loop!( if d2 <= cutoff_sq i_orig = pᵢ.index_original j_orig = pⱼ.index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) end pⱼ = cl.np[pⱼ.index] j = pⱼ.index @@ -218,152 +199,39 @@ function inner_loop!( return output end -function project_particles(jc_cartesian,cl,Δc,icell,box) - @unpack nc = box - @unpack fp = cl - projected_particles = cl.projected_particles[threadid()] - jc = cell_linear_index(nc,jc_cartesian) - pⱼ = fp[jc] - npcell = cl.npcell[jc] - j = pⱼ.index - for jp in 1:npcell - j_orig = pⱼ.index_original - xpⱼ = pⱼ.coordinates - xproj = dot(xpⱼ-icell.center,Δc) - projected_particles[jp] = ProjectedParticle(j_orig,xproj,xpⱼ) - pⱼ = cl.np[j] - j = pⱼ.index - end - pp = @view(projected_particles[1:npcell]) - return pp -end - -# -# loops over the particles of a neighbour cell, for HugeDenseSystem -# -# all efforts are made to not run anything on unnecessary pairs -# of particles, this includes sorting the projections -# -function cell_output!( - f, - box, - icell, - cl::CellList{HugeDenseSystem,N,T}, - output, - jc_cartesian -) where {N,T} - @unpack cutoff, cutoff_sq = box - - # Project particles into vector connection cell centers - Δc = cell_center(jc_cartesian,box) - icell.center - Δc = Δc/norm(Δc) - pp = project_particles(jc_cartesian,cl,Δc,icell,box) - - # Sort particles according to projection norm - sort!(pp, by=el->el.xproj, alg=HeapSort) - - # Loop over particles of cell icell - pᵢ = cl.fp[icell.icell] - i = pᵢ.index - while i > 0 - xpᵢ = pᵢ.coordinates - xproj = dot(xpᵢ-icell.center,Δc) - for j in eachindex(pp) - xproj - pp[j].xproj > cutoff && break - xpⱼ = pp[j].coordinates - d2 = norm_sqr(xpᵢ - xpⱼ) - if d2 <= cutoff_sq - i_orig = pᵢ.index_original - j_orig = pp[j].index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) - end - end - pᵢ = cl.np[i] - i = pᵢ.index - end - - return output -end - # -# loops over the particles of a neighbour cell, for LargeDenseSystem +# loops over the particles of a neighbour cell, for LowDensitySystems # not large enough such that sorting the projections is useful # function cell_output!( f, box, icell, - cl::CellList{LargeDenseSystem,N,T}, + cl::CellList{LowDensitySystem,N,T}, output, jc_cartesian ) where {N,T} - @unpack cutoff, cutoff_sq = box - - # Vector connecting cell centers - Δc = cell_center(jc_cartesian,box) - icell.center - Δc = Δc/norm(Δc) - pp = project_particles(jc_cartesian,cl,Δc,icell,box) + @unpack cutoff_sq, nc = box + jcell = cell_linear_index(nc,jc_cartesian) - # Loop over particles of cell icell pᵢ = cl.fp[icell.icell] i = pᵢ.index while i > 0 xpᵢ = pᵢ.coordinates - xproj = dot(xpᵢ-icell.center,Δc) - - # Partition pp array according to the current projections - n = partition!(pp, el -> el.xproj - xproj <= cutoff) - - # Compute the interactions - for j in 1:n - xpⱼ = pp[j].coordinates - d2 = norm_sqr(xpᵢ - xpⱼ) - if d2 <= cutoff_sq - i_orig = pᵢ.index_original - j_orig = pp[j].index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) - end - end - pᵢ = cl.np[i] - i = pᵢ.index - end - - return output -end - -# -# loops over the particles of a neighbour cell -# -function cell_output!( - f, - box, - icell, - cl::CellList{MediumDenseSystem,N,T}, - output, - jc_cartesian -) where {N,T} - @unpack nc, cutoff_sq = box - jc = cell_linear_index(nc,jc_cartesian) - - # loop over list of non-repeated particles of cell ic - pᵢ = cl.fp[icell.icell] - i = pᵢ.index - while i > 0 - xpᵢ = pᵢ.coordinates - pⱼ = cl.fp[jc] + pⱼ = cl.fp[jcell] j = pⱼ.index - i_orig = pᵢ.index_original while j > 0 xpⱼ = pⱼ.coordinates - d2 = norm_sqr(xpᵢ-xpⱼ) - j_orig = pⱼ.index_original + d2 = norm_sqr(xpᵢ - xpⱼ) if d2 <= cutoff_sq + i_orig = pᵢ.index_original + j_orig = pⱼ.index_original output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) end - pⱼ = cl.np[pⱼ.index] + pⱼ = cl.np[j] j = pⱼ.index end - pᵢ = cl.np[pᵢ.index] + pᵢ = cl.np[i] i = pᵢ.index end diff --git a/src/StructTypes.jl b/src/StructTypes.jl index fc81d088..5b64de1e 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -6,6 +6,17 @@ struct TinySystem end struct LowDensitySystem end struct HighDensitySystem end +# +# We make difference between these two because wrapping in orthorhombic +# cells is cheaper +# +struct TriclinicCell end +struct OrthorhombicCell end + +struct UnitCell{UnitCellType,N,T,M} + matrix::SMatrix{N,N,T,M} +end + """ $(TYPEDEF) @@ -32,8 +43,8 @@ Box{3, Float64} ``` """ -Base.@kwdef struct Box{N,T,M} - unit_cell::SMatrix{N,N,T,M} +Base.@kwdef struct Box{UnitCellType,N,T,M} + unit_cell::UnitCell{UnitCellType,N,T,M} lcell::Int nc::SVector{N,Int} cutoff::T @@ -41,6 +52,7 @@ Base.@kwdef struct Box{N,T,M} ranges::SVector{N,UnitRange{Int}} scale_cutoff::T cell_size::T + unit_cell_max::SVector{N,T} end """ @@ -68,30 +80,31 @@ Box{3, Float64} """ function Box( - unit_cell::AbstractMatrix, + unit_cell_matrix::AbstractMatrix, cutoff, T::DataType, lcell::Int=1, - scale_cutoff=1.0 + scale_cutoff=1.0, + UnitCellType=TriclinicCell ) @assert lcell >= 1 "lcell must be greater or equal to 1" @assert scale_cutoff >= 1 "scale_cutoff must be greater or equal to 1.0" - N = size(unit_cell)[1] - @assert N == size(unit_cell)[2] "Unit cell matrix must be square." - @assert count(unit_cell .< 0) == 0 "Unit cell lattice vectors must only contain non-negative coordinates." + N = size(unit_cell_matrix)[1] + @assert N == size(unit_cell_matrix)[2] "Unit cell matrix must be square." + @assert count(unit_cell_matrix .< 0) == 0 "Unit cell lattice vectors must only contain non-negative coordinates." - unit_cell = SMatrix{N,N,T}(unit_cell) + unit_cell = UnitCell{UnitCellType,N,T,N*N}(SMatrix{N,N,T,N*N}(unit_cell_matrix)) cell_size = scale_cutoff*cutoff/lcell - unit_cell_max = sum(@view(unit_cell[:,i]) for i in 1:N) + unit_cell_max = sum(@view(unit_cell_matrix[:,i]) for i in 1:N) ### lcell*cell_size must be == unit_cell_max nc = SVector{N,Int}(ceil.(Int,unit_cell_max/cell_size) .+ 2) - ranges = ranges_of_replicas(cell_size, lcell, nc, unit_cell) - return Box{N,T,N*N}( + ranges = ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix) + return Box{UnitCellType,N,T,N*N}( unit_cell, lcell, nc, @@ -99,20 +112,22 @@ function Box( cutoff^2, ranges, scale_cutoff, - cell_size + cell_size, + unit_cell_max ) end Box( - unit_cell::AbstractMatrix, + unit_cell_matrix::AbstractMatrix, cutoff; T::DataType=Float64, lcell::Int=1, - scale_cutoff=1.0 -) = Box(unit_cell,cutoff,T,lcell,scale_cutoff) + scale_cutoff=1.0, + UnitCellType=TriclinicCell +) = Box(unit_cell_matrix,cutoff,T,lcell,scale_cutoff,UnitCellType) function Base.show(io::IO,::MIME"text/plain",box::Box) println(typeof(box)) - println(" unit cell: ", box.unit_cell) + println(" unit cell matrix: ", box.unit_cell.matrix) println(" cutoff: ", box.cutoff) println(" number of cells on each dimension: ",box.nc, " (lcell: ",box.lcell,")") print(" Total number of cells: ", prod(box.nc)) @@ -143,12 +158,13 @@ function Box( cutoff, T::DataType, lcell::Int=1, - scale_cutoff=1.0 + scale_cutoff=1.0, + UnitCellType=OrthorhombicCell ) N = length(sides) cart_idxs = CartesianIndices((1:N,1:N)) # Build unit cell matrix from lengths - unit_cell = SMatrix{N,N,T,N*N}( + unit_cell_matrix = SMatrix{N,N,T,N*N}( ntuple(N*N) do i c = cart_idxs[i] if c[1] == c[2] @@ -158,15 +174,23 @@ function Box( end end ) - return Box(unit_cell,cutoff,T,lcell,scale_cutoff) + return Box( + unit_cell_matrix, + cutoff, + T, + lcell, + scale_cutoff, + UnitCellType + ) end Box( sides::AbstractVector, cutoff; T::DataType=Float64, lcell::Int=1, - scale_cutoff=1.0 -) = Box(sides,cutoff,T,lcell,scale_cutoff) + scale_cutoff=1.0, + UnitCellType=OrthorhombicCell +) = Box(sides,cutoff,T,lcell,scale_cutoff,UnitCellType) """ @@ -290,7 +314,7 @@ function CellList( parallel::Bool=true, SystemType=nothing ) where {N,T} - number_of_cells = ceil(Int,prod(box.nc)) + number_of_cells = prod(box.nc) # number_of_particles is a lower bound, will be resized when necessary to incorporate particle images number_of_particles = ceil(Int,1.2*length(x)) ncwp = [0] @@ -300,9 +324,7 @@ function CellList( fp = Vector{AtomWithIndex{N,T}}(undef,number_of_cells) np = Vector{AtomWithIndex{N,T}}(undef,number_of_particles) npcell = Vector{Int}(undef,number_of_cells) - projected_particles = [ - Vector{ProjectedParticle{N,T}}(undef,0) for i in 1:nthreads() - ] + projected_particles = [ Vector{ProjectedParticle{N,T}}(undef,0) for i in 1:nthreads() ] # Set automatically the system type, as a function of the # total number of particles and the number of particles per cell @@ -331,6 +353,7 @@ function set_system_type(x,box) particles_per_cell = length(x) / prod(box.nc) + # what is low? what is high? to test if particles_per_cell < 32 return LowDensitySystem end diff --git a/src/SystemCommons.jl b/src/SystemCommons.jl index 426334b1..63f7040a 100644 --- a/src/SystemCommons.jl +++ b/src/SystemCommons.jl @@ -83,14 +83,14 @@ end """ ``` -cell_center(c::CartesianIndex{N},box::Box{N,T,M}) where {N,T,M} +cell_center(c::CartesianIndex{N},box::Box{UnitCellType,N,T}) where {UnitCellType,N,T} ``` Computes the geometric center of a computin cell, to be used in the projection of points. Returns a `SVector{N,T}` """ -@inline cell_center(c::CartesianIndex{N},box::Box{N,T,M}) where {N,T,M} = +@inline cell_center(c::CartesianIndex{N},box::Box{UnitCellType,N,T}) where {UnitCellType,N,T} = SVector{N,T}(ntuple(i -> box.cell_size*(c[i] - 0.5 - box.lcell), N)) # @@ -142,8 +142,8 @@ function inner_loop!( f,output,i,box, cl::CellListPair{SystemType,N,T} ) where {SystemType,N,T} - @unpack unit_cell, nc, cutoff_sq = box - xpᵢ = wrap_to_first(cl.small[i],unit_cell) + @unpack nc, cutoff_sq = box + xpᵢ = wrap_to_first(cl.small[i],box) ic = particle_cell(xpᵢ,box) for neighbour_cell in neighbour_cells_all(box) jc = cell_linear_index(nc,neighbour_cell+ic) diff --git a/src/TinySystems.jl b/src/TinySystems.jl index 32c5aa24..05908f94 100644 --- a/src/TinySystems.jl +++ b/src/TinySystems.jl @@ -53,8 +53,6 @@ function UpdateCellList!( return cl end -using LoopVectorization - # # Serial version for self-pairwise computations # From 5169bca7bad085458493fff4658741ac0eda2065 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 13:26:54 -0300 Subject: [PATCH 32/62] remove debugging flag --- src/LowDensitySystems.jl | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/LowDensitySystems.jl b/src/LowDensitySystems.jl index 6bbc77ed..1c423039 100644 --- a/src/LowDensitySystems.jl +++ b/src/LowDensitySystems.jl @@ -133,7 +133,6 @@ function map_pairwise_serial!( f::F, output, box::Box, cl::CellList{SystemType,N,T}; show_progress::Bool=false ) where {F,SystemType,N,T} -@show cl.ncwp[1] show_progress && (p = Progress(cl.ncwp[1],dt=1)) for icell in 1:cl.ncwp[1] output = inner_loop!(f,box,icell,cl,output) @@ -162,11 +161,20 @@ function map_pairwise_parallel!( return output end +@inline function distance_sq(x::AbstractVector{T}, y::AbstractVector{T}) where T + @assert length(x) == length(y) + d = zero(T) + @inbounds for i in eachindex(x) + d += (x[i]-y[i])^2 + end + return d +end + function inner_loop!( f,box,icell, - cl::CellList{LowDensitySystem,N,T}, + cl::CellList{LowDensitySystem}, output -) where {N,T} +) @unpack cutoff_sq = box cell = cl.cwp[icell] @@ -192,9 +200,9 @@ function inner_loop!( i = pᵢ.index end - for jcell in neighbour_cells(box) - output = cell_output!(f,box,cell,cl,output,cell.cartesian+jcell) - end + #for jcell in neighbour_cells(box) + # output = cell_output!(f,box,cell,cl,output,cell.cartesian+jcell) + #end return output end From 82c2f66348ed7c807bc7912a9f3a1fe2ef42e082 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 13:34:17 -0300 Subject: [PATCH 33/62] recover --- src/LowDensitySystems.jl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/LowDensitySystems.jl b/src/LowDensitySystems.jl index 1c423039..88ea0284 100644 --- a/src/LowDensitySystems.jl +++ b/src/LowDensitySystems.jl @@ -200,9 +200,9 @@ function inner_loop!( i = pᵢ.index end - #for jcell in neighbour_cells(box) - # output = cell_output!(f,box,cell,cl,output,cell.cartesian+jcell) - #end + for jcell in neighbour_cells(box) + output = cell_output!(f,box,cell,cl,output,cell.cartesian+jcell) + end return output end From 24ee1d07bd60eb52d16d69dc696d130ae053438c Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 13:54:10 -0300 Subject: [PATCH 34/62] return HighDensitySystem always --- src/StructTypes.jl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/StructTypes.jl b/src/StructTypes.jl index 5b64de1e..9961a8f5 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -347,6 +347,9 @@ end function set_system_type(x,box) + #return LowDensitySystem + return HighDensitySystem + if length(x) <= 20 return TinySystem end From 00aedb4a119c191fc2504a080d27e092a2bfa121 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 14:50:58 -0300 Subject: [PATCH 35/62] some refinements in example --- src/examples.jl | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/examples.jl b/src/examples.jl index 297aa261..73332270 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -340,7 +340,7 @@ function florpi(;N=100_000,cd=true,parallel=true,SystemType=nothing) @inline dot(x::SVector{3,Float64},y::SVector{3,Float64}) = x[1]*y[1] + x[2]*y[2] + x[3]*y[3] - function compute_pairwise_mean_cell_lists!(x,y,i,j,d2,hist,velocities,rbins,sides) + function compute_pairwise_mean_cell_lists!(x,y,i,j,d2,hist,velocities,rbins) d = x - y r = sqrt(d2) ibin = searchsortedfirst(rbins, r) - 1 @@ -350,8 +350,7 @@ function florpi(;N=100_000,cd=true,parallel=true,SystemType=nothing) end function reduce_hist(hist,hist_threaded) - hist = hist_threaded[1] - for i in 2:Threads.nthreads() + for i in 1:Threads.nthreads() hist[1] .+= hist_threaded[i][1] hist[2] .+= hist_threaded[i][2] end @@ -378,14 +377,14 @@ function florpi(;N=100_000,cd=true,parallel=true,SystemType=nothing) positions = reshape(reinterpret(SVector{3,Float64},positions),n) velocities = reshape(reinterpret(SVector{3,Float64},velocities),n) - box = Box(Lbox, r_max, UnitCellType=OrthorhombicCell) + box = Box(Lbox, r_max, UnitCellType=OrthorhombicCell, lcell=1) cl = CellList(positions,box,parallel=parallel,SystemType=SystemType) hist = (zeros(Int,length(rbins)-1), zeros(Float64,length(rbins)-1)) # Needs this to stabilize the type of velocities and hist, probably - function barrier(f!,velocities,rbins,Lbox,hist,box,cl,reduce_hist,parallel) + function barrier(f!,velocities,rbins,hist,box,cl,reduce_hist,parallel) hist = map_pairwise!( - (x,y,i,j,d2,hist) -> f!(x,y,i,j,d2,hist,velocities,rbins,Lbox), + (x,y,i,j,d2,hist) -> f!(x,y,i,j,d2,hist,velocities,rbins), hist, box, cl, reduce=reduce_hist, parallel=parallel @@ -394,7 +393,7 @@ function florpi(;N=100_000,cd=true,parallel=true,SystemType=nothing) end hist = barrier(compute_pairwise_mean_cell_lists!, - velocities,rbins,Lbox,hist,box,cl,reduce_hist,parallel) + velocities,rbins,hist,box,cl,reduce_hist,parallel) n_pairs = hist[1] mean_v_r = hist[2] From 859bc5cf4bf6d03170768e4476e11975e01d4ded Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 14:58:51 -0300 Subject: [PATCH 36/62] cell_size is a vector now --- src/CellOperations.jl | 10 +++++----- src/StructTypes.jl | 15 +++++++++------ src/SystemCommons.jl | 2 +- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/CellOperations.jl b/src/CellOperations.jl index bd7252ae..d9ce9483 100644 --- a/src/CellOperations.jl +++ b/src/CellOperations.jl @@ -63,8 +63,8 @@ end function ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix::SMatrix{3,3,T}) where T V = SVector{3,T} - cmin = ntuple(i->-lcell*cell_size,3) - cmax = ntuple(i->(nc[i]-lcell)*cell_size,3) + cmin = -lcell*cell_size + cmax = (nc .- lcell) .* cell_size cell_vertices = SVector{8,V}( V( cmin[1], cmin[2], cmin[3] ), V( cmin[1], cmin[2], cmax[3] ), @@ -91,8 +91,8 @@ end function ranges_of_replicas(cell_size, lcell, nc,unit_cell_matrix::SMatrix{2,2,T}) where T V = SVector{2,T} - cmin = ntuple(i->-lcell*cell_size,2) - cmax = ntuple(i->(nc[i]-lcell)*cell_size,2) + cmin = -lcell*cell_size + cmax = (nc .- lcell) .* cell_size cell_vertices = SVector{4,V}( V( cmin[1], cmin[2] ), V( cmin[1], cmax[2] ), @@ -270,7 +270,7 @@ and the cell_size. """ @inline particle_cell(x::SVector{N}, box::Box) where N = - CartesianIndex(ntuple(i -> floor(Int,x[i]/box.cell_size) + box.lcell + 1, N)) + CartesianIndex(ntuple(i -> floor(Int,x[i]/box.cell_size[i]) + box.lcell + 1, N)) """ diff --git a/src/StructTypes.jl b/src/StructTypes.jl index 9961a8f5..761c073c 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -51,7 +51,7 @@ Base.@kwdef struct Box{UnitCellType,N,T,M} cutoff_sq::T ranges::SVector{N,UnitRange{Int}} scale_cutoff::T - cell_size::T + cell_size::SVector{N,T} unit_cell_max::SVector{N,T} end @@ -96,12 +96,14 @@ function Box( @assert count(unit_cell_matrix .< 0) == 0 "Unit cell lattice vectors must only contain non-negative coordinates." unit_cell = UnitCell{UnitCellType,N,T,N*N}(SMatrix{N,N,T,N*N}(unit_cell_matrix)) - cell_size = scale_cutoff*cutoff/lcell unit_cell_max = sum(@view(unit_cell_matrix[:,i]) for i in 1:N) + + nc_min = @. floor.(Int,unit_cell_max/cutoff) + @assert count(nc_min .== 0) == 0 "Cutoff smaller than unit cell size. " + cell_size_max = unit_cell_max ./ nc_min + cell_size = cell_size_max/lcell -### lcell*cell_size must be == unit_cell_max - - nc = SVector{N,Int}(ceil.(Int,unit_cell_max/cell_size) .+ 2) + nc = SVector{N,Int}(ceil.(Int,unit_cell_max ./ cell_size) .+ 2) ranges = ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix) return Box{UnitCellType,N,T,N*N}( @@ -129,7 +131,8 @@ function Base.show(io::IO,::MIME"text/plain",box::Box) println(typeof(box)) println(" unit cell matrix: ", box.unit_cell.matrix) println(" cutoff: ", box.cutoff) - println(" number of cells on each dimension: ",box.nc, " (lcell: ",box.lcell,")") + println(" number of computing cells on each dimension: ",box.nc) + println(" computing cell sizes: ", box.cell_size, " (lcell: ",box.lcell,")") print(" Total number of cells: ", prod(box.nc)) end diff --git a/src/SystemCommons.jl b/src/SystemCommons.jl index 63f7040a..71d2631e 100644 --- a/src/SystemCommons.jl +++ b/src/SystemCommons.jl @@ -91,7 +91,7 @@ of points. Returns a `SVector{N,T}` """ @inline cell_center(c::CartesianIndex{N},box::Box{UnitCellType,N,T}) where {UnitCellType,N,T} = - SVector{N,T}(ntuple(i -> box.cell_size*(c[i] - 0.5 - box.lcell), N)) + SVector{N,T}(ntuple(i -> box.cell_size[i]*(c[i] - 0.5 - box.lcell), N)) # # Currently the methods for cross-interaction computations are the From 917c9a29362072d2a6adbd24b910915688379bf6 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 15:00:41 -0300 Subject: [PATCH 37/62] remove LargeHighDensity --- src/CellListMap.jl | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/CellListMap.jl b/src/CellListMap.jl index 7d56053d..b44b955b 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -1,8 +1,7 @@ module CellListMap -using Base: project_deps_get -using LinearAlgebra: dot, norm, norm_sqr using Base.Threads +using LinearAlgebra: dot, norm, norm_sqr using Parameters using StaticArrays using DocStringExtensions @@ -16,7 +15,6 @@ export map_pairwise! export TinySystem export LowDensitySystem export HighDensitySystem -export LargeHighDensitySystem export TriclinicCell export OrthorhombicCell From 3625b1189d54ec0c78054301793e3f1e44b99740 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 15:17:28 -0300 Subject: [PATCH 38/62] changed threads to spawn --- src/HighDensitySystems.jl | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/HighDensitySystems.jl b/src/HighDensitySystems.jl index c9d10dbf..8ce08a6c 100644 --- a/src/HighDensitySystems.jl +++ b/src/HighDensitySystems.jl @@ -159,8 +159,14 @@ function map_pairwise_parallel!( show_progress::Bool=false ) where {F1,F2,N,T} show_progress && (p = Progress(cl.ncwp[1],dt=1)) - @threads for it in 1:nthreads() - for icell in it:nthreads():cl.ncwp[1] +# @threads for it in 1:nthreads() +# for icell in it:nthreads():cl.ncwp[1] +# output_threaded[it] = inner_loop!(f,box,icell,cl,output_threaded[it]) +# show_progress && next!(p) +# end +# end + @sync for it in 1:nthreads() + @async Threads.@spawn for icell in it:nthreads():cl.ncwp[1] output_threaded[it] = inner_loop!(f,box,icell,cl,output_threaded[it]) show_progress && next!(p) end From 4048d8a0e5cf1332518d52bdfc9a0295cbd352a9 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 15:36:07 -0300 Subject: [PATCH 39/62] remove spawn --- src/HighDensitySystems.jl | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/HighDensitySystems.jl b/src/HighDensitySystems.jl index 8ce08a6c..c9d10dbf 100644 --- a/src/HighDensitySystems.jl +++ b/src/HighDensitySystems.jl @@ -159,14 +159,8 @@ function map_pairwise_parallel!( show_progress::Bool=false ) where {F1,F2,N,T} show_progress && (p = Progress(cl.ncwp[1],dt=1)) -# @threads for it in 1:nthreads() -# for icell in it:nthreads():cl.ncwp[1] -# output_threaded[it] = inner_loop!(f,box,icell,cl,output_threaded[it]) -# show_progress && next!(p) -# end -# end - @sync for it in 1:nthreads() - @async Threads.@spawn for icell in it:nthreads():cl.ncwp[1] + @threads for it in 1:nthreads() + for icell in it:nthreads():cl.ncwp[1] output_threaded[it] = inner_loop!(f,box,icell,cl,output_threaded[it]) show_progress && next!(p) end From 3fabaef5b6ebec7c3182a0bfb29752a605fdc335 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 15:52:51 -0300 Subject: [PATCH 40/62] fixed initialization of nc for lcell != 1 --- src/StructTypes.jl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/StructTypes.jl b/src/StructTypes.jl index 761c073c..16e0613f 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -103,7 +103,7 @@ function Box( cell_size_max = unit_cell_max ./ nc_min cell_size = cell_size_max/lcell - nc = SVector{N,Int}(ceil.(Int,unit_cell_max ./ cell_size) .+ 2) + nc = SVector{N,Int}(ceil.(Int,unit_cell_max ./ cell_size) .+ 2*lcell) ranges = ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix) return Box{UnitCellType,N,T,N*N}( @@ -350,7 +350,6 @@ end function set_system_type(x,box) - #return LowDensitySystem return HighDensitySystem if length(x) <= 20 From b0523e6cdf28907661d2d1bcbf5bf20d61b6c3ba Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 15:53:06 -0300 Subject: [PATCH 41/62] fixed calling of wrap --- src/testing.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/testing.jl b/src/testing.jl index 932f4916..8e0e8a27 100644 --- a/src/testing.jl +++ b/src/testing.jl @@ -6,7 +6,7 @@ function map_naive!(f,output,x,box) for i in 1:length(x)-1 xᵢ = x[i] for j in i+1:length(x) - xⱼ = wrap_relative_to(x[j],xᵢ,unit_cell) + xⱼ = wrap_relative_to(x[j],xᵢ,box.unit_cell.matrix) d2 = norm_sqr(xᵢ - xⱼ) if d2 <= cutoff_sq output = f(xᵢ,xⱼ,i,j,d2,output) @@ -24,7 +24,7 @@ function map_naive_two!(f,output,x,y,box) for i in 1:length(x) xᵢ = x[i] for j in 1:length(y) - yⱼ = wrap_relative_to(y[j],xᵢ,unit_cell) + yⱼ = wrap_relative_to(y[j],xᵢ,box.unit_cell.matrix) d2 = norm_sqr(xᵢ - yⱼ) if d2 <= cutoff_sq output = f(xᵢ,yⱼ,i,j,d2,output) From 7dfbdde3f33cd72664a2371b7e2dfbece75877b4 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 16:06:21 -0300 Subject: [PATCH 42/62] fixed example --- test/runtests.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/runtests.jl b/test/runtests.jl index 12be5c9a..f241c916 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -137,7 +137,7 @@ using Test N = 100_000 x = [ sides .* rand(SVector{3,Float64}) for i in 1:N ] y = [ sides .* rand(SVector{3,Float64}) for i in 1:N ] - @test CellListMap.test1(parallel=true,x=x) ≈ CellListMap.test1(parallel=false,x=x) + @test CellListMap.test1(parallel=true,x=x)[2] ≈ CellListMap.test1(parallel=false,x=x)[2] @test CellListMap.test2(parallel=true,x=x) ≈ CellListMap.test2(parallel=false,x=x) @test CellListMap.test3(parallel=true,x=x) ≈ CellListMap.test3(parallel=false,x=x) @test CellListMap.test4(parallel=true,x=x) ≈ CellListMap.test4(parallel=false,x=x) From c36c23bdb15712dfbeba335ac15a86a091de258d Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Fri, 30 Jul 2021 16:06:34 -0300 Subject: [PATCH 43/62] fixed example --- src/examples.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/examples.jl b/src/examples.jl index 73332270..55da9be2 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -245,7 +245,7 @@ function test6(;N1=1_500,N2=1_500_000,parallel=true,x=nothing,y=nothing) cutoff = +Inf for v in x iy = rand(1:N2) - cutoff = min(CellListMap.distance(v,y[iy]),cutoff) + cutoff = min(CellListMap.norm(v-y[iy]),cutoff) end # Define box sides From 7914efd19158bc1f555efe5afbc497aa7548217d Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Sat, 31 Jul 2021 16:34:44 -0300 Subject: [PATCH 44/62] fixed pbc, apparently --- src/HighDensitySystems.jl | 14 ++++++++------ src/LowDensitySystems.jl | 2 +- src/StructTypes.jl | 3 ++- src/TinySystems.jl | 2 +- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/HighDensitySystems.jl b/src/HighDensitySystems.jl index c9d10dbf..e826cbba 100644 --- a/src/HighDensitySystems.jl +++ b/src/HighDensitySystems.jl @@ -130,7 +130,7 @@ function add_particle_to_celllist!( end end np[ncp[1]] = fp[icell] - fp[icell] = AtomWithIndex(ncp[1],ip,x) + fp[icell] = AtomWithIndex(ncp[1],ip,x,real_particle) return cl end @@ -182,15 +182,17 @@ function inner_loop!( i = pᵢ.index while i > 0 xpᵢ = pᵢ.coordinates + i_orig = pᵢ.index_original pⱼ = cl.np[i] j = pⱼ.index while j > 0 - xpⱼ = pⱼ.coordinates - d2 = norm_sqr(xpᵢ - xpⱼ) - if d2 <= cutoff_sq - i_orig = pᵢ.index_original - j_orig = pⱼ.index_original + j_orig = pⱼ.index_original + if (pᵢ.real && pⱼ.real) || (i_orig < j_orig) + xpⱼ = pⱼ.coordinates + d2 = norm_sqr(xpᵢ - xpⱼ) + if d2 <= cutoff_sq output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + end end pⱼ = cl.np[pⱼ.index] j = pⱼ.index diff --git a/src/LowDensitySystems.jl b/src/LowDensitySystems.jl index 88ea0284..55006069 100644 --- a/src/LowDensitySystems.jl +++ b/src/LowDensitySystems.jl @@ -122,7 +122,7 @@ function add_particle_to_celllist!( end end np[ncp[1]] = fp[icell] - fp[icell] = AtomWithIndex(ncp[1],ip,x) + fp[icell] = AtomWithIndex(ncp[1],ip,x,real_particle) return cl end diff --git a/src/StructTypes.jl b/src/StructTypes.jl index 16e0613f..62fae84b 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -208,9 +208,10 @@ struct AtomWithIndex{N,T} index::Int index_original::Int coordinates::SVector{N,T} + real::Bool end Base.zero(::Type{AtomWithIndex{N,T}}) where {N,T} = - AtomWithIndex{N,T}(0,0,zeros(SVector{N,T})) + AtomWithIndex{N,T}(0,0,zeros(SVector{N,T}),false) """ diff --git a/src/TinySystems.jl b/src/TinySystems.jl index 05908f94..e6c18e6c 100644 --- a/src/TinySystems.jl +++ b/src/TinySystems.jl @@ -46,7 +46,7 @@ function UpdateCellList!( # it is what it takes to use the same CellList structure ncp[1] = length(x) for (ip,coordinates) in pairs(x) - np[ip] = AtomWithIndex(ip,ip,coordinates) + np[ip] = AtomWithIndex(ip,ip,coordinates,true) end resize!(projected_particles[1],ncp[1]) From d82af68e1e09063f655c18f9c03a0b7a46c77626 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Sat, 31 Jul 2021 17:23:56 -0300 Subject: [PATCH 45/62] fixed another corner case --- src/HighDensitySystems.jl | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/HighDensitySystems.jl b/src/HighDensitySystems.jl index e826cbba..ecf81f15 100644 --- a/src/HighDensitySystems.jl +++ b/src/HighDensitySystems.jl @@ -187,7 +187,9 @@ function inner_loop!( j = pⱼ.index while j > 0 j_orig = pⱼ.index_original - if (pᵢ.real && pⱼ.real) || (i_orig < j_orig) + # Will compute interactions if both particles are real, or if one is + # real but with a greater index than the first, to avoid repetitions + if (pᵢ.real && pⱼ.real) || (i_orig > j_orig) xpⱼ = pⱼ.coordinates d2 = norm_sqr(xpᵢ - xpⱼ) if d2 <= cutoff_sq @@ -264,6 +266,11 @@ function cell_output!( pᵢ = cl.fp[icell.icell] i = pᵢ.index while i > 0 + if ! pᵢ.real + pᵢ = cl.np[i] + i = pᵢ.index + continue + end xpᵢ = pᵢ.coordinates xproj = dot(xpᵢ-icell.center,Δc) From c9454f61dea5f94c326212ec5816df1344f82ba8 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Sun, 1 Aug 2021 18:50:43 -0300 Subject: [PATCH 46/62] need to fix wrap_relative_to --- src/CellOperations.jl | 7 ------- src/testing.jl | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/CellOperations.jl b/src/CellOperations.jl index d9ce9483..7eaaf628 100644 --- a/src/CellOperations.jl +++ b/src/CellOperations.jl @@ -186,13 +186,6 @@ Wraps the coordinates of point `x` such that it is the minimum image relative to """ @inline function wrap_relative_to(x, xref, unit_cell_matrix::SMatrix{N,N,T}) where {N,T} p = SVector{N,T}(rem.(unit_cell_matrix\(x-xref),1)) - for i in eachindex(p) - if p[i] > 0.5 - @set! p[i] -= 1 - elseif p[i] < -0.5 - @set! p[i] += 1 - end - end return unit_cell_matrix*p + xref end diff --git a/src/testing.jl b/src/testing.jl index 8e0e8a27..2ec1256d 100644 --- a/src/testing.jl +++ b/src/testing.jl @@ -74,3 +74,46 @@ function view_celllist_particles(cl::CellList{SystemType,N,T}) where {SystemType return [SVector{N,T}(ntuple(j -> x[i][j],N)) for i in 1:ncp[1]] end +function test(N) + b(box,cl) = map_pairwise!((x,y,i,j,d2,s) -> s += d2, 0., box, cl, parallel=false) + n(box,x) = CellListMap.map_naive!((x,y,i,j,d2,s) -> s += d2, 0., x, box) + for i in 1:100000 + box = Box(SMatrix{N,N,Float64,N*N}(rand(N,N)*10 .+ 1), 1) + if shortest_path(box.unit_cell.matrix) < box.cutoff + continue + end + x = 100 .* rand(SVector{N,Float64},2) + cl = CellList(x,box) + if !(b(box,cl) ≈ n(box,x)) + return x, box + end + end +end + + +@views orth_proj(m,i,j) = + sqrt(norm(m[:,i])^2 - dot(m[:,i],m[:,j]/norm(m[:,j]))^2) + +function shortest_path(m::SMatrix{2,2,T,4}) where T + return min(orth_proj(m,1,2),orth_proj(m,2,1)) +end + +shortest_path(box::Box) = shortest_path(box.unit_cell.matrix) + +function plotbox(box) + S = SVector{2,Float64} + m = box.unit_cell.matrix + x = [S(0.,0.)] + push!(x,S(m[:,1])) + push!(x,S(m[:,1] + m[:,2])) + push!(x,S(m[:,2])) + push!(x,S(0.,0.)) + return x +end + + + + + + + From 6113deba40cace5767eee1470c5ba930dc627222 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Sun, 1 Aug 2021 22:30:51 -0300 Subject: [PATCH 47/62] added back wrap for orthorombic cells --- src/CellOperations.jl | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/CellOperations.jl b/src/CellOperations.jl index 7eaaf628..5139a8c3 100644 --- a/src/CellOperations.jl +++ b/src/CellOperations.jl @@ -189,6 +189,19 @@ Wraps the coordinates of point `x` such that it is the minimum image relative to return unit_cell_matrix*p + xref end +@inline function wrap_relative_to(x,xref,box::Box{OrthorhombicCell,N,T}) where {N,T} + sides = ntuple(i->box.unit_cell.matrix[i,i],N) + x = (x-xref) ./ sides + for i in 1:N + if x[i] < -0.5 + @set! x[i] += 1 + elseif x[i] >= 0.5 + @set! x[i] -= 1 + end + end + return sides .* x + xref +end + """ ``` From 66bbe3769ce8b5c845a2784b4937f05ae007ee44 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Mon, 2 Aug 2021 11:41:40 -0300 Subject: [PATCH 48/62] using the simple loop now... --- src/CellOperations.jl | 29 ++++++++----- src/HighDensitySystems.jl | 87 ++++++++++++++++++++++++++++++++++----- src/StructTypes.jl | 6 ++- src/testing.jl | 23 +++++++---- 4 files changed, 114 insertions(+), 31 deletions(-) diff --git a/src/CellOperations.jl b/src/CellOperations.jl index 5139a8c3..6f23f276 100644 --- a/src/CellOperations.jl +++ b/src/CellOperations.jl @@ -185,21 +185,30 @@ Wraps the coordinates of point `x` such that it is the minimum image relative to """ @inline function wrap_relative_to(x, xref, unit_cell_matrix::SMatrix{N,N,T}) where {N,T} - p = SVector{N,T}(rem.(unit_cell_matrix\(x-xref),1)) - return unit_cell_matrix*p + xref + x_f = wrap_cell_fraction(x,unit_cell_matrix) + xref_f = wrap_cell_fraction(xref,unit_cell_matrix) + xw = wrap_relative_to(x_f,xref_f,SVector{N,T}(ntuple(i->1,N))) + return unit_cell_matrix * (xw - xref_f) + xref end +@inline wrap_relative_to(x,xref,box::Box{TriclinicCell,N,T}) where {N,T} = + wrap_relative_to(x,xref,box.unit_cell.matrix) + @inline function wrap_relative_to(x,xref,box::Box{OrthorhombicCell,N,T}) where {N,T} - sides = ntuple(i->box.unit_cell.matrix[i,i],N) - x = (x-xref) ./ sides - for i in 1:N - if x[i] < -0.5 - @set! x[i] += 1 - elseif x[i] >= 0.5 - @set! x[i] -= 1 + sides = SVector{N,T}(ntuple(i->box.unit_cell.matrix[i,i],N)) + return wrap_relative_to(x,xref,sides) +end + +@inline function wrap_relative_to(x,xref,sides::AbstractVector) + xw = (x-xref) ./ sides + for i in eachindex(xw) + if xw[i] < -0.5 + @set! xw[i] += 1 + elseif xw[i] >= 0.5 + @set! xw[i] -= 1 end end - return sides .* x + xref + return sides .* xw + xref end """ diff --git a/src/HighDensitySystems.jl b/src/HighDensitySystems.jl index ecf81f15..2059e26a 100644 --- a/src/HighDensitySystems.jl +++ b/src/HighDensitySystems.jl @@ -143,7 +143,7 @@ function map_pairwise_serial!( ) where {F,N,T} show_progress && (p = Progress(cl.ncwp[1],dt=1)) for icell in 1:cl.ncwp[1] - output = inner_loop!(f,box,icell,cl,output) + output = inner_loop2!(f,box,icell,cl,output) show_progress && next!(p) end return output @@ -161,7 +161,7 @@ function map_pairwise_parallel!( show_progress && (p = Progress(cl.ncwp[1],dt=1)) @threads for it in 1:nthreads() for icell in it:nthreads():cl.ncwp[1] - output_threaded[it] = inner_loop!(f,box,icell,cl,output_threaded[it]) + output_threaded[it] = inner_loop2!(f,box,icell,cl,output_threaded[it]) show_progress && next!(p) end end @@ -169,6 +169,61 @@ function map_pairwise_parallel!( return output end +function inner_loop2!( + f,box,icell, + cl::CellList{HighDensitySystem,N,T}, + output +) where {N,T} + @unpack cutoff, cutoff_sq, nc = box + cell = cl.cwp[icell] + + for neighbour_cell in neighbour_cells_all(box) + jc_cartesian = cell.cartesian + neighbour_cell + jc = cell_linear_index(nc,jc_cartesian) + + # Vector connecting cell centers + if jc == cell.icell + Δc = SVector{N,T}(ntuple(i->1,N)) + else + Δc = cell_center(jc_cartesian,box) - cell.center + end + Δc = Δc/norm(Δc) + pp = project_particles(jc_cartesian,cl,Δc,cell,box) + + pᵢ = cl.fp[cell.icell] + i = pᵢ.index + while i > 0 + if !pᵢ.real + pᵢ = cl.np[pᵢ.index] + i = pᵢ.index + continue + end + xpᵢ = pᵢ.coordinates + i_orig = pᵢ.index_original + + # Partition pp array according to the current projections + xproj = dot(xpᵢ-cell.center,Δc) + n = partition!(pp, el -> el.xproj - xproj <= cutoff) + + for j in 1:n + pⱼ = pp[j] + j_orig = pⱼ.index_original + if i_orig < j_orig + xpⱼ = pⱼ.coordinates + d2 = norm_sqr(xpᵢ - xpⱼ) + if d2 <= cutoff_sq + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + end + end + end + pᵢ = cl.np[pᵢ.index] + i = pᵢ.index + end + end + + return output +end + function inner_loop!( f,box,icell, cl::CellList{HighDensitySystem,N,T}, @@ -189,13 +244,13 @@ function inner_loop!( j_orig = pⱼ.index_original # Will compute interactions if both particles are real, or if one is # real but with a greater index than the first, to avoid repetitions - if (pᵢ.real && pⱼ.real) || (i_orig > j_orig) +# if (pᵢ.real && pⱼ.real) || (i_orig < j_orig) xpⱼ = pⱼ.coordinates d2 = norm_sqr(xpᵢ - xpⱼ) if d2 <= cutoff_sq output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) end - end +# end pⱼ = cl.np[pⱼ.index] j = pⱼ.index end @@ -203,6 +258,8 @@ function inner_loop!( i = pᵢ.index end + @show cell.cartesian + for jcell in neighbour_cells(box) output = cell_output!(f,box,cell,cl,output,cell.cartesian+jcell) end @@ -235,7 +292,8 @@ function project_particles(jc_cartesian,cl,Δc,icell,box) j_orig = pⱼ.index_original xpⱼ = pⱼ.coordinates xproj = dot(xpⱼ-icell.center,Δc) - projected_particles[jp] = ProjectedParticle(j_orig,xproj,xpⱼ) + xreal = pⱼ.real + projected_particles[jp] = ProjectedParticle(j_orig,xproj,xpⱼ,xreal) pⱼ = cl.np[j] j = pⱼ.index end @@ -262,6 +320,8 @@ function cell_output!( Δc = Δc/norm(Δc) pp = project_particles(jc_cartesian,cl,Δc,icell,box) + @show jc_cartesian + # Loop over particles of cell icell pᵢ = cl.fp[icell.icell] i = pᵢ.index @@ -273,18 +333,21 @@ function cell_output!( end xpᵢ = pᵢ.coordinates xproj = dot(xpᵢ-icell.center,Δc) + i_orig = pᵢ.index_original # Partition pp array according to the current projections n = partition!(pp, el -> el.xproj - xproj <= cutoff) # Compute the interactions for j in 1:n - xpⱼ = pp[j].coordinates - d2 = norm_sqr(xpᵢ - xpⱼ) - if d2 <= cutoff_sq - i_orig = pᵢ.index_original - j_orig = pp[j].index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + pⱼ = pp[j] + j_orig = pⱼ.index_original + if pⱼ.real || (i_orig < j_orig) + xpⱼ = pⱼ.coordinates + d2 = norm_sqr(xpᵢ - xpⱼ) + if d2 <= cutoff_sq + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + end end end pᵢ = cl.np[i] @@ -293,3 +356,5 @@ function cell_output!( return output end + + diff --git a/src/StructTypes.jl b/src/StructTypes.jl index 62fae84b..bb4aa193 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -99,13 +99,14 @@ function Box( unit_cell_max = sum(@view(unit_cell_matrix[:,i]) for i in 1:N) nc_min = @. floor.(Int,unit_cell_max/cutoff) - @assert count(nc_min .== 0) == 0 "Cutoff smaller than unit cell size. " +# @assert count(nc_min .== 0) == 0 "Cutoff greater than maximum unit cell size. " cell_size_max = unit_cell_max ./ nc_min cell_size = cell_size_max/lcell nc = SVector{N,Int}(ceil.(Int,unit_cell_max ./ cell_size) .+ 2*lcell) - ranges = ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix) + #ranges = ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix) + ranges = SVector{N,UnitRange{Int}}(ntuple(i->-1:1,N)) return Box{UnitCellType,N,T,N*N}( unit_cell, lcell, @@ -240,6 +241,7 @@ struct ProjectedParticle{N,T} index_original::Int xproj::T coordinates::SVector{N,T} + real::Bool end """ diff --git a/src/testing.jl b/src/testing.jl index 2ec1256d..581f6ef5 100644 --- a/src/testing.jl +++ b/src/testing.jl @@ -6,7 +6,7 @@ function map_naive!(f,output,x,box) for i in 1:length(x)-1 xᵢ = x[i] for j in i+1:length(x) - xⱼ = wrap_relative_to(x[j],xᵢ,box.unit_cell.matrix) + xⱼ = wrap_relative_to(x[j],xᵢ,box) d2 = norm_sqr(xᵢ - xⱼ) if d2 <= cutoff_sq output = f(xᵢ,xⱼ,i,j,d2,output) @@ -24,7 +24,7 @@ function map_naive_two!(f,output,x,y,box) for i in 1:length(x) xᵢ = x[i] for j in 1:length(y) - yⱼ = wrap_relative_to(y[j],xᵢ,box.unit_cell.matrix) + yⱼ = wrap_relative_to(y[j],xᵢ,box) d2 = norm_sqr(xᵢ - yⱼ) if d2 <= cutoff_sq output = f(xᵢ,yⱼ,i,j,d2,output) @@ -74,20 +74,27 @@ function view_celllist_particles(cl::CellList{SystemType,N,T}) where {SystemType return [SVector{N,T}(ntuple(j -> x[i][j],N)) for i in 1:ncp[1]] end -function test(N) - b(box,cl) = map_pairwise!((x,y,i,j,d2,s) -> s += d2, 0., box, cl, parallel=false) - n(box,x) = CellListMap.map_naive!((x,y,i,j,d2,s) -> s += d2, 0., x, box) +b(box,cl) = map_pairwise!((x,y,i,j,d2,s) -> s += d2, 0., box, cl, parallel=false) +n(box,x) = CellListMap.map_naive!((x,y,i,j,d2,s) -> s += d2, 0., x, box) + +function test(N,M=2) + local x, box for i in 1:100000 - box = Box(SMatrix{N,N,Float64,N*N}(rand(N,N)*10 .+ 1), 1) - if shortest_path(box.unit_cell.matrix) < box.cutoff + box = Box(SMatrix{N,N,Float64,N*N}(rand(N,N)*10), 1) + if shortest_path(box.unit_cell.matrix) < 2*box.cutoff continue end - x = 100 .* rand(SVector{N,Float64},2) + x = 100 .* rand(SVector{N,Float64},M) + for i in eachindex(x) + x[i] = x[i] .- 50 + end cl = CellList(x,box) if !(b(box,cl) ≈ n(box,x)) return x, box end end + println(" ALL PASSED! ") + return x, box end From be9a2ff7987840fce0e3cee1eee701452a4dbcaa Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Mon, 2 Aug 2021 16:47:55 -0300 Subject: [PATCH 49/62] some refinements in wrap functions --- src/CellOperations.jl | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/CellOperations.jl b/src/CellOperations.jl index 6f23f276..5f9ea41b 100644 --- a/src/CellOperations.jl +++ b/src/CellOperations.jl @@ -137,7 +137,7 @@ wrap_cell_fraction(x,cell) """ @inline function wrap_cell_fraction(x,unit_cell_matrix) - p = rem.(unit_cell_matrix\x,1) + p = mod.(unit_cell_matrix\x,1) p = @. ifelse(p < 0, p + 1, p) return p end @@ -170,7 +170,7 @@ first unit cell with all-positive coordinates, given the `Box` structure. @inline function wrap_to_first(x,box::Box{OrthorhombicCell,N,T}) where {N,T} sides = SVector{N,T}(ntuple(i->box.unit_cell.matrix[i,i],N)) - x = rem.(x,sides) + x = mod.(x,sides) x = @. ifelse(x < 0, x + sides, x) return x end @@ -185,13 +185,15 @@ Wraps the coordinates of point `x` such that it is the minimum image relative to """ @inline function wrap_relative_to(x, xref, unit_cell_matrix::SMatrix{N,N,T}) where {N,T} + @show "entrou" + readline() x_f = wrap_cell_fraction(x,unit_cell_matrix) xref_f = wrap_cell_fraction(xref,unit_cell_matrix) xw = wrap_relative_to(x_f,xref_f,SVector{N,T}(ntuple(i->1,N))) return unit_cell_matrix * (xw - xref_f) + xref end -@inline wrap_relative_to(x,xref,box::Box{TriclinicCell,N,T}) where {N,T} = +@inline wrap_relative_to(x,xref,box::Box{UnitCellType,N,T}) where {UnitCellType,N,T} = wrap_relative_to(x,xref,box.unit_cell.matrix) @inline function wrap_relative_to(x,xref,box::Box{OrthorhombicCell,N,T}) where {N,T} @@ -200,17 +202,21 @@ end end @inline function wrap_relative_to(x,xref,sides::AbstractVector) - xw = (x-xref) ./ sides - for i in eachindex(xw) - if xw[i] < -0.5 - @set! xw[i] += 1 - elseif xw[i] >= 0.5 - @set! xw[i] -= 1 - end + xw = mod.(x-xref,sides) + xw = wrap_single_coordinate.(xw,sides) + return xw + xref +end + +@inline function wrap_single_coordinate(x,s) + if x >= s/2 + x = x - s + elseif x < -s/2 + x = x + s end - return sides .* xw + xref + return x end + """ ``` From 56986fb4157e862f0dcb3137b9d8ec75abf75f1a Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Mon, 2 Aug 2021 16:48:16 -0300 Subject: [PATCH 50/62] recovered specific function for orthorhombic sys --- src/HighDensitySystems.jl | 123 +++++++++++++++++--------------------- 1 file changed, 54 insertions(+), 69 deletions(-) diff --git a/src/HighDensitySystems.jl b/src/HighDensitySystems.jl index 2059e26a..4b5e85d5 100644 --- a/src/HighDensitySystems.jl +++ b/src/HighDensitySystems.jl @@ -143,7 +143,7 @@ function map_pairwise_serial!( ) where {F,N,T} show_progress && (p = Progress(cl.ncwp[1],dt=1)) for icell in 1:cl.ncwp[1] - output = inner_loop2!(f,box,icell,cl,output) + output = inner_loop!(f,box,icell,cl,output) show_progress && next!(p) end return output @@ -161,7 +161,7 @@ function map_pairwise_parallel!( show_progress && (p = Progress(cl.ncwp[1],dt=1)) @threads for it in 1:nthreads() for icell in it:nthreads():cl.ncwp[1] - output_threaded[it] = inner_loop2!(f,box,icell,cl,output_threaded[it]) + output_threaded[it] = inner_loop!(f,box,icell,cl,output_threaded[it]) show_progress && next!(p) end end @@ -169,8 +169,42 @@ function map_pairwise_parallel!( return output end -function inner_loop2!( - f,box,icell, +""" + +``` +project_particles(jc_cartesian,cl,Δc,icell,box) +``` + +Projects all particles of the cell of cartesian coordinates +`jc_cartesian` into the unnitary vector `Δc` with direction +connecting `icell.center` and the center of cell `jc_cartesian`. +Returns a view of the array of projected particles, with length +equal to the number of particles of cell `jc_cartesian`. + +""" +function project_particles(jc_cartesian,cl,Δc,icell,box) + @unpack nc = box + @unpack fp = cl + projected_particles = cl.projected_particles[threadid()] + jc = cell_linear_index(nc,jc_cartesian) + pⱼ = fp[jc] + npcell = cl.npcell[jc] + j = pⱼ.index + for jp in 1:npcell + j_orig = pⱼ.index_original + xpⱼ = pⱼ.coordinates + xproj = dot(xpⱼ-icell.center,Δc) + xreal = pⱼ.real + projected_particles[jp] = ProjectedParticle(j_orig,xproj,xpⱼ,xreal) + pⱼ = cl.np[j] + j = pⱼ.index + end + pp = @view(projected_particles[1:npcell]) + return pp +end + +function inner_loop!( + f,box::Box{TriclinicCell},icell, cl::CellList{HighDensitySystem,N,T}, output ) where {N,T} @@ -225,7 +259,7 @@ function inner_loop2!( end function inner_loop!( - f,box,icell, + f,box::Box{OrthorhombicCell},icell, cl::CellList{HighDensitySystem,N,T}, output ) where {N,T} @@ -237,20 +271,16 @@ function inner_loop!( i = pᵢ.index while i > 0 xpᵢ = pᵢ.coordinates - i_orig = pᵢ.index_original pⱼ = cl.np[i] j = pⱼ.index while j > 0 - j_orig = pⱼ.index_original - # Will compute interactions if both particles are real, or if one is - # real but with a greater index than the first, to avoid repetitions -# if (pᵢ.real && pⱼ.real) || (i_orig < j_orig) - xpⱼ = pⱼ.coordinates - d2 = norm_sqr(xpᵢ - xpⱼ) - if d2 <= cutoff_sq - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) - end -# end + xpⱼ = pⱼ.coordinates + d2 = norm_sqr(xpᵢ - xpⱼ) + if d2 <= cutoff_sq + i_orig = pᵢ.index_original + j_orig = pⱼ.index_original + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) + end pⱼ = cl.np[pⱼ.index] j = pⱼ.index end @@ -258,8 +288,6 @@ function inner_loop!( i = pᵢ.index end - @show cell.cartesian - for jcell in neighbour_cells(box) output = cell_output!(f,box,cell,cl,output,cell.cartesian+jcell) end @@ -267,47 +295,13 @@ function inner_loop!( return output end -""" - -``` -project_particles(jc_cartesian,cl,Δc,icell,box) -``` - -Projects all particles of the cell of cartesian coordinates -`jc_cartesian` into the unnitary vector `Δc` with direction -connecting `icell.center` and the center of cell `jc_cartesian`. -Returns a view of the array of projected particles, with length -equal to the number of particles of cell `jc_cartesian`. - -""" -function project_particles(jc_cartesian,cl,Δc,icell,box) - @unpack nc = box - @unpack fp = cl - projected_particles = cl.projected_particles[threadid()] - jc = cell_linear_index(nc,jc_cartesian) - pⱼ = fp[jc] - npcell = cl.npcell[jc] - j = pⱼ.index - for jp in 1:npcell - j_orig = pⱼ.index_original - xpⱼ = pⱼ.coordinates - xproj = dot(xpⱼ-icell.center,Δc) - xreal = pⱼ.real - projected_particles[jp] = ProjectedParticle(j_orig,xproj,xpⱼ,xreal) - pⱼ = cl.np[j] - j = pⱼ.index - end - pp = @view(projected_particles[1:npcell]) - return pp -end - # # loops over the particles of a neighbour cell, for LargeDenseSystem # not large enough such that sorting the projections is useful # function cell_output!( f, - box, + box::Box{OrthorhombicCell}, icell, cl::CellList{HighDensitySystem,N,T}, output, @@ -320,34 +314,25 @@ function cell_output!( Δc = Δc/norm(Δc) pp = project_particles(jc_cartesian,cl,Δc,icell,box) - @show jc_cartesian - # Loop over particles of cell icell pᵢ = cl.fp[icell.icell] i = pᵢ.index while i > 0 - if ! pᵢ.real - pᵢ = cl.np[i] - i = pᵢ.index - continue - end xpᵢ = pᵢ.coordinates xproj = dot(xpᵢ-icell.center,Δc) - i_orig = pᵢ.index_original - + # Partition pp array according to the current projections n = partition!(pp, el -> el.xproj - xproj <= cutoff) # Compute the interactions for j in 1:n pⱼ = pp[j] - j_orig = pⱼ.index_original - if pⱼ.real || (i_orig < j_orig) - xpⱼ = pⱼ.coordinates - d2 = norm_sqr(xpᵢ - xpⱼ) - if d2 <= cutoff_sq - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) - end + xpⱼ = pⱼ.coordinates + d2 = norm_sqr(xpᵢ - xpⱼ) + if d2 <= cutoff_sq + i_orig = pᵢ.index_original + j_orig = pⱼ.index_original + output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) end end pᵢ = cl.np[i] From fd352baeee69059c2f01cf7b51314b35f993d0f8 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Mon, 2 Aug 2021 17:33:02 -0300 Subject: [PATCH 51/62] documented CellOperations. --- src/CellOperations.jl | 157 +++++++++++++++++++++++++++++++----------- 1 file changed, 116 insertions(+), 41 deletions(-) diff --git a/src/CellOperations.jl b/src/CellOperations.jl index 5f9ea41b..f7c1914b 100644 --- a/src/CellOperations.jl +++ b/src/CellOperations.jl @@ -1,6 +1,13 @@ -# -# Function that checks if the particule is outside the computation bounding box -# +""" + +``` +out_of_bounding_box(x::SVector{N},box::Box) where N +``` + +Function that evaluates if a particle is outside the computing bounding box, +defined by the maximum and minimum unit cell coordinates. + +""" function out_of_bounding_box(x::SVector{N},box::Box) where N @unpack cutoff, unit_cell_max = box for i in 1:N @@ -15,52 +22,34 @@ out_of_bounding_box(p::AtomWithIndex,box::Box) = """ ``` -replicate_particle!(ip,p::T,box,cl) where {T <: SVector{2,S} where S} +replicate_particle!(ip,p::SVector{N},box,cl) where N ``` Replicates the particle as many times as necessary to fill the computing box. """ -function replicate_particle!(ip,p::SVector{2},box,cl) - @unpack ranges = box - for i in ranges[1] - for j in ranges[2] - i == 0 && j == 0 && continue - x = translation_image(p,box.unit_cell.matrix,(i,j)) - if ! out_of_bounding_box(x,box) - cl = add_particle_to_celllist!(ip,x,box,cl;real_particle=false) - end +function replicate_particle!(ip,p::SVector{N},box,cl) where N + itr = Iterators.product(ntuple(i->box.ranges[i],N)...) + for indexes in itr + (count(isequal(0),indexes) == N) && continue + x = translation_image(p,box.unit_cell.matrix,indexes) + if ! out_of_bounding_box(x,box) + cl = add_particle_to_celllist!(ip,x,box,cl;real_particle=false) end end return cl end - """ ``` -replicate_particle!(ip,p::T,box,cl) where {T <: SVector{3,S} where S} +ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix::SMatrix{3,3,T}) where T ``` -Replicates the particle as many times as necessary to fill the computing box. +Function that sets which is the range of periodic images necessary to fill +the computing box, in 3D. """ -function replicate_particle!(ip,p::SVector{3},box,cl) - @unpack ranges = box - for i in ranges[1] - for j in ranges[2] - for k in ranges[3] - i == 0 && j == 0 && k == 0 && continue - x = translation_image(p,box.unit_cell.matrix,(i,j,k)) - if ! out_of_bounding_box(x,box) - cl = add_particle_to_celllist!(ip,x,box,cl;real_particle=false) - end - end - end - end - return cl -end - function ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix::SMatrix{3,3,T}) where T V = SVector{3,T} cmin = -lcell*cell_size @@ -89,6 +78,16 @@ function ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix::SMatrix{3,3, return ranges end +""" + +``` +ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix::SMatrix{3,3,T}) where T +``` + +Function that sets which is the range of periodic images necessary to fill +the computing box, in 2D. + +""" function ranges_of_replicas(cell_size, lcell, nc,unit_cell_matrix::SMatrix{2,2,T}) where T V = SVector{2,T} cmin = -lcell*cell_size @@ -130,10 +129,26 @@ end """ ``` -wrap_cell_fraction(x,cell) +wrap_to_cell_fraction(x,unit_cell_matrix) ``` -`x` is a vector of dimension `N` and `cell` a matrix of dimension `NxN` +Obtaint the coordinates of `x` as a fraction of unit cell vectors, first +positive cell. `x` is a vector of dimension `N` and `cell` a matrix of +dimension `NxN` + +### Example + +``` +julia> unit_cell_matrix = [ 10 0 + 0 10 ]; + +julia> x = [ 15, 13 ]; + +julia> wrap_to_cell_fraction(x,unit_cell_matrix) +2-element Vector{Float64}: + 0.5 + 0.3 +``` """ @inline function wrap_cell_fraction(x,unit_cell_matrix) @@ -151,11 +166,26 @@ wrap_to_first(x,unit_cell_matrix) Wraps the coordinates of point `x` such that the returning coordinates are in the first unit cell with all-positive coordinates. +### Example + +``` +julia> unit_cell_matrix = [ 10 0 + 0 10 ]; + +julia> x = [ 15, 13 ]; + +julia> wrap_to_first(x,unit_cell_matrix) +2-element Vector{Float64}: + 5.0 + 3.0000000000000004 + ``` + """ @inline function wrap_to_first(x,unit_cell_matrix) p = wrap_cell_fraction(x,unit_cell_matrix) return unit_cell_matrix*p end + """ ``` @@ -168,6 +198,17 @@ first unit cell with all-positive coordinates, given the `Box` structure. """ @inline wrap_to_first(x,box::Box) = wrap_to_first(x,box.unit_cell.matrix) +""" + +``` +wrap_to_first(x,box::Box{OrthorhombicCell,N,T}) where {N,T} +``` + +Wraps the coordinates of point `x` such that the returning coordinates are in the +first unit cell with all-positive coordinates, given an Orthorhombic cell. +This is slightly cheaper than for general cells. + +""" @inline function wrap_to_first(x,box::Box{OrthorhombicCell,N,T}) where {N,T} sides = SVector{N,T}(ntuple(i->box.unit_cell.matrix[i,i],N)) x = mod.(x,sides) @@ -185,29 +226,60 @@ Wraps the coordinates of point `x` such that it is the minimum image relative to """ @inline function wrap_relative_to(x, xref, unit_cell_matrix::SMatrix{N,N,T}) where {N,T} - @show "entrou" - readline() x_f = wrap_cell_fraction(x,unit_cell_matrix) xref_f = wrap_cell_fraction(xref,unit_cell_matrix) xw = wrap_relative_to(x_f,xref_f,SVector{N,T}(ntuple(i->1,N))) return unit_cell_matrix * (xw - xref_f) + xref end +""" + +``` +wrap_relative_to(x,xref,box::Box{UnitCellType,N,T}) where {UnitCellType,N,T} +``` + +Wraps the coordinates of point `x` such that it is the minimum image relative to `xref`, +given a general `Box` structure. + +""" @inline wrap_relative_to(x,xref,box::Box{UnitCellType,N,T}) where {UnitCellType,N,T} = wrap_relative_to(x,xref,box.unit_cell.matrix) +""" + +``` +wrap_relative_to(x,xref,box::Box{OrthorhombicCell,N,T}) where {N,T} +``` + +Wraps the coordinates of point `x` such that it is the minimum image relative to `xref`, +given an Orthorhombic cell. This is slightly cheaper than for general cells. + +""" @inline function wrap_relative_to(x,xref,box::Box{OrthorhombicCell,N,T}) where {N,T} sides = SVector{N,T}(ntuple(i->box.unit_cell.matrix[i,i],N)) return wrap_relative_to(x,xref,sides) end +""" + +``` +wrap_relative_to(x,xref,sides::AbstractVector) +``` + +Wraps the coordinates of point `x` such that it is the minimum image relative to `xref`, +for an Orthorhombic cell of which only the side lengths are provided. + +""" @inline function wrap_relative_to(x,xref,sides::AbstractVector) xw = mod.(x-xref,sides) - xw = wrap_single_coordinate.(xw,sides) + xw = _wrap_single_coordinate.(xw,sides) return xw + xref end -@inline function wrap_single_coordinate(x,s) +# +# Wrap a single coordinate +# +@inline function _wrap_single_coordinate(x,s) if x >= s/2 x = x - s elseif x < -s/2 @@ -233,7 +305,7 @@ provided. """ ``` -neighbour_cells(box::Box{UnitCellType,N}) where {UnitCellType,N} +neighbour_cells(box::Box{UnitCellType,N}) where UnitCellType ``` Function that returns the iterator of the cartesian indices of the cells that must be @@ -251,6 +323,7 @@ function neighbour_cells(box::Box{UnitCellType,3}) where UnitCellType )) return nb end + function neighbour_cells(box::Box{UnitCellType,2}) where UnitCellType @unpack lcell = box nb = Iterators.flatten(( @@ -275,6 +348,7 @@ function neighbour_cells_all(box::Box{UnitCellType,3}) where UnitCellType @unpack lcell = box return CartesianIndices((-lcell:lcell,-lcell:lcell,-lcell:lcell)) end + function neighbour_cells_all(box::Box{UnitCellType,2}) where UnitCellType @unpack lcell = box return CartesianIndices((-lcell:lcell,-lcell:lcell)) @@ -286,8 +360,9 @@ end particle_cell(x::SVector{N,T}, box::Box) where {N,T} ``` -Returns the coordinates of the computing cell to which a particle belongs, given its coordinates -and the cell_size. +Returns the coordinates of the *computing cell* to which a particle belongs, given its coordinates +and the `cell_size` vector. The computing box is always Orthorhombic, and the first +computing box with positive coordinates has indexes `Box.lcell + 1`. """ @inline particle_cell(x::SVector{N}, box::Box) where N = From 5bc4a7c0ce10a33555ac69bc78b4375a46c29a7e Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Mon, 2 Aug 2021 17:40:44 -0300 Subject: [PATCH 52/62] code cleaning and changed Atom to Particle --- README.md | 10 +-- src/CellListMap.jl | 2 - src/CellOperations.jl | 2 +- src/HighDensitySystems.jl | 8 +-- src/LowDensitySystems.jl | 8 +-- src/StructTypes.jl | 21 +++--- src/TinySystems.jl | 134 -------------------------------------- src/examples.jl | 2 +- 8 files changed, 25 insertions(+), 162 deletions(-) delete mode 100644 src/TinySystems.jl diff --git a/README.md b/README.md index 41964caa..e9f7c326 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ The full code of the examples described here is available at the [examples.jl](h ### Mean difference of coordinates -Computing the mean difference in `x` position between random particles. The closure is used to remove the indexes and the distance of the atoms from the parameters of the input function, as they are not needed in this case. +Computing the mean difference in `x` position between random particles. The closure is used to remove the indexes and the distance of the particles from the parameters of the input function, as they are not needed in this case. ```julia using CellListMap @@ -105,7 +105,7 @@ The example above can be run with `CellListMap.test1()`. ### Histogram of distances Computing the histogram of the distances between particles (considering the same particles as in the above example). Again, -we use a closure to remove the indexes of the atoms from the computation, because they are not needed. The distance, on the other side, is needed in this example: +we use a closure to remove the indexes of the particles from the computation, because they are not needed. The distance, on the other side, is needed in this example: ```julia # Function that accumulates the histogram of distances @@ -184,7 +184,7 @@ The example above can be run with `CellListMap.test4()`. ### Nearest neighbor -Here we compute the indexes of the atoms that satisfy the minimum distance between two sets of points, using the linked lists. The distance and the indexes are stored in a tuple, and a reducing method has to be defined for that tuple to run the calculation. The function does not need the coordinates of the points, only their distance and indexes. +Here we compute the indexes of the particles that satisfy the minimum distance between two sets of points, using the linked lists. The distance and the indexes are stored in a tuple, and a reducing method has to be defined for that tuple to run the calculation. The function does not need the coordinates of the points, only their distance and indexes. ```julia # Number of particles, sides and cutoff @@ -229,7 +229,7 @@ The example above can be run with `CellListMap.test5()`. The example `CellListMa ### Neighbour list -In this example we compute the complete neighbor list, of all pairs of atoms which are closer than the desired cutoff. The implementation returns a vector of tuples, in which each tuple contains the indexes of the atoms and the corresponding distance. The empty `pairs` output array will be split in one vector for each thread, and reduced with a custom reduction function. +In this example we compute the complete neighbor list, of all pairs of particles which are closer than the desired cutoff. The implementation returns a vector of tuples, in which each tuple contains the indexes of the particles and the corresponding distance. The empty `pairs` output array will be split in one vector for each thread, and reduced with a custom reduction function. ```julia # Function to be evalulated for each pair: push pair if d box = Box([250,250,250],10); - -julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:1000 ]; - -julia> cl = CellList(x,box); - -julia> box = Box([260,260,260],10); - -julia> x = [ 260*rand(SVector{3,Float64}) for i in 1:1000 ]; - -julia> cl = UpdateCellList!(x,box,cl); # update lists - -``` - -""" -function UpdateCellList!( - x::AbstractVector{SVector{N,T}}, - box::Box, - cl::CellList{TinySystem,N,T}; - parallel::Bool=true -) where {N,T} - @unpack np, ncp, projected_particles = cl - - # This copy is of course redundant, but for the moment - # it is what it takes to use the same CellList structure - ncp[1] = length(x) - for (ip,coordinates) in pairs(x) - np[ip] = AtomWithIndex(ip,ip,coordinates,true) - end - resize!(projected_particles[1],ncp[1]) - - return cl -end - -# -# Serial version for self-pairwise computations -# -function map_pairwise_serial!( - f::F, output, box::Box, cl::CellList{TinySystem,N,T}; - show_progress::Bool=false -) where {F,N,T} - show_progress && println("TinySystems do not show progress.") - @unpack ncp, np = cl - @unpack unit_cell, cutoff_sq = box - for i in 1:ncp[1]-1 - xᵢ = np[i].coordinates - for j in i+1:ncp[1] - xⱼ = wrap_relative_to(np[j].coordinates,xᵢ,unit_cell) - d2 = norm_sqr(xᵢ - xⱼ) - if d2 <= cutoff_sq - output = f(xᵢ,xⱼ,i,j,d2,output) - end - end - end - return output -end - -""" - -``` -iuppert(k::Integer,n::Integer) -``` - -Returns the cartesian indexes of of the elements of the upper -triangular part of a square matrix of dimension `n×n`, given -the linear index `k`. - -### Examples - -```julia-repl -julia> iupper(1,3) -(1,2) - -julia> iupper(3,3) -(2,2) - -julia> iuppert(3,4) -(1,4) - -``` - -""" -@inline function iuppert(k::Integer,n::Integer) - i = n - 1 - floor(Int,sqrt(-8*k + 4*n*(n-1) + 1)/2 - 0.5) - j = k + i + ( (n-i+1)*(n-i) - n*(n-1) )÷2 - return i, j -end - -function map_pairwise_parallel!( - f::F1, output, box::Box, cl::CellList{TinySystem,N,T}; - output_threaded=output_threaded, - reduce::F2=reduce, - show_progress::Bool=false -) where {F1,F2,N,T} - @unpack ncp, np = cl - @unpack unit_cell, cutoff_sq = box - show_progress && println("TinySystems do not show progress.") - npairs = ncp[1]*(ncp[1]-1)÷2 - @threads for it in 1:nthreads() - for ipair in it:nthreads():npairs - i, j = iuppert(ipair,ncp[1]) - xᵢ = np[i].coordinates - xⱼ = wrap_relative_to(np[j].coordinates,xᵢ,unit_cell) - d2 = norm_sqr(xᵢ - xⱼ) - if d2 <= cutoff_sq - output_threaded[it] = f(xᵢ,xⱼ,i,j,d2,output_threaded[it]) - end - end - end - - output = reduce(output,output_threaded) - return output -end diff --git a/src/examples.jl b/src/examples.jl index 55da9be2..eca8e1da 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -1,7 +1,7 @@ import Random # -# In this test we compute the average displacement of the x coordinates of the atoms +# In this test we compute the average displacement of the x coordinates of the particles # function test1(;N=100_000,parallel=true,x=nothing) From 97dbfb92a0c4dae605473bf5cf491e3f7839673f Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Mon, 2 Aug 2021 18:05:19 -0300 Subject: [PATCH 53/62] commented tests --- test/runtests.jl | 58 ++++++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/test/runtests.jl b/test/runtests.jl index f241c916..66e4b3ae 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -159,34 +159,34 @@ using Test iyx = CellListMap.test6(parallel=true,x=y,y=x) @test ( ixy[1] == iyx[2] && ixy[2] == iyx[1] && ixy[3] ≈ iyx[3] ) - # Test resizing of the cell lists - x = [ rand(SVector{3,Float64}) for i in 1:1000 ] - box = Box([0.83,0.41,0.97],0.1) - cl = CellList(x,box) - @test length(cl.cwp) == 924 - - box = Box([0.33,0.41,0.97],0.1) - cl = UpdateCellList!(x,box,cl) - @test length(cl.cwp) == 924 - - box = Box([0.83,0.81,0.97],0.1) - cl = UpdateCellList!(x,box,cl) - @test length(cl.cwp) == 1598 - - x .= 0.9*x - cl = UpdateCellList!(x,box,cl) - @test length(cl.cwp) == 1598 - - x .= 1.2*x - cl = UpdateCellList!(x,box,cl) - @test length(cl.cwp) == 1598 - - box = Box([0.83,0.81,0.97],0.2) - cl = UpdateCellList!(x,box,cl) - @test length(cl.cwp) == 1598 - - box = Box([0.83,0.81,0.97],0.05) - cl = UpdateCellList!(x,box,cl) - @test length(cl.cwp) == 8737 +# # Test resizing of the cell lists +# x = [ rand(SVector{3,Float64}) for i in 1:1000 ] +# box = Box([0.83,0.41,0.97],0.1) +# cl = CellList(x,box) +# @test length(cl.cwp) == 924 +# +# box = Box([0.33,0.41,0.97],0.1) +# cl = UpdateCellList!(x,box,cl) +# @test length(cl.cwp) == 924 +# +# box = Box([0.83,0.81,0.97],0.1) +# cl = UpdateCellList!(x,box,cl) +# @test length(cl.cwp) == 1598 +# +# x .= 0.9*x +# cl = UpdateCellList!(x,box,cl) +# @test length(cl.cwp) == 1598 +# +# x .= 1.2*x +# cl = UpdateCellList!(x,box,cl) +# @test length(cl.cwp) == 1598 +# +# box = Box([0.83,0.81,0.97],0.2) +# cl = UpdateCellList!(x,box,cl) +# @test length(cl.cwp) == 1598 +# +# box = Box([0.83,0.81,0.97],0.05) +# cl = UpdateCellList!(x,box,cl) +# @test length(cl.cwp) == 8737 end From 3dd4b9bf4e51cbdae21ca7ed71084c16f5f89122 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 3 Aug 2021 14:25:24 -0300 Subject: [PATCH 54/62] up --- src/CellListMap.jl | 2 +- src/CellOperations.jl | 73 +++++++++++++++++++++++++++++ src/StructTypes.jl | 5 +- src/testing.jl | 104 ++++++++++++++++++++++++++++++++++-------- 4 files changed, 163 insertions(+), 21 deletions(-) diff --git a/src/CellListMap.jl b/src/CellListMap.jl index 68456f86..8f42855a 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -1,7 +1,7 @@ module CellListMap using Base.Threads -using LinearAlgebra: dot, norm, norm_sqr +using LinearAlgebra: dot, norm, norm_sqr, cross using Parameters using StaticArrays using DocStringExtensions diff --git a/src/CellOperations.jl b/src/CellOperations.jl index a190a5b5..a50c5bd0 100644 --- a/src/CellOperations.jl +++ b/src/CellOperations.jl @@ -393,6 +393,79 @@ Returns the index of the cell, in the 1D representation, from its cartesian coor @inline cell_linear_index(nc::SVector{N,Int}, indices) where N = LinearIndices(ntuple(i -> nc[i],N))[ntuple(i->indices[i],N)...] + """ + + ``` + check_unit_cell(box::Box) + ``` + + Checks if the unit cell satisfies the conditions for using the minimum-image + convention, with the same criteria used gy Gromacs. + + """ + check_unit_cell(box::Box) = check_unit_cell(box.unit_cell.matrix,box.cutoff) + + function check_unit_cell(unit_cell_matrix::SMatrix{3},cutoff;printerr=true) + a = @view(unit_cell_matrix[:,1]) + b = @view(unit_cell_matrix[:,2]) + c = @view(unit_cell_matrix[:,3]) + check = true + + if size(unit_cell_matrix) != (3,3) + printerr && println("UNIT CELL CHECK FAILED: unit cell matrix must have dimenions (3,3).") + check = false + end + + if count(el -> el < 0, unit_cell_matrix) != 0 + printerr && println("UNIT CELL CHECK FAILED: unit cell matrix components be strictly positive.") + check = false + end + + bc = cross(b,c) + bc = bc / norm(bc) + aproj = dot(a,bc) + ab = cross(a,b) + ab = ab / norm(ab) + cproj = dot(c,ab) + + ca = cross(c,a) + ca = ca / norm(ca) + bproj = dot(b,ca) + + if (aproj < 2*cutoff) || (bproj < 2*cutoff) || (cproj < 2*cutoff) + printerr && println("UNIT CELL CHECK FAILED: distance between cell planes too small relative to cutoff.") + check = false + end + + return check + end + function check_unit_cell(unit_cell_matrix::SMatrix{2},cutoff;printerr=true) + a = @view(unit_cell_matrix[:,1]) + b = @view(unit_cell_matrix[:,2]) + check = true + if size(unit_cell_matrix) != (2,2) + printerr && println("UNIT CELL CHECK FAILED: unit cell matrix must have dimenions (2,2).") + check = false + end + + if count(el -> el < 0, unit_cell_matrix) != 0 + printerr && println("UNIT CELL CHECK FAILED: unit cell matrix components must be strictly positive.") + check = false + end + + i = a / norm(a) + bproj = sqrt(norm_sqr(b) - dot(b,i)^2) + + j = b / norm(b) + aproj = sqrt(norm_sqr(a) - dot(a,j)^2) + + if (aproj < 2*cutoff) || (bproj < 2*cutoff) + printerr && println("UNIT CELL CHECK FAILED: distance between cell planes too small relative to cutoff.") + check = false + end + + return check + end \ No newline at end of file diff --git a/src/StructTypes.jl b/src/StructTypes.jl index 0bef41c6..8b533ac1 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -87,12 +87,15 @@ function Box( UnitCellType=TriclinicCell ) + s = size(unit_cell_matrix) + unit_cell_matrix = SMatrix{s[1],s[2],Float64,s[1]*s[2]}(unit_cell_matrix) + @assert lcell >= 1 "lcell must be greater or equal to 1" @assert scale_cutoff >= 1 "scale_cutoff must be greater or equal to 1.0" N = size(unit_cell_matrix)[1] @assert N == size(unit_cell_matrix)[2] "Unit cell matrix must be square." - @assert count(unit_cell_matrix .< 0) == 0 "Unit cell lattice vectors must only contain non-negative coordinates." + @assert check_unit_cell(unit_cell_matrix,cutoff) " Unit cell matrix does not satisfy required conditions." unit_cell = UnitCell{UnitCellType,N,T,N*N}(SMatrix{N,N,T,N*N}(unit_cell_matrix)) unit_cell_max = sum(@view(unit_cell_matrix[:,i]) for i in 1:N) diff --git a/src/testing.jl b/src/testing.jl index 581f6ef5..ff6d34ef 100644 --- a/src/testing.jl +++ b/src/testing.jl @@ -77,19 +77,29 @@ end b(box,cl) = map_pairwise!((x,y,i,j,d2,s) -> s += d2, 0., box, cl, parallel=false) n(box,x) = CellListMap.map_naive!((x,y,i,j,d2,s) -> s += d2, 0., x, box) -function test(N,M=2) +function check_random_cells(N,M=2) local x, box - for i in 1:100000 - box = Box(SMatrix{N,N,Float64,N*N}(rand(N,N)*10), 1) - if shortest_path(box.unit_cell.matrix) < 2*box.cutoff + ntrial = 0 + p = Progress(10000,0.5) + while ntrial < 10000 + unit_cell_matrix = 10*rand(SMatrix{N,N,Float64}) + cutoff = max(0.01,rand()) + if !check_unit_cell(unit_cell_matrix,cutoff,printerr=false) continue end + box = Box(unit_cell_matrix,cutoff) + if prod(box.nc) > 100000 + continue + end + ntrial += 1 + next!(p) x = 100 .* rand(SVector{N,Float64},M) for i in eachindex(x) x[i] = x[i] .- 50 end cl = CellList(x,box) if !(b(box,cl) ≈ n(box,x)) + println("FOUND PROBLEMATIC SETUP.") return x, box end end @@ -97,17 +107,7 @@ function test(N,M=2) return x, box end - -@views orth_proj(m,i,j) = - sqrt(norm(m[:,i])^2 - dot(m[:,i],m[:,j]/norm(m[:,j]))^2) - -function shortest_path(m::SMatrix{2,2,T,4}) where T - return min(orth_proj(m,1,2),orth_proj(m,2,1)) -end - -shortest_path(box::Box) = shortest_path(box.unit_cell.matrix) - -function plotbox(box) +function drawbox(box::Box{UnitCellType,2}) where UnitCellType S = SVector{2,Float64} m = box.unit_cell.matrix x = [S(0.,0.)] @@ -118,9 +118,75 @@ function plotbox(box) return x end +function drawbox(box::Box{UnitCellType,3}) where UnitCellType + S = SVector{3,Float64} + m = box.unit_cell.matrix + x = [S(0.,0.,0.)] + push!(x,S(m[:,1])) + push!(x,S(m[:,1] + m[:,2])) + push!(x,S(m[:,2])) + push!(x,S(0.,0.,0.)) + push!(x,S(m[:,1])) + push!(x,S(m[:,1] + m[:,3])) + push!(x,S(m[:,3])) + push!(x,S(0.,0.,0.)) + push!(x,S(m[:,2])) + push!(x,S(m[:,2] + m[:,3])) + push!(x,S(m[:,2])) + push!(x,S(0.,0.,0.)) + push!(x,S(m[:,1])) + push!(x,S(m[:,1] + m[:,2])) + push!(x,S(m[:,1] + m[:,2]) + m[:,3]) + push!(x,S(m[:,1] + m[:,3])) + push!(x,S(m[:,3])) + push!(x,S(m[:,3]) + m[:,2]) + push!(x,S(m[:,1] + m[:,2]) + m[:,3]) + return x +end - - - - +function draw_computing_cell(x,box::Box{UnitCellType,2}) where UnitCellType + cl = CellList(x,box) + box_points = drawbox(box) + p = view_celllist_particles(cl) + plt = Main.plot() + Main.plot!(plt,Tuple.(box_points),label=:none) + Main.scatter!(plt,Tuple.(p),label=:none,markeralpha=0.3) + Main.scatter!(plt,Tuple.(wrap_to_first.(x,Ref(box))),label=:none) + xmin = minimum(el[1] for el in p) - 3*box.cell_size[1] + xmin = minimum(el[1] for el in p) - 3*box.cell_size[1] + xmax = maximum(el[1] for el in p) + 3*box.cell_size[1] + ymin = minimum(el[2] for el in p) - 3*box.cell_size[2] + ymax = maximum(el[2] for el in p) + 3*box.cell_size[2] + Main.plot!(plt, + aspect_ratio=1,framestyle=:box,xrotation=60, + xlims=(xmin,xmax), + ylims=(ymin,ymax), + xticks=(round.(digits=3,xmin:box.cell_size[1]:xmax)), + yticks=(round.(digits=3,ymin:box.cell_size[2]:ymax)), + ) + return plt +end +function draw_computing_cell(x,box::Box{UnitCellType,3}) where UnitCellType + cl = CellList(x,box) + box_points = drawbox(box) + p = view_celllist_particles(cl) + plt = Main.plot() + Main.plot!(plt,Tuple.(box_points),label=:none) + Main.scatter!(plt,Tuple.(p),label=:none,markeralpha=0.3) + Main.scatter!(plt,Tuple.(wrap_to_first.(x,Ref(box))),label=:none,markeralpha=0.3) + lims = Vector{Float64}[] + for i in 1:3 + push!(lims, [ -2*box.cell_size[i], box.nc[i] + 2*box.cell_size[i] ]) + end + Main.plot!(plt, + aspect_ratio=1,framestyle=:box,xrotation=60,yrotation=-70,zrotation=0, + xlims=lims[1], + ylims=lims[2], + zlims=lims[3], + xticks=(round.(digits=3,lims[1][1]:box.cell_size[1]:lims[1][2])), + yticks=(round.(digits=3,lims[2][1]:box.cell_size[2]:lims[2][2])), + zticks=(round.(digits=3,lims[3][1]:box.cell_size[3]:lims[3][2])), + ) + return plt +end \ No newline at end of file From e56fc120a9a99b5dca74d984327744cac98024c1 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 3 Aug 2021 15:26:31 -0300 Subject: [PATCH 55/62] lots of code cleaning, tests passing --- src/CellListMap.jl | 19 +- src/CellOperations.jl | 397 +++++++++--------- ...HighDensitySystems.jl => CoreComputing.jl} | 250 +++++------ src/LowDensitySystems.jl | 247 ----------- src/StructTypes.jl | 246 ++++++++--- src/SystemCommons.jl | 168 -------- src/examples.jl | 6 +- src/halotools.jl | 62 --- src/testing.jl | 2 +- 9 files changed, 525 insertions(+), 872 deletions(-) rename src/{HighDensitySystems.jl => CoreComputing.jl} (58%) delete mode 100644 src/LowDensitySystems.jl delete mode 100644 src/SystemCommons.jl delete mode 100644 src/halotools.jl diff --git a/src/CellListMap.jl b/src/CellListMap.jl index 8f42855a..b94a5d6c 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -1,28 +1,22 @@ module CellListMap -using Base.Threads -using LinearAlgebra: dot, norm, norm_sqr, cross -using Parameters -using StaticArrays using DocStringExtensions using ProgressMeter +using Parameters +using StaticArrays using Setfield +using Base.Threads +using LinearAlgebra: dot, norm, norm_sqr, cross export Box export CellList, UpdateCellList! export map_pairwise! - -export LowDensitySystem -export HighDensitySystem - export TriclinicCell export OrthorhombicCell include("./StructTypes.jl") include("./CellOperations.jl") -include("./LowDensitySystems.jl") -include("./HighDensitySystems.jl") -include("./SystemCommons.jl") +include("./CoreComputing.jl") """ @@ -127,9 +121,8 @@ end # # Test and example functions # -include("./testing.jl") include("./examples.jl") -include("./halotools.jl") +include("./testing.jl") end # module diff --git a/src/CellOperations.jl b/src/CellOperations.jl index a50c5bd0..df3d907d 100644 --- a/src/CellOperations.jl +++ b/src/CellOperations.jl @@ -1,133 +1,5 @@ """ -``` -out_of_bounding_box(x::SVector{N},box::Box) where N -``` - -Function that evaluates if a particle is outside the computing bounding box, -defined by the maximum and minimum unit cell coordinates. - -""" -function out_of_bounding_box(x::SVector{N},box::Box) where N - @unpack cutoff, unit_cell_max = box - for i in 1:N - (x[i] < -cutoff) && return true - (x[i] >= unit_cell_max[i]+cutoff) && return true - end - return false -end -out_of_bounding_box(p::ParticleWithIndex,box::Box) = - out_of_bounding_box(p.coordinates,box) - -""" - -``` -replicate_particle!(ip,p::SVector{N},box,cl) where N -``` - -Replicates the particle as many times as necessary to fill the computing box. - -""" -function replicate_particle!(ip,p::SVector{N},box,cl) where N - itr = Iterators.product(ntuple(i->box.ranges[i],N)...) - for indexes in itr - (count(isequal(0),indexes) == N) && continue - x = translation_image(p,box.unit_cell.matrix,indexes) - if ! out_of_bounding_box(x,box) - cl = add_particle_to_celllist!(ip,x,box,cl;real_particle=false) - end - end - return cl -end - -""" - -``` -ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix::SMatrix{3,3,T}) where T -``` - -Function that sets which is the range of periodic images necessary to fill -the computing box, in 3D. - -""" -function ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix::SMatrix{3,3,T}) where T - V = SVector{3,T} - cmin = -lcell*cell_size - cmax = (nc .- lcell) .* cell_size - cell_vertices = SVector{8,V}( - V( cmin[1], cmin[2], cmin[3] ), - V( cmin[1], cmin[2], cmax[3] ), - V( cmin[1], cmax[2], cmin[3] ), - V( cmin[1], cmax[2], cmax[3] ), - V( cmax[1], cmin[2], cmin[3] ), - V( cmax[1], cmin[2], cmax[3] ), - V( cmax[1], cmax[2], cmin[3] ), - V( cmax[1], cmax[2], cmax[3] ) - ) - r_min, r_max = _ranges_of_replicas( - SVector{3,Int}(10^6,10^6,10^6), #min - SVector{3,Int}(-1,-1,-1), #max - unit_cell_matrix, - cell_vertices - ) - ranges = SVector{3,UnitRange{Int}}( - r_min[1]:r_max[1], - r_min[2]:r_max[2], - r_min[3]:r_max[3] - ) - return ranges -end - -""" - -``` -ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix::SMatrix{3,3,T}) where T -``` - -Function that sets which is the range of periodic images necessary to fill -the computing box, in 2D. - -""" -function ranges_of_replicas(cell_size, lcell, nc,unit_cell_matrix::SMatrix{2,2,T}) where T - V = SVector{2,T} - cmin = -lcell*cell_size - cmax = (nc .- lcell) .* cell_size - cell_vertices = SVector{4,V}( - V( cmin[1], cmin[2] ), - V( cmin[1], cmax[2] ), - V( cmax[1], cmin[2] ), - V( cmax[1], cmax[2] ), - ) - r_min, r_max = _ranges_of_replicas( - SVector{2,Int}(10^6,10^6), #min - SVector{2,Int}(-1,-1), #max - unit_cell_matrix, - cell_vertices - ) - ranges = SVector{2,UnitRange{Int}}( - r_min[1]:r_max[1], - r_min[2]:r_max[2] - ) - return ranges -end - -function _ranges_of_replicas(r_min,r_max,unit_cell,cell_vertices) - for vert in cell_vertices - r = unit_cell \ vert - ri = @. ceil(Int,abs(r)) - for (i,el) in pairs(r) - if el < 0 - @set! ri[i] = -ri[i] - end - end - r_min = min.(ri,r_min) - r_max = max.(ri,r_max) - end - return r_min, r_max -end - -""" - ``` wrap_to_cell_fraction(x,unit_cell_matrix) ``` @@ -370,6 +242,20 @@ computing box with positive coordinates has indexes `Box.lcell + 1`. """ +``` +cell_center(c::CartesianIndex{N},box::Box{UnitCellType,N,T}) where {UnitCellType,N,T} +``` + +Computes the geometric center of a computing cell, to be used in the projection +of points. Returns a `SVector{N,T}` + +""" +@inline cell_center(c::CartesianIndex{N},box::Box{UnitCellType,N,T}) where {UnitCellType,N,T} = + SVector{N,T}(ntuple(i -> box.cell_size[i]*(c[i] - 0.5 - box.lcell), N)) + + +""" + ``` cell_cartesian_indices(nc::SVector{N,Int}, i1D) where {N} ``` @@ -393,79 +279,210 @@ Returns the index of the cell, in the 1D representation, from its cartesian coor @inline cell_linear_index(nc::SVector{N,Int}, indices) where N = LinearIndices(ntuple(i -> nc[i],N))[ntuple(i->indices[i],N)...] - """ - - ``` - check_unit_cell(box::Box) - ``` - - Checks if the unit cell satisfies the conditions for using the minimum-image - convention, with the same criteria used gy Gromacs. - - """ - check_unit_cell(box::Box) = check_unit_cell(box.unit_cell.matrix,box.cutoff) - - function check_unit_cell(unit_cell_matrix::SMatrix{3},cutoff;printerr=true) - a = @view(unit_cell_matrix[:,1]) - b = @view(unit_cell_matrix[:,2]) - c = @view(unit_cell_matrix[:,3]) - check = true - - if size(unit_cell_matrix) != (3,3) - printerr && println("UNIT CELL CHECK FAILED: unit cell matrix must have dimenions (3,3).") - check = false - end +""" - if count(el -> el < 0, unit_cell_matrix) != 0 - printerr && println("UNIT CELL CHECK FAILED: unit cell matrix components be strictly positive.") - check = false - end +``` +out_of_bounding_box(x::SVector{N},box::Box) where N +``` - bc = cross(b,c) - bc = bc / norm(bc) - aproj = dot(a,bc) +Function that evaluates if a particle is outside the computing bounding box, +defined by the maximum and minimum unit cell coordinates. + +""" +function out_of_bounding_box(x::SVector{N},box::Box) where N + @unpack cutoff, unit_cell_max = box + for i in 1:N + (x[i] < -cutoff) && return true + (x[i] >= unit_cell_max[i]+cutoff) && return true + end + return false +end +out_of_bounding_box(p::ParticleWithIndex,box::Box) = + out_of_bounding_box(p.coordinates,box) - ab = cross(a,b) - ab = ab / norm(ab) - cproj = dot(c,ab) +""" + +``` +replicate_particle!(ip,p::SVector{N},box,cl) where N +``` - ca = cross(c,a) - ca = ca / norm(ca) - bproj = dot(b,ca) +Replicates the particle as many times as necessary to fill the computing box. - if (aproj < 2*cutoff) || (bproj < 2*cutoff) || (cproj < 2*cutoff) - printerr && println("UNIT CELL CHECK FAILED: distance between cell planes too small relative to cutoff.") - check = false +""" +function replicate_particle!(ip,p::SVector{N},box,cl) where N + itr = Iterators.product(ntuple(i->box.ranges[i],N)...) + for indexes in itr + (count(isequal(0),indexes) == N) && continue + x = translation_image(p,box.unit_cell.matrix,indexes) + if ! out_of_bounding_box(x,box) + cl = add_particle_to_celllist!(ip,x,box,cl;real_particle=false) end - - return check + end + return cl +end + +""" + +``` +check_unit_cell(box::Box) +``` + +Checks if the unit cell satisfies the conditions for using the minimum-image +convention, with the same criteria used gy Gromacs. + +""" +check_unit_cell(box::Box) = check_unit_cell(box.unit_cell.matrix,box.cutoff) + +function check_unit_cell(unit_cell_matrix::SMatrix{3},cutoff;printerr=true) + a = @view(unit_cell_matrix[:,1]) + b = @view(unit_cell_matrix[:,2]) + c = @view(unit_cell_matrix[:,3]) + check = true + + if size(unit_cell_matrix) != (3,3) + printerr && println("UNIT CELL CHECK FAILED: unit cell matrix must have dimenions (3,3).") + check = false end - function check_unit_cell(unit_cell_matrix::SMatrix{2},cutoff;printerr=true) - a = @view(unit_cell_matrix[:,1]) - b = @view(unit_cell_matrix[:,2]) - check = true + if count(el -> el < 0, unit_cell_matrix) != 0 + printerr && println("UNIT CELL CHECK FAILED: unit cell matrix components be strictly positive.") + check = false + end - if size(unit_cell_matrix) != (2,2) - printerr && println("UNIT CELL CHECK FAILED: unit cell matrix must have dimenions (2,2).") - check = false - end + bc = cross(b,c) + bc = bc / norm(bc) + aproj = dot(a,bc) - if count(el -> el < 0, unit_cell_matrix) != 0 - printerr && println("UNIT CELL CHECK FAILED: unit cell matrix components must be strictly positive.") - check = false - end + ab = cross(a,b) + ab = ab / norm(ab) + cproj = dot(c,ab) + + ca = cross(c,a) + ca = ca / norm(ca) + bproj = dot(b,ca) + + if (aproj < 2*cutoff) || (bproj < 2*cutoff) || (cproj < 2*cutoff) + printerr && println("UNIT CELL CHECK FAILED: distance between cell planes too small relative to cutoff.") + check = false + end + + return check +end + +function check_unit_cell(unit_cell_matrix::SMatrix{2},cutoff;printerr=true) + a = @view(unit_cell_matrix[:,1]) + b = @view(unit_cell_matrix[:,2]) + check = true + + if size(unit_cell_matrix) != (2,2) + printerr && println("UNIT CELL CHECK FAILED: unit cell matrix must have dimenions (2,2).") + check = false + end + + if count(el -> el < 0, unit_cell_matrix) != 0 + printerr && println("UNIT CELL CHECK FAILED: unit cell matrix components must be strictly positive.") + check = false + end + + i = a / norm(a) + bproj = sqrt(norm_sqr(b) - dot(b,i)^2) - i = a / norm(a) - bproj = sqrt(norm_sqr(b) - dot(b,i)^2) + j = b / norm(b) + aproj = sqrt(norm_sqr(a) - dot(a,j)^2) - j = b / norm(b) - aproj = sqrt(norm_sqr(a) - dot(a,j)^2) + if (aproj < 2*cutoff) || (bproj < 2*cutoff) + printerr && println("UNIT CELL CHECK FAILED: distance between cell planes too small relative to cutoff.") + check = false + end + + return check +end + +# +# The following functions are not being used anymore. +# +""" + +``` +ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix::SMatrix{3,3,T}) where T +``` + +Function that sets which is the range of periodic images necessary to fill +the computing box, in 3D. - if (aproj < 2*cutoff) || (bproj < 2*cutoff) - printerr && println("UNIT CELL CHECK FAILED: distance between cell planes too small relative to cutoff.") - check = false +""" +function ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix::SMatrix{3,3,T}) where T + V = SVector{3,T} + cmin = -lcell*cell_size + cmax = (nc .- lcell) .* cell_size + cell_vertices = SVector{8,V}( + V( cmin[1], cmin[2], cmin[3] ), + V( cmin[1], cmin[2], cmax[3] ), + V( cmin[1], cmax[2], cmin[3] ), + V( cmin[1], cmax[2], cmax[3] ), + V( cmax[1], cmin[2], cmin[3] ), + V( cmax[1], cmin[2], cmax[3] ), + V( cmax[1], cmax[2], cmin[3] ), + V( cmax[1], cmax[2], cmax[3] ) + ) + r_min, r_max = _ranges_of_replicas( + SVector{3,Int}(10^6,10^6,10^6), #min + SVector{3,Int}(-1,-1,-1), #max + unit_cell_matrix, + cell_vertices + ) + ranges = SVector{3,UnitRange{Int}}( + r_min[1]:r_max[1], + r_min[2]:r_max[2], + r_min[3]:r_max[3] + ) + return ranges +end + +""" + +``` +ranges_of_replicas(cell_size, lcell, nc, unit_cell_matrix::SMatrix{3,3,T}) where T +``` + +Function that sets which is the range of periodic images necessary to fill +the computing box, in 2D. + +""" +function ranges_of_replicas(cell_size, lcell, nc,unit_cell_matrix::SMatrix{2,2,T}) where T + V = SVector{2,T} + cmin = -lcell*cell_size + cmax = (nc .- lcell) .* cell_size + cell_vertices = SVector{4,V}( + V( cmin[1], cmin[2] ), + V( cmin[1], cmax[2] ), + V( cmax[1], cmin[2] ), + V( cmax[1], cmax[2] ), + ) + r_min, r_max = _ranges_of_replicas( + SVector{2,Int}(10^6,10^6), #min + SVector{2,Int}(-1,-1), #max + unit_cell_matrix, + cell_vertices + ) + ranges = SVector{2,UnitRange{Int}}( + r_min[1]:r_max[1], + r_min[2]:r_max[2] + ) + return ranges +end + +function _ranges_of_replicas(r_min,r_max,unit_cell,cell_vertices) + for vert in cell_vertices + r = unit_cell \ vert + ri = @. ceil(Int,abs(r)) + for (i,el) in pairs(r) + if el < 0 + @set! ri[i] = -ri[i] + end end - - return check - end \ No newline at end of file + r_min = min.(ri,r_min) + r_max = max.(ri,r_max) + end + return r_min, r_max +end diff --git a/src/HighDensitySystems.jl b/src/CoreComputing.jl similarity index 58% rename from src/HighDensitySystems.jl rename to src/CoreComputing.jl index 0dcdb3f3..f4933014 100644 --- a/src/HighDensitySystems.jl +++ b/src/CoreComputing.jl @@ -1,144 +1,25 @@ # -# Functions to deal with large and dense system, avoiding the maximum number -# of unnecessary loop iterations over non-interacting particles +# Parallel thread spliiter # +splitter(first,n) = first:nthreads():n -""" - -``` -UpdateCellList!( - x::AbstractVector{SVector{N,T}}, - box::Box,cl:CellList{HighDensitySystem,N,T}, - parallel=true -) where {N,T} -``` - -Function that will update a previously allocated `CellList` structure, given new updated particle -positions of large and dense systems. - -## Example - -```julia-repl -julia> box = Box([250,250,250],10); - -julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:1000 ]; - -julia> cl = CellList(x,box); - -julia> box = Box([260,260,260],10); - -julia> x = [ 260*rand(SVector{3,Float64}) for i in 1:1000 ]; - -julia> cl = UpdateCellList!(x,box,cl); # update lists - -``` - -""" -function UpdateCellList!( - x::AbstractVector{SVector{N,T}}, - box::Box, - cl::CellList{HighDensitySystem,N,T}; - parallel::Bool=true -) where {N,T} - @unpack contains_real, cwp, fp, np, npcell, projected_particles = cl - - number_of_cells = prod(box.nc) - if number_of_cells > length(cwp) - number_of_cells = ceil(Int,1.2*number_of_cells) # some margin in case of box size variations - resize!(contains_real,number_of_cells) - resize!(cwp,number_of_cells) - resize!(fp,number_of_cells) - resize!(npcell,number_of_cells) - end - - cl.ncwp[1] = 0 - fill!(contains_real,false) - fill!(cwp,zero(Cell{N,T})) - fill!(fp,zero(ParticleWithIndex{N,T})) - fill!(np,zero(ParticleWithIndex{N,T})) - fill!(npcell,0) - - # - # The following part cannot be *easily* paralelized, because - # there is concurrency on the construction of the cell lists - # - - # - # Add virtual particles to edge cells - # - for (ip,particle) in pairs(x) - p = wrap_to_first(particle,box) - cl = replicate_particle!(ip,p,box,cl) - end - # - # Add true particles, such that the first particle of each cell is - # always a true particle - # - for (ip,particle) in pairs(x) - p = wrap_to_first(particle,box) - cl = add_particle_to_celllist!(ip,p,box,cl) - end - - maximum_npcell = maximum(npcell) - if maximum_npcell > length(projected_particles[1]) - for i in 1:nthreads() - resize!(projected_particles[i],ceil(Int,1.2*maximum_npcell)) - end - end - - return cl -end - -""" - -Set one index of a cell list - -""" -function add_particle_to_celllist!( - ip, - x::SVector{N,T}, - box, - cl::CellList{HighDensitySystem,N,T}; - real_particle::Bool=true -) where {N,T} - @unpack contains_real, ncp, ncwp, cwp, fp, np, npcell = cl - ncp[1] += 1 - icell_cartesian = particle_cell(x,box) - icell = cell_linear_index(box.nc,icell_cartesian) - # - # Cells starting with real particles are annotated to be run over - # - if real_particle && (!contains_real[icell]) - contains_real[icell] = true - ncwp[1] += 1 - cwp[ncwp[1]] = Cell{N,T}( - icell, - icell_cartesian, - cell_center(icell_cartesian,box) - ) - end - if fp[icell].index == 0 - npcell[icell] = 1 - else - npcell[icell] += 1 - end - if ncp[1] > length(np) - old_length = length(np) - resize!(np,ceil(Int,1.2*old_length)) - for i in old_length+1:length(np) - np[i] = zero(ParticleWithIndex{N,T}) - end +# +# Functions to reduce the output of common options (vectors of numbers +# and vectors of vectors) +# +reduce(output::Number, output_threaded::Vector{<:Number}) = sum(output_threaded) +function reduce(output::AbstractVector, output_threaded::AbstractVector{<:AbstractVector}) + for i in 1:nthreads() + @. output += output_threaded[i] end - np[ncp[1]] = fp[icell] - fp[icell] = ParticleWithIndex(ncp[1],ip,x,real_particle) - return cl + return output end # # Serial version for self-pairwise computations # function map_pairwise_serial!( - f::F, output, box::Box, cl::CellList{HighDensitySystem,N,T}; + f::F, output, box::Box, cl::CellList{N,T}; show_progress::Bool=false ) where {F,N,T} show_progress && (p = Progress(cl.ncwp[1],dt=1)) @@ -153,14 +34,14 @@ end # Parallel version for self-pairwise computations # function map_pairwise_parallel!( - f::F1, output, box::Box, cl::CellList{HighDensitySystem,N,T}; + f::F1, output, box::Box, cl::CellList{N,T}; output_threaded=output_threaded, reduce::F2=reduce, show_progress::Bool=false ) where {F1,F2,N,T} show_progress && (p = Progress(cl.ncwp[1],dt=1)) @threads for it in 1:nthreads() - for icell in it:nthreads():cl.ncwp[1] + for icell in splitter(it,cl.ncwp[1]) output_threaded[it] = inner_loop!(f,box,icell,cl,output_threaded[it]) show_progress && next!(p) end @@ -169,6 +50,31 @@ function map_pairwise_parallel!( return output end +""" + +``` +partition!(x::AbstractVector,by) +``` + +Function that reorders `x` vector by putting in the first positions the +elements with values satisfying `by(el)`. Returns the number of elements +that satisfy the condition. + +""" +function partition!(x::AbstractVector,by) + iswap = 1 + @inbounds for i in eachindex(x) + if by(x[i]) + if iswap != i + x[iswap], x[i] = x[i], x[iswap] + end + iswap += 1 + end + end + return iswap - 1 +end + + """ ``` @@ -205,7 +111,7 @@ end function inner_loop!( f,box::Box{TriclinicCell},icell, - cl::CellList{HighDensitySystem,N,T}, + cl::CellList{N,T}, output ) where {N,T} @unpack cutoff, cutoff_sq, nc = box @@ -258,9 +164,13 @@ function inner_loop!( return output end +# +# Inner loop for Orthorhombic cells is faster because we can guarantee that +# there are not repeated computations even if running over half of the cells. +# function inner_loop!( f,box::Box{OrthorhombicCell},icell, - cl::CellList{HighDensitySystem,N,T}, + cl::CellList{N,T}, output ) where {N,T} @unpack cutoff_sq = box @@ -295,15 +205,11 @@ function inner_loop!( return output end -# -# loops over the particles of a neighbour cell, for LargeDenseSystem -# not large enough such that sorting the projections is useful -# function cell_output!( f, box::Box{OrthorhombicCell}, icell, - cl::CellList{HighDensitySystem,N,T}, + cl::CellList{N,T}, output, jc_cartesian ) where {N,T} @@ -342,4 +248,68 @@ function cell_output!( return output end +# +# Serial version for cross-interaction computations +# +function map_pairwise_serial!( + f::F, output, box::Box, + cl::CellListPair{N,T}; + show_progress=show_progress +) where {F,N,T} + show_progress && (p = Progress(length(cl.small),dt=0)) + for i in eachindex(cl.small) + output = inner_loop!(f,output,i,box,cl) + show_progress && next!(p) + end + return output +end +# +# Parallel version for cross-interaction computations +# +function map_pairwise_parallel!( + f::F1, output, box::Box, + cl::CellListPair{N,T}; + output_threaded=output_threaded, + reduce::F2=reduce, + show_progress=show_progress +) where {F1,F2,N,T} + show_progress && (p = Progress(length(cl.small),dt=1)) + @threads for it in 1:nthreads() + for i in splitter(it,length(cl.small)) + output_threaded[it] = inner_loop!(f,output_threaded[it],i,box,cl) + show_progress && next!(p) + end + end + output = reduce(output,output_threaded) + return output +end + +# +# Inner loop of cross-interaction computations +# +function inner_loop!( + f,output,i,box, + cl::CellListPair{N,T} +) where {N,T} + @unpack nc, cutoff_sq = box + xpᵢ = wrap_to_first(cl.small[i],box) + ic = particle_cell(xpᵢ,box) + for neighbour_cell in neighbour_cells_all(box) + jc = cell_linear_index(nc,neighbour_cell+ic) + pⱼ = cl.large.fp[jc] + j = pⱼ.index + # loop over particles of cell jc + while j > 0 + xpⱼ = pⱼ.coordinates + d2 = norm_sqr(xpᵢ - xpⱼ) + if d2 <= cutoff_sq + j_orig = pⱼ.index_original + output = f(xpᵢ,xpⱼ,i,j_orig,d2,output) + end + pⱼ = cl.large.np[j] + j = pⱼ.index + end + end + return output +end diff --git a/src/LowDensitySystems.jl b/src/LowDensitySystems.jl deleted file mode 100644 index b9ff9f9c..00000000 --- a/src/LowDensitySystems.jl +++ /dev/null @@ -1,247 +0,0 @@ -# -# Functions for low density systems -# - -""" - -``` -UpdateCellList!( - x::AbstractVector{SVector{N,T}}, - box::Box,cl:CellList{LowDensitySystem,N,T}, - parallel=true -) where {N,T} -``` - -Function that will update a previously allocated `CellList` structure, given new updated particle -positions of large and dense systems. - -## Example - -```julia-repl -julia> box = Box([250,250,250],10); - -julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:1000 ]; - -julia> cl = CellList(x,box); - -julia> box = Box([260,260,260],10); - -julia> x = [ 260*rand(SVector{3,Float64}) for i in 1:1000 ]; - -julia> cl = UpdateCellList!(x,box,cl); # update lists - -``` - -""" -function UpdateCellList!( - x::AbstractVector{SVector{N,T}}, - box::Box, - cl::CellList{LowDensitySystem,N,T}; - parallel::Bool=true -) where {N,T} - @unpack contains_real, cwp, fp, np, npcell = cl - - number_of_cells = prod(box.nc) - if number_of_cells > length(cwp) - number_of_cells = ceil(Int,1.2*number_of_cells) # some margin in case of box size variations - resize!(contains_real,number_of_cells) - resize!(cwp,number_of_cells) - resize!(fp,number_of_cells) - resize!(npcell,number_of_cells) - end - - cl.ncwp[1] = 0 - fill!(contains_real,false) - fill!(cwp,zero(Cell{N,T})) - fill!(fp,zero(ParticleWithIndex{N,T})) - fill!(np,zero(ParticleWithIndex{N,T})) - fill!(npcell,0) - - # - # The following part cannot be *easily* paralelized, because - # there is concurrency on the construction of the cell lists - # - - # - # Add virtual particles to edge cells - # - for (ip,particle) in pairs(x) - p = wrap_to_first(particle,box) - cl = replicate_particle!(ip,p,box,cl) - end - # - # Add true particles, such that the first particle of each cell is - # always a true particle - # - for (ip,particle) in pairs(x) - p = wrap_to_first(particle,box) - cl = add_particle_to_celllist!(ip,p,box,cl) - end - - return cl -end - -""" - -Set one index of a cell list - -""" -function add_particle_to_celllist!( - ip, - x::SVector{N,T}, - box, - cl::CellList{LowDensitySystem,N,T}; - real_particle::Bool=true -) where {N,T} - @unpack contains_real, ncp, ncwp, cwp, fp, np, npcell = cl - ncp[1] += 1 - icell_cartesian = particle_cell(x,box) - icell = cell_linear_index(box.nc,icell_cartesian) - # - # Cells starting with real particles are annotated to be run over - # - if real_particle && (!contains_real[icell]) - contains_real[icell] = true - ncwp[1] += 1 - cwp[ncwp[1]] = Cell{N,T}( - icell, - icell_cartesian, - zeros(SVector{N,T}) - ) - end - if fp[icell].index == 0 - npcell[icell] = 1 - else - npcell[icell] += 1 - end - if ncp[1] > length(np) - old_length = length(np) - resize!(np,ceil(Int,1.2*old_length)) - for i in old_length+1:length(np) - np[i] = zero(ParticleWithIndex{N,T}) - end - end - np[ncp[1]] = fp[icell] - fp[icell] = ParticleWithIndex(ncp[1],ip,x,real_particle) - return cl -end - -# -# Serial version for self-pairwise computations -# -function map_pairwise_serial!( - f::F, output, box::Box, cl::CellList{SystemType,N,T}; - show_progress::Bool=false -) where {F,SystemType,N,T} - show_progress && (p = Progress(cl.ncwp[1],dt=1)) - for icell in 1:cl.ncwp[1] - output = inner_loop!(f,box,icell,cl,output) - show_progress && next!(p) - end - return output -end - -# -# Parallel version for self-pairwise computations -# -function map_pairwise_parallel!( - f::F1, output, box::Box, cl::CellList{LowDensitySystem,N,T}; - output_threaded=output_threaded, - reduce::F2=reduce, - show_progress::Bool=false -) where {F1,F2,N,T} - show_progress && (p = Progress(cl.ncwp[1],dt=1)) - @threads for it in 1:nthreads() - for icell in it:nthreads():cl.ncwp[1] - output_threaded[it] = inner_loop!(f,box,icell,cl,output_threaded[it]) - show_progress && next!(p) - end - end - output = reduce(output,output_threaded) - return output -end - -@inline function distance_sq(x::AbstractVector{T}, y::AbstractVector{T}) where T - @assert length(x) == length(y) - d = zero(T) - @inbounds for i in eachindex(x) - d += (x[i]-y[i])^2 - end - return d -end - -function inner_loop!( - f,box,icell, - cl::CellList{LowDensitySystem}, - output -) - @unpack cutoff_sq = box - cell = cl.cwp[icell] - - # loop over list of non-repeated particles of cell ic - pᵢ = cl.fp[cell.icell] - i = pᵢ.index - while i > 0 - xpᵢ = pᵢ.coordinates - pⱼ = cl.np[i] - j = pⱼ.index - while j > 0 - xpⱼ = pⱼ.coordinates - d2 = norm_sqr(xpᵢ - xpⱼ) - if d2 <= cutoff_sq - i_orig = pᵢ.index_original - j_orig = pⱼ.index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) - end - pⱼ = cl.np[pⱼ.index] - j = pⱼ.index - end - pᵢ = cl.np[pᵢ.index] - i = pᵢ.index - end - - for jcell in neighbour_cells(box) - output = cell_output!(f,box,cell,cl,output,cell.cartesian+jcell) - end - - return output -end - -# -# loops over the particles of a neighbour cell, for LowDensitySystems -# not large enough such that sorting the projections is useful -# -function cell_output!( - f, - box, - icell, - cl::CellList{LowDensitySystem,N,T}, - output, - jc_cartesian -) where {N,T} - @unpack cutoff_sq, nc = box - jcell = cell_linear_index(nc,jc_cartesian) - - pᵢ = cl.fp[icell.icell] - i = pᵢ.index - while i > 0 - xpᵢ = pᵢ.coordinates - pⱼ = cl.fp[jcell] - j = pⱼ.index - while j > 0 - xpⱼ = pⱼ.coordinates - d2 = norm_sqr(xpᵢ - xpⱼ) - if d2 <= cutoff_sq - i_orig = pᵢ.index_original - j_orig = pⱼ.index_original - output = f(xpᵢ,xpⱼ,i_orig,j_orig,d2,output) - end - pⱼ = cl.np[j] - j = pⱼ.index - end - pᵢ = cl.np[i] - i = pᵢ.index - end - - return output -end diff --git a/src/StructTypes.jl b/src/StructTypes.jl index 8b533ac1..c6a47c6d 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -1,9 +1,3 @@ -# -# Type of systems, to dispatch methods accordingly -# -struct LowDensitySystem end -struct HighDensitySystem end - # # This difference is important because for Orthorhombic cells it is # possible to run over only half of the cells, and wrapping coordinates @@ -49,7 +43,6 @@ Base.@kwdef struct Box{UnitCellType,N,T,M} cutoff::T cutoff_sq::T ranges::SVector{N,UnitRange{Int}} - scale_cutoff::T cell_size::SVector{N,T} unit_cell_max::SVector{N,T} end @@ -83,7 +76,6 @@ function Box( cutoff, T::DataType, lcell::Int=1, - scale_cutoff=1.0, UnitCellType=TriclinicCell ) @@ -91,7 +83,6 @@ function Box( unit_cell_matrix = SMatrix{s[1],s[2],Float64,s[1]*s[2]}(unit_cell_matrix) @assert lcell >= 1 "lcell must be greater or equal to 1" - @assert scale_cutoff >= 1 "scale_cutoff must be greater or equal to 1.0" N = size(unit_cell_matrix)[1] @assert N == size(unit_cell_matrix)[2] "Unit cell matrix must be square." @@ -116,7 +107,6 @@ function Box( cutoff, cutoff^2, ranges, - scale_cutoff, cell_size, unit_cell_max ) @@ -126,9 +116,8 @@ Box( cutoff; T::DataType=Float64, lcell::Int=1, - scale_cutoff=1.0, UnitCellType=TriclinicCell -) = Box(unit_cell_matrix,cutoff,T,lcell,scale_cutoff,UnitCellType) +) = Box(unit_cell_matrix,cutoff,T,lcell,UnitCellType) function Base.show(io::IO,::MIME"text/plain",box::Box) println(typeof(box)) @@ -164,7 +153,6 @@ function Box( cutoff, T::DataType, lcell::Int=1, - scale_cutoff=1.0, UnitCellType=OrthorhombicCell ) N = length(sides) @@ -185,7 +173,6 @@ function Box( cutoff, T, lcell, - scale_cutoff, UnitCellType ) end @@ -194,9 +181,8 @@ Box( cutoff; T::DataType=Float64, lcell::Int=1, - scale_cutoff=1.0, UnitCellType=OrthorhombicCell -) = Box(sides,cutoff,T,lcell,scale_cutoff,UnitCellType) +) = Box(sides,cutoff,T,lcell,UnitCellType) """ @@ -255,7 +241,7 @@ $(TYPEDFIELDS) Structure that contains the cell lists information. """ -Base.@kwdef struct CellList{SystemType,N,T} +Base.@kwdef struct CellList{N,T} " *mutable* number of cells with real particles. " ncwp::Vector{Int} " *mutable* number of particles in the computing box " @@ -279,11 +265,19 @@ function Base.show(io::IO,::MIME"text/plain",cl::CellList) println(" $(cl.ncp[1]) particles in computing box, including images.") end -# Structure that will cointain the cell lists of two independent sets of -# particles for cross-computation of interactions -@with_kw struct CellListPair{SystemType,V,N,T} +""" + +$(TYPEDEF) + +$(TYPEDFIELDS) + +Structure that will cointain the cell lists of two independent sets of +particles for cross-computation of interactions + +""" +@with_kw struct CellListPair{V,N,T} small::V - large::CellList{SystemType,N,T} + large::CellList{N,T} swap::Bool end function Base.show(io::IO,::MIME"text/plain",cl::CellListPair) @@ -319,8 +313,7 @@ CellList{3, Float64} function CellList( x::AbstractVector{SVector{N,T}}, box::Box; - parallel::Bool=true, - SystemType=nothing + parallel::Bool=true ) where {N,T} number_of_cells = prod(box.nc) # number_of_particles is a lower bound, will be resized when necessary to incorporate particle images @@ -334,13 +327,7 @@ function CellList( npcell = Vector{Int}(undef,number_of_cells) projected_particles = [ Vector{ProjectedParticle{N,T}}(undef,0) for i in 1:nthreads() ] - # Set automatically the system type, as a function of the - # total number of particles and the number of particles per cell - if isnothing(SystemType) - SystemType = set_system_type(x,box) - end - - cl = CellList{SystemType,N,T}( + cl = CellList{N,T}( ncwp, ncp, contains_real, @@ -353,24 +340,6 @@ function CellList( return UpdateCellList!(x,box,cl,parallel=parallel) end -function set_system_type(x,box) - - return HighDensitySystem - - if length(x) <= 20 - return TinySystem - end - - particles_per_cell = length(x) / prod(box.nc) - - # what is low? what is high? to test - if particles_per_cell < 32 - return LowDensitySystem - end - - return HighDensitySystem -end - """ ``` @@ -415,5 +384,186 @@ function CellList( return cl_pair end +""" + +``` +particles_per_cell(cl::CellList,box::Box) +``` + +Returns the average number of particles per computing cell. + +""" particles_per_cell(cl::CellList,box::Box) = cl.ncp[1] / prod(box.nc) +""" + +``` +UpdateCellList!( + x::AbstractVector{SVector{N,T}}, + box::Box,cl:CellList{N,T}, + parallel=true +) where {N,T} +``` + +Function that will update a previously allocated `CellList` structure, given new +updated particle positions. + +## Example + +```julia-repl +julia> box = Box([250,250,250],10); + +julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:1000 ]; + +julia> cl = CellList(x,box); + +julia> box = Box([260,260,260],10); + +julia> x = [ 260*rand(SVector{3,Float64}) for i in 1:1000 ]; + +julia> cl = UpdateCellList!(x,box,cl); # update lists + +``` + +""" +function UpdateCellList!( + x::AbstractVector{SVector{N,T}}, + box::Box, + cl::CellList{N,T}; + parallel::Bool=true +) where {N,T} + @unpack contains_real, cwp, fp, np, npcell, projected_particles = cl + + number_of_cells = prod(box.nc) + if number_of_cells > length(cwp) + number_of_cells = ceil(Int,1.2*number_of_cells) # some margin in case of box size variations + resize!(contains_real,number_of_cells) + resize!(cwp,number_of_cells) + resize!(fp,number_of_cells) + resize!(npcell,number_of_cells) + end + + cl.ncwp[1] = 0 + fill!(contains_real,false) + fill!(cwp,zero(Cell{N,T})) + fill!(fp,zero(ParticleWithIndex{N,T})) + fill!(np,zero(ParticleWithIndex{N,T})) + fill!(npcell,0) + + # + # The following part cannot be *easily* paralelized, because + # there is concurrency on the construction of the cell lists + # + + # + # Add virtual particles to edge cells + # + for (ip,particle) in pairs(x) + p = wrap_to_first(particle,box) + cl = replicate_particle!(ip,p,box,cl) + end + # + # Add true particles, such that the first particle of each cell is + # always a true particle + # + for (ip,particle) in pairs(x) + p = wrap_to_first(particle,box) + cl = add_particle_to_celllist!(ip,p,box,cl) + end + + maximum_npcell = maximum(npcell) + if maximum_npcell > length(projected_particles[1]) + for i in 1:nthreads() + resize!(projected_particles[i],ceil(Int,1.2*maximum_npcell)) + end + end + + return cl +end + +""" + +Set one index of a cell list + +""" +function add_particle_to_celllist!( + ip, + x::SVector{N,T}, + box, + cl::CellList{N,T}; + real_particle::Bool=true +) where {N,T} + @unpack contains_real, ncp, ncwp, cwp, fp, np, npcell = cl + ncp[1] += 1 + icell_cartesian = particle_cell(x,box) + icell = cell_linear_index(box.nc,icell_cartesian) + # + # Cells starting with real particles are annotated to be run over + # + if real_particle && (!contains_real[icell]) + contains_real[icell] = true + ncwp[1] += 1 + cwp[ncwp[1]] = Cell{N,T}( + icell, + icell_cartesian, + cell_center(icell_cartesian,box) + ) + end + if fp[icell].index == 0 + npcell[icell] = 1 + else + npcell[icell] += 1 + end + if ncp[1] > length(np) + old_length = length(np) + resize!(np,ceil(Int,1.2*old_length)) + for i in old_length+1:length(np) + np[i] = zero(ParticleWithIndex{N,T}) + end + end + np[ncp[1]] = fp[icell] + fp[icell] = ParticleWithIndex(ncp[1],ip,x,real_particle) + return cl +end + + +""" + +``` +UpdateCellList!( + x::AbstractVector{SVector{N,T}},y::AbstractVector{SVector{N,T}}, + box::Box,cl:CellListPair,parallel=true +) where {N,T} +``` + +Function that will update a previously allocated `CellListPair` structure, given new updated particle positions, for example. + +```julia-repl +julia> box = Box([250,250,250],10); + +julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:1000 ]; + +julia> y = [ 250*rand(SVector{3,Float64}) for i in 1:10000 ]; + +julia> cl = CellList(x,y,box); + +julia> cl = UpdateCellList!(x,y,box,cl); # update lists + +``` + +""" +function UpdateCellList!( + x::AbstractVector{SVector{N,T}}, + y::AbstractVector{SVector{N,T}}, + box::Box,cl_pair::CellListPair; + parallel::Bool=true +) where {N,T} + + if length(x) <= length(y) + UpdateCellList!(y,box,cl_pair.large,parallel=parallel) + else + UpdateCellList!(x,box,cl_pair.large,parallel=parallel) + end + + return cl_pair +end \ No newline at end of file diff --git a/src/SystemCommons.jl b/src/SystemCommons.jl deleted file mode 100644 index 71d2631e..00000000 --- a/src/SystemCommons.jl +++ /dev/null @@ -1,168 +0,0 @@ - -""" - -``` -UpdateCellList!( - x::AbstractVector{SVector{N,T}},y::AbstractVector{SVector{N,T}}, - box::Box,cl:CellListPair,parallel=true -) where {N,T} -``` - -Function that will update a previously allocated `CellListPair` structure, given new updated particle positions, for example. - -```julia-repl -julia> box = Box([250,250,250],10); - -julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:1000 ]; - -julia> y = [ 250*rand(SVector{3,Float64}) for i in 1:10000 ]; - -julia> cl = CellList(x,y,box); - -julia> cl = UpdateCellList!(x,y,box,cl); # update lists - -``` - -""" -function UpdateCellList!( - x::AbstractVector{SVector{N,T}}, - y::AbstractVector{SVector{N,T}}, - box::Box,cl_pair::CellListPair; - parallel::Bool=true -) where {N,T} - - if length(x) <= length(y) - UpdateCellList!(y,box,cl_pair.large,parallel=parallel) - else - UpdateCellList!(x,box,cl_pair.large,parallel=parallel) - end - - return cl_pair -end - -""" - -``` -partition!(x::AbstractVector,by) -``` - -Function that reorders `x` vector by putting in the first positions the -elements with values satisfying `by(el)`. Returns the number of elements -that satisfy the condition. - -""" -function partition!(x::AbstractVector,by) - iswap = 1 - @inbounds for i in eachindex(x) - if by(x[i]) - if iswap != i - x[iswap], x[i] = x[i], x[iswap] - end - iswap += 1 - end - end - return iswap - 1 -end - -# Chunck splitter, we jump over cells such that possible -# heterogeneities have greater changes of getting split into different chuncks -@inline splitter(it,n) = it:nthreads():n - -# -# Functions to reduce the output of common options (vectors of numbers -# and vectors of vectors) -# -reduce(output::Number, output_threaded::Vector{<:Number}) = sum(output_threaded) -function reduce(output::AbstractVector, output_threaded::AbstractVector{<:AbstractVector}) - for i in 1:nthreads() - @. output += output_threaded[i] - end - return output -end - -""" - -``` -cell_center(c::CartesianIndex{N},box::Box{UnitCellType,N,T}) where {UnitCellType,N,T} -``` - -Computes the geometric center of a computin cell, to be used in the projection -of points. Returns a `SVector{N,T}` - -""" -@inline cell_center(c::CartesianIndex{N},box::Box{UnitCellType,N,T}) where {UnitCellType,N,T} = - SVector{N,T}(ntuple(i -> box.cell_size[i]*(c[i] - 0.5 - box.lcell), N)) - -# -# Currently the methods for cross-interaction computations are the -# same for all types of systems -# - -# -# Serial version for cross-interaction computations -# -function map_pairwise_serial!( - f::F, output, box::Box, - cl::CellListPair{SystemType,N,T}; - show_progress=show_progress -) where {F,SystemType,N,T} - show_progress && (p = Progress(length(cl.small),dt=0)) - for i in eachindex(cl.small) - output = inner_loop!(f,output,i,box,cl) - show_progress && next!(p) - end - return output -end - -# -# Parallel version for cross-interaction computations -# -function map_pairwise_parallel!( - f::F1, output, box::Box, - cl::CellListPair{SystemType,N,T}; - output_threaded=output_threaded, - reduce::F2=reduce, - show_progress=show_progress -) where {F1,F2,SystemType,N,T} - show_progress && (p = Progress(length(cl.small),dt=1)) - @threads for it in 1:nthreads() - for i in splitter(it,length(cl.small)) - output_threaded[it] = inner_loop!(f,output_threaded[it],i,box,cl) - show_progress && next!(p) - end - end - output = reduce(output,output_threaded) - return output -end - -# -# Inner loop of cross-interaction computations -# -function inner_loop!( - f,output,i,box, - cl::CellListPair{SystemType,N,T} -) where {SystemType,N,T} - @unpack nc, cutoff_sq = box - xpᵢ = wrap_to_first(cl.small[i],box) - ic = particle_cell(xpᵢ,box) - for neighbour_cell in neighbour_cells_all(box) - jc = cell_linear_index(nc,neighbour_cell+ic) - pⱼ = cl.large.fp[jc] - j = pⱼ.index - # loop over particles of cell jc - while j > 0 - xpⱼ = pⱼ.coordinates - d2 = norm_sqr(xpᵢ - xpⱼ) - if d2 <= cutoff_sq - j_orig = pⱼ.index_original - output = f(xpᵢ,xpⱼ,i,j_orig,d2,output) - end - pⱼ = cl.large.np[j] - j = pⱼ.index - end - end - return output -end - - - diff --git a/src/examples.jl b/src/examples.jl index eca8e1da..6c593235 100644 --- a/src/examples.jl +++ b/src/examples.jl @@ -8,7 +8,7 @@ function test1(;N=100_000,parallel=true,x=nothing) # Number of particles, sides and cutoff sides = @SVector [250,250,250] cutoff = 10 - box = Box(sides,cutoff,scale_cutoff=1) + box = Box(sides,cutoff) # Particle positions Random.seed!(321) @@ -336,7 +336,7 @@ end # # florpi # -function florpi(;N=100_000,cd=true,parallel=true,SystemType=nothing) +function florpi(;N=100_000,cd=true,parallel=true) @inline dot(x::SVector{3,Float64},y::SVector{3,Float64}) = x[1]*y[1] + x[2]*y[2] + x[3]*y[3] @@ -378,7 +378,7 @@ function florpi(;N=100_000,cd=true,parallel=true,SystemType=nothing) velocities = reshape(reinterpret(SVector{3,Float64},velocities),n) box = Box(Lbox, r_max, UnitCellType=OrthorhombicCell, lcell=1) - cl = CellList(positions,box,parallel=parallel,SystemType=SystemType) + cl = CellList(positions,box,parallel=parallel) hist = (zeros(Int,length(rbins)-1), zeros(Float64,length(rbins)-1)) # Needs this to stabilize the type of velocities and hist, probably diff --git a/src/halotools.jl b/src/halotools.jl deleted file mode 100644 index 040c3ec3..00000000 --- a/src/halotools.jl +++ /dev/null @@ -1,62 +0,0 @@ -# -# To compare with halotools -# -function halotools(;N=100_000,cd=true,parallel=true) - - @inline dot(x::SVector{3,Float64},y::SVector{3,Float64}) = x[1]*y[1] + x[2]*y[2] + x[3]*y[3] - - function compute_pairwise_mean_cell_lists!(x,y,i,j,d2,hist,velocities,rbins,sides) - d = x - y - r = sqrt(d2) - ibin = searchsortedfirst(rbins, r) - 1 - hist[1][ibin] += 1 - hist[2][ibin] += dot(velocities[i]-velocities[j],d)/r - return hist - end - - function reduce_hist(hist,hist_threaded) - hist = hist_threaded[1] - for i in 2:Threads.nthreads() - hist[1] .+= hist_threaded[i][1] - hist[2] .+= hist_threaded[i][2] - end - return hist - end - - n_halos = N - - if cd - density = 10^5/250^3 # density of the original problem - boxsize = (n_halos / density)^(1/3) - else - boxsize = 250. - end - - Lbox = [boxsize,boxsize,boxsize] - rbins = [0.,2.,4.,6.,8.,10.] - r_max = maximum(rbins) - - positions = boxsize*rand(SVector{3,Float64},n_halos) - velocities = rand(SVector{3,Float64},n_halos) - - box = Box(Lbox, r_max) - cl = CellList(positions,box,parallel=parallel) - hist = (zeros(Int,length(rbins)-1), zeros(Float64,length(rbins)-1)) - - hist = map_pairwise!( - (x,y,i,j,d2,hist) -> compute_pairwise_mean_cell_lists!( - x,y,i,j,d2,hist,velocities,rbins,Lbox - ), - hist, box, cl, - reduce=reduce_hist, - parallel=parallel - ) - - n_pairs = hist[1] - mean_v_r = hist[2] - mean_v_r[n_pairs .> 0] = mean_v_r[n_pairs .> 0]./n_pairs[n_pairs .> 0] - return mean_v_r - -end - - diff --git a/src/testing.jl b/src/testing.jl index ff6d34ef..5a41e078 100644 --- a/src/testing.jl +++ b/src/testing.jl @@ -60,7 +60,7 @@ julia> scatter(Tuple.(p),label=nothing,xlims=(-10,180),ylims=(-10,180)) ``` """ -function view_celllist_particles(cl::CellList{SystemType,N,T}) where {SystemType,N,T} +function view_celllist_particles(cl::CellList{N,T}) where {N,T} @unpack ncp, np = cl x = Vector{SVector{N,T}}(undef,ncp[1]) ip = 0 From 675741fb48d92b3d88f87726a6c0866a6b60f10e Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 3 Aug 2021 15:28:29 -0300 Subject: [PATCH 56/62] comment rearrangement --- src/CellListMap.jl | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/CellListMap.jl b/src/CellListMap.jl index b94a5d6c..b9bbec7b 100644 --- a/src/CellListMap.jl +++ b/src/CellListMap.jl @@ -21,7 +21,14 @@ include("./CoreComputing.jl") """ ``` -map_pairwise!(f::Function,output,box::Box,cl::CellList;parallel::Bool=true,show_progress::Bool=false) +map_pairwise!( + f::Function, + output, + box::Box, + cl::CellList + ;parallel::Bool=true, + show_progress::Bool=false +) ``` This function will run over every pair of particles which are closer than @@ -40,7 +47,8 @@ particle, the squared distance between them, and the `output` variable. It has also to return the same `output` variable. Thus, `f` may or not mutate `output`, but in either case it must return it. With that, it is possible to compute an average property of the distance of the particles -or, for example, build a histogram. The squared distance `d2` is computed internally for comparison with the +or, for example, build a histogram. The squared distance `d2` is computed +internally for comparison with the `cutoff`, and is passed to the `f` because many times it is used for the desired computation. From fb53ece00130bc5d608d3c0fca29738598f498aa Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 3 Aug 2021 15:30:44 -0300 Subject: [PATCH 57/62] comment on ranges_of_replicas --- src/CellOperations.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/CellOperations.jl b/src/CellOperations.jl index df3d907d..690d2dea 100644 --- a/src/CellOperations.jl +++ b/src/CellOperations.jl @@ -399,7 +399,9 @@ function check_unit_cell(unit_cell_matrix::SMatrix{2},cutoff;printerr=true) end # -# The following functions are not being used anymore. +# The following functions are not being used anymore in CellListMap, but may +# be useful if this is split in into a sepparate package for playing with +# periodic systems. # """ From 50ca243bcd77bde7a52dc162077b8a759e7a0bf3 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 3 Aug 2021 15:54:25 -0300 Subject: [PATCH 58/62] updated documentation --- src/CoreComputing.jl | 29 +++++++++--- src/StructTypes.jl | 105 ++++++++++++++++++++++++++++++++----------- src/testing.jl | 42 ++++++++++++----- 3 files changed, 133 insertions(+), 43 deletions(-) diff --git a/src/CoreComputing.jl b/src/CoreComputing.jl index f4933014..b5359f88 100644 --- a/src/CoreComputing.jl +++ b/src/CoreComputing.jl @@ -3,10 +3,18 @@ # splitter(first,n) = first:nthreads():n -# -# Functions to reduce the output of common options (vectors of numbers -# and vectors of vectors) -# +""" + +``` +reduce(output::Number, output_threaded::Vector{<:Number}) +``` + +Functions to reduce the output of common options (vectors of numbers +and vectors of vectors). This function can be overloaded by custom +reduction methods. It always must both receive the `output` variable +as a parameter, and return it at the end. + +""" reduce(output::Number, output_threaded::Vector{<:Number}) = sum(output_threaded) function reduce(output::AbstractVector, output_threaded::AbstractVector{<:AbstractVector}) for i in 1:nthreads() @@ -141,7 +149,12 @@ function inner_loop!( xpᵢ = pᵢ.coordinates i_orig = pᵢ.index_original - # Partition pp array according to the current projections + # Partition pp array according to the current projections. This + # is faster than it looks, because after the first partitioning, the + # array will be almost correct, and essentially the algorithm + # will only run over most elements. Avoiding this partitioning or + # trying to sort the array before always resulted to be much more + # expensive. xproj = dot(xpᵢ-cell.center,Δc) n = partition!(pp, el -> el.xproj - xproj <= cutoff) @@ -182,7 +195,7 @@ function inner_loop!( while i > 0 xpᵢ = pᵢ.coordinates pⱼ = cl.np[i] - j = pⱼ.index + j = pⱼ.index # here j starts from i+1 while j > 0 xpⱼ = pⱼ.coordinates d2 = norm_sqr(xpᵢ - xpⱼ) @@ -286,7 +299,9 @@ function map_pairwise_parallel!( end # -# Inner loop of cross-interaction computations +# Inner loop of cross-interaction computations. If the two sets +# are large, this might(?) be improved by computing two sepparate +# cell lists and using projection and partitioning. # function inner_loop!( f,output,i,box, diff --git a/src/StructTypes.jl b/src/StructTypes.jl index c6a47c6d..53934bf2 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -19,7 +19,7 @@ $(TYPEDFIELDS) Structure that contains some data required to compute the linked cells. To be initialized with the box size and cutoff. -## Example +## Examples ```julia-repl julia> sides = [250,250,250]; @@ -27,11 +27,22 @@ julia> sides = [250,250,250]; julia> cutoff = 10; julia> box = Box(sides,cutoff) -Box{3, Float64} - sides: [250.0, 250.0, 250.0] +Box{OrthorhombicCell, 3, Float64, 9} + unit cell matrix: [250.0 0.0 0.0; 0.0 250.0 0.0; 0.0 0.0 250.0] cutoff: 10.0 - number of cells on each dimension: [25, 25, 25] (lcell: 1) - Total number of cells: 15625 + number of computing cells on each dimension: [27, 27, 27] + computing cell sizes: [10.0, 10.0, 10.0] (lcell: 1) + Total number of cells: 19683 + +julia> box = Box([ 10 0 0 + 0 10 5 + 0 0 10 ], 1) +Box{TriclinicCell, 3, Float64, 9} +unit cell matrix: [10.0 0.0 0.0; 0.0 10.0 5.0; 0.0 0.0 10.0] +cutoff: 1.0 +number of computing cells on each dimension: [12, 17, 12] +computing cell sizes: [1.0, 1.0, 1.0] (lcell: 1) +Total number of cells: 2448 ``` @@ -50,10 +61,18 @@ end """ ``` -Box(unit_cell::AbstractMatrix, cutoff; T::DataType=Float64, lcell::Int=1) +Box( + unit_cell_matrix::AbstractMatrix, + cutoff, + T::DataType, + lcell::Int=1, + UnitCellType=TriclinicCell +) ``` -Construct box structure given the cell matrix of lattice vectors. +Construct box structure given the cell matrix of lattice vectors. This +constructor will always return a `TriclinicCell` box type, unless the +`UnitCellType` parameter is set manually to `OrthorhombicCell` ### Example ```julia @@ -62,11 +81,12 @@ julia> unit_cell = [ 100 50 0 0 0 130 ]; julia> box = Box(unit_cell,10) -Box{3, Float64} - unit cell: [100.0 50.0 0.0; 0.0 120.0 0.0; 0.0 0.0 130.0] +Box{TriclinicCell, 3, Float64, 9} + unit cell matrix: [100.0 50.0 0.0; 0.0 120.0 0.0; 0.0 0.0 130.0] cutoff: 10.0 - number of cells on each dimension: [16, 13, 14] (lcell: 1) - Total number of cells: 2912 + number of computing cells on each dimension: [17, 14, 15] + computing cell sizes: [10.0, 10.0, 10.0] (lcell: 1) + Total number of cells: 3570 ``` @@ -92,7 +112,6 @@ function Box( unit_cell_max = sum(@view(unit_cell_matrix[:,i]) for i in 1:N) nc_min = @. floor.(Int,unit_cell_max/cutoff) -# @assert count(nc_min .== 0) == 0 "Cutoff greater than maximum unit cell size. " cell_size_max = unit_cell_max ./ nc_min cell_size = cell_size_max/lcell @@ -131,19 +150,27 @@ end """ ``` -Box(sides::AbstractVector, cutoff; T::DataType=Float64, lcell::Int=1) +Box( + sides::AbstractVector, + cutoff, + T::DataType, + lcell::Int=1, + UnitCellType=OrthorhombicCell +) ``` -For orthorhombic unit cells, `Box` can be initialized with a vector of the length of each side. +For orthorhombic unit cells, `Box` can be initialized with a vector of the +length of each side. ### Example ```julia julia> box = Box([120,150,100],10) -Box{3, Float64} - unit cell: [120.0 0.0 0.0; 0.0 150.0 0.0; 0.0 0.0 100.0] +Box{OrthorhombicCell, 3, Float64, 9} + unit cell matrix: [120.0 0.0 0.0; 0.0 150.0 0.0; 0.0 0.0 100.0] cutoff: 10.0 - number of cells on each dimension: [13, 16, 11] (lcell: 1) - Total number of cells: 2288 + number of computing cells on each dimension: [14, 17, 12] + computing cell sizes: [10.0, 10.0, 10.0] (lcell: 1) + Total number of cells: 2856 ``` @@ -188,6 +215,8 @@ Box( $(TYPEDEF) +$(TYPEDFIELDS) + Copies particle coordinates and associated index, to build contiguous particle lists in memory when building the cell lists. This strategy duplicates the particle coordinates data, but is probably worth the effort. @@ -206,6 +235,8 @@ Base.zero(::Type{ParticleWithIndex{N,T}}) where {N,T} = $(TYPEDEF) +$(TYPEDFIELDS) + This structure contains the cell linear index and the information about if this cell is in the border of the box (such that its neighbouring cells need to be wrapped) @@ -221,6 +252,10 @@ Base.zero(::Type{Cell{N,T}}) where {N,T} = """ +$(TYPEDEF) + +$(TYPEDFIELDS) + Auxiliary structure to contain projected particles in large and and dense systems. @@ -289,7 +324,11 @@ end """ ``` -CellList(x::AbstractVector{SVector{N,T}},box::Box,parallel=true) where {N,T} +CellList( + x::AbstractVector{SVector{N,T}}, + box::Box; + parallel::Bool=true +) where {N,T} ``` Function that will initialize a `CellList` structure from scracth, given a vector @@ -305,7 +344,8 @@ julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:100000 ]; julia> cl = CellListMap.CellList(x,box) CellList{3, Float64} - with 15597 cells with particles. + 1800 cells with real particles. + 161084 particles in computing box, including images. ``` @@ -343,14 +383,18 @@ end """ ``` -CellList(x::AbstractVector{SVector{N,T}},y::AbstractVector{SVector{N,T}},box::Box;parallel=true) where {N,T} +CellList( + x::AbstractVector{SVector{N,T}}, + y::AbstractVector{SVector{N,T}}, + box::Box; + parallel::Bool=true +) where {N,T} ``` Function that will initialize a `CellListPair` structure from scracth, given two vectors of particle coordinates and a `Box`, which contain the size ofthe system, cutoff, etc. The cell lists will be constructed for the largest vector, and a reference to the smallest vector is annotated. - ### Example ```julia-repl @@ -361,9 +405,9 @@ julia> x = [ 250*rand(SVector{3,Float64}) for i in 1:1000 ]; julia> y = [ 250*rand(SVector{3,Float64}) for i in 1:10000 ]; julia> cl = CellList(x,y,box) -CellListMap.CellListPair{3, Float64} +CellListMap.CellListPair{Vector{SVector{3, Float64}}, 3, Float64} 1000 particles in the smallest vector. - 7452 cells with particles. + 1767 cells with particles. ``` @@ -483,7 +527,17 @@ end """ -Set one index of a cell list +``` +add_particle_to_celllist!( + ip, + x::SVector{N,T}, + box, + cl::CellList{N,T}; + real_particle::Bool=true +) where {N,T} +``` + +Adds one particle to the cell lists, updating all necessary arrays. """ function add_particle_to_celllist!( @@ -526,7 +580,6 @@ function add_particle_to_celllist!( return cl end - """ ``` diff --git a/src/testing.jl b/src/testing.jl index 5a41e078..217d065d 100644 --- a/src/testing.jl +++ b/src/testing.jl @@ -1,7 +1,13 @@ -# -# Function that uses the naive algorithm, for testing -# -function map_naive!(f,output,x,box) +""" + +``` +map_naive!(f,output,x,box) +``` + +Function that uses the naive pairwise mapping algorithm, for testing. + +""" +function map_naive!(f,output,x,box::Box) @unpack unit_cell, cutoff_sq = box for i in 1:length(x)-1 xᵢ = x[i] @@ -16,10 +22,7 @@ function map_naive!(f,output,x,box) return output end -# -# Function that uses the naive algorithm, for testing -# -function map_naive_two!(f,output,x,y,box) +function map_naive!(f,output,x,y,box::Box) @unpack unit_cell, cutoff_sq = box for i in 1:length(x) xᵢ = x[i] @@ -44,6 +47,7 @@ Auxiliary function to view the particles of a computing box, including images cr for computing purposes. ### Example + ```julia julia> box = Box([ 100 50; 50 100 ],10); @@ -74,8 +78,8 @@ function view_celllist_particles(cl::CellList{N,T}) where {N,T} return [SVector{N,T}(ntuple(j -> x[i][j],N)) for i in 1:ncp[1]] end -b(box,cl) = map_pairwise!((x,y,i,j,d2,s) -> s += d2, 0., box, cl, parallel=false) -n(box,x) = CellListMap.map_naive!((x,y,i,j,d2,s) -> s += d2, 0., x, box) +test_map(box,cl) = map_pairwise!((x,y,i,j,d2,s) -> s += d2, 0., box, cl, parallel=false) +test_naive(box,x) = CellListMap.map_naive!((x,y,i,j,d2,s) -> s += d2, 0., x, box) function check_random_cells(N,M=2) local x, box @@ -144,6 +148,15 @@ function drawbox(box::Box{UnitCellType,3}) where UnitCellType return x end +""" + +``` +draw_computing_cell(x,box::Box{UnitCellType,2}) where UnitCellType +``` + +This function creates a plot of the computing cell, in two dimensions. + +""" function draw_computing_cell(x,box::Box{UnitCellType,2}) where UnitCellType cl = CellList(x,box) box_points = drawbox(box) @@ -167,6 +180,15 @@ function draw_computing_cell(x,box::Box{UnitCellType,2}) where UnitCellType return plt end +""" + +``` +draw_computing_cell(x,box::Box{UnitCellType,3}) where UnitCellType +``` + +This function creates a plot of the computing cell, in three dimensions. + +""" function draw_computing_cell(x,box::Box{UnitCellType,3}) where UnitCellType cl = CellList(x,box) box_points = drawbox(box) From b3cd7f5c0cd0bbd66c5251547b219a6fc0b794b5 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 3 Aug 2021 15:56:22 -0300 Subject: [PATCH 59/62] up testing routine --- src/testing.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/testing.jl b/src/testing.jl index 217d065d..f52d8b7d 100644 --- a/src/testing.jl +++ b/src/testing.jl @@ -102,7 +102,7 @@ function check_random_cells(N,M=2) x[i] = x[i] .- 50 end cl = CellList(x,box) - if !(b(box,cl) ≈ n(box,x)) + if !(test_map(box,cl) ≈ test_naive(box,x)) println("FOUND PROBLEMATIC SETUP.") return x, box end From 92751c4cbedfaea1acd7942311692dac5c9cbcee Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 3 Aug 2021 16:34:47 -0300 Subject: [PATCH 60/62] up readme --- README.md | 40 ++++++++++++-------------------- src/StructTypes.jl | 47 +++++++++++++++++++------------------- src/assets/3Dlattice.png | Bin 213837 -> 185923 bytes src/assets/lattice.png | Bin 134852 -> 181420 bytes src/assets/replicated.png | Bin 221759 -> 0 bytes 5 files changed, 39 insertions(+), 48 deletions(-) delete mode 100644 src/assets/replicated.png diff --git a/README.md b/README.md index e9f7c326..b2e12d94 100644 --- a/README.md +++ b/README.md @@ -78,12 +78,12 @@ Computing the mean difference in `x` position between random particles. The clos using CellListMap # System properties -n = 100_000 +N = 100_000 sides = [250,250,250] cutoff = 10 # Particle positions -x = [ box.sides .* rand(SVector{3,Float64}) for i in 1:n ] +x = [ sides .* rand(3) for i in 1:N ] # Initialize linked lists and box structures box = Box(sides,cutoff) @@ -94,10 +94,9 @@ f(x,y,sum_dx) = sum_dx + abs(x[1] - y[1]) normalization = N / (N*(N-1)/2) # (number of particles) / (number of pairs) # Run calculation (0.0 is the initial value) -avg_dx = normalization * map_parwise( - (x,y,i,j,d2,sum_dx) -> (x,y,sum_dx), 0.0, box, cl +avg_dx = normalization * map_pairwise!( + (x,y,i,j,d2,sum_dx) -> f(x,y,sum_dx), 0.0, box, cl ) - ``` The example above can be run with `CellListMap.test1()`. @@ -266,7 +265,9 @@ The full example can be run with `CellListMap.test7()`. ## Periodic boundary conditions -Periodic boundary conditions of any kind can be used. Let us illustrate its use with a two-dimensional case, for easier visualization. A matrix of column-wise lattice vectors is provided in the construction of the box, and that is all. +Triclinic periodic boundary conditions of any kind can be used. However, the input has some limitations for the moment. The lattice vectors must have strictly positive coordinates, and the smallest distance within the cell cannot be smaller than twice the size of the cutoff. An error will be produced if the cell does not satisfy these conditions. + +Let us illustrate building a two-dimensional cell, for easier visualization. A matrix of column-wise lattice vectors is provided in the construction of the box, and that is all. Here, the lattice vectors are `[1,0]` and `[0.5,1]` (and we illustrate with `cutoff=0.1`): @@ -278,11 +279,9 @@ julia> x = 10*rand(SVector{2,Float64},1000); ``` We have created random coordinates for `1000` particles, that are not necessarily wrapped according to the periodic boundary conditions. We can see the coordinates in the minimum image cell with: ```julia -julia> p = [ CellListMap.wrap_to_first(x,box) for x in x ]; - julia> using Plots -julia> scatter(Tuple.(p),aspect_ratio=1,framestyle=:box,label=:none) +julia> CellListMap.draw_computing_cell(x,box) ``` @@ -292,28 +291,19 @@ The construction of the cell list is, as always, done with: ```julia julia> cl = CellList(x,box) CellList{2, Float64} - 90 cells with real particles. - 2065 particles in computing box, including images. + 109 cells with real particles. + 2041 particles in computing box, including images. ``` -Upon construction of the cell lists, the particles are replicated to fill a rectangular box (or orthorhombic box, in three-dimensions), with boundaries that exceed the actual system size. This improves the performance of the pairwise computations by avoding the necessity of wrapping coordinates on the main loop (this is an implementation detail only). The resulting box can be visualized with: - -```julia -julia> p = CellListMap.view_celllist_particles(cl,box); - -julia> scatter(Tuple.(p),aspect_ratio=1,framestyle=:box,label=:none) -``` - - -These are the particles that will be considered for the calculations. +Upon construction of the cell lists, the particles are replicated to fill a rectangular box (or orthorhombic box, in three-dimensions), with boundaries that exceed the actual system size. This improves the performance of the pairwise computations by avoding the necessity of wrapping coordinates on the main loop (this is an implementation detail only). In summary, to use arbitrary periodic boundary conditions, just initialize the box with the matrix of lattice vectors. In three dimensions, for example, one could use: ```julia -julia> box = Box([ 50. 0. 20. - 0. 0. 30. - 0. 30. 50. ], 10.) +julia> box = Box([ 50. 0. 00. + 0. 30. 30. + 0. 00. 50. ], 2.) julia> x = 100*rand(SVector{3,Float64},10000); @@ -423,7 +413,7 @@ box = Box(x,box,lcell=2) cl = CellList(x,box) map_pairwise!(...) ``` -This parameter determines how fine is the mesh of cells. There is a trade-off between the number of cells and the number of particles per cell. For low-density systems, greater meshes are better, because each cell will have only a few particles and the computations loop over a samller number of cells. For dense systems, it is better to run over more cells with less particles per cell. It is a good idea to test different values of `lcell` to check which is the optimal choice for your system. Usually the best value is between `lcell=1` and `lcell=6`, but for large and dense systems a larger value may be optimal. For molecular systems with normal densities `lcell=2` is likely the optimal choice. The peformance can be tested using the progress meter, as explained below. +This parameter determines how fine is the mesh of cells. There is a trade-off between the number of cells and the number of particles per cell. For low-density systems, greater meshes are better, because each cell will have only a few particles and the computations loop over a samller number of cells. For dense systems, it is better to run over more cells with less particles per cell. It is a good idea to test different values of `lcell` to check which is the optimal choice for your system. Usually the best value is between `lcell=1` and `lcell=6`, but for large and dense systems a larger value may be optimal. For molecular systems with normal densities `lcell=1` is likely the optimal choice. The peformance can be tested using the progress meter, as explained below. ### Output progress diff --git a/src/StructTypes.jl b/src/StructTypes.jl index 53934bf2..f5e575f0 100644 --- a/src/StructTypes.jl +++ b/src/StructTypes.jl @@ -325,15 +325,15 @@ end ``` CellList( - x::AbstractVector{SVector{N,T}}, - box::Box; + x::AbstractVector{AbstractVector}, + box::Box{UnitCellType,N,T}; parallel::Bool=true -) where {N,T} +) where {UnitCellType,N,T} ``` Function that will initialize a `CellList` structure from scracth, given a vector -or particle coordinates (as `SVector`s) and a `Box`, which contain the size ofthe -system, cutoff, etc. +or particle coordinates (a vector of vectors, typically of static vectors) +and a `Box`, which contain the size ofthe system, cutoff, etc. ### Example @@ -351,10 +351,10 @@ CellList{3, Float64} """ function CellList( - x::AbstractVector{SVector{N,T}}, - box::Box; + x::AbstractVector{<:AbstractVector}, + box::Box{UnitCellType,N,T}; parallel::Bool=true -) where {N,T} +) where {UnitCellType,N,T} number_of_cells = prod(box.nc) # number_of_particles is a lower bound, will be resized when necessary to incorporate particle images number_of_particles = ceil(Int,1.2*length(x)) @@ -384,11 +384,11 @@ end ``` CellList( - x::AbstractVector{SVector{N,T}}, - y::AbstractVector{SVector{N,T}}, - box::Box; + x::AbstractVector{<:AbstractVector}, + y::AbstractVector{<:AbstractVector}, + box::Box{UnitCellType,N,T}; parallel::Bool=true -) where {N,T} +) where {UnitCellType,N,T} ``` Function that will initialize a `CellListPair` structure from scracth, given two vectors @@ -443,7 +443,7 @@ particles_per_cell(cl::CellList,box::Box) = cl.ncp[1] / prod(box.nc) ``` UpdateCellList!( - x::AbstractVector{SVector{N,T}}, + x::AbstractVector{<:AbstractVector}, box::Box,cl:CellList{N,T}, parallel=true ) where {N,T} @@ -471,7 +471,7 @@ julia> cl = UpdateCellList!(x,box,cl); # update lists """ function UpdateCellList!( - x::AbstractVector{SVector{N,T}}, + x::AbstractVector{<:AbstractVector}, box::Box, cl::CellList{N,T}; parallel::Bool=true @@ -503,7 +503,7 @@ function UpdateCellList!( # Add virtual particles to edge cells # for (ip,particle) in pairs(x) - p = wrap_to_first(particle,box) + p = SVector{N,T}(wrap_to_first(particle,box)) cl = replicate_particle!(ip,p,box,cl) end # @@ -511,7 +511,7 @@ function UpdateCellList!( # always a true particle # for (ip,particle) in pairs(x) - p = wrap_to_first(particle,box) + p = SVector{N,T}(wrap_to_first(particle,box)) cl = add_particle_to_celllist!(ip,p,box,cl) end @@ -584,9 +584,10 @@ end ``` UpdateCellList!( - x::AbstractVector{SVector{N,T}},y::AbstractVector{SVector{N,T}}, - box::Box,cl:CellListPair,parallel=true -) where {N,T} + x::AbstractVector{<:AbstractVector}, + y::AbstractVector{<:AbstractVector}, + box::Box{UnitCellType,N,T},cl:CellListPair,parallel=true +) where {UnitCellType,N,T} ``` Function that will update a previously allocated `CellListPair` structure, given new updated particle positions, for example. @@ -606,11 +607,11 @@ julia> cl = UpdateCellList!(x,y,box,cl); # update lists """ function UpdateCellList!( - x::AbstractVector{SVector{N,T}}, - y::AbstractVector{SVector{N,T}}, - box::Box,cl_pair::CellListPair; + x::AbstractVector{<:AbstractVector}, + y::AbstractVector{<:AbstractVector}, + box::Box{UnitCellType,N,T},cl_pair::CellListPair; parallel::Bool=true -) where {N,T} +) where {UnitCellType,N,T} if length(x) <= length(y) UpdateCellList!(y,box,cl_pair.large,parallel=parallel) diff --git a/src/assets/3Dlattice.png b/src/assets/3Dlattice.png index 21c14daa78671a8b112d5824d2a6406ef5bb1bc6..26d828e56f2419fb3038f06fe03cfa3584b66650 100644 GIT binary patch literal 185923 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 z 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�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 a@c9il+VV{fQYtGHxFkemh06r>fBp~WFP&@v literal 213837 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�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
Ub5_ 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 diff --git a/src/assets/lattice.png b/src/assets/lattice.png index 528d4e67ddafc98b1e29fdcf214910f8233ae9f0..83421c594f2e1c659ac427a46b7b291660217eb9 100644 GIT binary patch literal 181420 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

g+9Vv9)@J!@-R2F72qv2)lMus6Tftk;hKnvBE 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 literal 134852 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

2b>cZZ;$BA|7$GqNu9c>iapD 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 z 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 From 4a1936572dc4611514c64ca99cb1f4035c977e29 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 3 Aug 2021 16:35:43 -0300 Subject: [PATCH 61/62] up readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b2e12d94..c32f280d 100644 --- a/README.md +++ b/README.md @@ -430,7 +430,7 @@ Thus, besides being useful for following the progress of a long run, it is usefu ## Some benchmarks -The goal here is to provide a good implementation of cell lists. We compare it with the implementation of the nice cython/python [halotools](https://github.com/astropy/halotools) package, in the computation of an histogram of mean pairwise velocities. These tests are implemented in the [halotools.jl](https://github.com/m3g/CellListMap.jl/blob/main/src/halotools.jl) file. Currently, the `CellListMap.jl` is as fast for dense systems, and scales linearly and parallelizes well for increasing number of particles, with constant density: +The goal here is to provide a good implementation of cell lists. We compare it with the implementation of the nice cython/python [halotools](https://github.com/astropy/halotools) package, in the computation of an histogram of mean pairwise velocities. Currently, the `CellListMap.jl` is as fast for dense systems, and scales linearly and parallelizes well for increasing number of particles, with constant density: From 8bd271579aef6dffc95d0218b4e9a6e1e70411d0 Mon Sep 17 00:00:00 2001 From: Leandro Martinez Date: Tue, 3 Aug 2021 16:37:34 -0300 Subject: [PATCH 62/62] up test file --- test/runtests.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/runtests.jl b/test/runtests.jl index 66e4b3ae..bd099b3b 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -111,7 +111,7 @@ using Test box = Box(sides,cutoff,lcell=1) cl = CellList(x,y,box) - naive = CellListMap.map_naive_two!((x,y,i,j,d2,u) -> potential(x,y,i,j,d2,u,mass),0.0,x,y,box) + naive = CellListMap.map_naive!((x,y,i,j,d2,u) -> potential(x,y,i,j,d2,u,mass),0.0,x,y,box) @test map_pairwise!( (x,y,i,j,d2,u) -> potential(x,y,i,j,d2,u,mass), 0.0,box,cl,parallel=false