functor
  (A : sig
         type local_data
         val get : Nvector_parallel.MakeOps.local_data -> int -> float
         val set :
           Nvector_parallel.MakeOps.local_data -> int -> float -> unit
         val fill : Nvector_parallel.MakeOps.local_data -> float -> unit
         val make : int -> float -> Nvector_parallel.MakeOps.local_data
         val clone :
           Nvector_parallel.MakeOps.local_data ->
           Nvector_parallel.MakeOps.local_data
         val length : Nvector_parallel.MakeOps.local_data -> int
       end)
  ->
  sig
    type t = A.local_data * int * Mpi.communicator
    val clone : t -> t
    val linearsum : float -> t -> float -> t -> t -> unit
    val const : float -> t -> unit
    val prod : t -> t -> t -> unit
    val div : t -> t -> t -> unit
    val scale : float -> t -> t -> unit
    val abs : t -> t -> unit
    val inv : t -> t -> unit
    val addconst : t -> float -> t -> unit
    val dotprod : t -> t -> float
    val maxnorm : t -> float
    val wrmsnorm : t -> t -> float
    val min : t -> float
    val compare : float -> t -> t -> unit
    val invtest : t -> t -> bool
    val wl2norm : t -> t -> float
    val l1norm : t -> float
    val wrmsnormmask : t -> t -> t -> float
    val constrmask : t -> t -> t -> bool
    val minquotient : t -> t -> float
    val space : t -> int * int
    val getlength : t -> int
    val print : ?logfile:Sundials.Logfile.t -> t -> unit
    val linearcombination : Sundials.RealArray.t -> t array -> t -> unit
    val scaleaddmulti :
      Sundials.RealArray.t -> t -> t array -> t array -> unit
    val dotprodmulti : t -> t array -> Sundials.RealArray.t -> unit
    val linearsumvectorarray :
      float -> t array -> float -> t array -> t array -> unit
    val scalevectorarray : Sundials.RealArray.t -> t array -> t array -> unit
    val constvectorarray : float -> t array -> unit
    val wrmsnormvectorarray :
      t array -> t array -> Sundials.RealArray.t -> unit
    val wrmsnormmaskvectorarray :
      t array -> t array -> t -> Sundials.RealArray.t -> unit
    val scaleaddmultivectorarray :
      Sundials.RealArray.t ->
      t array -> t array array -> t array array -> unit
    val linearcombinationvectorarray :
      Sundials.RealArray.t -> t array array -> t array -> unit
    module Local :
      sig
        val dotprod : t -> t -> float
        val maxnorm : t -> float
        val min : t -> float
        val l1norm : t -> float
        val invtest : t -> t -> bool
        val constrmask : t -> t -> t -> bool
        val minquotient : t -> t -> float
        val wsqrsum : t -> t -> float
        val wsqrsummask : t -> t -> t -> float
        val dotprodmulti : t -> t array -> Sundials.RealArray.t -> unit
        val dotprodmulti_allreduce : t -> Sundials.RealArray.t -> unit
      end
  end