Awesome Scientific Computing ¶
Useful resources for scientific computing and numerical analysis.
Scientific computing and numerical analysis are research fields that aim to provide methods for solving large-scale problems from various areas of science with the help of computers. Typical problems are ordinary and partial differential equations (ODEs, PDEs), their discretizations, and the solution of linear algebra problems arising from them.
Basic linear algebra¶
- BLAS - Standard building blocks for performing basic vector and matrix operations. (Fortran, public domain, GitHub)
- OpenBLAS - Optimized BLAS library based on GotoBLAS2. (C and Assembly, BSD, GitHub)
- BLIS - High-performance BLAS-like dense linear algebra libraries. (C, BSD, GitHub)
- LAPACK - Routines for solving systems of linear equations, least-squares solutions of linear systems, eigenvalue problems, and singular value problems. (Fortran, BSD, GitHub)
- Eigen - C++ template library for linear algebra. (C++, MPL 2, BitBucket)
- Ginkgo - High-performance manycore linear algebra library, focus on sparse systems. (C++, BSD, GitHub)
- PETSc - Data structures and routines for the parallel solution of scientific applications modeled by PDEs. (C, 2-clause BSD, GitLab)
- DUNE Numerics - Toolbox for solving PDEs with grid-based methods. (C++, GPL 2, GitLab)
- SciPy - Python modules for statistics, optimization, integration, linear algebra, Fourier transforms, signal and image processing, ODE solvers, and more. (Python, mostly BSD, GitHub)
- NumPy - Fundamental package needed for scientific computing with Python. (Python, BSD, GitHub)
- FEniCS - Open-source computing platform for solving PDEs in Python and C++. (C++/Python, LGPL 3, BitBucket)
- libMesh - Framework for the numerical simulation of PDEs using arbitrary unstructured discretizations. (C++, LGPL 2.1, GitHub)
- deal.II - Software library supporting the creation of finite element codes. (C++, LGPL 2.1, GitHub)
- Netgen/NGSolve - High performance multiphysics finite element software. (C++, LGPL 2.1, GitHub)
- Firedrake - Automated system for the solution of PDEs using the finite element method. (Python, LGPL 3, GitHub)
- MOOSE - Multiphysics Object Oriented Simulation Environment. (C++, LGPL 2.1, GitHub)
- MFEM - Free, lightweight, scalable C++ library for finite element methods. (C++, LGPL 2.1, GitHub)
- SfePy - Simple Finite Elements in Python. (Python, BSD, GitHub)
- FreeFEM - High level multiphysics-multimesh finite element language. (C++, LGPL, GitHub)
- Gmsh - Three-dimensional finite element mesh generator with pre- and post-processing facilities. (C++, GPL, GitLab)
- pygmsh - Python interface for Gmsh. (Python, MIT, GitHub)
- MeshPy - Quality triangular and tetrahedral mesh generation. (Python, MIT, GitHub)
- meshio - I/O for various mesh formats, file conversion. (Python, MIT, GitHub)
- CGAL - Algorithms for computational geometry. (C++, mixed LGPL/GPL, GitHub)
- pygalmesh - Python interface for CGAL's 3D meshing capabilities. (Python, MIT, GitHub)
- mshr - Mesh generation component of FEniCS. (Python, GPL 3, BitBucket)
- MOAB - Representing and evaluating mesh data. (C++, mostly LGPL3, BitBucket)
- NetCDF - Software libraries and data formats for the creation, access, and sharing of array-oriented scientific data. (C/C++/Fortran/Java/Python, custom open-source license, GitHub)
- HDF5 - Data model, library, and file format for storing and managing data. (C/Fortran, BSD)
- XDMF - eXtensible Data Model and Format to exchange scientific data between High Performance Computing codes and tools. (C++, GitLab)
- TetGen - Quality tetrahedral mesh generator and 3D Delaunay triangulator. (C++, AGPLv3)
- Triangle - Two-dimensional quality mesh generator and Delaunay triangulator. (C, nonfree software)
- optimesh - Triangular mesh smoothing. (Python, MIT, GitHub)
- distmesh - Simple generator for unstructured triangular and tetrahedral meshes. (MATLAB, GPL 3)
- QuadriFlow - A Scalable and Robust Method for Quadrangulation. (C++, BSD, GitHub)
- trimesh - Loading and using triangular meshes with an emphasis on watertight surfaces. (Python, MIT, GitHub)
- dmsh - Simple generator for unstructured triangular meshes, inspired by distmesh. (Python, MIT, GitHub)
- pmp-library - Polygon mesh processing library. (C++, MIT with Employer Disclaimer, GitHub)
- Mmg - Robust, open-source & multidisciplinary software for remeshing. (C, LGPL 3, GitHub)
- meshplex - Fast tools for simplex meshes. (Python, MIT, GitHub)
Sparse linear solvers¶
- SuperLU - Direct solution of large, sparse, nonsymmetric systems of linear equations. (C, mostly BSD, GitHub)
- KryPy - Krylov subspace methods for the solution of linear algebraic systems. (Python, MIT, GitHub)
- PyAMG - Algebraic Multigrid Solvers in Python. (Python, MIT, GitHub)
- hypre - Library of high-performance preconditioners and solvers. (C, Apache 2.0/MIT, GitHub)
Other libraries and tools¶
- FFTW - Discrete Fourier transforms in one or more dimensions, of arbitrary input size, and of both real and complex data. (C, GPL2, GitHub)
- Qhull - Convex hull, Delaunay triangulation, Voronoi diagram, halfspace intersection about a point, furthest-site Delaunay triangulation, and furthest-site Voronoi diagram. (C/C++, custom open source license, GitHub)
- GSL - Wide range of mathematical routines such as random number generators, special functions, and least-squares fitting. (C/C++, GPL 3, Savannah)
- OpenFOAM - Free, open source CFD (computational fluid dynamics) software. (C++, GPL 3, GitHub)
- ParaView - Multi-platform data analysis and visualization application based on VTK. (C++, BSD, GitLab)
- quadpy - Numerical integration (quadrature, cubature) in Python. (Python, MIT, GitHub)
- FiPy - Finite-volume PDF solver. (Python, custom open-source license, GitHub)
- accupy - Accurate sums and dot products for Python. (Python, MIT, GitHub)
- SLEPc - Scalable Library for Eigenvalue Problem Computations. (C, 2-clause BSD, BitBucket)
- Chebfun - Computing with functions to about 15-digit accuracy. (MATLAB, BSD, GitHub)
- pyMOR - Model Order Reduction with Python. (Python, 2-clause BSD, GitHub)
- cvxpy - Modeling language for convex optimization problems. (Python, Apache 2.0, GitHub)
- PyWavelets - Wavelet transforms in Python. (Python, MIT, GitHub)
- SciComp StackExchange - Computational Science on the StackExchange network.
- Wolfgang Bangerth's video class - MATH 676: Finite element methods in scientific computing.
- Nick Higham's blog - Mostly on MATLAB, general computing advice.
- Nick Trefethen's Video Lectures - 36 video lectures on approximation theory/practice and scientific computing.
- John D. Cook's blog - Feats of scientific computing.
- Jack Dongarra's software list - List of freely available software for the solution of linear algebra problems.
- NA Digest - Collection of articles on topics related to numerical analysis and those who practice it.
To the extent possible under law, Nico Schlömer has waived all copyright and related or neighboring rights to this work.