feat: lift runtime into language, start of zelus 2024 compatibility
This commit is contained in:
parent
dc8d941b84
commit
ffc583985a
37 changed files with 1154 additions and 143 deletions
51
exm/zelus/cradle/cradle.zls
Normal file
51
exm/zelus/cradle/cradle.zls
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
|
||||
let mp6 = -. (3.1416 /. 6.)
|
||||
let g = 9.80665
|
||||
let l = 0.2
|
||||
|
||||
let pi0 = mp6
|
||||
let pi1 = 0.
|
||||
let pi2 = 0.
|
||||
|
||||
let acc x = -. g /. l *. (sin x)
|
||||
|
||||
let hybrid cradle2() =
|
||||
let rec der p0 = v0 init pi0 reset h01 -> last p1
|
||||
and der v0 = acc(p0) init 0.0 reset h01 -> last v1
|
||||
and der p1 = v1 init pi1 reset h01 -> last p0
|
||||
and der v1 = acc(p1) init 0.0 reset h01 -> last v0
|
||||
and h01 = up(last p0 -. last p1)
|
||||
and init h = -0.1
|
||||
and present h01 -> do h = -1.0 *. last h done
|
||||
else do der h = 0.0 done
|
||||
in (h, (p0, v0 /. 10.) , (p1, v1 /. 10.))
|
||||
|
||||
let hybrid cradle3() =
|
||||
let rec der p0 = v0 init pi0 reset h01 -> last p1
|
||||
and der v0 = acc(p0) init 0.0 reset h01 -> last v1
|
||||
and der p1 = v1 init pi1 reset h01 -> last p0 | h12 -> last p2
|
||||
and der v1 = acc(p1) init 0.0 reset h01 -> last v0 | h12 -> last v2
|
||||
and der p2 = v2 init pi2 reset h12 -> last p1
|
||||
and der v2 = acc(p2) init 0.0 reset h12 -> last v1
|
||||
and h01 = up(last p0 -. last p1)
|
||||
and h12 = up(last p1 -. last p2)
|
||||
and init h1 = -0.1
|
||||
and present h01 -> do h1 = -1.0 *. last h1 done else do der h1 = 0.0 done
|
||||
and init h2 = -0.1
|
||||
and present h12 -> do h2 = -1.0 *. last h2 done else do der h2 = 0.0 done
|
||||
in (p0, p1, p2, h1, h2)
|
||||
|
||||
let node print(v, s) =
|
||||
Format.printf "% .10e%s" v s
|
||||
|
||||
let hybrid main() =
|
||||
let der t = 1.0 init 0.0 in
|
||||
let (p0, p1, p2, h1, h2) = cradle3() in
|
||||
present (period(0.05)) -> (
|
||||
print(t, "\t");
|
||||
print(p0, "\t");
|
||||
print(p1, "\t");
|
||||
print(p2, "\t");
|
||||
print(h1, "\t");
|
||||
print(h2, "\n")
|
||||
); ()
|
||||
17
exm/zelus/cradle/dune
Normal file
17
exm/zelus/cradle/dune
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
(env
|
||||
(dev
|
||||
(flags
|
||||
(:standard -w -a))))
|
||||
|
||||
(rule
|
||||
(targets cradle.ml cradle.zci format.zci)
|
||||
(deps
|
||||
(:zl cradle.zls)
|
||||
(:zli format.zli))
|
||||
(action
|
||||
(run zeluc %{zli} %{zl})))
|
||||
|
||||
(executable
|
||||
(public_name cradle.exe)
|
||||
(name main)
|
||||
(libraries std))
|
||||
2
exm/zelus/cradle/format.zli
Normal file
2
exm/zelus/cradle/format.zli
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
|
||||
val printf : string -> float -> string -> unit
|
||||
30
exm/zelus/cradle/main.ml
Normal file
30
exm/zelus/cradle/main.ml
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
|
||||
open Std
|
||||
|
||||
let input2 _ = ()
|
||||
let output2 (now, (h, (p0, v0), (p1, v1))) =
|
||||
Format.printf "%.10e\t%.10e\t%.10e\n" now p0 p1
|
||||
|
||||
let input3 _ = ()
|
||||
let output3 (now, (p0, p1, p2, h1, h2)) =
|
||||
Format.printf "%.10e\t%.10e\t%.10e\t%.10e\t%.10e\t%.10e\n"
|
||||
now p0 (p1 +. 1.0) (p2 +. 2.0) (h1 +. 3.0) (h2 +. 4.0)
|
||||
|
||||
let input_main _ = ()
|
||||
let output_main (now, ()) = ()
|
||||
|
||||
let three = ref false
|
||||
let main = ref false
|
||||
|
||||
let toggle y n () =
|
||||
y := true;
|
||||
List.iter (fun n -> n := false) n
|
||||
|
||||
let () =
|
||||
Runtime.register_args [
|
||||
"-three", Arg.Unit (toggle three [main]), "\tUse the third model";
|
||||
"-main", Arg.Unit (toggle main [three]), "\tUse the main model";
|
||||
];
|
||||
if !main then Runtime.go input_main Cradle.main output_main
|
||||
else if !three then Runtime.go input3 Cradle.cradle3 output3
|
||||
else Runtime.go input2 Cradle.cradle2 output2
|
||||
12
exm/zelus/cradle/ztypes.ml
Normal file
12
exm/zelus/cradle/ztypes.ml
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
include Std
|
||||
include Ztypes
|
||||
include Solvers
|
||||
|
||||
module type IGNORE = sig end
|
||||
module Defaultsolver : IGNORE = struct end
|
||||
|
||||
module Zlsrun = struct
|
||||
module Make (S : IGNORE) = struct
|
||||
let go _ = ()
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue