sig   type ('d, 'k) session = ('d, 'k) Ida_impl.session   type 'a serial_session = (Sundials.RealArray.t, 'a) Ida.session     constraint 'a = [> Nvector_serial.kind ]   type ('data, 'kind) linear_solver = ('data, 'kind) Ida_impl.linear_solver   type 'a serial_linear_solver = (Nvector_serial.data, 'a) Ida.linear_solver     constraint 'a = [> Nvector_serial.kind ]   type 'd double = 'd * 'd   type 'd triple = 'd * 'd * 'd   type ('t, 'd) jacobian_arg =     ('t, 'd) Ida_impl.jacobian_arg = {     jac_t : float;     jac_y : 'd;     jac_y' : 'd;     jac_res : 'd;     jac_coef : float;     jac_tmp : 't;   }   type bandrange = Ida_impl.bandrange = { mupper : int; mlower : int; }   module Dls :     sig       type dense_jac_fn =           (Sundials.RealArray.t Ida.triple, Sundials.RealArray.t)           Ida.jacobian_arg -> Dls.DenseMatrix.t -> unit       val dense :         ?jac:Ida.Dls.dense_jac_fn ->         unit -> [> Nvector_serial.kind ] Ida.serial_linear_solver       val lapack_dense :         ?jac:Ida.Dls.dense_jac_fn ->         unit -> [> Nvector_serial.kind ] Ida.serial_linear_solver       type band_jac_fn =           Ida.bandrange ->           (Sundials.RealArray.t Ida.triple, Sundials.RealArray.t)           Ida.jacobian_arg -> Dls.BandMatrix.t -> unit       val band :         ?jac:Ida.Dls.band_jac_fn ->         Ida.bandrange -> [> Nvector_serial.kind ] Ida.serial_linear_solver       val lapack_band :         ?jac:Ida.Dls.band_jac_fn ->         Ida.bandrange -> [> Nvector_serial.kind ] Ida.serial_linear_solver       val get_work_space :         [> Nvector_serial.kind ] Ida.serial_session -> int * int       val get_num_jac_evals :         [> Nvector_serial.kind ] Ida.serial_session -> int       val get_num_res_evals :         [> Nvector_serial.kind ] Ida.serial_session -> int       val set_dense_jac_fn :         [> Nvector_serial.kind ] Ida.serial_session ->         Ida.Dls.dense_jac_fn -> unit       val clear_dense_jac_fn :         [> Nvector_serial.kind ] Ida.serial_session -> unit       val set_band_jac_fn :         [> Nvector_serial.kind ] Ida.serial_session ->         Ida.Dls.band_jac_fn -> unit       val clear_band_jac_fn :         [> Nvector_serial.kind ] Ida.serial_session -> unit     end   module Sls :     sig       type 'f sparse_jac_fn =           (Sundials.RealArray.t Ida.triple, Sundials.RealArray.t)           Ida.jacobian_arg -> 'Sls.SparseMatrix.t -> unit       module Klu :         sig           val solver_csc :             Sls.SparseMatrix.csc Ida.Sls.sparse_jac_fn ->             int -> [> Nvector_serial.kind ] Ida.serial_linear_solver           val solver_csr :             Sls.SparseMatrix.csr Ida.Sls.sparse_jac_fn ->             int -> [> Nvector_serial.kind ] Ida.serial_linear_solver           type ordering = Amd | ColAmd | Natural           val set_ordering :             [> Nvector_serial.kind ] Ida.serial_session ->             Ida.Sls.Klu.ordering -> unit           val reinit :             [> Nvector_serial.kind ] Ida.serial_session ->             int -> int -> bool -> unit           val get_num_jac_evals :             [> Nvector_serial.kind ] Ida.serial_session -> int         end       module Superlumt :         sig           val solver_csc :             Sls.SparseMatrix.csc Ida.Sls.sparse_jac_fn ->             nnz:int ->             nthreads:int -> [> Nvector_serial.kind ] Ida.serial_linear_solver           type ordering = Natural | MinDegreeProd | MinDegreeSum | ColAmd           val set_ordering :             [> Nvector_serial.kind ] Ida.serial_session ->             Ida.Sls.Superlumt.ordering -> unit           val get_num_jac_evals :             [> Nvector_serial.kind ] Ida.serial_session -> int         end     end   module Spils :     sig       type 'd prec_solve_fn =           ('d, 'd) Ida.jacobian_arg -> '-> '-> float -> unit       type 'd prec_setup_fn = ('Ida.triple, 'd) Ida.jacobian_arg -> unit       type 'd jac_times_vec_fn =           ('Ida.double, 'd) Ida.jacobian_arg -> '-> '-> unit       type ('d, 'k) preconditioner =           ('d, 'k) Ida_impl.SpilsTypes.preconditioner       val prec_none : ('d, 'k) Ida.Spils.preconditioner       val prec_left :         ?setup:'Ida.Spils.prec_setup_fn ->         'Ida.Spils.prec_solve_fn -> ('d, 'k) Ida.Spils.preconditioner       val spgmr :         ?maxl:int ->         ?max_restarts:int ->         ?jac_times_vec:'Ida.Spils.jac_times_vec_fn ->         ('d, 'k) Ida.Spils.preconditioner -> ('d, 'k) Ida.linear_solver       val spbcg :         ?maxl:int ->         ?jac_times_vec:'Ida.Spils.jac_times_vec_fn ->         ('d, 'k) Ida.Spils.preconditioner -> ('d, 'k) Ida.linear_solver       val sptfqmr :         ?maxl:int ->         ?jac_times_vec:'Ida.Spils.jac_times_vec_fn ->         ('d, 'k) Ida.Spils.preconditioner -> ('d, 'k) Ida.linear_solver       val set_gs_type :         ('d, 'k) Ida.session -> Spils.gramschmidt_type -> unit       val set_eps_lin : ('d, 'k) Ida.session -> float -> unit       val set_maxl : ('d, 'k) Ida.session -> int -> unit       val get_work_space : ('d, 'k) Ida.session -> int * int       val get_num_lin_iters : ('d, 'k) Ida.session -> int       val get_num_conv_fails : ('d, 'k) Ida.session -> int       val get_num_prec_evals : ('d, 'k) Ida.session -> int       val get_num_prec_solves : ('d, 'k) Ida.session -> int       val get_num_jtimes_evals : ('d, 'k) Ida.session -> int       val get_num_res_evals : ('d, 'k) Ida.session -> int       val set_preconditioner :         ('d, 'k) Ida.session ->         ?setup:'Ida.Spils.prec_setup_fn ->         'Ida.Spils.prec_solve_fn -> unit       val set_jac_times_vec_fn :         ('d, 'k) Ida.session -> 'Ida.Spils.jac_times_vec_fn -> unit       val clear_jac_times_vec_fn : ('d, 'k) Ida.session -> unit     end   module Alternate :     sig       type ('data, 'kind) linit = ('data, 'kind) Ida.session -> unit       type ('data, 'kind) lsetup =           ('data, 'kind) Ida.session ->           'data Ida.Alternate.lsetup_args -> unit       and 'data lsetup_args = {         lsetup_y : 'data;         lsetup_y' : 'data;         lsetup_res : 'data;         lsetup_tmp : 'data Ida.triple;       }       type ('data, 'kind) lsolve =           ('data, 'kind) Ida.session ->           'data Ida.Alternate.lsolve_args -> 'data -> unit       and 'data lsolve_args = {         lsolve_ewt : 'data;         lsolve_y : 'data;         lsolve_y' : 'data;         lsolve_res : 'data;       }       type ('data, 'kind) callbacks = {         linit : ('data, 'kind) Ida.Alternate.linit option;         lsetup : ('data, 'kind) Ida.Alternate.lsetup option;         lsolve : ('data, 'kind) Ida.Alternate.lsolve;       }       val make :         (('data, 'kind) Ida.session ->          ('data, 'kind) Nvector.t ->          ('data, 'kind) Nvector.t -> ('data, 'kind) Ida.Alternate.callbacks) ->         ('data, 'kind) Ida.linear_solver       val get_cj : ('data, 'kind) Ida.session -> float       val get_cjratio : ('data, 'kind) Ida.session -> float     end   type 'data error_weight_fun = 'data -> 'data -> unit   type ('data, 'kind) tolerance =       SStolerances of float * float     | SVtolerances of float * ('data, 'kind) Nvector.t     | WFtolerances of 'data Ida.error_weight_fun   val default_tolerances : ('data, 'kind) Ida.tolerance   type 'd resfn = float -> '-> '-> '-> unit   type 'd rootsfn = float -> '-> '-> Sundials.RealArray.t -> unit   val init :     ('d, 'kind) Ida.linear_solver ->     ('d, 'kind) Ida.tolerance ->     'Ida.resfn ->     ?varid:('d, 'kind) Nvector.t ->     ?roots:int * 'Ida.rootsfn ->     float ->     ('d, 'kind) Nvector.t -> ('d, 'kind) Nvector.t -> ('d, 'kind) Ida.session   val no_roots : int * 'Ida.rootsfn   module VarId :     sig       val algebraic : float       val differential : float       type t = Algebraic | Differential       val to_float : Ida.VarId.t -> float       val of_float : float -> Ida.VarId.t     end   val set_id : ('d, 'k) Ida.session -> ('d, 'k) Nvector.t -> unit   val set_suppress_alg :     ('d, 'k) Ida.session -> ?varid:('d, 'k) Nvector.t -> bool -> unit   val calc_ic_y :     ('d, 'k) Ida.session -> ?y:('d, 'k) Nvector.t -> float -> unit   val calc_ic_ya_yd' :     ('d, 'k) Ida.session ->     ?y:('d, 'k) Nvector.t ->     ?y':('d, 'k) Nvector.t -> ?varid:('d, 'k) Nvector.t -> float -> unit   val set_nonlin_conv_coef_ic : ('d, 'k) Ida.session -> float -> unit   val set_max_num_steps_ic : ('d, 'k) Ida.session -> int -> unit   val set_max_num_jacs_ic : ('d, 'k) Ida.session -> int -> unit   val set_max_num_iters_ic : ('d, 'k) Ida.session -> int -> unit   val set_max_backs_ic : ('d, 'k) Ida.session -> int -> unit   val set_line_search_ic : ('d, 'k) Ida.session -> bool -> unit   val set_step_tolerance_ic : ('d, 'k) Ida.session -> float -> unit   val get_num_backtrack_ops : ('d, 'k) Ida.session -> int   type solver_result = Success | RootsFound | StopTimeReached   val solve_normal :     ('d, 'k) Ida.session ->     float ->     ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> float * Ida.solver_result   val solve_one_step :     ('d, 'k) Ida.session ->     float ->     ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> float * Ida.solver_result   val get_dky :     ('d, 'k) Ida.session -> ('d, 'k) Nvector.t -> float -> int -> unit   val reinit :     ('d, 'k) Ida.session ->     ?linsolv:('d, 'k) Ida.linear_solver ->     ?roots:int * 'Ida.rootsfn ->     float -> ('d, 'k) Nvector.t -> ('d, 'k) Nvector.t -> unit   val set_tolerances : ('d, 'k) Ida.session -> ('d, 'k) Ida.tolerance -> unit   val set_error_file : ('d, 'k) Ida.session -> Sundials.Logfile.t -> unit   val set_err_handler_fn :     ('d, 'k) Ida.session -> (Sundials.error_details -> unit) -> unit   val clear_err_handler_fn : ('d, 'k) Ida.session -> unit   val set_max_ord : ('d, 'k) Ida.session -> int -> unit   val set_max_num_steps : ('d, 'k) Ida.session -> int -> unit   val set_init_step : ('d, 'k) Ida.session -> float -> unit   val set_max_step : ('d, 'k) Ida.session -> float -> unit   val set_stop_time : ('d, 'k) Ida.session -> float -> unit   val set_max_err_test_fails : ('d, 'k) Ida.session -> int -> unit   val set_max_nonlin_iters : ('d, 'k) Ida.session -> int -> unit   val set_max_conv_fails : ('d, 'k) Ida.session -> int -> unit   val set_nonlin_conv_coef : ('d, 'k) Ida.session -> float -> unit   val set_constraints : ('d, 'k) Ida.session -> ('d, 'k) Nvector.t -> unit   val get_work_space : ('d, 'k) Ida.session -> int * int   val get_num_steps : ('d, 'k) Ida.session -> int   val get_num_res_evals : ('d, 'k) Ida.session -> int   val get_num_lin_solv_setups : ('d, 'k) Ida.session -> int   val get_num_err_test_fails : ('d, 'k) Ida.session -> int   val get_last_order : ('d, 'k) Ida.session -> int   val get_current_order : ('d, 'k) Ida.session -> int   val get_last_step : ('d, 'k) Ida.session -> float   val get_current_step : ('d, 'k) Ida.session -> float   val get_actual_init_step : ('d, 'k) Ida.session -> float   val get_current_time : ('d, 'k) Ida.session -> float   val get_tol_scale_factor : ('d, 'k) Ida.session -> float   val get_err_weights : ('d, 'k) Ida.session -> ('d, 'k) Nvector.t -> unit   val get_est_local_errors :     ('d, 'k) Ida.session -> ('d, 'k) Nvector.t -> unit   type integrator_stats = {     num_steps : int;     num_res_evals : int;     num_lin_solv_setups : int;     num_err_test_fails : int;     last_order : int;     current_order : int;     actual_init_step : float;     last_step : float;     current_step : float;     current_time : float;   }   val get_integrator_stats : ('d, 'k) Ida.session -> Ida.integrator_stats   val print_integrator_stats :     ('d, 'k) Ida.session -> Pervasives.out_channel -> unit   val get_num_nonlin_solv_iters : ('d, 'k) Ida.session -> int   val get_num_nonlin_solv_conv_fails : ('d, 'k) Ida.session -> int   val get_nonlin_solv_stats : ('d, 'k) Ida.session -> int * int   val set_root_direction :     ('d, 'k) Ida.session -> Sundials.RootDirs.d array -> unit   val set_all_root_directions :     ('d, 'k) Ida.session -> Sundials.RootDirs.d -> unit   val set_no_inactive_root_warn : ('d, 'k) Ida.session -> unit   val get_num_roots : ('d, 'k) Ida.session -> int   val get_root_info : ('d, 'k) Ida.session -> Sundials.Roots.t -> unit   val get_num_g_evals : ('d, 'k) Ida.session -> int   exception IllInput   exception TooMuchWork   exception TooMuchAccuracy   exception ErrFailure   exception ConvergenceFailure   exception LinearInitFailure   exception LinearSetupFailure   exception LinearSolveFailure   exception ResFuncFailure   exception FirstResFuncFailure   exception RepeatedResFuncFailure   exception RootFuncFailure   exception ConstraintFailure   exception LinesearchFailure   exception NoRecovery   exception BadEwt   exception BadK   exception BadT   exception IdNotSet end