When systems are highly non-homogeneous, the number of cells can explode to be much greater than the number of particles:
using StaticArrays
using CellListMap
function points_in_sphere(r,N)
p = SVector{3,Float64}[]
for ip in 1:N
θ = π*rand()
ϕ = 2π*rand()
x = r * sin(ϕ) * cos(θ)
y = r * sin(ϕ) * sin(θ)
z = r * cos(ϕ)
push!(p, SVector(x,y,z))
end
return p
end
julia> p = points_in_sphere(500, 100);
julia> box = Box(limits(p), 0.02)
Box{NonPeriodicCell, 3}
unit cell matrix = [ 990.57, 0.0, 0.0; 0.0, 985.31, 0.0; 0.0, 0.0, 999.88 ]
cutoff = 0.02
number of computing cells on each dimension = [49530, 49267, 49995]
computing cell sizes = [0.02, 0.02, 0.02] (lcell: 1)
Total number of cells = 121997524527450
This makes it prohibitive to work with this kind of system. Can we find a way to not allocate empty cells at all? The full cell allocation would need to be lazy, since the construction of the box does not involve the actual coordinates of the system.
When systems are highly non-homogeneous, the number of cells can explode to be much greater than the number of particles:
This makes it prohibitive to work with this kind of system. Can we find a way to not allocate empty cells at all? The full cell allocation would need to be lazy, since the construction of the box does not involve the actual coordinates of the system.