72 lines
3.3 KiB
OCaml
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
|