New Fortran projects

Update since Nov 5, full list here

Astronomy and Astrophysics

cufQUMC: CUDA Fortran version of QU-fitting with replica exchange MCMC method (parallel tempering), with a Python interface, by Shinsuke Ideguchi

DarkLim: statistical tools for calculating dark matter exclusion limits and sensitivity estimates, from SPICE/HeRALD

DYnamics, Age and Metallicity Indicators Tracing Evolution (DYNAMITE): Schwarzschild- and stellar-population modelling of stellar systems

GALAXEV-fortran: Galaxy Spectral Evolution Library, by G. Bruzual and S. Charlot

img2nc: converts planetary Digital Elevation Model (DEM) data into NetCDF, allowing one to draw a topographic map of the Moon, by ShinobuAmasaki.

Benchmarks

plb2: nqueen, matmul, sudoku, and bedcov benchmarks in Fortran, C, Lisp, Go, Java, JavaScript, Julia, Python, Rust, and other languages

Biology and Medicine

Illustrate: biomolecular illustration tool. Associated paper: Goodsell, D.S., Autin, L, Olson, A.J.,Goodsell, D. S., Autin, L., & Olson, A. J. (2019). Illustrate: Software for biomolecular illustration. Structure, 27(11), 1716-1720.e1.

Computational Chemistry

GWMlib: Generic Water isotope Modelling Library, by Didier M. Roche

Containers and Generic Programming

enhanced-allocatables: proposal to extend allocatable arrays to be dynamically reallocatable/resizable, with an implementation that calls C++, by PierUgit

fortran-dictionary: implementation of a hashmap aka dictionary, by Elias Toivanen

Computational Fluid Dynamics

FortranVortexIdentify: identifies discrete vortices from the velocity field data, using MPI, which are the result of a DaVis PIV process, by RickXie43

Navier_Stokes_Spectral_Method: Navier Stokes simulation using the spectral method, visualized with gtk-fortran, by Jules Minard

Synthetic Eddy Method (SEM): code associated with paper Extended synthetic eddy method to generate inflow data for turbulent thermal boundary layer, by Geunwoo Oh et al., International Journal of Heat and Mass Transfer, 2019. A related project is Synthetic-Eddies by Bojan Niceno.

Earth Science

AGNI: 1D radiative-convective model for the atmospheres of hot terrestrial planets, in Fortran and Julia, by Harrison Nicholls

Aquatic Optics Monte Carlo Model (AOMC): simulates the propagation of light in an optically shallow, vertically heterogeneous aquatic medium, by Manny Gimond

EXSIM: stochastic finite-fault program, as modified by Karen Assatourians and Gail Atkinson. Associated paper: Stochastic Finite-Fault Modeling Based on a Dynamic Corner Frequency (2005), Bulletin of the Seismological Society of America

hbi: multi-dimensional earthquake cycle simulation code based on Boundary Element Method with H-matrices, associated with the paper by So Ozawa, Akihiro Ida, Tetsuya Hoshino, Ryosuke Ando (2023), Large-scale earthquake sequence simulations of 3D geometrically complex faults using the boundary element method accelerated by lattice H-matrices, Geophysical Journal International,232 (3), 1471-1481

Heavy-review: calculates the change in gravity caused by the change in groundwater storage as predicted by a MODFLOW groundwater-flow model, by Jeff Kennedy. Gravity change is calculated relative to the initial time step at user-specified locations (e.g., measurement locations).

HypoTremorMCMC: associated preprint: Locating tectonic tremors with uncertainty estimates: Time- and amplitude-difference optimization, wave propagation-based quality control, and Bayesian inversion(2023) by Takeshi Akuhara et al.

IF-77 Air-to-Ground Propagation Model (Gierhart-Johnson): propagation model from the Federal Aviation Administration applicable to air/ground, air/air, ground/satellite, and air/satellite paths. It can also be used for ground/ground paths that are line-of-sight or smooth earth.

