(* The Zelus compiler, version 2.2-dev (2025-08-14-22:1) *) open Ztypes let g = 9.81 let mu = 0.5 type ('d , 'c , 'b , 'a) _ball = { mutable major_68 : 'd ; mutable i_72 : 'c ; mutable x_71 : 'b ; mutable v_70 : 'a } let ball (cstate_97:Ztypes.cstate) = let ball_alloc _ = cstate_97.cmax <- (+) cstate_97.cmax 2; { major_68 = false ; i_72 = (false:bool) ; x_71 = { pos = 42.; der = 0. } ; v_70 = { pos = 42.; der = 0. } } in let ball_step self ((time_67:float) , (v0_66:float)) = ((let (cindex_98:int) = cstate_97.cindex in let cpos_100 = ref (cindex_98:int) in cstate_97.cindex <- (+) cstate_97.cindex 2 ; self.major_68 <- cstate_97.major ; (if cstate_97.major then for i_1 = cindex_98 to 1 do Zls.set cstate_97.dvec i_1 0. done else ((self.x_71.pos <- Zls.get cstate_97.cvec !cpos_100 ; cpos_100 := (+) !cpos_100 1) ; (self.v_70.pos <- Zls.get cstate_97.cvec !cpos_100 ; cpos_100 := (+) !cpos_100 1))) ; (let (result_102:(float * float)) = (if self.i_72 then self.v_70.pos <- v0_66) ; self.i_72 <- false ; (let (a_69:float) = (-.) (( *. ) g (sin self.x_71.pos)) ((/.) (( *. ) mu self.v_70.pos) (cos self.x_71.pos)) in self.v_70.der <- ( *. ) a_69 (cos self.x_71.pos) ; self.x_71.der <- self.v_70.pos ; (self.x_71.pos , self.v_70.pos)) in cpos_100 := cindex_98 ; (if cstate_97.major then (((Zls.set cstate_97.cvec !cpos_100 self.x_71.pos ; cpos_100 := (+) !cpos_100 1) ; (Zls.set cstate_97.cvec !cpos_100 self.v_70.pos ; cpos_100 := (+) !cpos_100 1))) else (((Zls.set cstate_97.dvec !cpos_100 self.x_71.der ; cpos_100 := (+) !cpos_100 1) ; (Zls.set cstate_97.dvec !cpos_100 self.v_70.der ; cpos_100 := (+) !cpos_100 1)))) ; result_102)):float * float) in let ball_reset self = ((self.i_72 <- true ; self.x_71.pos <- 0.):unit) in Node { alloc = ball_alloc; step = ball_step ; reset = ball_reset } type ('c , 'b , 'a) _vdp_c = { mutable major_75 : 'c ; mutable y_77 : 'b ; mutable x_76 : 'a } let vdp_c (cstate_103:Ztypes.cstate) = let vdp_c_alloc _ = cstate_103.cmax <- (+) cstate_103.cmax 2; { major_75 = false ; y_77 = { pos = 42.; der = 0. } ; x_76 = { pos = 42.; der = 0. } } in let vdp_c_step self ((time_74:float) , (mu_73:float)) = ((let (cindex_104:int) = cstate_103.cindex in let cpos_106 = ref (cindex_104:int) in cstate_103.cindex <- (+) cstate_103.cindex 2 ; self.major_75 <- cstate_103.major ; (if cstate_103.major then for i_1 = cindex_104 to 1 do Zls.set cstate_103.dvec i_1 0. done else ((self.y_77.pos <- Zls.get cstate_103.cvec !cpos_106 ; cpos_106 := (+) !cpos_106 1) ; (self.x_76.pos <- Zls.get cstate_103.cvec !cpos_106 ; cpos_106 := (+) !cpos_106 1))) ; (let (result_108:(float * float)) = self.y_77.der <- (-.) (( *. ) (( *. ) mu_73 ((-.) 1. (( *. ) self.x_76.pos self.x_76.pos))) self.y_77.pos) self.x_76.pos ; self.x_76.der <- self.y_77.pos ; (self.x_76.pos , self.y_77.pos) in cpos_106 := cindex_104 ; (if cstate_103.major then (((Zls.set cstate_103.cvec !cpos_106 self.y_77.pos ; cpos_106 := (+) !cpos_106 1) ; (Zls.set cstate_103.cvec !cpos_106 self.x_76.pos ; cpos_106 := (+) !cpos_106 1))) else (((Zls.set cstate_103.dvec !cpos_106 self.y_77.der ; cpos_106 := (+) !cpos_106 1) ; (Zls.set cstate_103.dvec !cpos_106 self.x_76.der ; cpos_106 := (+) !cpos_106 1)))) ; result_108)):float * float) in let vdp_c_reset self = ((self.y_77.pos <- 1. ; self.x_76.pos <- 1.):unit) in Node { alloc = vdp_c_alloc; step = vdp_c_step ; reset = vdp_c_reset } type ('g , 'f , 'e , 'd , 'c , 'b , 'a) _main = { mutable i_96 : 'g ; mutable i_95 : 'f ; mutable major_79 : 'e ; mutable h_94 : 'd ; mutable i_92 : 'c ; mutable h_90 : 'b ; mutable t_80 : 'a } let main (cstate_109:Ztypes.cstate) = let Node { alloc = i_96_alloc; step = i_96_step ; reset = i_96_reset } = ball cstate_109 in let Node { alloc = i_95_alloc; step = i_95_step ; reset = i_95_reset } = vdp_c cstate_109 in let main_alloc _ = cstate_109.cmax <- (+) cstate_109.cmax 1; { major_79 = false ; h_94 = 42. ; i_92 = (false:bool) ; h_90 = (42.:float) ; t_80 = { pos = 42.; der = 0. }; i_96 = i_96_alloc () (* continuous *) ; i_95 = i_95_alloc () (* continuous *) } in let main_step self ((time_78:float) , ()) = ((let (cindex_110:int) = cstate_109.cindex in let cpos_112 = ref (cindex_110:int) in cstate_109.cindex <- (+) cstate_109.cindex 1 ; self.major_79 <- cstate_109.major ; (if cstate_109.major then for i_1 = cindex_110 to 0 do Zls.set cstate_109.dvec i_1 0. done else ((self.t_80.pos <- Zls.get cstate_109.cvec !cpos_112 ; cpos_112 := (+) !cpos_112 1))) ; (let (result_114:unit) = let h_93 = ref (infinity:float) in (if self.i_92 then self.h_90 <- (+.) time_78 0.) ; (let (z_91:bool) = (&&) self.major_79 ((>=) time_78 self.h_90) in self.h_90 <- (if z_91 then (+.) self.h_90 0.01 else self.h_90) ; h_93 := min !h_93 self.h_90 ; self.h_94 <- !h_93 ; self.i_92 <- false ; (let ((x_82:float) , (v_81:float)) = i_96_step self.i_96 (time_78 , 2.953) in let ((x'_83:float) , (y_84:float)) = i_95_step self.i_95 (time_78 , 0.0000000000000001) in (begin match z_91 with | true -> let () = print_endline (String.concat ",\t\t" (List.map string_of_float ((::) ( self.t_80.pos , ( (::) ( x_82 , ( (::) ( v_81 , ( (::) ( x'_83 , ( (::) ( y_84 , ([]))))))))))))) in () | _ -> () end) ; self.t_80.der <- 1. ; ())) in cstate_109.horizon <- min cstate_109.horizon self.h_94 ; cpos_112 := cindex_110 ; (if cstate_109.major then (((Zls.set cstate_109.cvec !cpos_112 self.t_80.pos ; cpos_112 := (+) !cpos_112 1))) else (((Zls.set cstate_109.dvec !cpos_112 self.t_80.der ; cpos_112 := (+) !cpos_112 1)))) ; result_114)):unit) in let main_reset self = ((self.i_92 <- true ; self.t_80.pos <- 0. ; i_96_reset self.i_96 ; i_95_reset self.i_95 ): unit) in Node { alloc = main_alloc; step = main_step ; reset = main_reset }