Skip to content
Oakfield Operator Calculus Function Reference Site

Advanced Examples

Examples of more advanced Lua usage patterns, including on-step hooks, custom operators, async logging, and multi-field coupling.

Sweeps wavenumber on operator index 11 as k(t)=sin(5×104t)k(t) = \sin(5\times10^{-4} t)

-- stimulus_sine_184#0 (schema=stimulus_sine, index=1)
sim.sim_add_stimulus_operator(ctx, field, {
type = "stimulus_sine",
amplitude = 0.4,
wavenumber = 1,
omega = -0.4,
spacing = 1
})
local t = 0
sim.sim_on_step(ctx, function(c)
t = t + 1
local sweep = math.sin(t * 0.0005)
sim.sim_operator_param_set(c, 1, "wavenumber", sweep)
end)

Defines a custom operator in Lua that counts simulation ticks and logs step metrics every 1000 steps.

local tick = 0
local tick_op = sim.sim_add_operator(ctx, 'tick_counter', function(context)
tick = tick + 1
if tick % 1000 == 0 then
local metrics = sim.sim_step_metrics_latest(ctx)
if metrics then
sim.log("Step %d: dt=%.6f, writes=%d", tick,
metrics.accepted_dt, metrics.dirty_writes)
end
end
return true
end)