# # evolve: # # The "evolve" procedure is the time-step loop for a scheme. # printf("evolve procedures: \ evolve, \ get_animation, \ get_3d_plot\n"); evolve := proc(u, g, scheme, t_min, t_max, plot_freq) local t, data, n, dt, stencil, l_bc, r_bc, max_time_step; stencil, l_bc, r_bc, max_time_step := op(scheme); t := t_min; data := get_profile_of_field_at_time(u, g, t_min); for n from 1 while t < t_max do dt := max_time_step(u, g): advance_field(u, g, stencil, l_bc, r_bc, dt); t := t + dt; if (modp(n, plot_freq) = 0) then data := data, get_profile_of_field_at_time(u, g, t); fi od; [data] end: get_animation := proc(data) local pick, data2d; pick := x -> map(y -> [op(1,y), op(3,y)], x); data2d := map(pick, data); PLOT(ANIMATE(op(map(x->[x], map(CURVES, data2d, COLOUR(RGB,0,0,1))))), AXESLABELS(x, u)) end: get_3d_plot := proc(data) PLOT3D(MESH(data), STYLE(PATCHCONTOUR)) end: