sig
  type parallel_session =
      (Nvector_parallel.data, Nvector_parallel.kind) Cvode.session
  type parallel_preconditioner =
      (Nvector_parallel.data, Nvector_parallel.kind)
      Cvode.Spils.preconditioner
  type bandwidths =
    Cvode_impl.CvodeBbdTypes.bandwidths = {
    mudq : int;
    mldq : int;
    mukeep : int;
    mlkeep : int;
  }
  type local_fn =
      float -> Nvector_parallel.data -> Nvector_parallel.data -> unit
  type comm_fn = float -> Nvector_parallel.data -> unit
  val prec_left :
    ?dqrely:float ->
    Cvode_bbd.bandwidths ->
    ?comm:Cvode_bbd.comm_fn ->
    Cvode_bbd.local_fn -> Cvode_bbd.parallel_preconditioner
  val prec_right :
    ?dqrely:float ->
    Cvode_bbd.bandwidths ->
    ?comm:Cvode_bbd.comm_fn ->
    Cvode_bbd.local_fn -> Cvode_bbd.parallel_preconditioner
  val prec_both :
    ?dqrely:float ->
    Cvode_bbd.bandwidths ->
    ?comm:Cvode_bbd.comm_fn ->
    Cvode_bbd.local_fn -> Cvode_bbd.parallel_preconditioner
  val reinit :
    Cvode_bbd.parallel_session -> ?dqrely:float -> int -> int -> unit
  val get_work_space : Cvode_bbd.parallel_session -> int * int
  val get_num_gfn_evals : Cvode_bbd.parallel_session -> int
end