PICO_Fortran: implementation by Didier M. Roche of the Potsdam Ice-shelf Cavity mOdel from the paper Antarctic sub-shelf melt rates via PICO, by Ronja Reese et al., (2018).

Tropospheric ultraviolet-extended (TUV-x): photolysis rate calculator from NCAR. Associated paper: Madronich, Sasha, and Siri Flocke (1999), The role of solar radiation in atmospheric chemistry, in Handbook of Environmental Chemistry, edited by P. Boule, pp. 1-26, Springer-Verlag.

File I/O

cprnc: tool for analyzing a netCDF file or comparing two netCDF files, from Earth System Model Computational Infrastructure

fortran-sperr: interface bindings by Oscar Mojica to SPERR, a lossy scientific (floating-point) data compressor in C and C++ that produces one of the best rate-distortion curves

Finite Elements

sam-lib: collection of FORTRAN 77 subroutines, originally by Kolbein Bell, for handling different tasks in finite element method solvers, such as the assembly of element matrices into their global counterparts, solving global linear systems of equations, solving eigenvalue problems, and some other lower-level matrix utilities

Fortran Books and Tutorials

githubactions_intro: introduces Github Actions as a tool for lightweight automation of scientific data workflows, with examples in Python and Fortran using gnuplot, by Oscar Mojica

Games

wumpus: Hunt the Wumpus game in Fortran, LISP, Prolog, and Literate-Java, by Yeon Ju

General Purpose

Batteries Included Fortran Library (BiF-lib): modules for dates, dynamic arrays, error handling, I/O, parsing equations, statistics, prime numbers, random number generation, finding roots, sorting, strings, and data types such as list and dict that mimic Python, by Scott Boyce

M_sets: basic set functions reminiscent of those in Matlab: union, unique, intersect, setdiff, ismember, setxor, by urbanjost

timer: module to get the number of seconds between two timestamps, by zoziha

Graphics, Plotting, and User Interfaces

cairo-fortran: libcairo bindings for Fortran from the gtk-fortran project available as a separate fpm package, by Carlos Une

ForColormap: small colormap library independent of any graphical toolkit, by Vincent Magnin. It just converts a real value to RGB values, that can be used with any toolkit offering bitmap drawing..

forimage: library for working with image files (PNM format) and managing colors effectively, by by Seyed Ali Ghasemi

fortran-simplify: module to reduce the over-sampled resolution of a polyline, implementing the nth_point, radial_distance, perpendicular distance, and Reumann-Witkam algorithms, by Joshua Aiken. This process can be useful when working with data that is noisy but usable with a significantly reduced resolution.

pltFor: Fortran-Python interface library to plot figures directly in Fortran, by Damien Minenna

Interoperability

Cython_ISO_Fortran_binding: code for using ISO_Fortran_binding.h from Cython, by Yuichiro Sakamoto. By using ISO_Fortran_binding.pxd, it is possible to call Fortran from Cython in the same way as one calls Fortran from C.

dynload-julia: dynamically load Julia from Fortran, by brocolis

fodbc: interface to Open Database Connectivity (ODBC), by RainBarrel

FortranInterop: documentation and example code on how to make Fortran interoperate with the .NET framework, covering callbacks, strings and mixed mode assemblies, by Christ Akkermans, with links to three blog posts.

hwinfo-fortran: provides access to hardware information using OS APIs for Unix-like operating systems, by Shinobu Amasaki

Mariadb_connector_fortran: wrapper library for Mariadb-connector/C, by Vu Hoang Giang. It can be used to connect to Mairadb, MySQL, and Oracle databases.

PythonFortran: simple example for Python calling Fortran codes in MPI, by Takao Kotani. The main program, which calls Fortran subroutines, is in Python invoking MPI by mpi4py.

