chore: update
This commit is contained in:
parent
4776edc9db
commit
416d97c513
25 changed files with 1653 additions and 283 deletions
41
lib/hsim/csolver.ml
Normal file
41
lib/hsim/csolver.ml
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
open Zls
|
||||
open Odexx.Ode45
|
||||
|
||||
type state =
|
||||
{ state: t; vec: carray; now: Full.time }
|
||||
|
||||
let make_full () : (carray, carray) Full.csolver =
|
||||
let state =
|
||||
let v = Zls.cmake 0 in
|
||||
let state = initialize (fun _ _ _ -> ()) (vec v) in
|
||||
set_stop_time state 1.0; { state; vec=v; now=0.0 } in
|
||||
let step ({ state ; vec=v; now } as s) h =
|
||||
let y_nv = vec v in
|
||||
let h = step state h y_nv in
|
||||
let state = copy state in
|
||||
let f t = get_dky state y_nv (now +. t) 0; unvec y_nv in
|
||||
{ s with now=now +. h }, { Full.h=h -. now; f } in
|
||||
let reset _ Full.{ fder; y0; h } =
|
||||
let fder t cvec dvec = Zls.blit (fder t cvec) dvec in
|
||||
let state = initialize fder (vec y0) in
|
||||
set_stop_time state h;
|
||||
{ state; vec = y0; now=0.0 } in
|
||||
Full.DNode { state; step; reset }
|
||||
|
||||
let make () : (carray, carray) Fill.csolver =
|
||||
let state =
|
||||
let v = Zls.cmake 0 in
|
||||
let state = initialize (fun _ _ _ -> ()) (vec v) in
|
||||
set_stop_time state 1.0; { state; vec=v; now=0.0 } in
|
||||
let step ({ state ; vec=v; now } as s) h =
|
||||
let y_nv = vec v in
|
||||
let h = step state h y_nv in
|
||||
let state = copy state in
|
||||
let f t = get_dky state y_nv (now +. t) 0; unvec y_nv in
|
||||
{ s with now=now +. h }, { Fill.h=h -. now; f } in
|
||||
let reset _ Fill.{ fder; y0; h } =
|
||||
let fder t cvec dvec = Zls.blit (fder t cvec) dvec in
|
||||
let state = initialize fder (vec y0) in
|
||||
set_stop_time state h;
|
||||
{ state; vec = y0; now=0.0 } in
|
||||
Fill.DNode { state; step; reset }
|
||||
Loading…
Add table
Add a link
Reference in a new issue