Skip to content

Links to Fortran compilers, preprocessors, static analyzers, transpilers, IDEs, build systems, etc.

Notifications You must be signed in to change notification settings

Beliavsky/Fortran-Tools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 

Repository files navigation

Fortran Tools

(C) indicates a commercial product

Automatic Differentiation

AD_dnSVM: Fortran Automatic Differentiation tool using forward mode for scalars (S), Vectors (V) and Matrices (M), by David Lauvergnat. It has no limit in terms of the number of independent variables (this number is defined at runtime) and can compute up to third derivatives.

ADF95: modification of Jingchang Shi to work with gfortran of program described in ADF95: Tool for automatic differentiation of a FORTRAN code designed for large numbers of independent variables, by Christian W. Straka, Computer Physics Communications, Volume 168, Issue 2, 1 June 2005, Pages 123-139, with preprint here

adifor: given a Fortran 77 source code and a user's specification of dependent and independent variables, ADIFOR will generate an augmented derivative code that computes the partial derivatives of all of the specified dependent variables with respect to all of the specified independent variables in addition to the original result.

adjac: automatic differentiation for generating sparse Jacobians, using Fortran 95 and operator overloading, by Pauli Virtanen

Audito: automatic differentiation tool for Fortran, by Michel V. Heinz. The mathematical operators have been overloaded to work with the newly defined types, which include not only the function value, but also the gradient, Hessian and Laplacian.

auto_deriv: module comprised of a set of Fortran 95 procedures which can be used to calculate the first and second partial derivatives (mixed or not) of any continuous function with many independent variables, by S. Stamatiadis, and S.C. Farantos, part of the Computer Physics Communications Program Library. The mathematical function should be expressed as one or more fortran 77/90/95 procedures.

autodiff: automatic differentiation for up to 4th derivatives, by Simon Geard

Auto-Diff: implementation in Modern Fortran of backward mode automatic differentiation, by zoziha.

Dual Number Automatic Differentiation (DNAD): update of code from Yu, W. and Blair, M.: "DNAD, a Simple Tool for Automatic Differentiation of Fortran Codes Using Dual Numbers," Computer Physics Communications, vol. 184, 2013, pp. 1446-1452, by oddlehod. Related project: Fortran_DNAD. A fork by oyvindyr uses fypp macros. The benefit of this approach is that interfaces and implementations of mathematical functions can be "injected" into the modules where they are used.

fazang: library for reverse-mode automatic differentiation, inspired by Stan/Math library, by Yi Zhang. Zoziha has updated the project to work with gfortran and ifort.

OpenAD: tool for automatic differentiation (AD) of numerical computer programs

Tapenade: automatic differentiation engine developed at Inria. It can be run online or be downloaded and installed locally as a set of Java classes (JAR archive).

Transformation of Algorithms in Fortran (TAF): source-to-source translator for Fortran 77-95 code, i.e. TAF accepts Fortran 77-95 code as input, applies a semantic transformation, and generates Fortran 77-95 code. TAF supports several semantic transformations. The most important one is Automatic Differentiation (AD), i.e. generation of code for evaluation of the first-order derivative (Jacobian matrix). (C)

Automatic Documentation

Doxygen: generates an on-line documentation browser (in HTML) and/or an off-line reference manual (in LaTeX) from a set of documented source files. There is also support for generating output in RTF (MS-Word), PostScript, hyperlinked PDF, compressed HTML, DocBook and Unix man pages.

f90tohtml: Perl script to convert fortran source files into a hyperlinked web site

ford: Automatically generates FORtran Documentation from comments within the code, from Fortran-FOSS-Programmers

htmlindex: C++ code which builds a "skeleton" HTML page for a C, C++, FORTRAN77 or FORTRAN90 source code file, documenting every routine in the file...if each routine has been appropriately marked, by John Burkardt. The information after the marker is usually a one line explanations of what the routine does.

ProTeX: Perl script that can strip information from a standard Fortran document header and save that to a LaTeX file, by Arlindo Da Silva et al.

version-f: implementation of Semantic Versioning 2.0.0 by Minh Dao that aims to be a user-friendly tool for handling versions in Fortran projects

Build Tools

Buildnis: distributed, platform independent build system that can handle C++20 and Fortran modules and is flexible enough to build anything else and handle various build steps

CMake cross-platform, open-source build system generator. Fortran_with_cmake_examples by ChristensenCode provides some concrete examples with as much explanation as possible to make it clear to a someone with a relatively small amount of experience with CMake.

CMake Utils: helpful scripts and modules for CMake, especially for scientific computing, HPC, and Fortran, from scivision

cookiecutter-fortran-project: templates for setting up new Fortran projects, allowing the user to choose from various build systems (CMake, Fpm, and Meson) and different parallelization models such as serial, MPI, and coarray. The generated projects include a library, unit tests (currently utilizing the Fortuno unit test framework), and optionally, a standalone application and an example.

easy: steps to setup a GitHub repository with fpm, and GitHub actions including ford(1) documentation and unit tests, by urbanjost

F90_makefile_builder: Python program to build a makefile for a Fortran 90 program by searching through each module for dependencies, by Benjamin Pieczynski. The algorithm determines the order of the dependencies and builds the make file in the correct order.

Fab: build system for Fortran and C projects. Initially designed to build the Met Office’s major scientific applications, LFRic and the UM.

FCM: modern Fortran build system + wrappers to Subversion for scientific software development, from metomi

FF08Depends: command line tool for obtaining file dependency information for Fortran 2008 source files, written in Fortran 2003 by IanH

FoBiS.py, Fortran Building System for poor people: automatic parsing of files for dependency-hierarchy creation in case of use and include statements, and automatic building of all programs found into the root directory parsed or only a specific selected target, by szaghi et al.

fortdep: Python 3 script for generating dependencies between Fortran modules for make, by Dominik Gronkiewicz

fortdepend: Python script to generate dependencies for Fortran projects, by ZedThree

forte: short script able to execute Fortran 90 code from within the Linux shell more flexibly, by Ed Higgins

fortran-compiler-with-two-computers: Python code to facilitate the workflow of compiling Fortran source files on one computer and running the compiled output (DLL) on another, by Jucelio Tavares Junior. It is ideal for distributed environments where simulation and compilation processes are handled by separate machines.

fortrandep: Python tool to determine Makefile dependencies for a Fortran project, by Ryan Orvedahl

Fortran_makedeps: small Python script to scan Fortran sources and generate makefile-appropriate dependencies, by James Biddle

fortranMakeUtils: Python scripts for generating dependency trees and makefiles, by Denis Eiras

Fortran Package Manager for Visual Studio: adds options and menu entries for building, running and testing your Fortran project using the Fortran Package Manager (fpm), by everythingfunctional

Fortran Project Template: project template with pre-commit checks, compile checks with fpm build, automated testing with fpm test, code formatting with fprettify, and linting with the Modern Fortran VSCode extension, by MatthAlex

fpm: Fortran Package Manager (fpm) is a package manager and build system for Fortran, from fortran-lang

fpm-completions: command-line completion functions for the Fortran Package Manager, by Shinobu Amasaki. Zsh is required to use this package, currently.

fpm-gui: straigtforward graphical user interface for the Fortran Package Manager (fpm), by Arjen Markus

fpm-registry: centralized registry of fpm packages for the fortran-lang site

fpm-search: lists available packages in the fpm-registry from the command line, by urbanjost and Sebastian Ehlert. This allows for quickly locating fpm(1) packages and generating the associated dependency lines to insert into fpm(1) package manifest files (fpm.toml) that wish to use them.

gfortran-config: Windows batch script to automatically build and run Fortran code in MinGW-w64 gfortran environment and an analogous bash script for Ubuntu Linux, by cloudy-sfu

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

homebrew-fortran: provides package build instructions for tools and libraries around Fortran compatible with the Homebrew toolchain, by Federico Perini et al. Available packages from this tap are fpm: Fortran package manager and lfortran: Modern interactive LLVM-based Fortran compiler.

Intel® oneAPI Math Kernel Library Link Line Advisor: requests information about the computer system and on how one intends to use the Intel® oneAPI Math Kernel Library (link dynamically or statically, use threaded or sequential mode, and so on) and automatically generates the appropriate link line for the application

jams_makefile: provides a portable, versatile way of compiling Fortran, C, C++, and mixed projects, by mcuntz

makedepf90: generates make dependencies for Fortran code, by Erik Edelman

