Update since Jan. 15 2022, full list here. A project may be years old but newly added to the list.
Astronomy and Astrophysics
astro-fortran: modern Fortran implementations of standard models used in fundamental astronomy, by Jacob Williams. It is a refactoring of IAU SOFA.
dStar: computing neutron star structure and evolution, by Edward Brown et al.
Bandwidth Benchmark (Fortran version): collection of simple streaming kernels for teaching purposes, from RRZE-HPC. It is heavily inspired by John McCalpin’s STREAM.
Compiler-benchmark-suites: list of benchmark suites (and some loose kernels) in C and Fortran used in the research related to compilers, program performance, scientific computations etc.
Julia Syntax: Comparison with Fortran: simple cheatsheet and some performance comparison for scientific programmers who are interested in discover Julia, by Pierre Navaro
Biology and Medicine
EpiDetector: identifies epistasis (i.e., gene-to-gene interactions) in a genome-wide analysis setting, by Jakub Pecanka. EpiDetector implements several flavors of a two-stage testing approach. The underlying methodology is described in this paper and book chapter.
adjac: automatic differentiation for generating sparse Jacobians, using Fortran 95 and operator overloading, by Pauli Virtanen
fazang: library for reverse-mode automatic differentiation, inspired by Stan/Math library, by Yi Zhang
Fortran Debug Utilities: collection of some utilities useful for debugging code, by Pål Levold
Kinetic Monte Carlo of Systems (kmcos): lattice based kinetic Monte Carlo with a Python front-end and Fortran back-end, by Max Hoffmann et al.
MobCal-MPI: parallelization of the commonly used MobCal suite to calculate ion mobilities and collision cross sections, by Christian Ieritano and Scott Hopkins
mstore: molecular structure store for testing, from grimme-lab
Containers and Generic Programming
fdict: native Fortran 90 dictionary with hash tables for retaining any data-type in a Python-like dictionary, by Nick Papior
FMacro: template preprocessor for Fortran, by Harris Snyder. Aims to address Fortran’s lack of support for generic programming with a simple preprocessor, modeled after some of the language committee’s early ideas for a template language feature, to be included in a future Fortran standard.
Fortran Implementation of Abstract Types (FIAT): aims to implement various common data structures in Fortran, by Chris MacMackin and gitter-badger. These will be implemented in a generic manner using a container type. This was originally developed in PolyCon but has since been folded into FIAT, with some improvements.
Fortran Preprocessor Templates for Dynamic Data Structures (FPT-DDS): implements Fortran templates to create dynamic data structures using preprocessor directives, by Sergio Alexis Paz. A data structure for an arbitrary data type can be easily constructed by defining a few preprocessor variables and including the corresponding files distributed in the include folder.
Fortran Template Library (FTL): generic containers, versatile algorithms, easy string manipulation, and more, by Robert Rüger and Tomáš Trnka. It is heavily inspired by C++'s standard library, especially the part that is commonly referred to as the Standard Template Library (STL).
Fortran Template Library (FTL): object-oriented implementation of generic containers similar to the C++ STL (Standard Template Library), by Fran Martinez Fadrique. Not all elements present in STL are implemented in FTL, yet the documentation in Containers - C++ Reference can be used as generic conceptual reference.
FTObjectLibrary: provides a collection of reference counted Fortran 2003 classes to facilitate writing generic object oriented Fortran programs, by David A. Kopriva et al.
qContainers: container library for Fortran language. It enables one to store any internal Fortran data type and any derived data type to the container. It implements containers for key/value pairs: tree table and hash table, and containers for objects: list and vector.
Computational Fluid Dynamics
Turbulent Flows (T-Flows): computational fluid dynamics program originally developed at Delft University of Technology, the Netherlands. It features second order accurate, unstructured, cell-centered, finite volume discretization of incompressible Navier-Stokes equations with heat transfer and species transport. It is written in Fortran 90 and uses Message Passing Interface (MPI) for parallel execution.
CLM-Microbe: modeling work within the Ecological Modeling and Integration Laboratory at SDSU. One publication is Substrate and environmental controls on microbial assimilation of soil organic carbon: a framework for Earth system models.
Coupled Water Balance and Vegetation Optimality Model (VOM): predicts vegetation water use based on meteorological information, soils and topography only, without the need for prescribing site-specific vegetation properties or calibration against observed fluxes, by Stan Schymanski et al.
Dynamically Simple Model of Atmospheric Chemical Complexity (DSMACC): tropospheric chemistry box model designed to help understand the composition of the troposphere in a flexible and friendly manner. It is written to address a range of problems ranging from calculating the expected concentrations of atmospheric radicals to comparing chemistry schemes.
Earth System Modeling Framework (ESMF): suite of software tools for developing high-performance, multi-component Earth science modeling applications, by Gerhard Theurich et al.
EddyPro: processes eddy covariance data, by LI‑COR Biosciences. It computes fluxes of water vapor (evapotranspiration), carbon dioxide, methane, other trace gases, and energy with the Eddy Covariance method.
GSFLOW: coupled Groundwater and Surface-water FLOW model based on the integration of the USGS Precipitation-Runoff Modeling System (PRMS-V) and the USGS Modular Groundwater Flow Model (MODFLOW-2005 and MODFLOW-NWT), by Steve Regan et al.
JAGURS: tsunami simulation code solving linear/nonlinear long-wave/Boussinesq equations with/without effects of elastic deformation of the Earth due to tsunami load and vertical profile of seawater density stratification. This code was parallelized by using OpenMP and MPI.
MCDisp: surface wave dispersion curve inversion using Monte Carlo sampling. The 1d modal approximation code used to compute dispersion curves is from Computer Programs in Seismology. This package by xin2zhang provides a Python interface for the original Fortran code.
MCTomo: 3D Monte Carlo tomography package using reversible jump McMC method and 3D Voronoi tessellation, by Xin Zhang and Andrew Curtis
mesoscale Hydrological Model (mHM): mHM is based on accepted hydrological conceptualizations and is able to reproduce as accurately as possible not only observed discharge hydrographs at any point within a basin but also the distribution of soil moisture among other state variables and fluxes.
pyOM2: ocean circulation model with Fortran and Python front end, by ceden
Routing Application for Parallel computatIon of Discharge (RAPID): river network routing model, by Cedric H. David et al. Given surface and groundwater inflow to rivers, this model can compute flow and volume of water everywhere in river networks made out of many thousands of reaches.
seismo-fortran: utility modules for dealing with generally-anisotropic elastic constants and other geophysics problems, by Andy Nowacki
Telewavesim: teleseismic body wave modeling through stacks of (submarine/anisotropic) layers, by Pascal Audet
Topo: NCAR global model topography generation software for unstructured grids
firingcosts_petit2021: replication package for the working paper Aggregate effects of firing costs with endogenous firm productivity growth (2021) by Borja Petit. The codes use OpenMP for parallelization and GNUplot to generate the graphs.
flexout: Fortran-based flexible output manager with support for NetCDF and text formats, by Jorn Bruggeman et al.
qfyaml: quick Fortran YAML parser, by Bob Yantosca
Return of JSON for Fortran (rojff): with an interface inspired by jsonff, the data semantics and parser are redesigned to allow for high performance, by Brad Richardson and kmorris
feappv: free personal version of the FEAP (A Finite Element Analysis Program), associated with the book The Finite Element Method: Its Basis and Fundamentals, 7th ed., by O.C. Zienkiewicz, R.L. Taylor and J.Z. Zhu, Elsevier, Oxford, 2013
Fortran Books and Tutorials
Introduction to Modern Fortran: aimed at users and developers who know how to program, but have little or no experience in Fortran, and those who may wish to have a refresher in Fortran, by Kevin Stratford
rocket-science: case study in modernizing legacy Fortran software, by Brad Richardson et al. This repository contains a modern mini-application for simulating solid rocket motors using an object-oriented, functional programming style in Fortran 2018, a legacy motor simulator demonstrating the solution of the same governing equations using a procedural programming style in Fortran 77/90, and a refurbished motor simulator demonstrating one modernization path for making the legacy solver object-oriented but without the radical redesign that affords the above purely functional programming style.
Upgrading-to-Fortran90: programs from Upgrading to Fortran 90 by Cooper Redwine (1995)
argv-fortran: a better get_command_argument for Fortran that returns the argument in an allocatable character string, by Jacob Williams
cpu_timer: Fortran 2008 object-oriented library for computing elapsed CPU time, by Jon Lo Kim Lin
erloff: errors and logging for Fortran, by Brad Richardson. The basic usage is that a procedure can have intent(out) message and/or error list arguments, or as a component of its return value.
Fortran Input Parser: typical application is the reading in of input parameters (input file) and material parameters (database) from two text files for e.g. a scientific code
Quantities for Fortran (quaff): makes math with units more convenient, by Brad Richardson et al. This library provides all the functionality necessary to almost treat quantities with units associated with them as though they were just intrinsic real values
SQLite for Fortran (sqliteff): thin wrapper around the SQLite library, by Brad Richardson. The sqliteff_* functions are effectively identical to the sqlite3_* functions that would be called from C, but with Fortran intrinsics and types.
TimerClass: object-oriented Fortran 2003 timer class, by Danny Vanpoucke
Graphics, Plotting, and User Interfaces
Dislin_x_y_plot: generates plots from within a Fortran program nearly as easily as with the provided Dislin “quickplots”, by Andi Zuend. However, unlike the quickplots, this module offers a lot more options for controlling the plot page, axis system and various curve properties. It also makes adding multiple x–y data sets (curves) to a single plot easy.
fortran-c-cpp-interface: interoperability examples between C, C++ and Fortran, from scivision. Uses the standard C binding to define variable and bind functions/subroutines.
fpydemo: demonstration of packaging a command line tool written in Python and Fortran, by Saikat Banerjee. The minimum working example has native Fortran codes compile to a shared library with F2PY, Lapack routines, and uses mpi4py for MPI parallelization.
Tcl/Tk 8.6 for Fortran 2018: ISO_C_BINDING interface library for interoperability with Tcl/Tk 8.6, by interkosmos, allowing the user to embed Tcl into Fortran, create Tcl extensions in Fortran (with Tcl Stubs), access (a subset of) the Tcl/Tk C API from Fortran, use Tcl as an evaluatable configuration file format, and add graphical user interfaces to Fortran programs.
lagrange_interpolator: OOP library for 1 and 2-dimensional Lagrange interpolation, by Jon Lo Kim Lin
amg4psblas: Algebraic Multigrid Package based on PSBLAS (Parallel Sparse BLAS version 3.7), for the iterative solution of large and sparse linear systems, by sfilippone et al.
qrupdate-ng: library for fast updating of QR, LU, and Cholesky decompositions, by Jaroslav Hajek, updated by M. Koehler and C. Himpe
STCollection: contains matrices that have been used for testing LAPACK’s symmetric tridiagonal eigensolvers and bidiagonal SVD algorithms. The collection includes symmetric tridiagonal matrices and (upper) bidiagonal matrices. The original set of matrices in the collection has been described in Marques, Demmel, Voemel, and Parlett, A Testing Infrastructure for Symmetric Tridiagonal Eigensolvers, ACM TOMS, 35:2008.
MPFUN2020: thread-safe arbitrary precision package that enables one to perform floating-point computations (real and complex) to arbitrarily high numeric precision, by making only relatively minor changes to existing Fortran-90 programs (mostly changes to type statements), by David H. Bailey. All basic arithmetic operations and transcendental functions are supported, together with several special functions. FPM package by Jacob Williams here
pypolsys: Python wrapper to POLSYS_PLP Fortran 90 package from Layne T. Watson, Steven M. Wise, Andrew J. Sommese, August, 1998. POLSYS_PLP is a solver for N complex coefficients polynomial systems of equations in N unknowns by a probability-one, globally convergent homotopy method.
special_functions: Cython and Python API for some Fortran and C libraries of special functions, by Siavash Ameli
Warton Legacy: RSA code scrambling and unscrambling, code generating via robust prime construction, code breaking and secret sharing, by Robert Warton. Routines in number theory and algebraic numbers exist both within programs and separately.
Ordinary Differential Equations
dde_solver: update by Warren Weckesser of Shampine and Thompson’s DDE_SOLVER, a Fortran library for delay differential equations
EMSOL: primal simplex linear programming solver
FortranFilterSLP: for a particular class of non-convex nonlinear programming problems, this implementation of FilterSLP by jajhall uses sequential linear programming to find a (local) optimal solution.
L-BFGS-B-NS: code for thesis by Wilmer Henao, An L-BFGS-B-NS optimizer for non-smooth functions
libdogleg-f: Fortran bindings to libdogleg - a large-scale nonlinear least-squares optimization library, by Ivan Pribec. Currently only the dense optimizer calls are supported.
Trust Region Derivative-Free algorithm (TRDF): by F. N. C. Sobral. Reference: P. D. Conejo, E. Karas, and L. G. Pedroso, A trust-region derivative-free algorithm for constrained optimization, Optim. Methods Softw., vol. 30, no. 6, pp. 1126–1145, Nov. 2015. Also vkpss: algorithm based on sampling approaches for building models in derivative-free trust-region optimization problems, skinny: derivative-free direct search algorithm for constrained problems, fird: solves general derivative-free constrained optimization problems in which the derivatives of the objective function are not available
Coarray Collectives: module aims to provide various collective parallel procedures for Fortran coarray programs, by Neil Carlson. These are in addition to the several intrinsic collectives introduced in Fortran 2018. Currently the module provides a single procedure, co_sum_scan which computes a prefix sum across all images, similar to MPI_Scan.
Examples from OpenMP Application Programming Interface: examples from OpenMP Application Programming Interface in Fortran, C, and C++
Index Map: index_map_type Fortran module, by Neil Carlson, provides core capabilities that support use of distributed arrays in MPI-based SPMD programs through the index_map derived type that describes the mapping of an array’s index set to processes. The mapping allows for overlap between processes, and provides collective array gather procedures and scatter reduction procedures associated with that overlap.
INHDF5: various utilities for using the parallel HDF5 library with MPI and Fortran, by Ioannis Nompelis
INshm: library for accessing chunks of shared memory across process running on a Unix host in Fortran, by Ioannis Nompelis
Partial Differential Equations
spherepack: computes common spherical differential operators including divergence, vorticity, latitudinal derivatives, gradients, the Laplacian of both scalar and vector functions, and the inverses of these operators, by Jon Lo Kim Lin. For example, given divergence and vorticity, the package can be used to compute velocity components, then the Laplacian inverse can be used to solve the scalar and vector Poisson equations.
JHUGen: generator giving parton-level information including full spin and polarization correlations for the processes ab → X → VV (V=Z,W,gamma), VBF, X+JJ, pp → VX, ee → VX
Flexible Optimized Coils Using Space curves (FOCUS): nonlinear optimization code for designing 3D coils. Its sibling, FAMUS, can be use to design permanent magnets.
flex-general: applies the Fluctuation Exchange Approximation (FLEX) to study superconductivity and magnetism in multiband tight-binding models, by John Deisz. flex-stripes analyzes charge and magnetic stripe formation in one-band tight-binding models.
Generalized Spallation Model and Event Generator: composed of several sub-models, consisting primarily of the Standard and Modified Dubna Cascade Models (DCM), a Coalescence model, Preequilibrium model, and the GEM2 (Generalized Evaporation Model), being used for simulating compound Evaporation and fission, from Los Alamos National Laboratory.
IrisFDTD-Academic: implements the Finite-Difference Time-Domain (FDTD) method. It is a “toy version” of the IrisFDTD program, a Maxwell’s equations solver in the field of computational electrodynamics for photonics and nanotechnology, by Sergio G Rodrigo.
Koko Optical Design Software (KODS): raytracing software for the design and analysis of optical imaging and illumination systems. Koko has evolved from the optics design program KDP-2 that was made open-source by its original developer James E. Klein.
Uppsala Atomistic Spin Dynamics software (UppASD): simulation suite to study magnetization dynamics by means of the atomistic version of the Landau-Lifshitz-Gilbert (LLG) equation, by Anders Bergman et al. Related book: Atomistic Spin Dynamics: Foundations and Applications
Quantum Chemistry and Electronic Structure
ddX: package for continuum solvation models based on the domain decomposition paradigm. It contains a common interface for the three different methods ddCOSMO, ddPCM and ddLPB for the numerical solution to the COSMO, PCM and LPB solvation models, by mnottoli et al.
Environ: computational library aimed at introducing environment effects into atomistic first-principles simulations, in particular for applications in surface science and materials design
Humble Interface for Vasp outputEditing (HIVE4-tools): Post-processing tool-set for ab-intio calculations obtained with VASP, by Danny Vanpoucke
libconeangle: library for calculating exact ligand cone angles according to the paper Bilbrey, J. A.; Kazez, A. H.; Locklin, J.; Allen, W. D. Exact Ligand Cone Angles. Journal of Computational Chemistry 2013, 34 (14), 1189–1197.
Molecular Orbital KIT (MOKIT): utilities and modules to transfer MOs among various quantum chemistry software packages, by jxzou. In addition, the automr program in MOKIT can set up and run common multi-reference calculations in a block-box way.
nonadiabatic statistical theory (NAST) package: predicts kinetics of spin-dependent processes, including intersystem crossings, spin-forbidden reactions, and spin crossovers, by Sergey Varganov. The NAST package can calculate the probabilities and rates of transitions between the electronic states of different spin multiplicities.
Random Number Generation
M_random: module of pseudo random procedures, by urbanjost
orderpack: clone by urbanjost of Orderpack 2.0 from Michel Olagnon that has been restructured so as to be useable as an fpm package. It provides order and unconditional, unique, and partial ranking, sorting, and permutation.
Bayesian Modeling (BaM): framework aimed at estimating a model using a Bayesian approach and using it for prediction, with a particular focus on uncertainty quantification, by Ben Renard and Emeline Perret
fsklearn: simple module for machine learning in Fortran using scikit-learn, by Zhouteng Ye. The module can be used to do training and prediction in Fortran, the training part uses scikit-learn library by calling Python from Fortran, and the prediction part, as it may be called frequently by a Fortran code, is written in Fortran 2003.
Fortran: programs and subroutine libraries useful in statistical analysis and quantitative genetics. Some are by Neville Jackson and others are collected from the public domain.
SLICE: efficient N-Dimensional Monte Carlo inversion algorithm, by ericlindsey
fString: contains methods to add strings to values or split the context of a string of more than one substrings or even extract specific values using the pattern method, by Dionisis Pettas. The main idea comes from Python and how uses its strings.
iso_varying_string: implementation of the ISO_VARYING_STRING module as defined in the ISO standard, by Brad Richardson
parff: functional style parser combinator library, by Brad Richardson and Patrick Raynaud. By using a library like this, it is possible to implement parsers for complex formats by composing independent little pieces.
ryu_fortran: Ryu algorithm which converts floating point numbers to decimal strings, by St Maxwell. It is more effective than internal file approach. This implementation is based on the Scala version of Ryu.
strff: library of string functions, by Brad Richardson
SLICOT System Identification Toolbox: includes SLICOT-based MATLAB and Fortran tools for linear and Wiener-type, time-invariant discrete-time multivariable systems. Subspace-based approaches MOESP - Multivariable Output-Error state SPace identification, N4SID - Numerical algorithms for Subspace State Space System IDentification, and their combination, are used to identify linear systems, and to initialize the parameters of the linear part of a Wiener system. See also SLICOT Basic Systems and Control Toolbox and SLICOT Library.
Testing Or ASsertion Toolkit (TOAST): unit testing library by thomasms and Bob Apthorpe
Vegetables: unit testing framework written using functional programming principles, by Brad Richardson. As many of its procedures as possible are marked with the pure keyword, while still allowing the framework to test impure code.
XFunit: object oriented framework to implement unit testing in Fortran 2018, by Fran Martinez Fadrique. Unit testing with XFunit is structured in suites and units. A test suite typically define all test to be implemented for a Fortran module.