## LAPACK

On FreeBSD, install the LAPACK package with:

``# pkg install math/lapack``

### Example

The example program solves the following equation using LAPACK: The LAPACK subroutine `sgesv()` computes the solution to a real system of linear equations A · X = B, where A is an n-by-n matrix and X and B are n-by-nrhs matrices.

`call sgesv(n, nrhs, a, lda, ipiv, b, ldb, info)`
Argument Type Description
`n` integer The number of linear equations, i.e., the order of the matrix A (n ≥ 0).
`nrhs` integer The number of right hand sides, i.e., the number of columns of the matrix B (nrhs ≥ 0).
`a` real, dimension(lda, *) Array of type `real` of size lda-by-n.
`lda` integer The leading dimension of array A (lda ≥ max(1, n)).
`ipiv` integer, dimension(*) The pivot indices that define the permutation matrix.
`b` real, dimension(ldb, *) On entry, the n-by-nrhs matrix of right hand side matrix b. On exit, if info = 0, the n-by-nrhs solution matrix.
`ldb` integer The leading dimension of array B (ldb ≥ max(1, n)).
`info` integer = 0: successful exit;
< 0: if info = −i, the i-th argument had an illegal value;
> 0: if info = i, U(i, i) is zero. The factorisation has been completed, but the factor U is exactly singular, so the solution could not be computed.
``````! example.f90
program main
! Example program that solves the matrix equation A * X = B using LAPACK.
implicit none
real    :: a(2, 2)  ! Matrix A.
real    :: b(2)     ! Matrix B.
real    :: pivot(2) ! Pivot indices (list of swap operations).
integer :: rc       ! Return code.

a = reshape([ 2., 3., 1., 1. ], [ 2, 2 ])
b = [ 5., 6. ]

call sgesv(2, 1, a, 2, pivot, b, 2, rc)

if (rc == 0) then
print *, 'Solution [x, y]: ', b
else
print *, 'Error: ', rc
end if
end program main``````

Compile, link, and run the example with:

``````\$ gfortran9 -L/usr/local/lib/ -o example example.f90 -llapack -lblas
\$ ./example
Solution [x, y]:   0.999999940       3.00000024``````

If LAPACK and BLAS are compiled as static libraries, point the library search path `-L` to their actual location.

### LAPACK95

LAPACK95 is a Fortran 95 interface to the FORTRAN 77 LAPACK library. It brings several improvements over the original LAPACK package, by using language features introduced in Fortran 95, like assumed-shape arrays, optional arguments, and generic interfaces. The underlying LAPACK code remains unchanged, as LAPACK95 provides only interfaces to existing routines. The user’s guide and an index of all routines are available online.

#### Installation

Packages of LAPACK95 should be available for most Unix-like operating systems. On FreeBSD, install the package with:

``# pkg install math/lapack95``

If you choose to build LAPACK95 from Ports, you can either link the BLAS reference implementation or the optimised ATLAS library. But LAPACK95 can be compiled as well simply from source.