Makefile-maker: automatic Fortran makefile maker, by Garl4nd. The program first scans all Fortran files for imports of other source files and creates a directed dependency graph, where each vertex represents the file and an arrow from A to B correspond to the File A depending on B.

makemake: Perl script first developed by Michael Wester to construct correct makefiles for modern Fortran code and modified for newer compilers and to work for C++ by Katherine Holcomb. Its usage is discussed here.

makemake90: Python script that generates Makefiles for modular Fortran programs, by Jan Berges. It recursively searches the working directory for .f90 files and determines their dependencies.

meson: next-generation build system. Test-meson is an example Python project with Fortran code.

MinGW package for the Fortran package manager: provides package build instructions for the Fortran package manager (fpm) compatible with the MSYS2 toolchain. This project provides prebuilt MinGW packages at the release page.

mkhelper: collection of utilities to be used with GNU Autoconf and GNU Make for building Fortran projects, by skosukhin

mkmf: tool written in perl5 that will construct a makefile from distributed source, from NOAA-GFDL. A single executable program is the typical result.

pyfpm: provides a pydantic model of the fpm package manifest format used in the Fortran package manager, by Sebastian Ehlert

run-fortran: sorts Fortran files based on modules definitions and usages, by lycantropos

Spack: package manager for supercomputers, Linux, and macOS that makes installing scientific software easy. It is not tied to a particular language -- one can build a software stack in Python or R, link to libraries written in C, C++, or Fortran, and easily swap compilers or target specific microarchitectures.

verbose-goggles: Generates Fortran project templates, by Goddard Guryon. The create_project.sh script takes a project name (and optionally a project directory name) as inputs, creates the project folder, the build and docs folders within it, and saves template files for CMake and Doxygen.

xmake: lightweight cross-platform build utility based on Lua. It uses xmake.lua to maintain project builds. The two Fortran compilers supported are gfortran and ifort.

Code Generation

ChatGPT: generates Fortran code from a problem description in English or another natural language and translates code from other programming languages to Fortran, sometimes with errors. The RunGPT Chrome extension allows code to be compiled with gfortran and run within the ChatGPT web interface. Other LLMs that can generate Fortran code are Perplexity, Groq, Claude, Mistral, Vertex AI with Gemini from Google, Llama 3 on Meta AI, and GitHub Copilot.

IRPF90: Fortran programming environment which helps the development of large Fortran codes by applying the Implicit Reference to Parameters method (IRP)

Maple: has a Fortran command that translates Maple code to Fortran 77 (C)

MathCode F90: generates standalone Fortran 90 code from Mathematica code, optionally connected via MathLink to Mathematica (C)

Matlab: the fortran function generates Fortran code fragments from a symbolic expression, or generates files containing code fragments (C)

Maxima the built-in fortran command prints an expression as a Fortran statement. F77 is an enhancement.

Parametric Fortran: Fortran program-generator generator that can produce extensions of Fortran, specialized to support the programming of particular applications, by Martin Erwig et al. Extensions are specified through parameter structures that can be referred to in Fortran programs to describe the dependency of program parts on these parameters.

PSyclone: domain-specific compiler and code transformation system for Finite Difference/Volume/Element Earth-system models in Fortran

sympy: Python library for symbolic mathematics that can generate Fortran code, as illustrated by Ivan Pribec

Command Line Parsing

argv-fortran: better get_command_argument for Fortran that returns the argument in an allocatable character string, by Jacob Williams

cmdff: makes nicer command lines for Fortran codes, by Brad Richardson

command_args: automatically handles the command-line arguments that are passed to the program, by Arjen Markus

f90getopt: getopt()- and getopt_long()-like functionality (similar to the C-functions) for Fortran 90, by Hani Andreas Ibrahim, based on code by Mark Gates

fArgParse: command line argument parsing for Fortran, part of the Goddard Fortran Ecosystem

FLAP: library designed to simplify the (repetitive) construction of complicated CLI in Fortran 2003, by Stefano Zaghi. FLAP has been inspired by the python module argparse and tries to mimic it.

FTN_Getopt: supplies a method for handling command arguments in a manner similar to the getopt facility in C, by Reinhold Bader

M_CLI: cracks the command line when given a NAMELIST and a prototype string that looks very much like an invocation of the program, by urbanjost and Laurence Kedward. Using the NAMELIST group has the benefit that there is no requirement to convert the strings to their required types or to duplicate the type declarations.

M_CLI2: cracks the command line when given a prototype string that looks very much like an invocation of the program, by urbanjost et al. A call to get_args(3f) or one of its variants is then made for each parameter name to set the variables appropriately in the program.

M_kracken95: Fortran 95 version of the kracken(3f) procedure (and related routines) for command line parsing, by urbanjost

optionsf90: module for defining and parsing command-line options and input parameters for Fortran programs, by Christopher N. Gilbreth. Its design is inspired by Python's optparse module.

paramcard: command-line parameter input made simple, by Takahiro Ueda

Compiler Testing

Fortran-compiler-test-suite: contains a framework and suite of cases for testing a Fortran compiler with the primary goals of making it easy for the Fortran community to add tests and making it easy to use the framework with a broad range of compilers, by Brad Richardson et al.

FORTRAN Testing Framework (FTFramework): collection of Python and Bash scripts to enable easy testing of Fortran compilers using the Bash Automated Testing System BATS, by agforero

Compilers

AMD Optimizing C/C++/Fortran Compiler (AOCC): high performance, production quality code generation tool. The AOCC environment provides various options to developers while building and optimizing C, C++, and Fortran applications targeting 32-bit and 64-bit Linux® platforms.

AOMP: open-source Clang/LLVM based compiler with added support for the OpenMP® API on Radeon™ GPUs. Instructions to install f18 are here.

Arm Fortran Compiler: tailored for server, HPC, and scientific codes, with support for Fortran and OpenMP. The compiler is built on the open source Flang front-end, and the LLVM‑based optimization and code generation back-end. (C)

f18-llvm-project: fork of llvm/llvm-project for f18. In sync with f18-mlir and f18.

flang: flang (also known as "Classic Flang") is an out-of-tree Fortran compiler targeting LLVM. It is an open-sourced version of pgfortran, a commercial Fortran compiler from PGI/NVIDIA

flang-wasm: contains tools to build a patched version of LLVM's flang-new compiler that can be used to compile Fortran sources for WebAssembly. A pre-built Fortran runtime library is also built for WebAssembly using Emscripten.

fortran-dev-image: image contains recent versions of compilers, MPI and HDF5 libraries along with basic build tools (CMake, Ninja), by Håkon Strandenes. These images can then be used to compile Fortran applications that depend on MPI and HDF5.

Fortran High-Level Synthesis (fortran-hls-main): enables Fortran on AMD Xilinx devices through the integration of LLVM Flang in the Vitis ecosystem, thus enabling the use of all its features, such as simulation, profiling, and generation of hardware bitsreams. Associated paper: Fortran High-Level Synthesis: Reducing the barriers to accelerating HPC codes on FPGAs, by Gabriel Rodriguez-Canal et al.

fortran-ios: script that acts like a Fortran compiler that uses Flang to build sources for iOS arm64, by Emma Cold

Fortran kernel for Jupyter with Coarray support: from sourceryinstitute

fortran-setup: script to set up a system to use Fortran on an Ubuntu-based system, by Federico E. Benelli. It installs a Python package manager for some Python-based tools, gfortran, optionally Intel oneAPI HPC, BLAS and LAPACK, gdb, fuzzy-finder (fzf), Fortran Package Manager (fpm), findent, flinter, FORD, fortls, and fortran_project, a script to generate and open projects.

fortran.rs: interpreter for Fortran, written in Rust, by Xavier2p, Development in progress

Full-Stack-Fortran: toolchain to compile Fortran to Webassembly, and a few projects using it, by Christoph Honal et al.

gfortran: GNU Fortran project, developing a free Fortran 95/2003/2008 compiler for GCC, the GNU Compiler Collection. The gfortran development effort uses an open development environment in order to attract a larger team of developers and to ensure that gfortran can work on multiple architectures and diverse environments. Gfortran installation on various platforms is discussed at fortran-lang. For Windows there is Quickstart Fortran.

gfortran-for-macOS: gfortran for macOS Intel, by fxcoudert.

g95: stable, production Fortran 95 compiler available for multiple cpu architectures and operating systems. Parts of the F2003 and F2008 standards have been implemented

HPE Cray Programming Environment: fully integrated software suite with compilers, tools, and libraries designed to improve programmer productivity, application scalability, and performance. Besides support for multiple programming languages, programming models, compilers, I/O libraries, and scientific libraries, the suite offers a variety of supported tools for areas including debugging, performance analysis, workload management, and environment setup. (C)

IBM Fortran: XL Fortran for AIX®: Build optimized and tuned Fortran applications on IBM AIX.
XL Fortran for Linux: Optimize your HPC and cognitive Fortran applications for Linux on IBM Power® Systems, including the POWER9™ processors.
VS Fortran: Develop efficient applications for IBM Z® and z/VM® with IBM VS FORTRAN. (C)

Intel Fortran: built on a long history of generating optimized code that supports industry standards while taking advantage of built-in technology for Intel® Xeon® Scalable processors and Intel® Core™ processors. Staying aligned with Intel’s evolving and diverse architectures, the compiler now supports GPUs.

lfortran: modern open-source (BSD licensed) interactive Fortran compiler built on top of LLVM. It can execute user's code interactively to allow exploratory work (much like Python, MATLAB or Julia) as well as compile to binaries with the goal to run user's code on modern architectures such as multi-core CPUs and GPUs.

macos-cross-compiler: compile C, C++, and Fortran code on Linux that will be executed on macOS, by Jerred Shepherd. This project is focused on supporting newer versions of macOS.

Mercurium: C/C++/Fortran source-to-source compilation infrastructure aimed at fast prototyping developed by the Programming Models group at the Barcelona Supercomputing Center. Mercurium is used, together with the Nanos++ Runtime Library, to implement the OmpSs programming model. Both tools provide also an implementation of OpenMP 3.1.

modern-fortran-docker: Dockerfile to build a modern-fortran Docker image. It is based on Ubuntu 23.10, which has several enhancements to the Linux kernel and supports GCC GFortran v13.2.0. This Dockerfile installs gfortran, OpenMPI, and OpenCoarrays and also git clones the modern-fortran projects.

NAG: robust and highly tested Fortran compiler, valued for its checking capabilities and detailed error reporting. Available on Linux, Microsoft Windows and Mac OS X, including Apple Silicon Macs. (C)

NEC: Fortran compiler conforms to the Fortran-2003 standard (ISO/IEC 1539-1:2004) and supports many features from Fortran-2008 (ISO/IEC 1539-1:2010). NEC has more than 30 years’ experience in compiler technology for high-end vector machines, and these newly developed compilers will be based on this experience and support all the optimization strategies that NEC compilers are known for. (C)

NVIDIA HPC Software Development Kit: NVIDIA HPC SDK C, C++, and Fortran compilers support GPU acceleration of HPC modeling and simulation applications with standard C++ and Fortran, OpenACC® directives, and CUDA®. GPU-accelerated math libraries maximize performance on common HPC algorithms, and optimized communications libraries enable standards-based multi-GPU and scalable systems programming.

ompi: open source Message Passing Interface (MPI) implementation that is developed and maintained by a consortium of academic, research, and industry partners

Open Fortran Compiler (ofc): goals are to provide a FORTRAN static code analysis tool, a FORTRAN modernizer which can reprint legacy FORTRAN as F90 where possible, and an alternative FORTRAN front-end for open-source compilers.

Oracle Developer Studio Fortran compiler, f95: provides the following features and extensions: Optimized automatic and explicit loop parallelization for multiprocessor systems, VAX/VMS Fortran extensions, OpenMP parallelization directives, and global, peephole, and potential parallelization optimizations produce high performance applications. (C)

playground: interactive Fortran playground in the browser, by Ashirwad Mishra et al. Its main purpose is for newcomers to easily get a taste for the language and learn the essentials of Fortran programming.

ROSE: compiler infrastructure to build source-to-source program transformation and analysis tools for large-scale C (C89 and C98), C++ (C++98 and C++11), UPC, Fortran (77/95/2003), OpenMP, Java, Python and PHP applications

setup-fortran: GitHub action to set up Fortran compiler and toolchain on Ubuntu, macOS and Windows, from fortran-lang. Available compilers are gfortran, ifx, ifort, lfortran, and nvfortran.

Silverfrost Fortran FTN95: full Fortran 95 standards compliant compiler, capable of producing fast executables for Win32 and for Microsoft .NET. FTN95 ships with the world's best runtime checking and a great range of supporting software. There is a free personal edition. (C)

VSI Fortran for OpenVMS: supports the FORTRAN 66, FORTRAN 77, Fortran 90, and Fortran 95 standards

xcc-project: C/C++/Fortran compiler collection written in Java, by JianpingZeng

Debugging

Fortran Stacktrace: generates stack traces by providing a Fortran wrapper around the C++ library backward-cpp. It also integrates with the Fortran error-handling library in order to generate errors that includes a stacktrace.

gdb_fortran_tools: support more advanced gdb debugging of Fortran code: generic access to many basic numpy array operators: sum, min, max, log10, etc.; graphics: plot, imshow, scatter; save data: pickle, CSV, by Ken Mankoff and X-Neon

serialbox: data serialization library and tools for C/C++, Fortran, and Python3, used to build validation frameworks against reference runs, from ETH Zurich

ups: source level C, C++ and Fortran debugger that runs under X11, by Mark Russell. Currently supported systems are FreeBSD and GNU/Linux on Intel x86 and Solaris on SPARC.

Emacs Plugins

align-f90: alignment support for Fortran 90 in Emacs, by jannisteunissen

Doom Emacs Fortran Module: enables a complete, modern development environment for Fortran. It has integration with fpm, LSP support via fortls, auto-formatting via fprettier, and support for gfortran and Intel Fortran.

Emacs: extensible, customizable, free text editor. Download here.

f90format: package that hooks up fprettify with Steve Purcell's emacs-reformatter to format modern Fortran source, by Troy Brumley

f90-iface: Emacs-based browser for Fortran 90 generic interfaces, by wence- and monnier

f90-namelist-mode: extension to Emacs f90-mode to handle Fortran namelists, by ZedThree

fortpy: Python Emacs Intellisense and Unit Testing Support for Fortran, by rosenbrockc and wsmorgan

fortpy-el: Lisp package for emacs that integrates with fortpy to provide context-specific auto-completion and intellisense for Fortran 2003, including object oriented constructs, by rosenbrockc

fortran-index-args: numbers subroutine arguments and shows indexes before each argument in the list, by ffevotte. Such indexes are just displayed on screen, but do not modify the underlying buffer.

Fortran layer: basic Spacemacs configuration layer for the Fortran language, by Marco Scopesi

Fortran-tags: Fortran source code indexing tool with the focus of finding the definition of any variable or procedure, by raullaasner et al. It is able to correctly locate all global and local variables and is expected to work with any Fortran 2008 conforming code with some exceptions as mentioned below.

fprettify.el: interface to fprettify, auto-formatter for modern Fortran code, by osada-yum

Fixed to Free Source Form Conversion

ccx_fff: Python script converting old Fortran 77 code to the one with free form, from calculix. Shifts comments and continuation marks for better code folding.

EZUP: tool to convert Fortran fixed source form to free source form to be compatible with ELF90, by August Miller

f2f: Perl script which does much of the tedious work of converting FORTRAN 77 source code into modern Fortran, by Colby Lemon

f2f90: utility to convert FORTRAN 77 fixed source form to Fortran 90 free source form, by Michael Metcalf, Peter A. Rochford, and Ben Trettel

f77tof90: Python script that reads in a Fortran 77 (.f or .F) fixed form file and converts it to a free form Fortran 90 file (.f90 or .F90), by mattdturner. It was successfully used to convert a legacy codebase (over 400 .f/.F files and millions of lines of code) from Fortran 77 to Fortran 90.

ffixed2free: converts FORTRAN fixed-format source code (FORTRAN 77 style) to free-format source code (Fortran 90 style), by Pirmin Kaufmann and Martin Schraner. Ffixed2free does not require the fixed-format code to be restricted to the FORTRAN 77 standard.

FORTRAN77_to_Fortran90: convert old fixed source FORTRAN 77 code to free form Fortran 90 code, by Koushikphy

fortran-legacy-tools: tools to deal with Fortran code: fixed to free source form converter, upper- to lowercase converter, formatter for variable declarations, by ylikx

fortran_tools: Python 2 script by James Goppert and Lenna Peterson

freestyle: script to convert fixed form Fortran files (written in Fortran 77) and header files to free form, by bast

GConvert: program to convert fixed form Fortran into code that works as fixed or free form, by GeorgeTsikas.

to_f90: Alan Miller's tool for converting Fortran 77 code to free-form Fortran 90 code, from jbdv-no

Graphical User Interfaces

EGGX/ProCALL: X11 graphics library for C, C++ and FORTRAN created to achieve simplicity. One can easily create 2D graphics on the X Window System by using BASIC-style drawing functions.

ftk: provides a straightforward means to build graphical user-interfaces in Fortran based on Tcl/Tk, by Arjen Markus. In its current state it is proof of concept, not a full-fledged library.

fortran-graphics: graphics library written in OpenGL, by Ed Higgins

GINO: high-end feature-rich API for creating complex 2D and 3D graphics and GUI applications. The GINO products are available for Fortran under Windows and Linux. (C)

gtk-fortran: cross-platform library to build Graphical User Interfaces (GUI), by Vincent Magnin et al. Gtk-fortran is a partial GTK / Fortran binding written in Fortran, thanks to the ISO_C_BINDING module for interoperability between C and Fortran.

tiny file dialogs: offers many modal and file dialogs in C and provides the iso_c_binding interface / module to call these functions from Fortran, by Guillaume Vareille

Winteracter: GUI toolset for the Fortran programming language. It consists of various visual development tools and a substantial subroutine library. Several Fortran compilers are supported. (C)

Indentation and Formatting

ajt-fortran.vim: port of Ajit J. Thakkar's Vim indent script

FF08Obfuscate: command line tool for generating a superficially obfuscated variant of the source of a Fortran 2008 program, written in Fortran 2003 by IanH. It does this by modifying the identifiers in the program and rendering the code without any source comments.

findent: indents and beautifies Fortran source, fixed and free format, and converts Fortran fixed format to Fortran free format, by wvermin and MFTabriz. Findent-pypi, by gnikit, has PyPi wheels.

flower: converts free-format Fortran code to all lowercase or all uppercase, by urbanjost. In each case comments and quoted text are left as-is.

FortranIndent: tools to indent Fortran 90 sources, from Kairzhan

FortranIndenter_UNESP_2007: indenter for Fortran 77 developed in C, by Rafael Delalibera Rodrigues and Paulo Henrique Arantes Urgal

fprettify: auto-formatter for modern Fortran code that imposes strict whitespace formatting, written in Python, by pseewald

f90split: splits free source form Fortran code into multiple files, one module or procedure per file, by Michel Olagnon, adapted by urbanjost for use with the Fortran Package Manager. Contained procedures are stored within their parent procedure

IndentPatternFortran: general indentation patterns for Fortran, by JHenneberg

xpand: expands tabs in files. removes trailing white space, and optionally removes multiple blank lines, by urbanjost. It is primarily intended for use on systems without access to the Unix command expand(1).

Interoperability

ctypesForFortran: Python module to generate Python bindings to Fortran subroutines using ctypes, by Sébastien Riette and Alexandre Mary

Cython fortran-file: fast and easy reader for record-based binary format, as written by Fortran, by Corentin Cadiou

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.

extutils-f77: Perl module that tries to figure out how to link C programs with Fortran subroutines on a system, adding a list of Fortran runtime libraries, by mohawk2 et al.

f2py-with-derived-types: demonstrates how to use f2py with Fortran derived types with type-bound procedures, by Nick Wogan

F2x: versatile, template-based Fortran wrapper written in Python. Compared to the popular tool f2py it comes with two important differences: a full Fortran parser based on the work by the OpenFortranParser, and a very flexible code generation backend that uses Jinja2 templates.

f90nml: Python module and command line tool, by Marshall Ward et al., that provides a simple interface for the reading, writing, and modifying Fortran namelist files. A namelist file is parsed and converted into an Namelist object, which behaves like a standard Python dict

f90_port: tests Erlang ports to Fortran, by Pedro Schreiber, explained here

f90wrap: Fortran 90 to Python interface generator with derived type support, by jameskermode et al.

ffi-flang-zig: FFI between flang-new runtime and Zig by Matheus C. França, inspired by sourceryinstitute/ISO_Fortran_binding. LLVM/flang v18.1.7 files are included in this repository.

fffi: tool to transparently use shared libraries generated by Fortran in Python with NumPy arrays, from the pyccel project. It is based on CFFI and currently assumes the use of gfortran or Intel Fortran.

fgen: provides Python interfaces to Fortran code, specifically derived types, by Jared Lewis and Zebedee Nicholls. An example of fgen-wrapped Fortran code is at fgen-example.

fimport: Python import hook for importing Fortran module, by Pauli Virtanen

fmodpy: lightweight, efficient, highly automated, Fortran wrapper for Python, by Thomas Lux. The generated wrappers are self contained, written purely in Python, and are immediately sharable to any other POSIX platform with a Fortran compiler installed.

fortformat: Rust parser for Fortran format strings, by Joshua Laughner

Forthon: Python wrapper generator for Fortran, allowing access to functions and subroutines, by David Grote et al.

FortModGen: generate consistent Fortran and C/C++ data structures, and a consistent C/C++ API from a toml configuration file for global object interop, from neut-devel

fortran2cc2fortran: Fortran to C / C to Fortran (nested) index converter, by Hans Alemão

Fortran90Namelists.jl: Julia implementation of Python f90nml for working with Fortran namelists

FortranFile: read data using Swift from files using a Fortran format specification, by Nick Everitt

FortranFiles.jl: Julia package for reading/writing Fortran unformatted (i.e. binary) files, by Frank Otto et al.

Fortran filesystem: file system path manipulation utilities for standard Fortran, from scivision. Inspired by Python pathlib and C++17 filesystem.

FORTRAN format interpreter for Python (py-fortranformat): Generates text from a Python list of variables or will read a line of text into Python variables according to the FORTRAN format statement passed, by Brendan Arnold and michaelackermannaiub

fortran_magic: extension for IPython/Jupyter that helps to use Fortran in an interactive session, by Martín Gaitán

fortran_meson_py: example of building Python API of Fortran project with Meson, by Salvador Brandolín. The objective is to demonstrate how to integrate a Fortran library that runs with the Fortran Package Manager (fpm) and a Python API within the same repository, enabling package building and distribution.

FortranNamelist: Java reading class for Fortran namelists, by Jonathan Schilling

Fortran Namelist Reader: Python and Matlab readers for Fortran namelist => dict / struct, from scivision

fortran-namelist: Ruby library to manipulate Fortran namelists, by Saji Hameed

fortran-unix: Fortran 2008 ISO C binding interfaces to selected POSIX and SysV types, functions, and routines on 64-bit Unix-like operating systems, by interkosmos

fpydemo: demonstration of packaging a command line tool written in Python and Fortran, by Saikat Banerjee

ftest: demonstrates how to call R functions from Fortran, by Balasubramanian Narasimhan. A fully worked example is provided in the form of a vignette.

fython: Fython is Fortran with a Python syntax, by Nicolas Essis-Breton. Fython code can be used in Python with a standard import statement.

GenericF2PY: demonstrates how to handle Fortran binaries in Python modules, by Charlie Taylor

gfort2py: library to allow calling Fortran code compiled with gfortran from Python 2.7 or Python 3, by Robert Farmer and Ondřej Čertík

h2m-Autofortran-Tool: allow easy calls to C routines from Fortran programs, by Garnet Liu and Michelle Anderson. Given a header file in standard C, h2m will produce a Fortran module providing function interfaces which maintain interoperability with C. Features for which there are no Fortran equivalents will not be translated and warnings will be written to standard error.

haskell-fortran: example of how to use Haskell's foreign function interface (FFI), and C's Fortran FFI, to connect ultimately Fortran code to Haskell, and to Haskell's HMatrix library, by Josh Freckleton

inline: provides functionality to dynamically define R functions (and corresponding S4 objects) from in-line C, C++ or Fortran code, by Dirk Eddelbuettel et al.

jansfortrankernel: Jupyter kernel implementation of Fortran, by Jan Arman Parpin

libfde: Fortran Development Extensions (library), by Zorkator

M_process: read and write lines to or from a process from Fortran via a C wrapper, by urbanjost

M_system: module that allows Fortran to call commonly available C routines that perform basic system operations like creating and deleting files and directories, changing and querying file permits, getting basic ID and process information, ... and other POSIX system requests, by urbanjost

multilingual-julia: minimally complete examples of Julia calling and being called by Fortran, C, and Python, by Alex Barnett

Mwrap: interface generation system in the spirit of SWIG or matwrap, by Zydrunas Gimbutas et al. From a set of augmented MATLAB script files, MWrap will generate a MEX gateway to desired C/C++/Fortran function calls and MATLAB function files to access that gateway. Mwrapdemo by Alex Barnett contains simple, minimally complete examples showing how to use MWrap to link to a C or Fortran library, pass in and out 1D and 2D arrays, handle complex, float, and Boolean types, and use OpenMP.

