1
0
Fork 0
mirror of https://gitlab.rlp.net/mobitar/ReCo.jl.git synced 2024-11-30 23:41:35 +00:00

small changes

This commit is contained in:
MoBit 2021-11-17 19:47:05 +01:00
parent f4734064c5
commit 4c4c9b5993
9 changed files with 30 additions and 24 deletions

View file

@ -4,6 +4,8 @@ ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
GLMakie = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a"
JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819"
JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
JuliaFormatter = "98e50ef6-434e-11e9-1051-2b60c6c9e899"
LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
ProfileView = "c46f51b8-102a-5cf2-8d2c-8597cb0e0da7"
ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca"

View file

@ -39,21 +39,23 @@ function minimum_image_coordinate(value::Float64; l::Float64)
end
function minimum_image(v::SVector{2,Float64}; l::Float64)
return minimum_image_coordinate.(v; l=l)
return SVector(minimum_image_coordinate(v[1]; l=l), minimum_image_coordinate(v[2]; l=l))
end
function are_overlapping(p1::Particle, p2::Particle, overlapping_r²::Float64, l::Float64)
r⃗₁₂ = SVector{2}(p2.c) - SVector{2}(p1.c) # 1 -> 2
r⃗₁₂ = SVector(p2.c[1] - p1.c[1], p2.c[2] - p1.c[2]) # 1 -> 2
r⃗₁₂ = minimum_image(r⃗₁₂; l=l)
distance² = r⃗₁₂[1]^2 + r⃗₁₂[2]^2
return (distance² < overlapping_r², r⃗₁₂, distance²)
overlapping = distance² < overlapping_r²
return (; overlapping, r⃗₁₂, distance²)
end
function update!(p::Particle)
@simd for i in 1:2
p.c[i] = p.tmp_c[i]
end
end
end

View file

@ -24,4 +24,4 @@ function iterate(pv::PreVector{T}, state=1) where {T}
else
return (pv.v[state], state + 1)
end
end
end

View file

@ -20,4 +20,4 @@ includet("setup.jl")
includet("simulation.jl")
includet("data.jl")
includet("animation.jl")
includet("run.jl")
includet("run.jl")

View file

@ -33,7 +33,7 @@ function animate(sol::Solution, args, name_part::String; framerate::Int64=10)
skin_colors = Observable(Vector{RGBAf}(undef, args.N))
end
@showprogress 0.5 for frame in 1:(args.n_frames)
@showprogress 0.6 for frame in 1:(args.n_frames)
@simd for i in 1:(args.N)
circles[][i] = Circle(
Point2(sol.center[i, frame]), args.particle_diameter / 2

View file

@ -4,7 +4,9 @@ struct Solution
φ::Matrix{Float64}
function Solution(N::Int64, n_frames::Int64)
return new(zeros(n_frames), [zeros(2) for i in 1:N, j in 1:n_frames], zeros((N, n_frames)))
return new(
zeros(n_frames), [zeros(2) for i in 1:N, j in 1:n_frames], zeros((N, n_frames))
)
end
end
@ -17,7 +19,7 @@ function save_frame!(sol, frame, t, particles)
p_id = p.id
pre_pos = sol.center[p_id, frame]
@simd for i in 1:2
pre_pos[i] = p.c[i]
end

View file

@ -10,7 +10,7 @@ function pair_correlation(frame=0, dr=0.1)
)
n_r = 100
rs = range(0, args.l; length=n_r)
radius = range(0, args.l; length=n_r)
N_g = zeros((args.N, n_r))
if frame == 0
@ -18,7 +18,7 @@ function pair_correlation(frame=0, dr=0.1)
end
for r_ind in 1:n_r
r = rs[r_ind]
r = radius[r_ind]
for i in 1:(args.N)
for j in 1:(args.N)
@ -43,7 +43,7 @@ function pair_correlation(frame=0, dr=0.1)
g = zeros(n_r)
for r_ind in 1:n_r
r = rs[r_ind]
r = radius[r_ind]
tmp_g = 0.0
for i in 1:(args.N)
@ -54,14 +54,14 @@ function pair_correlation(frame=0, dr=0.1)
g[r_ind] = tmp_g
end
return plot_g(rs, g)
return plot_g(radius, g)
end
function plot_g(rs, g)
function plot_g(radius, g)
fig = Figure(; resolution=(1080, 1080))
ax = Axis(fig[1, 1]; xlabel=L"r", ylabel=L"g(r)")
scatterlines!(ax, rs, g)
scatterlines!(ax, radius, g)
return (fig, rs, g)
end
return (; fig, radius, g)
end

View file

@ -5,7 +5,7 @@ function run(;
δt::Float64=2e-5,
save_at::Float64=0.1,
framerate::Int64=0,
save_data::Bool=false,
save_data::Bool=true,
n_steps_before_verlet_list_update::Int64=100,
debug::Bool=false,
)
@ -56,15 +56,15 @@ function run(;
args, δt, T, n_steps_before_verlet_list_update, n_steps_before_save
)
name_part = "$(end_time)_T=$(T)_N=$(N)_v=$(v)_dt=$(δt)"
name_part = "$(end_time)_T=$(T)_N=$(N)_v=$(v)"
if save_data
save_data_jld(sol, args, name_part)
save_data_jld(name_part, sol, args, n_steps_before_verlet_list_update)
end
if framerate > 0
animate(sol, args, name_part; framerate=framerate)
end
return (sol=sol, args=args, name_part=name_part)
return (; sol, args, name_part)
end

View file

@ -10,7 +10,7 @@ function update_verlet_list!(args)
p1 = args.particles[i]
p2 = args.particles[j]
overlapping, r⃗₁₂, distance² = are_overlapping(p1, p2, args.skin_r², args.l)
overlapping = are_overlapping(p1, p2, args.skin_r², args.l).overlapping
if overlapping
push!(args.verlet_list[i], j)
@ -79,7 +79,7 @@ function simulate(
start_time = now()
println("Started simulation at $start_time.")
@showprogress 0.2 for (integration_step, t) in enumerate(0:δt:T)
@showprogress 0.6 for (integration_step, t) in enumerate(0:δt:T)
if integration_step % n_steps_before_save == 0
frame = save_frame!(sol, frame, t, args.particles)
end
@ -95,5 +95,5 @@ function simulate(
elapsed_time = canonicalize(CompoundPeriod(end_time - start_time))
println("Done simulation at $end_time and took $elapsed_time.")
return (sol, end_time)
return (; sol, end_time)
end