In my free time I like to work on scientific coding projects in Fortran.
Fortran interfaces
Fortran 2003 added features for interoperability with the C programming language. These can be accesed through the intrinsic iso_c_binding
module and allow smooth interfacing between the two languages for a certain set of interoperable types. This way Fortran programmers can gain access to the numerous libraries written in C/C++ and vice versa.
Using the C-Fortran interoperability I have written Fortran interfaces for the following (scientific) software libraries:
- nlopt: library for nonlinear optimization
- METIS: Serial Graph Partitioning and Fill-reducing Matrix Ordering
- FLANN: Fast Library for Approximate Nearest Neighbors (original library here)
Legacy code
- Algorithm 494: PDEONE is a subroutine developed by Sincovec and Madsen in 1975 for solving one-dimensional systems of PDEs using the method of lines. Second-order centered difference approximations are used to discretize the spatial variable and yield a system of ordinary differential equations that can be integrated in time with a robust ODE integrator (like LSODE).
- Algorithm 675: Fortran subroutines for computing the square root covariance filter and square root information filter in dense and hessenberg forms; codes are provided for the square root covariance filter and the square root information filter.
- Quadrature routines from Stroud & Secrest - An updated version of the routines from the book Gaussian quadrature formulas by A. H. Stroud and D. Secrest published in 1966. Includes routines for generatics the knots and weights of the classic Jacobi, Laguerre, and Hermite quadratures.
- Least squares solvers from Lawson & Hanson - This package contains the routines from the book Solving least squares problems by Lawson and Hanson (1995). Most of the routines date back to the 1974 version of the book and were developed for use at the NASA Jet Propulsion Laboratory in California, Pasadena. I have tried to modernize the interfaces of most of the subroutines. The non-negative least squares solver
nnls
appears also inscipy.optimize.nnls
.