45 lines
1.8 KiB
OCaml
45 lines
1.8 KiB
OCaml
(* The Zelus compiler, version 2.2-dev
|
|
(2025-06-16-15:24) *)
|
|
open Common
|
|
open Ztypes
|
|
open Solvers
|
|
|
|
type ('c , 'b , 'a) _f =
|
|
{ mutable major_11 : 'c ; mutable sin_13 : 'b ; mutable cos_12 : 'a }
|
|
|
|
let f (cstate_14:Ztypes.cstate) =
|
|
|
|
let f_alloc _ =
|
|
cstate_14.cmax <- (+) cstate_14.cmax 2;
|
|
{ major_11 = false ;
|
|
sin_13 = { pos = 42.; der = 0. } ; cos_12 = { pos = 42.; der = 0. } } in
|
|
let f_step self ((_time_10:float) , ()) =
|
|
((let (cindex_15:int) = cstate_14.cindex in
|
|
let cpos_17 = ref (cindex_15:int) in
|
|
cstate_14.cindex <- (+) cstate_14.cindex 2 ;
|
|
self.major_11 <- cstate_14.major ;
|
|
(if cstate_14.major then
|
|
for i_1 = cindex_15 to 1 do Zls.set cstate_14.dvec i_1 0. done
|
|
else ((self.sin_13.pos <- Zls.get cstate_14.cvec !cpos_17 ;
|
|
cpos_17 := (+) !cpos_17 1) ;
|
|
(self.cos_12.pos <- Zls.get cstate_14.cvec !cpos_17 ;
|
|
cpos_17 := (+) !cpos_17 1))) ;
|
|
(let (result_19) =
|
|
self.cos_12.der <- (~-.) self.sin_13.pos ;
|
|
self.sin_13.der <- self.cos_12.pos ;
|
|
Bigarray.(Array1.of_array Float64 c_layout
|
|
[| self.sin_13.pos; self.cos_12.pos |]) in
|
|
cpos_17 := cindex_15 ;
|
|
(if cstate_14.major then
|
|
(((Zls.set cstate_14.cvec !cpos_17 self.sin_13.pos ;
|
|
cpos_17 := (+) !cpos_17 1) ;
|
|
(Zls.set cstate_14.cvec !cpos_17 self.cos_12.pos ;
|
|
cpos_17 := (+) !cpos_17 1)))
|
|
else (((Zls.set cstate_14.dvec !cpos_17 self.sin_13.der ;
|
|
cpos_17 := (+) !cpos_17 1) ;
|
|
(Zls.set cstate_14.dvec !cpos_17 self.cos_12.der ;
|
|
cpos_17 := (+) !cpos_17 1)))) ; result_19))) in
|
|
|
|
let f_reset self =
|
|
((self.sin_13.pos <- 0. ; self.cos_12.pos <- 1.):unit) in
|
|
Node { alloc = f_alloc; step = f_step ; reset = f_reset }
|