include("../src/utils/constants.jl") include("../src/fhn_solver.jl") #include("../src/gray_scott_solver.jl") include("../src/visualization.jl") using Observables using GLMakie using .Constants using .Visualization model_type = Observable(:gray_scott) # or :fhn # GSParams N = 128 dx = 1.0 gray_params = ( Du = Observable(0.16), Dv = Observable(0.08), F = Observable(0.060), k = Observable(0.062) ) # FHNParams N = 128 dx = 1.0 fhn_params = ( Du = Observable(0.16), Dv = Observable(0.08), ϵ = Observable(0.05), a = Observable(0.7), b = Observable(0.8) ) params_obs = Observable(Constants.GSParams(N, dx, gray_params.Du[], gray_params.Dv[], gray_params.F[], gray_params.k[])) #params_obs = Observable(Constants.FHNParams(N=N, dx=dx, Du=Du[], Dv=Dv[], ϵ=ϵ[], a=a[], b=b[])) # Rebuild when model or sliders change function setup_param_binding!(model_type, gray_params, fhn_params, params_obs) if model_type[] == :gray_scott lift(gray_params.Du, gray_params.Dv, gray_params.F, gray_params.k) do Du, Dv, F, k params_obs[] = GSParams(N, dx, Du, Dv, F, k) end else lift(fhn_params.Du, fhn_params.Dv, fhn_params.ϵ, fhn_params.a, fhn_params.b) do Du, Dv, ϵ, a, b params_obs[] = FHNParams(N, dx, Du, Dv, ϵ, a, b) end end end lift(Du, Dv, ϵ, a, b) do d_u, d_v, eps, aa, bb params_obs[] = Constants.FHNParams(N=N, dx=dx, Du=d_u, Dv=d_v, ϵ=eps, a=aa, b=bb) end U = ones(N, N) V = zeros(N, N) heat_obs = Observable(U) fig = Visualization.build_ui(U, V, param_observables, params_obs, heat_obs) display(fig)