Gosl is a set of tools for developing scientific simulations using the Go language. We mainly consider the development of numerical methods and solvers for differential equations but also present some functions for fast Fourier transforms, the generation of random numbers, probability distributions, and computational geometry.
This library contains essential functions for linear algebra computations (operations between all combinations of vectors and matrices, eigenvalues and eigenvectors, linear solvers) and the development of numerical methods (e.g. numerical quadrature).
We link Gosl with existent libraries written in C and Fortran, such as OpenBLAS, LAPACK, UMFPACK, MUMPS, QUADPACK and FFTW3. These existing libraries have been fundamental for the development of high-performant simulations over many years. We believe that it is nearly impossible to rewrite these libraries in native Go and at the same time achieve the same speed delivered by them. Just for reference, a naive implementation of matrix-matrix multiplication in Go is more than 100 times slower than OpenBLAS.
Because of the other libraries, the easiest way to work with Gosl is via Docker. Having Docker and VS Code installed, you can start developing powerful numerical simulations using Gosl in a matter of minutes. Furthermore, it works on Windows, Linux, and macOS out of the box.
Done. And your system will "remain clean."
First, install Go as explained in https://golang.org/doc/install
Second, install some libraries:
sudo apt-get install \ gcc \ gfortran \ libfftw3-dev \ liblapacke-dev \ libmetis-dev \ libmumps-seq-dev \ libopenblas-dev \ libsuitesparse-dev
Finally, download and compile Gosl:
git clone https://github.com/cpmech/gosl.git cd gosl ./all.bash
Done. Installation completed.
Gosl includes the following essential packages:
Gosl includes the following main packages:
(see each subdirectory for more information)
These other packages, such as machine learning, plotting, etc., have been removed because they do not depend on CGO and may be developed independently. We can now maintain the core of Gosl more efficiently, which has a focus on the foundation for other scientific code.