31 lines
1.3 KiB
OCaml
31 lines
1.3 KiB
OCaml
open Ztypes
|
|
open Zls
|
|
|
|
(* simulation (continuous) function *)
|
|
let main =
|
|
let cstate =
|
|
{ dvec = cmake 0; cvec = cmake 0; zinvec = zmake 0; zoutvec = cmake 0;
|
|
cindex = 0; zindex = 0; cend = 0; zend = 0; cmax = 0; zmax = 0;
|
|
major = false; horizon = 0.0 } in
|
|
let Node { alloc = alloc; step = hstep; reset = reset } = Ball.main cstate in
|
|
let step mem cvec dvec zin t =
|
|
cstate.major <- true; cstate.cvec <- cvec; cstate.dvec <- dvec;
|
|
cstate.cindex <- 0; cstate.zindex <- 0; cstate.horizon <- infinity;
|
|
hstep mem (t, ()) in
|
|
let derivative mem cvec dvec zin zout t =
|
|
cstate.major <- false; cstate.cvec <- cvec; cstate.dvec <- dvec;
|
|
cstate.zinvec <- zin; cstate.zoutvec <- zout; cstate.cindex <- 0;
|
|
cstate.zindex <- 0; ignore (hstep mem (t, ())) in
|
|
let crossings mem cvec zin zout t =
|
|
cstate.major <- false; cstate.cvec <- cvec; cstate.zinvec <- zin;
|
|
cstate.zoutvec <- zout; cstate.cindex <- 0; cstate.zindex <- 0;
|
|
ignore (hstep mem (t, ())) in
|
|
let maxsize mem = cstate.cmax, cstate.zmax in
|
|
let csize mem = cstate.cend in
|
|
let zsize mem = cstate.zend in
|
|
let horizon mem = cstate.horizon in
|
|
Hsim { alloc; step; reset; derivative; crossings; maxsize; csize; zsize;
|
|
horizon };;
|
|
(* instantiate a numeric solver *)
|
|
module Runtime = Zlsrun.Make (Defaultsolver)
|
|
let _ = Runtime.go main
|