Burkardt's Fortran codes by topic

John Burkardt has published 1400 Fortran 90 codes on his site, arranged in alphabetical order. I have listed the codes by topic to make them easier to find. The topics are

cluster analysis
combinatorics
eigenvalues
graph algorithms
interpolation and approximation
linear algebra
linear equations
nonlinear equations and nonlinear least squares
non-uniform random number generation
numerical methods – general
optimization – one-dimensional
optimization
ordinary differential equations
probability distributions
root-finding
special functions
quadrature
quasirandom number generation
uniform random number generation

Not yet classified are his codes for finite elements, grid generation, calendar calculations, graphics, Fortran tools, and demonstration of Fortran, CUDA, MPI, and OpenMP features.

His codes use free source form, allocatable arrays, kinds, and some other features of Fortran 90. They do not use modules or argument intents.

7 Likes

Would it be possible (in terms of licensing) to turn these codes into one or more fpm packages? It is a tremendous collection of useful stuff!

4 Likes

The pages describing his codes say

The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.

His codes were uploaded to GitHub 9 years ago. I think FPM packages could also be created and uploaded. In 2019 I emailed him at jburkardt at fsu dot edu but it bounced.

Maybe contact this Johannes Gerer instead? See if he knows more about John Burkhardt?

Would be interesting to see how well fpm scales, and if it can handle all packages simultaneously.

Doing a little detective work, I was able to find that John Burkhardt is now
a part time instructor at the University of Pittsburg. See
https://mathematics.pitt.edu/people/john-burkardt

His contact email is listed as: jvb25@pitt.edu

FSU still hosts his old site: John Burkardt's Home Page

In case Burkardt’s site goes down, I downloaded the F90 codes and descriptions using

wget --recursive --page-requisites --no-parent https://people.sc.fsu.edu/~jburkardt/f_src/f_src.html

and then uploaded them to a master branch of my repository. I want to copy the contents of the master branch to main so that users can see the codes by default, but with my minimal knowledge of git and GitHub, I don’t know how.

1 Like

@Beliavsky thanks, I think I’ve discovered his website in the past. I am going to write the author an email and ask if he would be willing to relicense his codes under an MIT or BSD license. That would make it very useful for us to include in stdlib or other packages.

1 Like

From the collected sources there are about 6k files and 4.5m lines (not all Fortran source, though). The largest thing I did in fpm so far were 230 files and 88k lines in 6 fpm projects and it holds up quite okay so far. I found fpm usually only gets slow to start if there is a deeply nested directory structure to retrieve sources from (and of course if there is a lot to compile, but that’s not on fpm). Startup time for fpm is for 230 files around 1.5s already.

I would expect that we will run into several performance issues with so many files, for example we would have to think about incrementally building the archive with ar or using response files because we exceed the limit of command line arguments.

I know John Burkhardt’s side for one of the most famous routines used in computational chemistry: the Lebedev angular integration grid. There are basically two implementations out there, the one from John Burkardt (LGPL-3.0) and the one from Christoph van Wüllen (PD), which are both translations from the original C Implementation of Dimitri Laikov (which to my knowledge has been lost).

Every other implementation (C, Matlab, Python, C++, Java …) of Lebedev integration grids I found so far could be traced back to either John Burkardt’s or Christoph van Wüllen’s implementation. I even seen Python implementations wrapping a C version that was translated from C++, which in turn was based on one of the two Fortran versions. Maybe the CP2K version has a good chance to be independent, but it would still be in Fortran.

3 Likes

Maybe @interkosmos can help find it by contacting the friendly Russians and see if they have a copy on some old Beowulf cluster.

1 Like

At least on Dimitri Laikov’s website the reference implementation linked to the paper (No. 6 in the list) is the Fortran version posted on the CCL. Not sure how many people have actually seen the C code, also I’m not sure if there is much to gain in reviving it.

It would be more important to refactor the code to drop the usage of computed gotos and assumed-size arrays. I got rid of the computed goto in my version but the assumed-size arrays are just to practical here.

I stand corrected, there is a version of the C implementation around, not the original one, but probably as close as it gets: https://people.sc.fsu.edu/~jburkardt/c_src/sphere_lebedev_rule/sphere_lebedev_rule.c