hsim/exm/zelus_2024/ball/ball.ml

72 lines
3.3 KiB
OCaml

(* The Zelus compiler, version 2024-dev
(2025-06-4-15:49) *)
open Ztypes
type ('c, 'b, 'a) machine_17 =
{ mutable _up_16: 'c;
mutable y'_12: 'b;
mutable y_11: 'a }
let (ball) =
let ball_10 =
let machine_17 cstate_18 =
let machine_17_alloc _ =
cstate_18.cmax <- (+) cstate_18.cmax 2;
cstate_18.zmax <- (+) cstate_18.zmax 1;
{ _up_16 = { zin = false; zout = 1. };
y'_12 = { pos = (-1.); der = 0. };
y_11 = { pos = (-1.); der = 0. } } in
let machine_17_step self _ =
((let cindex_19 = cstate_18.cindex in
let cpos_21 = ref (cindex_19:int) in
let zindex_20 = cstate_18.zindex in
let zpos_22 = ref (zindex_20:int) in
cstate_18.cindex <- (+) cstate_18.cindex 2;
cstate_18.zindex <- (+) cstate_18.zindex 1;
(if cstate_18.major
then
for i_1 = cindex_19 to 1
do Zls.set cstate_18.dvec i_1 0. done
else
((self.y'_12.pos <- Zls.get cstate_18.cvec !cpos_21;
cpos_21 := (+) !cpos_21 1);
(self.y_11.pos <- Zls.get cstate_18.cvec !cpos_21;
cpos_21 := (+) !cpos_21 1)));
(let result_23 =
self._up_16.zout <- (~-.) self.y_11.pos;
self.y'_12.der <- (-9.81);
(let z_13 = self._up_16.zin in
let lx_15 = self.y'_12.pos in
(match z_13 with
| true ->
let v_14 = lx_15 in
self.y'_12.pos <- ( *. ) (-0.8) v_14 | _ -> () );
self.y_11.der <- self.y'_12.pos;
(self.y_11.pos, self.y'_12.pos, z_13)) in
cpos_21 := cindex_19;
(if cstate_18.major
then
(((Zls.set cstate_18.cvec !cpos_21 self.y'_12.pos;
cpos_21 := (+) !cpos_21 1);
(Zls.set cstate_18.cvec !cpos_21 self.y_11.pos;
cpos_21 := (+) !cpos_21 1));
((self._up_16.zin <- false)))
else
(((self._up_16.zin <- Zls.get_zin cstate_18.zinvec
!zpos_22;
zpos_22 := (+) !zpos_22 1));
zpos_22 := zindex_20;
((Zls.set cstate_18.zoutvec !zpos_22 self._up_16.zout;
zpos_22 := (+) !zpos_22 1));
((Zls.set cstate_18.dvec !cpos_21 self.y'_12.der;
cpos_21 := (+) !cpos_21 1);
(Zls.set cstate_18.dvec !cpos_21 self.y_11.der;
cpos_21 := (+) !cpos_21 1)))); result_23)):(float *
float *
bool)) in
let machine_17_reset self =
((self.y_11.pos <- 50.; self.y'_12.pos <- 0.):unit) in
Node { alloc = machine_17_alloc; step = machine_17_step;
reset = machine_17_reset } in
machine_17 in
ball_10