Skip to content

Commit

Permalink
Merge pull request #11 from niklasschmitz/unitful-rattle
Browse files Browse the repository at this point in the history
Unitful rattle
  • Loading branch information
cortner authored Oct 23, 2024
2 parents 7438aef + 9d6c1a4 commit e8cfca6
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 2 deletions.
7 changes: 5 additions & 2 deletions src/utils.jl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

using AtomsBase
using AtomsBase: Atom, FlexibleSystem
using Unitful: unit, ustrip, Quantity
using Unitful: unit, uconvert, ustrip, Quantity
using LinearAlgebra: norm

export rattle!,
Expand Down Expand Up @@ -109,12 +109,15 @@ not the same as choosing them uniform in cartesian coordinates!).
If `r` is unitless, then the unit of the system is applied.
"""
function rattle!(at::FlexibleSystem, r::Quantity)
(length(at.particles) > 0) || return at
at_unit = unit(position(at, 1)[1])
r = uconvert(at_unit, r)
for i = 1:length(at.particles)
p = at.particles[i]
𝐫ᵢ = p.position
T = typeof(ustrip(𝐫ᵢ[1]))
ui = randn(Vec3{T})
p_new = _set_position(p, 𝐫ᵢ + r * ui / norm(ui))
p_new = _set_position(p, 𝐫ᵢ + rand(T) * r * ui / norm(ui))
at.particles[i] = p_new
end
return at
Expand Down
1 change: 1 addition & 0 deletions test/test_bulk.jl
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ end
sys0 = rattle!(bulk(:C, cubic=true) * (2,3,4), 0.1u"Å")
sys1 = rattle!(bulk(:C, cubic=true) * (2,3,4), 0.1)
sys2 = rattle!(bulk(:C) * (2,3,4), 0.1)
rattle!(bulk(:C) * (2,3,4), 0.01u"nm")

X = position(sys1, :)
Xnew = [ x .+ 0.01u"Å" for x in X ]
Expand Down

0 comments on commit e8cfca6

Please sign in to comment.