Prerequisites

- BLAS (Basic Linear Algebra Subroutines). Many vendors of
compilers and operating systems provide precompiled and optimized
libraries for these dense linear algebra subroutines. You can also
get the source code for a simple reference implementation from
`www.netlib.org`and have the IPOPT distribution compile it automatically. However, it is strongly recommended to use some optimized BLAS implemetion, for large problems this can make a runtime difference of an order of magnitude!Examples for efficient BLAS implementations are:

- From hardware vendors:
- ACML (AMD Core Math Library) by AMD
- ESSL (Engineering Scientific Subroutine Library) by IBM
- MKL (Math Kernel Library) by Intel
- Sun Performance Library by Sun

- Generic:
- Atlas (Automatically Tuned Linear Algebra Software)
- GotoBLAS

Note: BLAS libraries distributed with Linux are usually not optimized.

- From hardware vendors:
- LAPACK (Linear Algebra PACKage). Also for LAPACK, some vendors
offer precompiled and optimized libraries. But like with BLAS, you
can get the source code from
`http://www.netlib.org`and have the IPOPT distribution compile it automatically.Note that currently LAPACK is only required if you intend to use the quasi-Newton options in IPOPT. You can compile the code without LAPACK, but an error message will then occur if you try to run the code with an option that requires LAPACK. Currently, the LAPACK routines that are used by IPOPT are only

`DPOTRF`,`DPOTRS`, and`DSYEV`.Note: LAPACK libraries distributed with Linux are usually not optimized.

- A sparse symmetric indefinite linear solver. IPOPT needs
to obtain the solution of sparse, symmetric, indefinite linear
systems, and for this it relies on third-party code.
Currently, the following linear solvers can be used:

- MA27 from the HSL Mathematical Software Library

(see`http://www.hsl.rl.ac.uk`). - MA57 from the HSL Mathematical Software Library

(see`http://www.hsl.rl.ac.uk`). - HSL_MA77 from the HSL Mathematical Software Library

(see`http://www.hsl.rl.ac.uk`). - HSL_MA86 from the HSL Mathematical Software Library

(see`http://www.hsl.rl.ac.uk`). - HSL_MA97 from the HSL Mathematical Software Library

(see`http://www.hsl.rl.ac.uk`). - MUMPS (MUltifrontal Massively Parallel sparse direct Solver)

(see`http://graal.ens-lyon.fr/MUMPS`) - The Parallel Sparse Direct Solver (PARDISO)

(see`http://www.pardiso-project.org`). - The Watson Sparse Matrix Package (WSMP)

(see`http://researcher.ibm.com/view_project.php?id=1426`)

The IPOPT library also has mechanisms to load the linear solvers MA27, MA57, HSL_MA77, HSL_MA86, HSL_MA97, and Pardiso from a shared library at runtime, if the library has not been compiled with them (see Section 2.3.6).

NOTE: The solution of the linear systems is a central ingredient in IPOPT and the optimizer's performance and robustness depends on your choice. The best choice depends on your application, and it makes sense to try different options. Most of the solvers also rely on efficient BLAS code (see above), so you should use a good BLAS library tailored to your system. Please keep this in mind, particularly when you are comparing IPOPT with other optimization codes.

If you are compiling MA57, HSL_MA77, HSL_MA86, HSL_MA97, or MUMPS within the IPOPT build system, you should also include the METIS linear system ordering package.

Interfaces to other linear solvers might be added in the future; if you are interested in contributing such an interface please contact us! Note that IPOPT requires that the linear solver is able to provide the inertia (number of positive and negative eigenvalues) of the symmetric matrix that is factorized.

- MA27 from the HSL Mathematical Software Library
- Furthermore, IPOPT can also use the HSL package MC19 for scaling of the linear systems before they are passed to the linear solver. This may be particularly useful if IPOPT is used with MA27 or MA57. However, it is not required to have MC19 to compile IPOPT; if this routine is missing, the scaling is never performed.
- ASL (AMPL Solver Library). The source code is available at
`www.netlib.org`, and the IPOPT makefiles will automatically compile it for you if you put the source code into a designated space. NOTE: This is only required if you want to use IPOPT from AMPL and want to compile the IPOPT AMPL solver executable.

Since the IPOPT code is written in C++, you will need a C++ compiler to build the IPOPT library. We tried very hard to write the code as platform and compiler independent as possible.

In addition, the configuration script also searches for a Fortran
compiler, since some of the dependencies above are written in Fortran.
If all third party dependencies are available as self-contained
libraries, those compilers are in principle not necessary. Also, it
is possible to use the Fortran-to-C compiler `f2c` from
`http://www.netlib.org/f2c` to convert Fortran 77 code to C, and compile the
resulting C files with a C compiler and create a library containing
the required third party dependencies.

When using GNU compilers, we recommend you use the same version numbers for `gcc`, `g++`, and `gfortran`. For `gfortran` specifically, we recommend versions newer than 4.5.2 (versions 4.5.1, 4.5.2, and before 4.2.0 are known to have bugs that caused issues with some of the newer Fortran 90 HSL linear solvers).