sockets-in-Fortran: demonstration of a Fortran code communicating through a socket with a a C code that acts as a client in a socket based server/client communication, by Philippe Preux

Interpolation

stripy: Python interface from underworldcode to TRIPACK and STRIPACK Fortran code for (constrained) triangulation in Cartesian coordinates and on a sphere. Stripy is an object-oriented package and includes routines from SRFPACK and SSRFPACK for interpolation (nearest neighbor, linear and hermite cubic) and to evaluate derivatives.

Linear Algebra

eigensolvers based on unitary core transformations (eiscor): subroutines for accurately and efficiently solving matrix eigenvalue problems using essentially 2x2 unitary matrices. An associated paper is Jared L. Aurentz, Thomas Mach, Raf Vandebril, and David S. Watkins. Fast and stable unitary QR algorithm. Electronic Transactions on Numerical Analysis. Vol. 44, pp. 327-341. 2015.

fordot: overloads the dot_product function to enable efficient dot product with/without coarrays, by Seyed Ali Ghasemi

fortran-lapack: modern Fortran implementation of the Reference-LAPACK library, by Federico Perini. The reference Fortran 77 library is automatically downloaded from its master repository, and processed to create Modern Fortran modules with full explicit typing features.

keksipurkki-demos-qr: implicit QR method, by Elias Toivanen

Lin_Alg: pedagogical codes for Cholesky, QR, and Hessenberg decompositions, Gram-Schmidt orthonormalization, matrix inversion, RQ process diagonalization + shift method, Jacobi diagonalization, iterative power diagonalization + shift method, eigenvectors using iterative method, and A.x = b solution with residual improvement, by Quentin Marecat

LSMR: code for sparse equations and least squares, originally by David Fong and Michael Saunders, updated by Jacob Williams

Small Fortran Solvers (SFS): linear equation solvers, including preconditioned conjugagate gradient, by Bojan Niceno, adapted from Numerical Analysis: Mathematics of Scientific Computing, by David Kincaid & Ward Cheney, using OpenACC to access GPUs

Spectrum-Revealing CUR (SR-CUR): tool for the low rank CUR decomposition of sparse matrices, by Onyebuchi Ekenta. SR-CUR implements a novel CUR decomposition method that allows it to scale to larger matrices and produce more accurate factorizations than previous methods.

Mesh Generation

smesh: package for generating and handling unstructured triangular and polygonal meshes, by Simone Chiocchetti and Michael Schlottke-Lakemper

Numerical

chebpak: routines for Chebyshev polynomials, derivatve matrices, and interpolation, by Sarit Dutta

dfsaneacc: R package with underlying Fortran code implementing the algorithm in Secant Acceleration of Sequential Residual Methods for Solving Large-Scale Nonlinear Systems of Equations, by Ernesto G. Birgin and J. M. MartÃnez, SIAM Journal on Numerical Analysis, Vol. 60, Iss. 6 (2022)

HDMod: hyperdual number based calculations, from atmmod

NAFPack: numerical analysis package, offering a comprehensive set of algorithms for diverse numerical computations, by Jules Minard. These computations include Fast Fourier Transform, linear system solving, and eigenvalue/eigenvector calculations.

NCAR-Classic-Libraries-for-Geophysics: FFTPACK: A library of fast Fourier transforms; FISHPACK: subprograms for solving separable elliptic partial differential equations (PDEs); FISHPACK 90: FISHPACK subprograms with a Fortran 90 interface; MUDPACK: Multigrid subprograms for solving separable and non-separable elliptic PDEs; and SPHEREPACK: A library for modeling geophysical processes

specfun: modernization by Jacob Williams of specfun.f from SciPy from the book Computation of Special Functions, by Shanjie Zhang and Jianming Jin, Wiley (1996).

Optimization

ucminf: R package by Hervé Dakpo with Fortran code originally by Robert Schnabel et al. for general-purpose unconstrained non-linear optimization. The algorithm is of quasi-Newton type with BFGS updating of the inverse Hessian and soft line search with a trust region type monitoring of the input to the line search algorithm. A Fortran 90 version of uncmin by John Burkardt is here.

Parallel Programming

havaita: MPI Fortran type inference – shows how to write a modern Fortran interface to MPI which infers arguments that are already contained in the Fortran type itself, such as element type and count, and renders optional arguments when context is sufficient, by Jeff Hammond

Particle Physics

bmad-ecosystem: library for the simulation of charged particles and X-rays in accelerators and storage rings, by David Sagan et al.

Plasma Physics

Reactive Multifluid and Kinetic Transport in 1D (ReMKiT1D): framework for building 1D multi-fluid models of the tokamak Scrape-Off Layer with support for kinetic electron effects and collisional-radiative modelling, by Stefan Mijin and Alfie Adhemar

Physics

fundamental_constants: modules with the CODATA fundamental physical constants, generated by a Python script from the NIST website, by Vincent Magnin

LibForQ-v1: performs several numerical tasks one frequently needs when working in quantum information science, such as trace, partial trace, and partial transpose; entanglement, discord, and coherence quantifiers; Pauli group (PG), Generalized Gell Mann Matrices (GGMM), and Bloch vector and correlation matrix with GGMM, by Jonas Maziero

libTNSP: code for paper TNSPackage: A Fortran2003 library designed for tensor network state methods, by Shaojun Dong et al., Computer Physics Communications, Volume 228, July 2018, Pages 163-177

NDO: code by Shaojun Dong to make computing Neural Density Operators (NDO) for quantum tomography straightforward, simple and fast

PyHub: easy-to-use, hybrid Python/Fortran package to solve efficiently the Fermi-Hubbard Model, by Quentin Marecat

Temperature Dependent Effective Potentials (TDEP): tools to build accurate model Hamiltonians for finite temperature lattice dynamics from first principles, associated with a paper by Florian Knoop et al. in the Journal of Open Source Software

Random Number Generation

Knuth-FLRNG: Fibonacci Lagged integer and double precision RNGs from Section 3.6 of Volume 2 of TAOCP (Semi-numerical Algorithms); slightly reformatted and changed by Marco Antoniotti from the versions downloadable from the code section of TAOCP site

Statistics

islasso: R package with underlying Fortran code applying the induced smoothing (IS) idea to lasso regularization models to allow estimation and inference on the model coefficients (currently hypothesis testing only), by Gianluca Sottile. Linear, logistic, Poisson and gamma regressions with several link functions are implemented.

StatLib: codes from the journal Applied Statistics, mostly in Fortran 77 or earlier standards. Alan Miller’s translations of some of them to Fortran 90 are here.

Strings

forgex: regular expression engine using a deterministic finite automaton (DFA) approach, by Shinobu Amasaki. It provides .in. and .match. operators to detect if a pattern is contained in or exactly matches a string.

fortran-ascii: functions which operate on ASCII characters, by Ivan Pribec, aiming to reproduce the functionality found in <ctype.h> header of the C standard library or std.ascii namespace from the D runtime library.

fortran-shlex: port by Federico Perini of Python’s shlex shell-like lexer. The interface comes with two functions, split which parses a command-like string and returns an array of allocatable character strings; and shlex that performs the same, but returns a list of type(shlex_token) tokens.

fsys: library by Jason Christopherson containing system operations and supporting types: string, similar to the iso_varying_string, but with a few differences and a few additional operations, and string_builder, a type that allows concatenating strings while minimizing memory reallocation operations, that behaves similarily to the .NET StringBuilder class

utf8-f: UTF-8 manipulation, by St-Maxwell. The underlying data in a utf8_string object is a deferred-length string of character(len=:, kind=c_char) type.

Unit Testing

fordebug: library designed for debugging Fortran code, especially within pure procedures, by Seyed Ali Ghasemi

7 Likes