Sundials/ML: Connecting OCaml to the Sundials Numeric Solvers

Timothy Bourke
(Inria Paris & École normale supérieure, PSL University)
Jun Inoue
(National Institute of Advanced Industrial Science and Technology)
Marc Pouzet
(Sorbonne Universités, UPMC Univ Paris 06 & École normale supérieure, PSL University & Inria Paris)

This paper describes the design and implementation of a comprehensive OCaml interface to the Sundials library of numeric solvers for ordinary differential equations, differential algebraic equations, and non-linear equations. The interface provides a convenient and memory-safe alternative to using Sundials directly from C and facilitates application development by integrating with higher-level language features, like garbage-collected memory management, algebraic data types, and exceptions. Our benchmark results suggest that the interface overhead is acceptable: the standard examples are rarely twice as slow in OCaml than in C, and often less than 50% slower. The challenges in interfacing with Sundials are to efficiently and safely share data structures between OCaml and C, to support multiple implementations of vector operations and linear solvers through a common interface, and to manage calls and error signalling to and from OCaml. We explain how we overcame these difficulties using a combination of standard techniques such as phantom types and polymorphic variants, and carefully crafted data representations.

In Kenichi Asai and Mark Shinwell: Proceedings ML Family Workshop / OCaml Users and Developers workshops (ML/OCAML 2016), Nara, Japan, September 22-23, 2016, Electronic Proceedings in Theoretical Computer Science 285, pp. 101–130.
Published: 31st December 2018.

ArXived at: bibtex PDF
References in reconstructed bibtex, XML and HTML format (approximated).
Comments and questions to:
For website issues: