feat: re-hide inner states, properly reset sundials
This commit is contained in:
parent
80d4aef23f
commit
76dc461d44
14 changed files with 162 additions and 253 deletions
|
|
@ -3,16 +3,14 @@ open Hsim.Types
|
|||
open Hsim.Solver
|
||||
open Zls
|
||||
|
||||
module Functional : Csolver.CsolverC =
|
||||
module Functional =
|
||||
struct
|
||||
type ('state, 'vec) state = { state: 'state; vec: 'vec }
|
||||
type session = Odexx.Ode45.t
|
||||
type vec = carray
|
||||
|
||||
let csolve : ((session, vec) state, carray, carray) csolver_c =
|
||||
let csolve : (carray, carray) csolver_c =
|
||||
let open Odexx.Ode45 in
|
||||
|
||||
let init _ =
|
||||
let state =
|
||||
let v = Zls.cmake 0 in
|
||||
let state = initialize (fun _ _ _ -> ()) (vec v) in
|
||||
set_stop_time state 1.0; { state; vec=v } in
|
||||
|
|
@ -32,19 +30,17 @@ module Functional : Csolver.CsolverC =
|
|||
|
||||
let copy { state; vec } = { state; vec } in
|
||||
|
||||
DNodeC { init; step; reset; copy }
|
||||
DNodeC { state; step; reset; copy }
|
||||
end
|
||||
|
||||
module InPlace : Csolver.CsolverC =
|
||||
module InPlace =
|
||||
struct
|
||||
type ('state, 'vec) state = { mutable state: 'state; mutable vec : 'vec }
|
||||
type session = Odexx.Ode45.t
|
||||
type vec = carray
|
||||
|
||||
let csolve : ((session, vec) state, carray, carray) csolver_c =
|
||||
let csolve : (carray, carray) csolver_c =
|
||||
let open Odexx.Ode45 in
|
||||
|
||||
let init _ =
|
||||
let state =
|
||||
let v = Zls.cmake 0 in
|
||||
let state = initialize (fun _ _ _ -> ()) (vec v) in
|
||||
set_stop_time state 1.0;
|
||||
|
|
@ -65,5 +61,5 @@ module InPlace : Csolver.CsolverC =
|
|||
let copy { state; vec } =
|
||||
{ state = copy state; vec = Zls.copy vec } in
|
||||
|
||||
DNodeC { init; reset; step; copy }
|
||||
DNodeC { state; reset; step; copy }
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue