Stdlib: List of popular open source Fortran projects

Created on 20 Dec 2019  Â·  42Comments  Â·  Source: fortran-lang/stdlib

In order to more easily judge how Fortran developers actually use Fortran in real production codes (this can be useful for issues like #25), let's maintain a list of popular open source Fortran projects here, sorted by the number of stars at GitHub (in parentheses).

The list was moved to a Wiki:

https://github.com/fortran-lang/stdlib/wiki/List-of-popular-open-source-Fortran-projects

Most helpful comment

I don't want to maintain the list of projects at the wiki anymore. I want to port all of them to https://fortran-lang.org/packages/ and remove the wiki. We can implement sorting by stars at https://fortran-lang.org/packages/ or any other statistics that we need.

All 42 comments

Everybody, can you please help find Fortran projects at GitHub that have more than let's say ~30 stars, so that we have a complete list above? I will update the issue description. GitHub makes this really hard to find for some reason.

Maybe activate the wiki for this?

Also I feel obliged to link MOM6: https://github.com/NOAA-GFDL/MOM6

(The GFDL framework almost hits the threshold at 29: https://github.com/NOAA-GFDL/FMS)

I am moving this to a wiki so that we can all edit. Give me a second.

I added a few more of mine (neural-fortran, tsunami, tcp-client-server).

Awesome Fortran is a useful list.

Done: https://github.com/fortran-lang/stdlib/wiki/List-of-popular-open-source-Fortran-projects

@marshallward, @jacobwilliams would you mind putting the codes you mentioned into the wiki please?

@marshallward We can lower the threshold. I set it at 30 to make the number of codes manageable, but it looks like there is not that many. We can lower it to 25 or 20.

@milancurcic there is lots of Fortran codes out there, but if it is not on GitHub, not even a GitHub mirror (like I've done for LFortran), then I feel those codes are pretty much not developed anymore (or not open source). So restricting to only codes at GitHub I think is a proxy for codes that are "modern enough". (There are some codes however that didn't get a single commit in 5 or more years...)

I couldn't see a way to edit the wiki, might need a permissions change?

@marshallward try again, I made the wiki editable by any GitHub user.

Thanks, working now.

I found a nice list here: https://github.com/topics/fortran, again, not all the codes, but quite a few listed above are there plus more. Let's keep the number of stars at 29 or more, and we'll see how many codes we get.

I extracted all projects that I was able to find so far. The github page https://github.com/topics/fortran as well as the various searches do not actually show all the projects for some reason, but I think the list is starting to get quite accurate. Here is some statistics:

# of contributors, # of projects
1 - 10
2 - 5
3 - 5
4 - 4
5 - 5
6 - 2
7 - 1
8 - 2
9 - 0
10 - 0
...
13 - 1
14 - 1
22 - 1
23 - 1
25 - 1
27 - 1
30 - 1
41 - 2
43 - 1
46 - 1

Total: 45

In particular, if we require at least 3 contributors to exclude one man projects, then there are only ~ 30 projects with at least 29 stars. And there is only 11 projects with more than 8 contributors.

Don't know if its still actively maintained but Fortranwiki (fortranwiki.org/fortran/show/HomePage)
used to have some lists of codes/projects broken down by application type etc. I would guess some of the links though are stale or broken.

@rweed thanks! You are right, the links there are broken, but the names of packages are correct. I will go through it soon. I already found one (it's on GitLab, not GitHub, that's why I didn't find it before): https://gitlab.com/octopus-code/octopus, which looks healthy. For LFortran, the GitLab / GitHub star ratio is 52 to 113. So Octopus has 22 stars on GitLab, so that could have been something like 50 on GitHub, which is not bad.

There will be more codes like that, no doubt.

I added over a dozen more projects, some of them heavy-hitters.

Some comments:

  • As Ondrej mentioned, stars aren't indicative of how popular or used a project is. Instead, stars are a measure of how much a project page was visited + how interesting or cool it seems. Some of my projects (functional-fortran, tcp-client-server) have many stars for the Fortran standard (hur hur), but that is only because I posted them on Hacker News and they happened to be upvoted and discussed, and brought in traffic.
  • Most big Fortran projects, including the ones on this list, are developed and maintained at big labs. The GitHub repo is in many cases only a mirror (WRF, FV3-GFS, ROMS, probably many others). Such repos may have one or few GitHub contributors, but behind the curtains have contributions from dozens or hundreds of people.
  • Most big Fortran projects started many years ago (before git or GitHub), and many simply didn't transition to development on GitHub yet, and likely won't soon.
  • People that program Fortran (scientists, engineers, and a few oddballs) are a somewhat different culture from web developers that follow the latest trends in technology. Communities that started early on GitHub (10 years ago) had much more runway to grow. When I first started datetime-fortran in 2013, there weren't this many Fortran projects on GitHub.

@milancurcic thank you so much for adding more projects --- indeed some of them are doing well.
Can you add your comments into the Wiki?

This has been very helpful to get an overview how the opensource Fortran landscape looks like.

Interesting that fortran-machine (web server) by @mapmeld has Arjen's flibs as a dependency (for the CGI and SQL pieces if I recall correctly). That dependency could be stdlib for some similar future project.

Relevant article by Nick from few years back: https://medium.com/@mapmeld/fortran-culture-on-github-a257dd595061

(Edit: Both have been added to Wiki)

Are these packages also candidates?
HANDE (QMC code)
https://github.com/hande-qmc/hande
DFTB+ (density functional tight-binding code)
https://github.com/dftbplus/dftbplus

Yes! Would you mind adding it in please?

On Fri, Dec 20, 2019, at 7:10 PM, septcolor wrote:

Is this also a candidate? HANDE (QMC code)
https://github.com/hande-qmc/hande

—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/fortran-lang/stdlib/issues/28?email_source=notifications&email_token=AAAFAWGC3EJ6H7Z6BTS3MTLQZV3INA5CNFSM4J6CBZX2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEHOS2XY#issuecomment-568143199, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAAFAWEF5CV65WQI7SILF3DQZV3INANCNFSM4J6CBZXQ.

These codes all have more than 30 stars and are not yet in the list. Some have only one or two contributors though.

Node-Fortran
https://github.com/IonicaBizau/node-fortran
https://github.com/IonicaBizau/node.fortran
DBCSR: Distributed Block Compressed Sparse Row matrix library
https://github.com/cp2k/dbcsr
Starlink software collection:
https://github.com/Starlink/starlink
Particle-in-Cell Skeleton Codes
https://github.com/UCLA-Plasma-Simulation-Group/PIC-skeleton-codes
CompDam - Deformation Gradient Decomposition (DGD)
https://github.com/nasa/CompDam_DGD
Flexi - Open Source High-Order Unstructured Discontinuous Galerkin Fluid Dynamics Solver
https://github.com/flexi-framework/flexi
specfem3d
https://github.com/geodynamics/specfem3d
kdtree2
https://github.com/jmhodges/kdtree2
ADflow - finite volume RANS solver tailored for gradient-based aerodynamic design optimization
https://github.com/mdolab/adflow
clfortran - Open source implementation of a Fortran interface to Khronos OpenCL API
https://github.com/cass-support/clfortran
MODFLOW6
https://github.com/MODFLOW-USGS/modflow6
Nek5000
https://github.com/Nek5000/Nek5000
fds - Fire Dynamics Simulator
https://github.com/firemodels/fds
ElmerFEM
https://github.com/ElmerCSC/elmerfem
arpack-ng
https://github.com/opencollab/arpack-ng
GALAHAD - A library of modern Fortran modules for nonlinear optimization
https://github.com/ralna/GALAHAD
fgsl - Fortran interface to the GNU Scientific Library
https://github.com/reinh-bader/fgsl
FortranPatterns - Popular design patterns implemented in Fortran
https://github.com/farhanjk/FortranPatterns
LaGriT - Los Alamos Grid Toolbox
https://github.com/lanl/LaGriT
fluidity
https://github.com/FluidityProject/fluidity
fortranlib
https://github.com/astrofrog/fortranlib
ogpf - Object based interface to GnuPlot from Fortran 2003, 2008 and later
https://github.com/kookma/ogpf
coretran
https://github.com/leonfoks/coretran
sigma - Fortran 2003 library for sparse matrix algebra
https://github.com/danshapero/sigma
aenet - Atomic interaction potentials based on artificial neural networks
https://github.com/atomisticnet/aenet
IAMR - A parallel, adaptive mesh refinement (AMR) code
https://github.com/AMReX-Codes/IAMR
PoisFFT - Free parallel fast Poisson solver
https://github.com/LadaF/PoisFFT
OpenSWPC
https://github.com/tktmyd/OpenSWPC

Yes! Nek5000, how could I've missed that! :)

@ivan-pi Can you please add these to the wiki?

It will be painful to sort them in the right positions. I'll see what I can do.

Edit: The list is updated! With the help of some Sublime multi-cursor magic it turned out to be easier than expected.

@ivan-pi thanks a lot for this! The list looks a lot better than when I first started. It's revealing to see these different Fortran projects and see how people use Fortran.

From what I can see it is mostly codes for computational chemistry, sparse and dense linear algebra (including eigenvalue problems), computational fluid dynamics and solid mechanics, computational seismology, reservoir simulation, nonlinear optimization, and the rest are general Fortran utilities (file I/O, containers, patterns, plotting...).

Obviously we have LOTs of open source/public domain software to choose from, I think we should stick to the things a standard library to support Fortran programming should be focused on. That is what functions/capabilities that don't current exist in Fortran that Matlab, NumPy/SciPy, and the C++ STL provide that reduce the amount of code you need to generate a CFD, FEM, sparse/dense matrix code etc. My priority list is as follows

Containers/ADTs
I would draw (because I already have) from Ruegers FTL project, Arjen's FLIBS, and implementation ideas outlined in a few books. However, if someone can point to a better approach I'm all in on that to.

Commonly used mathematical/statistical functions not current part of Fortran
Things like mean and standard deviations. Probability Density Functions, Cumlative Distribution Functions (CDF) and their siblings, normal (Gaussian) distributions, (ie better support for random distributions and perturbations), factorials, and binomial coefficients and a host of other functions in this area. A feature comparison of what is supported in Fortran and what NumPi/SciPy provides would probably be a good first step. We can then cherry pick all of the current and old implementations of these functions as candidates for the library.

Better support for creating, modifying, and manipulating arrays and matrices (which I remind everyone are not the same thing. one is a container, the other is a mathematical entity)
These include things like identity matrix (eye), linspace, meshgrid, the ability to generate real or integer sequences based on an fixed increment, dynamically adding rows and columns to a matrix
dynamically, sorting rows and/or columns, and a form of reallocate or resize that wraps MOVE_ALLOC to allow a dynamic reallocations capability.

Finally, sorting.
There are lots of implementations of all most commonly used sorting algorithms (quicksort, mergesort, heapsort, hashsort etc). The trick is to find a way to make them generic.

@rweed would you mind posting your last comment into #1? The issue here is about looking at the Fortran landscape of what (opensource) projects use Fortran, so that we can see what conventions they use and these projects can end up depending on stdlib. Your comment seemed to indicate that we can choose these projects as dependencies for stdlib, which is not the intention, and that's why I think your comment belongs into #1.

@certik no problem. I just thought when we start listing CFD codes etc we were straying from what I thought the intent of the library was. My comments were an attempt to get the discussion focused back on what I thought the purpose of the library was.

I think the intent of the library, as discussed in #1, is to provide basic functionality, for example along the lines of your comment, so that stdlib can be used in codes such as listed in this issue #28, including the CFD codes.

I added stdlib to the list. ;) With 47 stars and 7 contributors, we now belong there too.

Do you want non-github open-source fortran projects listed?

Yes! But only if we can reasonably estimate to have over 30 stars if they were on github.

On Sat, Jan 11, 2020, at 10:39 AM, Robert Farmer wrote:

Do you want non-github open-source fortran projects listed?

—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/fortran-lang/stdlib/issues/28?email_source=notifications&email_token=AAAFAWE7WPLJMSIWAY2J6L3Q5H73RA5CNFSM4J6CBZX2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEIWG7SQ#issuecomment-573337546, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAAFAWFJJJWZ6O7REBXX74DQ5H73RANCNFSM4J6CBZXQ.

Yeah. The 30 stars on github is reasonable in a lot of ways, but some of those sites have been up
for years. I have a fledgling one whose goal was exactly to promote something like the functionality
of a standard utility library that only has a few stars that I still thought was a good fit as a seed for discussion in this project, which I would like to move towards contributing to.

Previously I was trying to start a group of github repositories with a similar goal relatively recently but I was primarily concentrating on setting up an automated process to extract codes from my heavily personalized development environment to a simple release format ( hopefully requiring others to have no need for more than a modern Fortran compiler and make(1)) so I could reduce the issues I had with putting something on github.

After this project started I wanted to switch to contributing to it and felt some of the materials I started were a good fit at least as part of discussion points about various utilities, various documentation methods, what APIs should look like, what compiler requirements should be for
experimental codes ... (ie good for part 2 and 3).

But, since I do not have thirty stars, is there still an approved way to have others give the materials a look and let me know if there is anything there that would be a good candidate for moving to this project?

after looking at this sites' documenation:

I started by opening an issue here for a topic covered by one of the modules I thought would be a
simple starting point; but that did not seem to elicit any response(but I'm not sure I have figured out how this all works yet).

So before surrendering I thought I would try directly eliciting feedback. Does anyone find anything worth discussing at

https://github.com/urbanjost?tab=repositories

So If no one finds anything interesting there that's fine and I can do my own thing; but there are some things on date and time, strings, and a POSIX interface I have seen discussed here that I
thought were a good fit.

Mine has some basic PD self-contained modules that anyone here can feel free to use for anything they want for discussion or use. The larger GPF development repository has some mixed MIT, GNU, ... licensing in it so even though it has a lot more stuff in it, it is not 100% unencumbered at this point (working on that).

So for something that does not meet the "github thirty stars" criteria should I have

  • waited for 30 stars before asking anyone to look at this,

    • try to start related issues here from scratch and just use my stuff as anyone would if it was not even on github,

  • make a one-time solicitation to have it looked over? There does not seem to be an "official" way to
    ask for something not meeting the gold standard to be evaluated.
  • try contributing my stuff to one of the sites that has 30 stars to piggyback on a more successful project
    -???

This project has all the goals and more collaborators and stars than I could reasonably hope for at this point, so I was basically hoping to contribute any generic functions to this project and just leave mine for some esoteric stuff that would not fit into a standard library.

@urbanjost thanks for the info. Many of your things are of interest for stdlib.
You could probably start an issue similar to #103 or #104, and listing all the things that could contribute to stdlib

@urbanjost I agree with @jvdp1. Much of what you have is in scope in my opinion, and the issue you opened for dates and times (#106) is the correct approach. Don't worry if there hasn't been feedback yet. I will write there soon and request feedback from others. We should handle dates and times with stdlib, we just need to work toward an API that most of the community will agree upon.

The 30 stars mentioned in this thread is arbitrary and meant only to keep the list of projects in the Wiki manageable. These projects are not meant as projects for transition to stdlib, but more as reference projects for us to learn how if Fortran used in real-life applications.

The of popular Fortran projects in the wiki got quite out of date, in case it should still be maintained, one could automate at least the way meta data is fetched, a hacky example to do so using shields.io is in the details below.

| Project | Stars | Contributors |
| --- | ---:| ---:|
| ABINIT | stars | contributors |
| ADflow | stars | contributors |
| aenet | stars | contributors |
| arpack-ng | stars | contributors |
| bandup | stars | contributors |
| bspline-fortran | stars | contributors |
| Castro | stars | contributors |
| CFD | stars | contributors |
| CFL3D | stars | contributors |
| clfortran | stars | contributors |
| CompDam | stars | contributors |
| coretran | stars | contributors |
| cp2k | stars | contributors |
| CTSM | stars | contributors |
| datetime-fortran | stars | contributors |
| DBCSR | stars | contributors |
| DFTB+ | stars | contributors |
| ElmerFEM | stars | contributors |
| fdict | stars | contributors |
| fds | stars | contributors |
| FEconv | stars | contributors |
| fgsl | stars | contributors |
| FLAP | stars | contributors |
| Flexi | stars | contributors |
| fluidity | stars | contributors |
| FMS | stars | contributors |
| FOODIE | stars | contributors |
| forpy | stars | contributors |
| fortran2018-examples | stars | contributors |
| Fortran-Astrodynamics-Toolkit | stars | contributors |
| fortran-csv-module | stars | contributors |
| fortranlib | stars | contributors |
| fortran-machine | stars | contributors |
| FortranPatterns | stars | contributors |
| fortran-utils | stars | contributors |
| fox | stars | contributors |
| freeCappuccino | stars | contributors |
| ftl | stars | contributors |
| functional-fortran | stars | contributors |
| FV3-GFS | stars | contributors |
| GALAHAD | stars | contributors |
| GFR | stars | contributors |
| gtk-fortran | stars | contributors |
| h5fortran | stars | contributors |
| HANDE-QMC | stars | contributors |
| IAMR | stars | contributors |
| ICAR | stars | contributors |
| json-fortran | stars | contributors |
| kdtree2 | stars | contributors |
| LaGriT | stars | contributors |
| LAPACK | stars | contributors |
| lesgo | stars | contributors |
| MODFLOW6 | stars | contributors |
| MOM6 | stars | contributors |
| MPAS | stars | contributors |
| NASTRAN-93 | stars | contributors |
| NASTRAN-95 | stars | contributors |
| Nek5000 | stars | contributors |
| NetCDF-Fortran | stars | contributors |
| neural-fortran | stars | contributors |
| node-fortran | stars | contributors |
| node.fortran | stars | contributors |
| numerical-methods-fortran | stars | contributors |
| NWChem | stars | contributors |
| OFF | stars | contributors |
| ogpf | stars | contributors |
| OpenBLAS | stars | contributors |
| OpenCMISS | stars | contributors |
| OpenCoarrays | stars | contributors |
| OpenSWPC | stars | contributors |
| pFUnit | stars | contributors |
| PIC Skeleton Codes | stars | contributors |
| PoisFFT | stars | contributors |
| pyplot-fortran | stars | contributors |
| Quantum ESPRESSO | stars | contributors |
| ROMS | stars | contributors |
| SciFortran | stars | contributors |
| SHTOOLS | stars | contributors |
| sigma | stars | contributors |
| slsqp | stars | contributors |
| SNAP | stars | contributors |
| specfem3d | stars | contributors |
| Starlink | stars | contributors |
| stdlib | stars | contributors |
| StringiFor | stars | contributors |
| tcp-client-server | stars | contributors |
| TRACMASS | stars | contributors |
| Truchas | stars | contributors |
| tsunami | stars | contributors |
| VTKFortran | stars | contributors |
| WAVEWATCH III | stars | contributors |
| WPS | stars | contributors |
| wrf_hydro_nwm_public | stars | contributors |
| WRF | stars | contributors |

I found one more large Fortran project: https://github.com/MITgcm/MITgcm (the MIT General Circulation Model, homepage: http://mitgcm.org/)

@awvwgk: is it possible to sort the list by the number of stars?

These projects are not meant as projects for transition to stdlib, but more as reference projects for us to learn how if Fortran used in real-life applications.

Speaking of real-life applications, I also found this huge list of programs from the Radiation Safety Information Computational Center: https://rsicc.ornl.gov/Catalog.aspx?c=CCC

I'm sure there are several other government agencies, where Fortran is(was) the go-to language ;)

Not without accessing the GH API directly, I'm currently cheating by using shields.io to access to GH API.

My suggestion would be to add all the packages from this list to the package index on fortran-lang and than we can figure out how to get this functionality into the package index.

I don't want to maintain the list of projects at the wiki anymore. I want to port all of them to https://fortran-lang.org/packages/ and remove the wiki. We can implement sorting by stars at https://fortran-lang.org/packages/ or any other statistics that we need.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

masuday picture masuday  Â·  5Comments

certik picture certik  Â·  9Comments

certik picture certik  Â·  5Comments

MuellerSeb picture MuellerSeb  Â·  8Comments

waynelapierre picture waynelapierre  Â·  8Comments