namelist_python: Fortran namelist parser in Python, by Leif Denby et al.

nml: R package for parsing Fortran namelist files, by Jem Stachelek et al.

nml: query/modify utility in Clojure for Fortran namelists, by Paul Madden and Jemma Stachelek

nml: serialize and deserialize Fortran namelist input in Rust using the serde framework, by manorom

node-fortran: bridge that allows Fortran code to be from Node.js, by Ionică Bizău

process_model: reads a TensorFlow SavedModel and outputs Fortran code to interface it to the fortran-tf-lib, by Simon Clifford et al.

pyifb: Python interface to Fortran's ISO_Fortran_binding.h, by Robert Farmer

RFortranRcpp: communication between Fortran, Rcpp and R, by Konrad1991. Passing R or Fortran user code to Fortran code from a package.

setup_mex: provides scripts that attempt to facilitate setting up the MATLAB MEX on macOS or Windows, by Zhang Zaikun. For Fortran, it will install (automatically) the Fortran compiler from Intel oneAPI

shroud: creates a Fortran or Python interface to a C or C++ library, from LANL. It can also create a C API for a C++ library.

Simplified Wrapper and Interface Generator (SWIG): creates Fortran wrapper code from C++ headers

SUtools: Tools for autogenerating Fortran registration code for R, by Balasubramanian Narasimhan

thenamelisttool: provide command line tools useful to work with namelists or pack of namelists (update them, compare them, ...), by Louis-François Meunier and Alexandre Mary

TorchFort: deep learning training and inference interface for HPC programs implemented using LibTorch, the C++ backend used by the PyTorch framework. This library can be invoked directly from Fortran or C/C++ programs.

vecLibFort: lightweight but flexible "shim" designed to rectify the incompatibilities between the Accelerate/vecLib BLAS and LAPACK libraries shipped with Mac OS X and FORTRAN code compiled with modern compilers such as GNU Fortran, by Michael C. Grant and Robert Huston

Parallel Programming

allgebra: docker images for developing C++ and Fortran HPC programs, by termoshtt and t-hishinuma

Codee: automatic code inspection platform specialized in performance for time-critical C/C++/Fortran applications (C). Training materials are here.

fortran-parser: Fortran preprocessor in Python, by Touko Puro, designed for multithreading and GPU offloading through OpenMP, featuring automatic privatization of modified global variables in multithreaded code, Fortran array operation unrolling to DO-loops with automatic declaratives to spread work either along CPU or GPU threads, automatic declarations for global variables needed in target regions, and function inlining which helps OpenMP offloading

gpufort: source-to-source translation tool for CUDA Fortran and Fortran+X in the spirit of hipify

hipfort: Fortran Interface For GPU Kernel Libraries

Hybrid-Fortran: directive-based extension for the Fortran language to support GPGPU. Its input is Fortran code with Hybrid Fortran extensions, and its output is CUDA Fortran or OpenMP Fortran code.

mpich: high-performance and widely portable implementation of the MPI-3.1 standard from the Argonne National Laboratory

occa: portable, and vendor neutral framework for parallel programming on heterogeneous platforms. The OCCA API provides unified models for heterogeneous programming concepts—such as a device, memory, or kernel—while the OCCA Kernel Language (OKL) enables the creation of portable device kernels using a directive-based extension to the C-language.

ohhelp-for-fpm: dynamic load balancing and scalability library that supports massively parallel particle-in-cell simulations using MPI. Each process handles the particle calculations within the partitioned area while taking on some of the particles handled by other processes so that the overall load is balanced.

Omni Compiler: compiler for code including XcalableMP, XcalableACC, and OpenACC directives. The base languages supported by Omni Compiler are C language (C99) and Fortran 2008 in XcalableMP, and C language (C99) in XcalableACC and OpenACC.

OMPify: generates OpenMP pragmas for C, C++ and Fortran code snippets using Transformers.

OpenCoarrays: supports Fortran 2018 compilers by providing a parallel application binary interface (ABI) that abstracts away the underlying parallel programming model, which can be the Message Passing Interface (MPI) or OpenSHMEM, from sourceryinstitute

SPEL_OpenACC: code associated with the paper SPEL: Software tool for Porting E3SM Land Model with OpenACC in a Function Unit Test Framework, by Peter Schwartz et al., 2022 Workshop on Accelerator Programming Using Directives (WACCPD). It provides a robust method to port the E3SM Land Model (ELM) onto GPUs.

stng: compiler for Fortran stencils using verified lifting, by Alvin Cheung et al. It takes input codes in Fortran and automatically rewrites them to Halide, a new high-performance domain-specific language that leverages GPUs for computation.

System FOR Automated Parallelization (SAPFOR): software development suite that is focused on cost reduction of manual program parallelization, by kaniandr and zoocide. It was primarily designed to perform a source-to-source transformation of a sequential program for execution on heterogeneous clusters.

Plotting

accis: plotting and graphics library by Ian Hutchinson. Related project: PLOTTRACES

asgl: produces a PostScript or Encapsulated PostScript file that can contain scatter plots, line plots, histograms, 2D density plots, and/or bond-and-stick plots of molecules, by Andrej Šali

CHART_COUPE: Fortran plotting package based on NCL libraries, tuned for geophysical numerical model output, from meom-group

DISLIN: high-level plotting library for displaying data as curves, polar plots, bar graphs, pie charts, 3D-color plots, surfaces, contours and maps, available for several C, C++, Fortran 77 and Fortran 90/95 compilers on the operating systems Unix, Linux, FreeBSD, Windows, Mac OSX and MS-DOS. The DISLIN distributions can be used freely without any restrictions. Access to the source code and a preferred support is available via a contract.

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.

fplot: provides a convenient interface for plotting with gnuplot, by jchristopherson

fortplot: plot module for Fortran so that plotting can be done in real time (on the fly), by Anjishnu Sarkar

giza: 2D scientific plotting library built on cairo, by Daniel Price et al. Provides uniform output to pdf, ps, png and X-Windows. Written in C with no dependencies (other than cairo) as a direct replacement for PGPLOT.

gnufor2: Fortran 90 module by Alexey Kuznetsov with subroutines for plotting data, including 2D, 3D plots, surfaces, polar coordinates, and histograms. It is a modification of the GNUFOR interface written by John Burkardt.

gnuplotfortran: Fortran 95 gnuplot interface for some Unix-like OS'es, by Madhusudan Singh. This provides some routines that enables direct access of a child gnuplot session from a Fortran 95 program. fortranposix must be installed.

graffer: interactive tool for generating plots of data and/or functions, by James Tappin. The original graffer was an IDL program. This version provides most of the same functionality in a Fortran program using gtk-fortran and plplot for the GUI and plotting respectively. To display functions gdl (gnudatalanguage) or IDL is required.

M_calcomp: old graphics library used in conjunction with M_draw for work with old codes, by urbanjost. The CALCOMP library is a simple set of FORTRAN callable graphic routines that allows users to quickly construct plots.

M_slices: basic slice plot module based on M_draw(3f) and built using fpm, by urbanjost. This version requires X11 Windows.

MUESLI: numerical and graphical library, written mainly in Fortran 95, by Édouard Canot. Fortran Muesli Library contains all necessary materials to numerically work with a dynamic array (dynamic in size, type and structure), called mfArray. Fortran Graphics Library contains graphics routines which use the mfArray objects.

ogpf: Object-Based Interface to gnuplot from Fortran, by kookma

PG2PLplot: facilitate the transition from Fortran code linked against PGPlot to linking it against PLplot, which is open source and maintained. Currently, many PGPlot routines are included, but the code is by no means exhaustive.

PGPLOT PGPLOT Graphics Subroutine Library is a Fortran- or C-callable, device-independent graphics package for making simple scientific graphs, by Tim Pearson. It is intended for making graphical images of publication quality with minimum effort on the part of the user. For most applications, the program can be device-independent, and the output can be directed to the appropriate device at run time.

plotterf90: graphics subroutine library producing Postscript, by Masao Kodama

Plotutil: uses gnuplot to draw plots from data files, by Roninkoi. Has array handling utils and code for sorting and line fitting.

PLplot: can be used to create standard x-y plots, semi-log plots, log-log plots, contour plots, 3D surface plots, mesh plots, bar charts and pie charts. Multiple graphs (of the same or different sizes) may be placed on a single page, and multiple pages are allowed for those device formats that support them. C library with bindings to Fortran 2003 and many other languages. archlinux-plplot-fortran has a plplot build for Fortran on archlinux, by Vikas Sharma.

PlPlotLib: wrapper for PlPlot inspired by the interface of matplotlib, by zoziha. It is intended to fill the need for rapid feedback while developing numerical simulations, and does not replace more sophisticated packages such as matplotlib or even direct use of PlPlot.

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

PSPLOT: library of Fortran-callable subroutines which can be combined in a calling program to produce PostScript plot files. Intended for users interested in generating technical drawings or graphics for technical journals in PostScript format.

PyFerret: Ferret is an interactive computer visualization and analysis environment designed to meet the needs of oceanographers and meteorologists analyzing large and complex gridded data sets, from NOAA/PMEL. It runs on recent Unix and Mac systems, using X windows for display. PyFerret, introduced in 2012, is a Python module wrapping Ferret.

pyplot-fortran: generate plots from Fortran using Python's matplotlib.pyplot, by Jacob Williams

SPLASH: visualisation tool for Smoothed Particle Hydrodynamics (SPH) simulations in one, two and three dimensions, developed mainly for astrophysics, by Daniel Price et al. It uses a command-line menu but data can be manipulated interactively in the plotting window. SPLASH can also be used as a standalone plotting tool for any kind of tabulated or image data from ascii, csv or .fits files.

Preprocessors

efpp: preprocessor for eFortran, a dialect of modern Fortran presented in S. Hosoyamada and A. Kageyama, A Dialect of Modern Fortran for Simulations in Methods and Applications for Modeling and Simulation of Complex Systems, Communications in Computer and Information Science, vol 946, pages 439-448, 2018 (Proceedings of AsiaSim2018).

exceptions: experiment with exceptions in Fortran via a simple preprocessing step, by Arjen Markus

f90 do nest: Python script to generated deeply nested do loops in Fortran, by Thomas Hayward-Schneider. It will generate "classical" nested do/enddo in f90code.F90 and also a do concurrent version in f90code_conc.F90.

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.

fortiel: Fortran preprocessor and metaprogramming engine, by Jhuighuy

fypp: Python-powered preprocessor, by aradi. It can be used for any programming languages but its primary aim is to offer a Fortran preprocessor, which helps to extend Fortran with condititional compiling and template metaprogramming capabilities

prep: Fortran pre-processor written in Fortran, by urbanjost

Profiling

Caliper: library to integrate performance profiling capabilities into applications, from LANL. To use Caliper, developers mark code regions of interest using Caliper's annotation API. Applications can then enable performance profiling at runtime with Caliper's configuration API.

HPCToolkit: integrated suite of tools for measurement and analysis of program performance on computers ranging from multicore desktop systems to the nation's largest supercomputers. By using statistical sampling of timers and hardware performance counters, HPCToolkit collects accurate measurements of a program's work, resource consumption, and inefficiency and attributes them to the full calling context in which they occur.

MALloc Tracker (malt): finds where and how memory is allocated in C/C++/Fortran applications

Reference-Counter: extensible, object-oriented reference-counting utility for Fortran, described in Rouson, Morris & Xia (2012) This Isn't Your Parents' Fortran: Managing C++ Objects with Modern Fortran. Computing in Science & Engineering 14(2), 46-54.

timemory: performance measurement and analyis package with modular and reusable components which can be used to adapt to any existing C/C++ performance measurement and analysis API and is arbitrarily extendable by users within their application, from NERSC

Refactoring

FLOPPY: checks FORTRAN 77 code it according to various "coding conventions", by Julian J. Bunn. It can "tidy" the source FORTRAN, producing a new file with indented, do-loops, block if-s, and so on. The FLOW program takes the binary summary file produced by FLOPPY and produces various reports on the structure of the original FORTRAN program.

FordADT: associated with paper An Automated Tool for Upgrading Fortran Codes, by Lesley Mak and Pooya Taheri, Software (2022), discussed here

Fortran Language Program Remodeling system (FLPR): C++17 library for manipulating Fortran source code, from LANL. This package contains a "best effort" Fortran 2018 input parser for fixed and free form inputs, data structures for manipulating source code at the program unit, statement, and physical line levels, and sample applications that illustrate usage and provide some ideas as to how you could use the library.

Glasgow Fortran Source-to-Source Compiler (RefactorF4Acc): automatic refactoring tool to make Fortran code acceleration-ready, by wimvanderbauwhede and rouson. RefactorF4Acc's main purpose is to make legacy FORTRAN 77 acceleration-ready. In the process it converts FORTRAN 77 code into Fortran 95. In addition, RefactorF4Acc has a backend to translate modules to C/OpenCL.

Fortran Kernel Generator: KGen: Python tool that extracts partial codes out of a large Fortran application and converts them into a standalone/verifiable/executable kernel, by Youngsung Kim and John Dennis

fortrantools: tools to enable the use old or proprietary Fortran code with gfortran. They are intended to be used together with the gcc extensions in CodethinkLab's gcc branch.

Refactoring Of QUEstionable FORTran (Roquefort): creates module to replace existing common blocks, removes unused variable imported from modules, transforms implicit variable declaration to explicit variable declaration, and moves variables to a new module, from NLESC-JCER

Tidy: renumbers and otherwise cleans up old and tired FORTRAN source programs. TIDY accepts ANSI Fortran 77 with a default of 19 continuation cards as well as some IBM and CDC dialect FORTRAN statements, originally by Harry Murphy

Static Analysis

camfort: refactoring and verification tool for scientific Fortran programs. It currently supports Fortran 66, 77, and 90 with various legacy extensions.

Cleanscape FortranLint: static source code analysis tool that reduces your organizational exposure to risks from latent software problems by automatically identifying problems at their source -- in the Fortran code prior to compiling or executing programs. (C)

CompareFortranNamelists: Python class to compare Fortran namelists, by Kai Keller

Code Comprehension Assistance for Evidence-Based performance Tuning (CCA/EBT): extracts the syntactic/semantic structures from Fortran code and then provides outline views of the loop-nests and the call trees decorated with source code metrics.

FF08Diff: command line tool for obtaining the semantic difference (difference in meaning, rather than appearance) between two sets of Fortran 2008 source files, written in Fortran 2003 by IanH

flint: Little linter for Fortran, with static analysis and formatting, by JonasToth

flint: aspires to be a Fortran parser, delinter, and analyser, by marshallward. For now, it is a Fortran tokenizer, with tools for parsing and automated documentation.

flint: source-code static analyzer and quality checker with multiple programming languages support. For fortran, it intends to follow the coding conventions mentioned in OMS Documentation Wiki page.

Forcheck: oldest and most comprehensive Fortran analysis tool on the market. It performs a static analysis of a Fortran program or separate Fortran program units. (C)

fordoctest: assures consistent documentation of a Fortran code, by Federico E. Benelli, checking on the source files included in a FORD file and warning if there is more than one module per file or if there are undocumented isolated procedures, modules, module procedures, or procedure arguments.

fortitude: Fortran linter and formatter, written in Rust, from PlasmaFAIR

FortranAS: Antlr4-powered FORTRAN parsing and code clone detection tool. FortranAS leverages grammars-v4 to generate parsers and lexers and supports any FORTRAN version with available corresponding grammars.

FortranProcedureDictionary: parses Fortran source files and extract information about procedures such as main programs, modules, functions, and subroutines, by Akhil Akkapelli. It utilizes the ANTLR4 library through PyCall to parse Fortran syntax and generates a text file containing the extracted procedure details.

fortree: Python app that creates call trees of your Fortran code, by Esther Taillifet. Fortree makes call trees, definition trees and dependencies trees.

ForUML: reverse engineering tool that generates Unified Modeling Language (UML) class diagrams from object-oriented Fortran programs, by azizn and Damian Rouson. ForUML understands and diagrams Fortran class relationships, including inheritance and aggregation. ForUML also detects and depicts operator overloading, constructors, and parallel data structures (coarrays).

fortlint: Fortran static source code analysis for more secured and bug free applications

fortrancallgraph: static source code analysis for Fortran, tracking variables in a routine's callgraph, from fortesg

fortran-callgraph: Tool to create call graphs from JULES source code

FORTRAN_callgraph_browser: browsing tool that reads in a directory of Fortran code and displays it as an interactive graph, by Dan Ellis and Richard Rigby

Fortran code quality: simple Python script that parses Fortran files and gives feedback on a few metrics relating to code quality, by Eirik F. Kjønstad and Sander Roet

Fortran linter: simple fortran syntax checker, including automatic fixing of the code, from cphyc

fortran-linter: linter for Fortran 77 using Parsec-like parsing combinators in Python, by uchchwhash

fortran_python_tools: analyzes the variable usage of fixed source form Fortran 77 code, by jinyuntang

FortranTree: parses Fortran source code and creates a call tree graph with Python, by imaliyov. The code relies on pygraphviz and fparser.

fortran-vars: static analysis library for Fortran code. It is built on top of the open source project fortran-src which provides lexing, parsing and basic analyses of Fortran code. Fortran-vars focuses on supporting the Fortran 77 standard and extensions. It provides a Fortran memory model with a symbol table and storage table, constant expressions evaluation, constant propagation analysis.

fparser: parser in Python which supports Fortran 2003 and some Fortran 2008, maintained by Andrew Porter et al., originally by Pearu Peterson

fpt - Tools for Fortran Engineering - Error Checking, Measurement and Assessment, Structural Engineering, Software Migration, Run-time Testing, and more. (C)

fsource: Fortran static analysis tool written in pure Python, by mwallerb

ftnchek: static analyzer for Fortran 77 programs. It is designed to detect certain errors in a Fortran program that a compiler usually does not.

fxtran: parses Fortran source code and decorates it with XML tags. The result is an XML file which can be searched with XPath, and modified with the DOM API.

i-CodeCNES: static code analysis tool to help developers write code compliant with CNES coding rules for Fortran 77, Fortran 90 and Shell, from cnescatlab. Related project: sonar-icode-cnes-plugin

K-scope: source code analysis tool with graphical user interface that visualizes program structures for Fortran 90 and FORTRAN 77 source code. This tool simply visualizes call tree from AST based on compiler's static analysis.

p6-fortran: Fortran language parser in Raku, by Edward Higgins

plusFORT - multi-purpose suite of tools for analyzing and improving Fortran programs, free for personal, educational and academic users working on non-commercial projects. (C)

pyft: Python script that reads a Fortran code, parses it in xml, performs some manipulations, and reverts it to Fortran, from UMR-CNRM. It can add and remove variable declarations, find unused variables, convert code to lower or upper case, and do other things listed here.

Simple Lint GitHub Action (simple_lint): runs simple lint-like actions on files in a git repository, from NOAA-GFDL. The current list of lint actions are to check for trailing whitespace, check Fortran files for use of tab characters, and check Fortran files for lines longer then a specified length.

tree-sitter-fortran: Fortran grammar for tree-sitter, by Matthew Stadelman et al.

Understand: static analysis tool focused on source code comprehension, metrics, and standards testing, supporting standards through Fortran 2008 (C)

Text Editors, Integrated Development Environments, and Plugins

atom-build-fpm: plugin for running the Fortran Package Manager (fpm) from within Atom

Code::Blocks: free C/C++ and Fortran IDE built to meet the most demanding needs of its users. It is designed to be very extensible and fully configurable. SYLau has created a short tutorial on using Fortran with Code::Blocks.

linter-gfortran: linting Fortran code in Atom with gfortran

f90.kak: modern Fortran syntax for kakoune editor, by Andre Smit

FortranCodeNav: Visual Studio Extension which helps navigate modern Fortran code, by Tiemen Schreuder. It contains several parsers to generate a code structure representation which is used to provide jump-to and search functionality with limited context-awareness.

Fortran IntelliJ Idea plugin: Fortran language plugin for IntelliJ Idea, by satamas

Fortran Language Server: A Fortran implementation of the Language Server Protocol using Python (2.7+ or 3.0+), by hansec. Editor extensions using this language server to provide autocomplete and other IDE-like functionality are available for Atom, Visual Studio Code, Visual Studio, (Neo)vim, and Emacs.

Fortran Language Server (fortls): based on @hansec's original Language Server implementation but the two projects have since diverged. fortls (this project) is now developed independently by gnikit of the upstream hansec/fortran-language-server project and contains numerous bug fixes and new features the original fortran-language-server does not.

fortranNeoVIM: neovim config for Fortran programming, by Vuncano. Config files made using Lua, inpired by third part config. Also FortranDictionary_vim, a Fortran keyword dictionary, or word list, made to use specially with vim's built-in dictionary completion

fortran_syntax_highlighter_lite-xl: syntax highlighter for Fortran in lite-xl, by Rohan Vashisht

fortran.tmbundle: TextMate support for Fortran. TextMate is a graphical text editor for macOS 10.12 or later.

fortran-vim-plugin: Vim plugin for Fortran developers that can be used to jump to the declaration of a variable, subroutine, function, etc. and to all its references, by Tobias Melson

fossil: Fortran IDE designed in Python by someone eager to learn Fortran but in an easy and accessible way, by nrwade0

Guide_VSCode-fortran: comprehensive guide on how to set up a complete development environment for Fortran in Visual Studio Code, by Julian Henneberg

Modern-Fortran: language syntax for highlighting of Fortran code in Sublime Text, by eirik-kjonstad. It highlights modern Fortran (Fortran 90 and newer) and incorporates features introduced in Fortran 2003, 2008, and 2018.

neovim: Vim-fork focused on extensibility and usability

Photran: IDE and refactoring tool for Fortran based on Eclipse and the CDT. Photran supports Fortran 77-2008. It includes 39 refactoring, including Rename, Extract Procedure, and loop transformations

qtcreator-fortran: support for Fortran projects and source files in Qt Creator as well as syntax-highlighting, by Jonas Lindemann

Simply Fortran: modern Fortran development environment for Microsoft Windows, Apple macOS, and GNU/Linux systems. It includes the Aplot library for creating two-dimensional graphs and plots quickly from Fortran routines and AppGraphics for creating graphics and graphical user interfaces from either Fortran or C. Free 30-day trial. (C)

SublimeLinterFortran: linter plugin for SublimeLinter provides an interface to gfortran, by Ramón L. Panadés-Barrueta and Tejas Shetty. It will be used with files that have free format Fortran syntax.

TiddlyFor: single file, self-contained wiki, a a flavor of TiddlyWiki, for a Fortran programmer but that can be used for any other purposes, by Mohammad Rahmani. It can be put on the web, sent as an email attachment, or put on a thumb drive. Some features are syntax highlighting for modern Fortran and support for math formulas through katex.

vim: improved version of the UNIX editor Vi. Many new features have been added: multi-level undo, syntax highlighting, command line history, on-line help, spell checking, filename completion, block operations, script language, etc. Download here.

vimf90: Fortran ide for vim

vim-findent: vim plugin for Findent, which indents Fortran sources, by cradesto

vim-fortran-fpm: convenience functions for integrating vim with Fortran Package Manager, by Alexey Vyskubov

vim-FORTRAN-UPPER: vim plugin for automatic capitalization in Fortran source, by William C. Dawn

vim-tmux-IDE: minimal vim IDE by luco00. Sets a connection with external terminal via tmux to interactively execute code (Python, R, Julia, Fortran, Go are supported).

Visual Studio Code (vscode): combines the simplicity of a code editor with what developers need for their core edit-build-debug cycle, from Microsoft. It provides comprehensive code editing, navigation, and understanding support along with lightweight debugging, a rich extensibility model, and lightweight integration with existing tools.

vs-fortran-ls-client: Language Server Protocol client that connects to Chris Hansen's Fortran Language Server to add IntelliSense for Fortran to Visual Studio 2017

vscode-fortran-support: extension that provides support for the Fortran programming language. It includes syntax highlighting, debugging, code snippets and a linting based on gfortran.

vscode-modern-fortran-formatter: formatter extension for modern Fortran using fprettify, by Yuki Hanayama

Yapakit: free Fortran source code editor for Windows, Linux or Mac. It can automatically an html documentation of a project and generate Fortran 90 dependencies for inclusion in a makefile, taking module dependencies into account

Translation from Fortran

CFortranTranslator: translator from Fortran to C++ that provides statement-wise translation to improve readability, by Calvin Neo and Michael Tesch

f2c: convert Fortran 77 to C

F2C-Translator: translates Fortran to C++, by Bin Lei. Also HPC-Code-translation-and-generation: tests the translation and generation performance of Fortran HPC code using CodeXGLUE and ChatGPT, and OpenMP-Fortran-CPP-Translation, associated with the paper Creating a Dataset for High-Performance Computing Code Translation using LLMs: A Bridge Between OpenMP Fortran and C++

f2cpp: Converts Fortran 77 code to C++, by victorliu. Unlike f2c, the output of f2cpp.pl may or may not compile, however, only a small number of hand-tuned changes are typically needed. The resulting code is much cleaner than f2c's output, and much closer to the original intent of the original Fortran code.

f2j: translate Fortran 77 to Java, especially for BLAS, LAPACK and ARPACK

f2matlab: converts Fortran 90 code to Matlab m-files, by benbarrowes. Accordingly, only basic data types and constructions are recommended.

f2perl: translates Fortran 77 into Perl, by Steve Hancock. Also at GitHub.

f4go: Transpiling Fortran code to golang code, by Konstantin8105

F77Ccompiler: compiler from Fortran 77 to C, by Danil

Fortran-CPP-HPC-code-translation-dataset: data set for the preprint Creating a Dataset for High-Performance Computing Code Translation: A Bridge Between HPC Fortran and C++ (2023), by Bin Lei et al.

Fortran2Cpp: aims to create an accurate and comprehensive Fortran-to-C++ translation dataset for fine-tining LLMS such as ChatGPT-4, by Bin Lei and Chunhua Liao

Fortran to C++ Conversion from Objexx: conversion process preserves the structure and syntax of the Fortran to retain the value of the existing documentation and developer knowledge. Another product converts Fortran to Python (C).

fortran2julia: Python script to translate Fortran 90 to Julia, by algorithmx

fortran2julia: parses to JSON by fortran-parser, after which parse.jl converts to JSON to Julia, by Tom Rottier. Requires dotnet runtime to be installed.

Fortran2Julia.js: converts Fortran codes to Julia codes using regular Expressions, groups and backreferences, by Shuhei Ohno. A web interface is here.

FortranTranspiler.jl: partial transpiler from Fortran to Julia, by Denis Telnov

Incomplete Fortran to C/C++ converter: translates Fortran 77 to readable C/C++, by Sebastian Macke

loki: tool to explore the possible use of source-to-source translation for ECMWF's Integrated Forecasting System (IFS) and associated Fortran software packages. Loki is based on compiler technology (visitor patterns and ASTs) and aims to provide an abstract, language-agnostic representation of a kernel, as well as a programmable (Pythonic) interface that allows developers to experiment with different kernel implementations and optimizations.

Translation to Fortran

c2f: partial C to Fortran translator by David Frank

Macrofort: Fortran code generator in Maple, by Claude Gomez

makeFortran: converts Mathematica Code to Fortran, by joelgog

matlab2fmex: small translator which aims to convert numerical Matlab m-files to Fortran90 mex files, by Ben Barrowes. matlab2fmex first translates an m-file to a Fortran90 mex source file then compiles that Fortran90 file using Matlab's mex and the local compiler.

matlab2fortran: performs some simple conversions from Matlab code to Fortran, by ebranlard

Mc2For: MATLAB to Fortran compiler, from Sable

numeta: simple Just-In-Time (JIT) compiler for Python, focused on metaprogramming, by Andrea Bianchi. Currently, the code generates Fortran code that is compiled and executed.

pyccel: Pyccel can be viewed as a Python-to-Fortran/C converter or a compiler for a Domain Specific Language with Python syntax

Unclassified

automates: Automated Model Assembly from Text, Equations, and Software, from ml4ai

bench-cli: cross-platform command line tool to benchmark commands and other executables/scripts in command lines written in Fortran, by Lateralus138. Very precise and fast.

Fortran Debug Utilities: collection of some utilities useful for debugging code, by Pål Levold

Fortran-gdb-pp: gdb pretty printer for Fortran dynamic types, by Peter Hill

fortran-git: Fortran 2008 ISO C binding interfaces to libgit2, by interkosmos

Fortran-RefCount: simple reference counting for Fortran

fortran-sigwatch: library of routines to provide simple signal watching for Fortran programs, originally by Norman Gray, modified by Michael Hirsch. This allows a minimal level of control of a running program from outside it, for example to tell it to checkpoint itself on receipt of a signal.

Fortran-Standard-Search: shell script searching a string in the titles of the subsection of the Fortran standard, and opening the pages in a PDF viewer, by Vincent Magnin. It is based on pdfgrep, cut and okular.

irep: tool for filling C/C++ or Fortran data structures from Lua input tables, from LLNL

libconfort: a small library to handle simple configuration files from Modern Fortran (2008+), by Dominik Gronkiewicz

nmltab: Python 3 module and command-line tool to tabulate, semantically diff, superset and consistently format Fortran namelist files, with output to text, markdown, csv, latex and namelists, by Andrew Kiss and Aidan Heerdegen. Requires Python 3.4 or later, and f90nml (amongst other packages).

nml-to-f90: generates Fortran source code for handling parameter I/O from a namelist, by perrette

progRESS+repORT (progrep}: utility to show live progress, status and stats of a running simulation or any compute job that executes a given number of iterations, by SomajitDey. Progrep can report for both serial (single-core) and parallel (multi-core/multi-node - e.g. OpenMP/MPI) jobs.

Unit Testing

f90tw: provides Fortran wrappers for a limited subset of the Boost and Google test frameworks functionality, by loudove. At the same time, it offers a rather simple mechanism for setting up and managing test suites in Fortran projects.

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

FortCompare: tool to mitigate the amount of behavior changed between two implementations of the same Fortran function or subroutine, by aijac0

fort_test: very lightweight testing framework that supports basic assertions and running of test sets, by Thomas Marks

fortran-testanything: test library supporting the Test Anything Protocol (TAP) inspired by Perl's Test::More module, by dennisdjensen

fortran_test_helper: library to provide assistance to testing, by Jason Christopherson

FortranTestGenerator: automatically generates unit tests for subroutines of existing Fortran applications based on an approach called Capture & Replay, from fortesg

fortran-unit-test: unit test library in Fortran to encourage scientific programmer to write tests, by dongli

fortran_unit_test: minimalistic Fortran unit tests with CMake and CTest, by Felix Chern

Fortran-Unit-Test: shows how to link Fortran code with C/C++ and a testing framework such as Google Test, by Rich Morrison

Fortran_UnitTest: unit test library based on OOP, by zhenkunl. It is strongly inspired by Zofu, and its output format is derived from fortran-unit-test.

Fortran Unit Test Framework (FortUTF): unit test framework written purely in Fortran to be compatible with as many projects as possible, by Kristian Zarębski

Fortran Unit Test Library: pure Fortran library using Object-Oriented Programming (OOP), by zhenkunl. It is strongly inspired by Zofu, and its output format is derived from fortran-unit-test.

Fortran Unit Testing Objects (Fortuno): flexible and extensible Fortran unit testing framework for testing serial, MPI-parallelized and coarray-parallelized applications, by Bálint Aradi

ForUnitTest: simple, object-oriented unit testing framework, by Seyed Ali Ghasemi.

FRUIT: Fortran unit test framework in Ruby, by mortele and michaelkonecny

ftest: minimalistic unit testing, by Ladislav Méri

FUnit: lightweight library for writing, administering, and running unit tests in Fortran, by Andrey Pudov. It is an instance of the xUnit architecture and provides Fortran programmers a basic testing functionality with a flexible variety of user interfaces.

fytest: lightweight unit testing framework for Fortran, by aradi. Thanks to its header-only design, it can be easily bundled with any Fortran project without creating extra dependencies.

julienne: compiler-portable, unit-testing framework for modern Fortran, including accelerated coarray Fortran software, by Katherine Rasmussen and Damian Rouson

M_framework: aggregate of Fortran modules useful for creating terminal messages, comparing expected values to results, writing logfiles and playback journals and performing unit tests for Fortran, by urbanjost

par-funnel: unit test parameterizer using namelist, by Tomohiro Degawa. Par-funnel is not a unit test framework but is intended to be used with other unit test frameworks.

pFUnit: unit testing framework enabling JUnit-like testing of serial and MPI-parallel software written in Fortran, from Goddard-Fortran-Ecosystem. Limited support for OpenMP is also provided in the form of managing exceptions in a thread-safe manner.

tap: minimal producer implementation of the "Test Anything Protocol" (TAP) in Fortran 90, from gzahl

test-drive: lightweight, procedural unit testing framework based on nothing but standard Fortran, by awvwgk. Integration with meson, cmake and Fortran package manager (fpm) is available. testdrive_util by Tomohiro Degawa provides procedures to make using test-drive more convenient.

Testing Or ASsertion Toolkit (TOAST): unit testing library by thomasms and Bob Apthorpe

Vegetables: 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.