Basic Examples
GUI Examples
Section titled “GUI Examples”Examples of using the simulation core API via the graphical user interface (sim_gui).
1) Kepler orbits in phase portrait mode
Section titled “1) Kepler orbits in phase portrait mode”Generate Kepler style orbits in phase portrait mode.
local sim = require("libsimcore")local N = 512local dt = 0.05local ctx = sim.sim_create()
sim.sim_set_timestep(ctx, dt)sim.sim_set_visual_mode(ctx, "phase_portrait")
local field_1 = sim.sim_add_field(ctx, {N}, { type = "complex_double", fill = {0.0, 0.0}})
local field_2 = sim.sim_add_field(ctx, {N}, { type = "complex_double", fill = {0.0, 0.0}})
sim.sim_add_stimulus_operator(ctx, field_1, { type = "stimulus_sine", amplitude = 0.25, wavenumber = 0.025, omega = -0.3, phase = 0})
sim.sim_add_stimulus_operator(ctx, field_1, { type = "stimulus_sine", amplitude = 0.25, wavenumber = 0.05, omega = -0.3, phase = math.pi/2, rotation = math.pi/4,})
sim.sim_add_stimulus_operator(ctx, field_2, { type = "stimulus_spectral_lines", amplitude = 0.25, wavenumber = 0.03, omega = -0.2, phase = 0})
sim.sim_add_mixer_operator(ctx, field_2, field_1, field_1, { mode = "multiply", lhs_gain = 0.5, rhs_gain = 0.5})
local integrator = sim.sim_create_context_integrator(ctx, "euler")
sim.sim_set_integrator(ctx, integrator)
return ctx2) Gaussian pulse
Section titled “2) Gaussian pulse”Applies a moving Gaussian pulse stimulus to a real field.
local sim = require("libsimcore")local N = 768local dt = 0.025
local ctx = sim.sim_create()
sim.sim_set_timestep(ctx, dt)sim.sim_set_visual_mode(ctx, "polar")
local field = sim.sim_add_field(ctx, {N}, { type = "double", fill = {0.0}})
sim.sim_add_zero_field_operator(ctx, field)
sim.sim_add_stimulus_operator(ctx, field, { type = "stimulus_gaussian_plain", amplitude = 0.25, sigma = 0.75, velocity = 1, center = math.pi, spacing = 0.05})
local integrator = sim.sim_create_context_integrator(ctx, "euler", { initial_dt = dt})
sim.sim_set_integrator(ctx, integrator)
return ctx3) Simple log hook
Section titled “3) Simple log hook”local sim = require("libsimcore")local N = 512local dt = 0.01local ctx = sim.sim_create()
sim.sim_set_timestep(ctx, dt)sim.sim_on_step(ctx, function(c) local t = sim.sim_get_time(c) sim.log("t=%.3f", t)end)
return ctxExample output in log panel:
[INFO] t=0.000[INFO] t=0.010[INFO] t=0.020[INFO] t=0.030...CLI Examples
Section titled “CLI Examples”Examples of using the simulation core API via the command-line interface (sim_cli).
1) Fixed-step sine stimulus
Section titled “1) Fixed-step sine stimulus”Applies to a real field and takes 120 integrator (RK4) steps, matching the forced oscillator
local sim = require("libsimcore")local ctx = sim.sim_create()local steps = 120local N = 256local dt = 0.02
sim.log("Starting simulation with %d steps and dt = %.3f", steps, dt)
local field = sim.sim_add_field(ctx, {N}, { type = "double", fill = {0}})
sim.sim_add_stimulus_operator(ctx, field, { type = "stimulus_sine", amplitude = 0.1, wavenumber = 1.0, omega = 0.2})
local integrator = sim.sim_create_context_integrator(ctx, "rk4", { initial_dt = dt})
sim.sim_set_integrator(ctx, integrator)
for _ = 1, steps do sim.sim_integrator_step(ctx, integrator, dt) local values = field:values() sim.log("Field sample value: %.6f", values[1])end
sim.sim_shutdown(ctx)
return ctxExample output:
oak@field % ./bin/sim_cli --script fixed-step-sine.lua[INFO] Starting simulation with 120 steps and dt = 0.020...[INFO] Field sample value: -0.665682[INFO] Field sample value: -0.687690[INFO] Field sample value: -0.710105[INFO] Field sample value: -0.732928[INFO] Field sample value: -0.756163[INFO] Field sample value: -0.779813[INFO] Field sample value: -0.803878[INFO] Field sample value: -0.828362...