mirror of
https://gitlab.rlp.net/mobitar/ReCo.jl.git
synced 2024-12-21 00:51:21 +00:00
Remove kwargs overhead
This commit is contained in:
parent
79a7f84808
commit
ce81dd932b
7 changed files with 61 additions and 38 deletions
|
@ -6,6 +6,7 @@ version = "0.1.0"
|
||||||
[deps]
|
[deps]
|
||||||
BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
|
BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
|
||||||
CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
|
CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
|
||||||
|
CellListMap = "69e1c6dd-3888-40e6-b3c8-31ac5f578864"
|
||||||
ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
|
ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
|
||||||
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
|
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
|
||||||
Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
|
Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
|
||||||
|
@ -14,6 +15,7 @@ JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819"
|
||||||
JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
|
JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
|
||||||
JuliaFormatter = "98e50ef6-434e-11e9-1051-2b60c6c9e899"
|
JuliaFormatter = "98e50ef6-434e-11e9-1051-2b60c6c9e899"
|
||||||
LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
|
LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
|
||||||
|
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
|
||||||
LoopVectorization = "bdcacae8-1622-11e9-2a5c-532679323890"
|
LoopVectorization = "bdcacae8-1622-11e9-2a5c-532679323890"
|
||||||
Luxor = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc"
|
Luxor = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc"
|
||||||
ProfileView = "c46f51b8-102a-5cf2-8d2c-8597cb0e0da7"
|
ProfileView = "c46f51b8-102a-5cf2-8d2c-8597cb0e0da7"
|
||||||
|
@ -22,6 +24,7 @@ Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
|
||||||
ReinforcementLearning = "158674fc-8238-5cab-b5ba-03dfc80d1318"
|
ReinforcementLearning = "158674fc-8238-5cab-b5ba-03dfc80d1318"
|
||||||
Revise = "295af30f-e4ad-537b-8983-00126c2a3abe"
|
Revise = "295af30f-e4ad-537b-8983-00126c2a3abe"
|
||||||
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
|
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
|
||||||
|
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
|
||||||
|
|
||||||
[compat]
|
[compat]
|
||||||
julia = "1.6"
|
julia = "1.6"
|
||||||
|
|
|
@ -9,12 +9,12 @@ mutable struct Particle
|
||||||
|
|
||||||
φ::Float64 # Angle
|
φ::Float64 # Angle
|
||||||
|
|
||||||
function Particle(; id::Int64, c::Vector{Float64}, φ::Float64)
|
function Particle(id::Int64, c::Vector{Float64}, φ::Float64)
|
||||||
return new(id, c, copy(c), φ)
|
return new(id, c, copy(c), φ)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function restrict_coordinate(value::Float64; l::Float64)
|
function restrict_coordinate(value::Float64, l::Float64)
|
||||||
if value < -l
|
if value < -l
|
||||||
value += 2 * l
|
value += 2 * l
|
||||||
elseif value >= l
|
elseif value >= l
|
||||||
|
@ -24,15 +24,15 @@ function restrict_coordinate(value::Float64; l::Float64)
|
||||||
return value
|
return value
|
||||||
end
|
end
|
||||||
|
|
||||||
function restrict_coordinates!(p::Particle; l::Float64)
|
function restrict_coordinates!(p::Particle, l::Float64)
|
||||||
@simd for i in 1:2
|
@simd for i in 1:2
|
||||||
p.tmp_c[i] = restrict_coordinate(p.tmp_c[i]; l=l)
|
p.tmp_c[i] = restrict_coordinate(p.tmp_c[i], l)
|
||||||
end
|
end
|
||||||
|
|
||||||
return nothing
|
return nothing
|
||||||
end
|
end
|
||||||
|
|
||||||
function minimum_image_coordinate(value::Float64; l::Float64)
|
function minimum_image_coordinate(value::Float64, l::Float64)
|
||||||
if value <= -l
|
if value <= -l
|
||||||
value += 2 * l
|
value += 2 * l
|
||||||
elseif value > l
|
elseif value > l
|
||||||
|
@ -42,14 +42,14 @@ function minimum_image_coordinate(value::Float64; l::Float64)
|
||||||
return value
|
return value
|
||||||
end
|
end
|
||||||
|
|
||||||
function minimum_image(v::SVector{2,Float64}; l::Float64)
|
function minimum_image(v::SVector{2,Float64}, l::Float64)
|
||||||
return SVector(minimum_image_coordinate(v[1]; l=l), minimum_image_coordinate(v[2]; l=l))
|
return SVector(minimum_image_coordinate(v[1], l), minimum_image_coordinate(v[2], l))
|
||||||
end
|
end
|
||||||
|
|
||||||
function are_overlapping(p1::Particle, p2::Particle, overlapping_r²::Float64, l::Float64)
|
function are_overlapping(p1::Particle, p2::Particle, overlapping_r²::Float64, l::Float64)
|
||||||
r⃗₁₂ = SVector(p2.c[1] - p1.c[1], p2.c[2] - p1.c[2]) # 1 -> 2
|
r⃗₁₂ = SVector(p2.c[1] - p1.c[1], p2.c[2] - p1.c[2]) # 1 -> 2
|
||||||
|
|
||||||
r⃗₁₂ = minimum_image(r⃗₁₂; l=l)
|
r⃗₁₂ = minimum_image(r⃗₁₂, l)
|
||||||
|
|
||||||
distance² = r⃗₁₂[1]^2 + r⃗₁₂[2]^2
|
distance² = r⃗₁₂[1]^2 + r⃗₁₂[2]^2
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ function pair_correlation(sol, variables)
|
||||||
|
|
||||||
r⃗₁₂ = SVector(c1[1] - c2[1], c1[2] - c2[2])
|
r⃗₁₂ = SVector(c1[1] - c2[1], c1[2] - c2[2])
|
||||||
|
|
||||||
r⃗₁₂ = minimum_image(r⃗₁₂; l=variables.l)
|
r⃗₁₂ = minimum_image(r⃗₁₂, variables.l)
|
||||||
|
|
||||||
distance = sqrt(r⃗₁₂[1]^2 + r⃗₁₂[2]^2)
|
distance = sqrt(r⃗₁₂[1]^2 + r⃗₁₂[2]^2)
|
||||||
|
|
||||||
|
|
|
@ -1,23 +1,45 @@
|
||||||
function run_benchmarks()
|
using Statistics: mean
|
||||||
benchmark_exprs = [:(run_sim(; N=1000, T=5, v=20.0, snapshot_at=0.1, save_data=false))]
|
using Dates: now
|
||||||
|
using BenchmarkTools: @benchmark
|
||||||
|
using JSON3: JSON3
|
||||||
|
|
||||||
for expr in benchmark_exprs
|
using ReCo
|
||||||
benchmark = @benchmark eval(expr)
|
|
||||||
|
|
||||||
display(benchmark)
|
function run_benchmarks(
|
||||||
|
dir::String="";
|
||||||
open("benchmark.txt", "a+") do f
|
N::Int64=1000,
|
||||||
json = JSON3.pretty(
|
v::Float64=20.0,
|
||||||
Dict(
|
duration::Float64=2.0,
|
||||||
"benchmark" => repr(expr),
|
n_bundle_snapshots::Int64=0,
|
||||||
"datetime" => now(),
|
comment="",
|
||||||
"mean_time/ns" => mean(benchmark.times),
|
)
|
||||||
"allocs" => benchmark.allocs,
|
if length(dir) == 0
|
||||||
"memory" => benchmark.memory,
|
dir = init_sim(; N=N, v=v, parent_dir="benchmark")
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
write(f, json)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
benchmark = @benchmark run_sim(
|
||||||
|
$dir; duration=$duration, n_bundle_snapshots=$n_bundle_snapshots
|
||||||
|
)
|
||||||
|
|
||||||
|
display(benchmark)
|
||||||
|
|
||||||
|
open("exports/benchmark.txt", "a+") do f
|
||||||
|
JSON3.pretty(
|
||||||
|
f,
|
||||||
|
Dict(
|
||||||
|
"N" => N,
|
||||||
|
"v" => v,
|
||||||
|
"duration" => duration,
|
||||||
|
"n_bundle_snapshots" => n_bundle_snapshots,
|
||||||
|
"comment" => comment,
|
||||||
|
"datetime" => now(),
|
||||||
|
"mean_time/ns" => mean(benchmark.times),
|
||||||
|
"allocs" => benchmark.allocs,
|
||||||
|
"memory" => benchmark.memory,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
write(f, "\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
return dir
|
||||||
end
|
end
|
10
src/setup.jl
10
src/setup.jl
|
@ -2,7 +2,7 @@ using Distributions: Uniform
|
||||||
using Dates: now
|
using Dates: now
|
||||||
using JSON3: JSON3
|
using JSON3: JSON3
|
||||||
|
|
||||||
function initial_particle_grid_pos(i, j; grid_box_width, l)
|
function initial_particle_grid_pos(i::Int64, j::Int64, grid_box_width::Float64, l::Float64)
|
||||||
term = -0.5 * grid_box_width - l
|
term = -0.5 * grid_box_width - l
|
||||||
return [k * grid_box_width + term for k in (i, j)]
|
return [k * grid_box_width + term for k in (i, j)]
|
||||||
end
|
end
|
||||||
|
@ -14,10 +14,8 @@ function generate_particles(grid_n::Int64, grid_box_width::Float64, l::Float64)
|
||||||
|
|
||||||
for i in 1:grid_n
|
for i in 1:grid_n
|
||||||
for j in 1:grid_n
|
for j in 1:grid_n
|
||||||
particles[id] = Particle(;
|
particles[id] = Particle(
|
||||||
id=id,
|
id, initial_particle_grid_pos(i, j, grid_box_width, l), rand(Uniform(-π, π))
|
||||||
c=initial_particle_grid_pos(i, j; grid_box_width=grid_box_width, l=l),
|
|
||||||
φ=rand(Uniform(-π, π)),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
id += 1
|
id += 1
|
||||||
|
@ -31,7 +29,7 @@ function generate_particles(bundle::Bundle, N::Int64)
|
||||||
particles = Vector{Particle}(undef, N)
|
particles = Vector{Particle}(undef, N)
|
||||||
|
|
||||||
for id in 1:N
|
for id in 1:N
|
||||||
particles[id] = Particle(; id=id, c=bundle.c[id, end], φ=bundle.φ[id, end])
|
particles[id] = Particle(id, bundle.c[id, end], bundle.φ[id, end])
|
||||||
end
|
end
|
||||||
|
|
||||||
return particles
|
return particles
|
||||||
|
|
|
@ -8,7 +8,7 @@ end
|
||||||
|
|
||||||
function project_back_from_unit_circle(θ, l)
|
function project_back_from_unit_circle(θ, l)
|
||||||
x = θ * l / π - l
|
x = θ * l / π - l
|
||||||
return restrict_coordinate(x; l=l)
|
return restrict_coordinate(x, l)
|
||||||
end
|
end
|
||||||
|
|
||||||
function center_of_mass(args)
|
function center_of_mass(args)
|
||||||
|
@ -52,8 +52,8 @@ function gyration_tensor(args)
|
||||||
|
|
||||||
for p in args.particles
|
for p in args.particles
|
||||||
c = p.c
|
c = p.c
|
||||||
x = restrict_coordinate(c[1] - COM[1]; l=args.l)
|
x = restrict_coordinate(c[1] - COM[1], args.l)
|
||||||
y = restrict_coordinate(c[2] - COM[2]; l=args.l)
|
y = restrict_coordinate(c[2] - COM[2], args.l)
|
||||||
|
|
||||||
S11 += x^2
|
S11 += x^2
|
||||||
S12 += x * y
|
S12 += x * y
|
||||||
|
|
|
@ -61,7 +61,7 @@ function euler!(args)
|
||||||
|
|
||||||
p.φ += args.c₄ * rand_normal01()
|
p.φ += args.c₄ * rand_normal01()
|
||||||
|
|
||||||
restrict_coordinates!(p; l=args.l)
|
restrict_coordinates!(p, args.l)
|
||||||
|
|
||||||
update!(p)
|
update!(p)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue