chore: update
This commit is contained in:
parent
4776edc9db
commit
416d97c513
25 changed files with 1653 additions and 283 deletions
60
lib/hsim/lift.ml
Normal file
60
lib/hsim/lift.ml
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
|
||||
type ('s, 'a) state =
|
||||
{ mutable state : 's;
|
||||
mutable input : 'a option;
|
||||
mutable time : Ztypes.time;
|
||||
mutable jump : bool; }
|
||||
|
||||
let lift_hsim_full (n : unit Ztypes.hsimu)
|
||||
: (unit, unit, unit, Ztypes.cvec, Ztypes.dvec, Ztypes.zoutvec, Ztypes.zinvec option) Full.hnode * int
|
||||
= let Hsim { alloc; step; reset; derivative; crossings; maxsize; _ } = n in
|
||||
let state = { state = alloc (); input = None; time = 0.0; jump = false } in
|
||||
let csize, zsize = maxsize state.state in
|
||||
let no_zin, no_zout = Zls.zmake zsize, Zls.cmake zsize in
|
||||
let no_der, pos = Zls.cmake csize, Zls.cmake csize in
|
||||
let no_time = -1.0 in reset state.state;
|
||||
let fder { state; time; _ } offset () y =
|
||||
derivative state y no_der no_zin no_zout (time +. offset);
|
||||
no_der in
|
||||
let fzer { state; time; _ } offset () y =
|
||||
crossings state y no_zin no_zout (time +. offset); no_zout in
|
||||
let fout _ _ () _ = () in
|
||||
let step { state; time; _ } offset () =
|
||||
{ state; time=time +. offset; input=Some (); jump = false },
|
||||
step state pos no_der no_zin (time +. offset) in
|
||||
let reset ({ state; _ } as st) () = reset state; st in
|
||||
let jump s = s.jump in
|
||||
let cset ({ state; _ } as st) _ =
|
||||
derivative state pos no_der no_zin no_zout no_time; st in
|
||||
let zset ({ state; _ } as st) = function None -> st | Some zinvec ->
|
||||
derivative state pos no_der zinvec no_zout no_time; { st with jump = true } in
|
||||
let cget { state; _ } =
|
||||
derivative state pos no_der no_zin no_zout no_time; pos in
|
||||
HNode { state; fder; fzer; fout; step; reset; jump; cget; cset; zset }, zsize
|
||||
|
||||
let lift_hsim (n : unit Ztypes.hsimu)
|
||||
: (unit, unit, unit, Ztypes.cvec, Ztypes.dvec, Ztypes.zoutvec, Ztypes.zinvec option) Fill.hnode * int
|
||||
= let Hsim { alloc; step; reset; derivative; crossings; maxsize; _ } = n in
|
||||
let state = { state = alloc (); input = None; time = 0.0; jump = false } in
|
||||
let csize, zsize = maxsize state.state in
|
||||
let no_zin, no_zout = Zls.zmake zsize, Zls.cmake zsize in
|
||||
let no_der, pos = Zls.cmake csize, Zls.cmake csize in
|
||||
let no_time = -1.0 in reset state.state;
|
||||
let fder { state; time; _ } offset () y =
|
||||
derivative state y no_der no_zin no_zout (time +. offset);
|
||||
no_der in
|
||||
let fzer { state; time; _ } offset () y =
|
||||
crossings state y no_zin no_zout (time +. offset); no_zout in
|
||||
let fout _ _ () _ = () in
|
||||
let step { state; time; _ } offset () =
|
||||
{ state; time=time +. offset; input=Some (); jump = false },
|
||||
step state pos no_der no_zin (time +. offset) in
|
||||
let reset ({ state; _ } as st) () = reset state; st in
|
||||
let jump s = s.jump in
|
||||
let cset ({ state; _ } as st) _ =
|
||||
derivative state pos no_der no_zin no_zout no_time; st in
|
||||
let zset ({ state; _ } as st) = function None -> st | Some zinvec ->
|
||||
derivative state pos no_der zinvec no_zout no_time; { st with jump = true } in
|
||||
let cget { state; _ } =
|
||||
derivative state pos no_der no_zin no_zout no_time; pos in
|
||||
HNode { state; fder; fzer; fout; step; reset; jump; cget; cset; zset }, zsize
|
||||
Loading…
Add table
Add a link
Reference in a new issue