mirror of
https://gitlab.rlp.net/mobitar/ReCo.jl.git
synced 2024-09-19 19:01:17 +00:00
64 lines
1.6 KiB
Julia
64 lines
1.6 KiB
Julia
|
function run(;
|
|||
|
N::Int64,
|
|||
|
T::Float64,
|
|||
|
v::Float64=20.0,
|
|||
|
δt::Float64=2e-5,
|
|||
|
save_at::Float64=0.1,
|
|||
|
framerate::Int64=0,
|
|||
|
save_data::Bool=false,
|
|||
|
n_steps_before_verlet_list_update::Int64=100,
|
|||
|
)
|
|||
|
|
|||
|
Random.seed!(42)
|
|||
|
|
|||
|
μ = 1.0
|
|||
|
D₀ = 1.0
|
|||
|
particle_diameter = 1.0
|
|||
|
Dᵣ = 3 * D₀ / (particle_diameter^2)
|
|||
|
σ = 1.0
|
|||
|
ϵ = 100.0
|
|||
|
interaction_r = 2^(1 / 6) * σ
|
|||
|
|
|||
|
grid_n = round(Int64, ceil(sqrt(N)))
|
|||
|
|
|||
|
N = grid_n^2
|
|||
|
|
|||
|
l = float(sqrt(N))
|
|||
|
grid_box_width = 2 * l / grid_n
|
|||
|
|
|||
|
skin_r = 1.1 * (2 * v * n_steps_before_verlet_list_update * δt + 2 * interaction_r)
|
|||
|
|
|||
|
args = (
|
|||
|
v = v,
|
|||
|
c₁ = 4 * ϵ * 6 * σ^6 * δt * μ,
|
|||
|
c₂ = 2 * σ^6,
|
|||
|
c₃ = sqrt(2 * D₀ * δt),
|
|||
|
c₄ = sqrt(2 * Dᵣ * δt),
|
|||
|
vδt = v * δt,
|
|||
|
μ = μ,
|
|||
|
interaction_r = interaction_r,
|
|||
|
interaction_r² = interaction_r^2,
|
|||
|
N = N,
|
|||
|
l = l,
|
|||
|
particle_diameter = particle_diameter,
|
|||
|
particles = generate_particles(grid_n, grid_box_width, l),
|
|||
|
skin_r² = skin_r^2,
|
|||
|
verlet_list = [PreVector(Int64, N - 1) for i in 1:N],
|
|||
|
n_frames = floor(Int64, T / save_at) + 1,
|
|||
|
)
|
|||
|
|
|||
|
sol, end_time = simulate(args, save_at, δt, T, n_steps_before_verlet_list_update)
|
|||
|
|
|||
|
name_part = "$(end_time)_T=$(T)_N=$(N)_v=$(v)_dt=$(δt)"
|
|||
|
|
|||
|
if save_data
|
|||
|
save_data_jld(sol, args, name_part)
|
|||
|
end
|
|||
|
|
|||
|
if framerate > 0
|
|||
|
generate_animation(sol, args, name_part; framerate=framerate)
|
|||
|
end
|
|||
|
|
|||
|
return (sol = sol, args = args, name_part = name_part)
|
|||
|
end
|