From 6e1a177d6430d5a5249498d9b96f23b22aa5b827 Mon Sep 17 00:00:00 2001 From: Mo8it Date: Fri, 21 Jan 2022 23:17:15 +0100 Subject: [PATCH] Moved to JLD2 because to preserve floats --- Project.toml | 1 - src/Animation.jl | 11 ++++---- src/Benchmark.jl | 4 +-- src/ReCo.jl | 4 +-- src/data.jl | 65 +++++++++++++++++++++++++++++------------------ src/run.jl | 12 ++++----- src/setup.jl | 8 +++--- src/simulation.jl | 4 +-- 8 files changed, 60 insertions(+), 49 deletions(-) diff --git a/Project.toml b/Project.toml index 9623ca8..dd434a3 100644 --- a/Project.toml +++ b/Project.toml @@ -19,7 +19,6 @@ LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" LoopVectorization = "bdcacae8-1622-11e9-2a5c-532679323890" Luxor = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc" -OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" ProfileView = "c46f51b8-102a-5cf2-8d2c-8597cb0e0da7" ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" diff --git a/src/Animation.jl b/src/Animation.jl index daa4f86..63764d5 100644 --- a/src/Animation.jl +++ b/src/Animation.jl @@ -5,13 +5,12 @@ export animate using GLMakie using ColorSchemes: cyclic_mrybm_35_75_c68_n256_s25 using LaTeXStrings: @L_str -using JSON3: JSON3 using JLD2: JLD2 using ProgressMeter: @showprogress -using ..ReCo: ReCo, Bundle +using ..ReCo: ReCo -function animate_bundle!(args, sim_consts) +function animate_bundle!(args, sim_consts::ReCo.SimConsts) bundle_t = args.bundle.t bundle_c = args.bundle.c bundle_φ = args.bundle.φ @@ -136,7 +135,7 @@ end function animate_with_sim_consts( dir::String, - sim_consts, + sim_consts::ReCo.SimConsts, framerate::Int64, show_center_of_mass::Bool, show_interaction_circle::Bool, @@ -205,7 +204,7 @@ function animate_with_sim_consts( bundle_paths = sort_bundle_paths(bundle_paths) @showprogress 1 for (n_bundle, bundle_path) in enumerate(bundle_paths) - bundle::Bundle = JLD2.load_object(bundle_path) + bundle::ReCo.Bundle = JLD2.load_object(bundle_path) args = (; # Input @@ -248,7 +247,7 @@ function animate( ) println("Generating animation...") - sim_consts = JSON3.read(read("$dir/sim_consts.json", String)) + sim_consts::ReCo.SimConsts = JLD2.load_object("$dir/sim_consts.jld2") animate_with_sim_consts( dir, diff --git a/src/Benchmark.jl b/src/Benchmark.jl index 92d5c44..9310fba 100644 --- a/src/Benchmark.jl +++ b/src/Benchmark.jl @@ -1,7 +1,7 @@ module Benchmark using Statistics: mean -using Dates: now +using Dates: Dates using BenchmarkTools: @benchmark using JSON3: JSON3 @@ -34,7 +34,7 @@ function run_benchmarks( "duration" => duration, "n_bundle_snapshots" => n_bundle_snapshots, "comment" => comment, - "datetime" => now(), + "datetime" => Dates.now(), "mean_time/ns" => mean(benchmark.times), "allocs" => benchmark.allocs, "memory" => benchmark.memory, diff --git a/src/ReCo.jl b/src/ReCo.jl index 920367b..93954a8 100644 --- a/src/ReCo.jl +++ b/src/ReCo.jl @@ -3,15 +3,13 @@ module ReCo export init_sim, run_sim, run_rl, animate, LocalCOMEnv using StaticArrays: SVector -using OrderedCollections: OrderedDict using JLD2: JLD2 -using JSON3: JSON3 using Distributions: Uniform, Normal using ProgressMeter: @showprogress using CellListMap: Box, CellList, map_pairwise!, UpdateCellList! using Random: Random -using Dates: Dates, now +using Dates: Dates include("Error.jl") using .Error diff --git a/src/data.jl b/src/data.jl index 9dafc8d..80af7c2 100644 --- a/src/data.jl +++ b/src/data.jl @@ -1,3 +1,40 @@ +struct SimConsts + n_particles::Int64 + v₀::Float64 + δt::Float64 + packing_ratio::Float64 + μ::Float64 + Dₜ::Float64 + particle_radius::Float64 + Dᵣ::Float64 + σ::Float64 + ϵ::Float64 + interaction_r::Float64 + skin_r::Float64 + n_steps_before_verlet_list_update::Int64 + grid_n::Int64 + half_box_len::Float64 + grid_box_width::Float64 +end + +struct RunParams + duration::Float64 + snapshot_at::Float64 + seed::Int64 + n_bundle_snapshots::Int64 + integration_steps::Int64 + n_steps_before_snapshot::Int64 + n_snapshots::Int64 + T::Float64 + T0::Float64 + start_datetime::Dates.DateTime +end + +struct SimState + n_bundles::Int64 + T::Float64 +end + struct Bundle t::Vector{Float64} c::Matrix{SVector{2,Float64}} @@ -30,35 +67,13 @@ function save_snapshot!( return nothing end -function save_bundle(dir::String, bundle::Bundle, n::Int64, T::Float64) +function save_bundle(dir::String, bundle::Bundle, n_bundle::Int64, T::Float64) bundles_dir = "$dir/bundles" mkpath(bundles_dir) - JLD2.save_object("$bundles_dir/bundle_$n.jld2", bundle) + JLD2.save_object("$bundles_dir/bundle_$n_bundle.jld2", bundle) - set_sim_state(dir, n, T) - - return nothing -end - -function set_sim_state(dir::String, n_bundles::Int64, T::Float64) - open("$dir/sim_state.json", "w") do f - JSON3.write(f, (n_bundles=n_bundles, T=round(T; digits=3))) - end - - return nothing -end - -function struct_to_ordered_dict(s) - return OrderedDict(key => getfield(s, key) for key in propertynames(s)) -end - -function write_struct_to_json(s, path_without_extension::String) - ordered_dict = struct_to_ordered_dict(s) - - open("$path_without_extension.json", "w") do f - JSON3.write(f, ordered_dict) - end + JLD2.save_object("$dir/sim_state.jld2", SimState(n_bundle, round(T; digits=3))) return nothing end \ No newline at end of file diff --git a/src/run.jl b/src/run.jl index 32cdc32..d349990 100644 --- a/src/run.jl +++ b/src/run.jl @@ -18,7 +18,7 @@ function run_sim( Random.seed!(seed) - sim_consts = JSON3.read(read("$dir/sim_consts.json", String)) + sim_consts::SimConsts = JLD2.load_object("$dir/sim_consts.jld2") integration_steps = floor(Int64, duration / sim_consts.δt) + 1 @@ -29,7 +29,7 @@ function run_sim( n_bundle_snapshots = min(n_snapshots, n_bundle_snapshots) - sim_state = JSON3.read(read("$dir/sim_state.json", String)) + sim_state::SimState = JLD2.load_object("$dir/sim_state.jld2") n_bundles = sim_state.n_bundles T0::Float64 = sim_state.T @@ -42,9 +42,9 @@ function run_sim( end @async begin - start_datetime = now() + start_datetime = Dates.now() - run_params = (; + run_params = RunParams( # Input duration, snapshot_at, @@ -64,12 +64,12 @@ function run_sim( runs_dir = "$dir/runs" if save_data - write_struct_to_json(run_params, "$runs_dir/run_params_$next_bundle") + JLD2.save_object("$runs_dir/run_params_$next_bundle.jld2", run_params) end end bundles_dir = "$dir/bundles" - bundle = JLD2.load_object("$bundles_dir/bundle_$n_bundles.jld2") + bundle::Bundle = JLD2.load_object("$bundles_dir/bundle_$n_bundles.jld2") particles = gen_particles(bundle, sim_consts.n_particles) diff --git a/src/setup.jl b/src/setup.jl index 2d45494..0a03656 100644 --- a/src/setup.jl +++ b/src/setup.jl @@ -90,7 +90,7 @@ function gen_sim_consts( grid_box_width = 2 * half_box_len / grid_n - return (; + return SimConsts( # Input n_particles, v₀, @@ -113,7 +113,7 @@ function gen_sim_consts( end function init_sim_with_sim_consts( - sim_consts; + sim_consts::SimConsts; exports_dir::String=DEFAULT_EXPORTS_DIR, parent_dir::String=DEFAULT_PARENT_DIR, comment::String=DEFAULT_COMMENT, @@ -130,7 +130,7 @@ function init_sim_with_sim_consts( dir *= "/$parent_dir" end - start_datetime = now() + start_datetime = Dates.now() dir *= "/$(start_datetime)_N=$(sim_consts.n_particles)_v=$(sim_consts.v₀)_#$(rand(1000:9999))" if length(comment) > 0 @@ -139,7 +139,7 @@ function init_sim_with_sim_consts( mkpath(dir) - task = @async write_struct_to_json(sim_consts, "$dir/sim_consts") + task = @async JLD2.save_object("$dir/sim_consts.jld2", sim_consts) save_bundle(dir, bundle, 1, 0.0) diff --git a/src/simulation.jl b/src/simulation.jl index 97ec77a..566af66 100644 --- a/src/simulation.jl +++ b/src/simulation.jl @@ -125,7 +125,7 @@ function simulate!( state_update_helper_hook! = state_update_hook! = update_table_and_actions_hook! = empty_hook - start_time = now() + start_time = Dates.now() println("Started simulation at $start_time.") @showprogress 0.6 for (integration_step, t) in enumerate(T0:(args.δt):T) @@ -186,7 +186,7 @@ function simulate!( save_bundle(dir, bundle, n_bundles, T) end - end_time = now() + end_time = Dates.now() elapsed_time = Dates.canonicalize(Dates.CompoundPeriod(end_time - start_time)) println("Simulation done at $end_time and took $elapsed_time.")