Merge branch 'feat/diff_model' into feat/diff_Jaguar
commit
5b1a6f92b0
|
|
@ -68,13 +68,13 @@ function starting_points!(U, V)
|
||||||
jitter = 5
|
jitter = 5
|
||||||
margin = radius + 2
|
margin = radius + 2
|
||||||
rels = [
|
rels = [
|
||||||
(1/4, 1/4), (3/4, 1/4), (1/2, 1/2),
|
(1 / 4, 1 / 4), (3 / 4, 1 / 4), (1 / 2, 1 / 2),
|
||||||
(1/4, 3/4), (3/4, 3/4), (1/2, 1/8)
|
(1 / 4, 3 / 4), (3 / 4, 3 / 4), (1 / 2, 1 / 8)
|
||||||
]
|
]
|
||||||
for (px, py) in rels
|
for (px, py) in rels
|
||||||
cx = clamp(round(Int, px * N) + rand(-jitter:jitter), margin, N - margin)
|
cx = clamp(round(Int, px * N) + rand(-jitter:jitter), margin, N - margin)
|
||||||
cy = clamp(round(Int, py * N) + rand(-jitter:jitter), margin, N - margin)
|
cy = clamp(round(Int, py * N) + rand(-jitter:jitter), margin, N - margin)
|
||||||
for x in (cx - radius):(cx + radius), y in (cy - radius):(cy + radius)
|
for x in (cx-radius):(cx+radius), y in (cy-radius):(cy+radius)
|
||||||
if 1 ≤ x ≤ N && 1 ≤ y ≤ N && hypot(x - cx, y - cy) ≤ radius
|
if 1 ≤ x ≤ N && 1 ≤ y ≤ N && hypot(x - cx, y - cy) ≤ radius
|
||||||
U[x, y] = 0.50
|
U[x, y] = 0.50
|
||||||
V[x, y] = 0.25
|
V[x, y] = 0.25
|
||||||
|
|
@ -86,7 +86,7 @@ end
|
||||||
function param_box!(grid, row, labeltxt, observable::Observable)
|
function param_box!(grid, row, labeltxt, observable::Observable)
|
||||||
Label(grid[row, 1], labeltxt)
|
Label(grid[row, 1], labeltxt)
|
||||||
box = Textbox(grid[row, 2], validator=Float64, width=50,
|
box = Textbox(grid[row, 2], validator=Float64, width=50,
|
||||||
placeholder=labeltxt, stored_string="$(observable[])")
|
placeholder=labeltxt, stored_string="$(observable[])")
|
||||||
on(box.stored_string) do s
|
on(box.stored_string) do s
|
||||||
try
|
try
|
||||||
observable[] = parse(Float64, s)
|
observable[] = parse(Float64, s)
|
||||||
|
|
@ -108,8 +108,9 @@ function build_ui(U, V, Du, Dv, F, k, params_obs, heat_obs)
|
||||||
|
|
||||||
run_label = Observable("Run")
|
run_label = Observable("Run")
|
||||||
stepsize = Observable(30)
|
stepsize = Observable(30)
|
||||||
|
spoint = select_point(ax.scene)
|
||||||
|
|
||||||
# Controls
|
# # Controls
|
||||||
fig[2, 1] = buttongrid = GridLayout(ax.scene, tellwidth=false)
|
fig[2, 1] = buttongrid = GridLayout(ax.scene, tellwidth=false)
|
||||||
btn_step = Button(buttongrid[1, 1], width=60, label="Step")
|
btn_step = Button(buttongrid[1, 1], width=60, label="Step")
|
||||||
btn_start = Button(buttongrid[1, 2], width=60, label=run_label)
|
btn_start = Button(buttongrid[1, 2], width=60, label=run_label)
|
||||||
|
|
@ -117,8 +118,8 @@ function build_ui(U, V, Du, Dv, F, k, params_obs, heat_obs)
|
||||||
btn_Jaguar = Button(buttongrid[1, 4], width=60, label="Jaguar")
|
btn_Jaguar = Button(buttongrid[1, 4], width=60, label="Jaguar")
|
||||||
|
|
||||||
slidergrid = SliderGrid(fig[3, 1], (label="Speed", range=1:100,
|
slidergrid = SliderGrid(fig[3, 1], (label="Speed", range=1:100,
|
||||||
format="{}x", width=350,
|
format="{}x", width=350,
|
||||||
startvalue=stepsize[]))
|
startvalue=stepsize[]))
|
||||||
speed_slider = slidergrid.sliders[1].value
|
speed_slider = slidergrid.sliders[1].value
|
||||||
|
|
||||||
gh[1, 2] = textboxgrid = GridLayout(ax.scene, tellwidth=false)
|
gh[1, 2] = textboxgrid = GridLayout(ax.scene, tellwidth=false)
|
||||||
|
|
@ -159,12 +160,13 @@ function build_ui(U, V, Du, Dv, F, k, params_obs, heat_obs)
|
||||||
|
|
||||||
Du[] = 0.142
|
Du[] = 0.142
|
||||||
Dv[] = 0.078
|
Dv[] = 0.078
|
||||||
F[] = 0.0617
|
F[] = 0.0617
|
||||||
k[] = 0.062
|
k[] = 0.062
|
||||||
|
|
||||||
if !running[]
|
if !running[]
|
||||||
running[] = true
|
running[] = true
|
||||||
U .= 1.0; V .= 0.0
|
U .= 1.0
|
||||||
|
V .= 0.0
|
||||||
@async while running[]
|
@async while running[]
|
||||||
multi_step!((U, V), stepsize[], heat_obs, params_obs)
|
multi_step!((U, V), stepsize[], heat_obs, params_obs)
|
||||||
sleep(0.0015)
|
sleep(0.0015)
|
||||||
|
|
@ -179,7 +181,27 @@ function build_ui(U, V, Du, Dv, F, k, params_obs, heat_obs)
|
||||||
running[] = false
|
running[] = false
|
||||||
reset!(U, V, heat_obs)
|
reset!(U, V, heat_obs)
|
||||||
end
|
end
|
||||||
|
on(spoint) do pt
|
||||||
|
r = 5
|
||||||
|
if pt === nothing
|
||||||
|
return
|
||||||
|
end
|
||||||
|
x, y = pt
|
||||||
|
println("params_obs[].N, ", params_obs[].N)
|
||||||
|
i, j = coord_to_index(x, y, params_obs[].N)
|
||||||
|
|
||||||
|
# get corners of square that will get filled with concentration
|
||||||
|
imin = max(i - r, 1)
|
||||||
|
imax = min(i + r, params_obs[].N)
|
||||||
|
jmin = max(j - r, 1)
|
||||||
|
jmax = min(j + r, params_obs[].N)
|
||||||
|
|
||||||
|
# set disbalanced concentration of U and V
|
||||||
|
U[imin:imax, jmin:jmax] .= 0.5
|
||||||
|
V[imin:imax, jmin:jmax] .= 0.25
|
||||||
|
|
||||||
|
heat_obs[] = copy(U)
|
||||||
|
end
|
||||||
return fig
|
return fig
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue