# Common C, C++, FORTRAN Libraries

There are a number of common libraries for computational physics and numerical analysis. Here are a few links for tutorials and information for installation of commonly-used tools.

## Contents

# Eigen (Linear Algebra)

Eigen is linear algebra library that supports computing the eigenvalue and eigenvectors of real and complex matrices. It is relatively simple to use because it is a pure template library, and therefore does not require you to compile anything in the library to use it, and it is written in standard C++, so it will work on all platforms (Linux, Mac OS, and Windows). All you need to do is download the library and put the source code in your project directory.

## Using

Let's assume you have a C++ program called StateFinder that you want to use the Eigen library for to calculate eigenvalues of a matrix. You create a directory called `StateFinder`

for the program, and you have a single source file named `StateFinder.cpp`

(If you are using an IDE such as Visual Studio, Xcode, or Eclipse, it will have created the project directory for you). The following instructions will describe how to use the Eigen library for this project (It does. They will not install the library to be system wide. All that is required in this scenario is to download the Eigen library archive, unpack the archive, and copy the Eigen source directory to your project directory.

### Downloading

Download the latest version of the library from http://eigen.tuxfamily.org. On the right side of the page, you should see "The latest stable release...". Click on the tar.bz2 (Linux and Mac), tar.gz (Linux and Mac), or zip (Windows) links. This will download a file whose name starts with eigen-eigen-. For example, `eigen-eigen-6b38706d90a9.zip`

.

### Unpacking

On Linux, use tar to unpack the tar.bz2 file,

> tar -xzf eigen-eigen-*.tar.bz2

The tar program will also unpack the tar.gz file,

> tar -xjf eigen-eigen-*.tar.gz

On windows, use 7-Zip, or some other zip program to "extract" the zip file contents.

### Installing

To "install" Eigen, you only need to copy the Eigen source directory into you project directory. The directory you want is named `Eigen`

. It should have several files in it, including `Array`

and `Dense`

. Copy this directory into your project directory. It should be in the *same* directory as you source file `StateFinder.cpp`

.

### Testing that it works

Now you can test that you have installed Eigen correctly by compiling and running the following program.

for non-Visual Studio compilers, use this

#include <iostream> #include "Eigen/Dense" using Eigen::MatrixXd; int main(int argc, char* argv[]) { MatrixXd m(2,2); m(0,0) = 3; m(1,0) = 2.5; m(0,1) = -1; m(1,1) = m(1,0) + m(0,1); std::cout << m << std::endl; return 0; }

for Visual Studio compilers, use

#include <iostream> #include "Eigen/Dense" using Eigen::MatrixXd; int _tmain(int argc, _TCHAR* argv[]) { MatrixXd m(2,2); m(0,0) = 3; m(1,0) = 2.5; m(0,1) = -1; m(1,1) = m(1,0) + m(0,1); std::cout << m << std::endl; return 0; }

This should output

3 -1 2.5 1.5

to the console.

This test program illustrates how to create a 2x2 matrix and set its components (elements). You can create an arbitrarily sized matrix in an analogous way.

This example program is given in the Eigen "Getting Started Guide". For more information on this example, and a second example, visit the Eigen site: http://eigen.tuxfamily.org/dox/GettingStarted.html

# GSL (Special Functions)

The GSL also has calls for C and C++ for a variety of linear algebra functions found in BLAS and other packages.

# Boost Math Toolket (Special Functions)

The Boost Math Toolkit has several utilities for doing various types of mathematical operations including several special functions.

# BLAS (Linear Algebra)

BLAS stands for "Basic Linear Algebra Subprograms". Originally written in FORTRAN in the late 70's, it is still used by many libraries to do "low level" linear algebra operations. It is still the standard by which the performance of all other linear algebra libraries are measured.

Linear Algebra in Linux (BLAS/LAPACK)

Setting up BLAS in Linux (yum-based systems)

Matrix Multiplication with BLAS and CBLAS

GSL BLAS Examples (such as matrix multiply)

# Utilities

The Boost Property Tree Library is an excellent C++ library for managing configuration data. It provides a very simple method to store data in a tree structure and supports loading tree data from files in various format (XML, JSON, INI). It is similar to the dpath library for Python that provides path-like access to nested dict elements.