Initial release
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
-- jkass_quality.lua: JKASS Quality solver (2 NFE)
|
||||
-- Heun with derivative averaging.
|
||||
|
||||
solver = {
|
||||
name = "jkass_quality",
|
||||
display = "JKASS Quality (2 NFE)",
|
||||
description = "Heun predictor-corrector with derivative averaging",
|
||||
accent = "amber",
|
||||
nfe = 2,
|
||||
order = 2,
|
||||
needs_model = true,
|
||||
stateful = false,
|
||||
stochastic = false,
|
||||
}
|
||||
|
||||
function step(xt, vt, t_curr, t_prev, n, model_fn, vt_buf)
|
||||
local dt = t_curr - t_prev
|
||||
|
||||
if t_prev <= 0 then
|
||||
-- Fallback to Euler for final step
|
||||
for i = 0, n - 1 do xt[i] = xt[i] - vt[i] * dt end
|
||||
return
|
||||
end
|
||||
|
||||
-- Save k1
|
||||
local k1 = {}
|
||||
for i = 0, n - 1 do k1[i] = vt[i] end
|
||||
|
||||
-- Euler predictor
|
||||
for i = 0, n - 1 do xt[i] = xt[i] - vt[i] * dt end
|
||||
|
||||
-- Second evaluation
|
||||
model_fn(xt, t_prev)
|
||||
|
||||
-- Correct: undo Euler, apply averaged derivative
|
||||
for i = 0, n - 1 do
|
||||
xt[i] = xt[i] + k1[i] * dt -- undo Euler
|
||||
xt[i] = xt[i] - 0.5 * (k1[i] + vt_buf[i]) * dt -- Heun average
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user