La librairie LAPACK

Cette librairie contient un grand nombre de routines optimisées pour des problèmes d’algèbre linéaire.

On trouve facilement la routine à utiliser pour un problème donné à partir du site de la librairie.


Pour une présentation plus pédagogique de LAPACK, vous pouvez également consulter ce document.


LAPACK avec le GFORTRAN sous Ubuntu

Installation

L'installation de LAPACK sous Ubuntu peut se faire en suivant ces instructions.

Les deux fichiers obtenus au terme d'une compilation avec le gfortran sont les suivants :

  1. libblas.a
  2. liblapack.a

Utilisation

Si l'installation de LAPACK a été bien faite, vous pouvez compiler votre programme de cette façon :

      gfortran Exemple.f90 -o Exemple.exe -llapack -lblas

Une manière plus triviale de compiler avec LAPACK peut consister à faire

      gfortran Exemple.f90 -o Exemple.exe liblapack.a libblas.a
Les fichiers libblas.a et liblapack.a doivent alors être dans le même répertoire que Exemple.f90.


LAPACK avec le GFORTRAN sous Windows

Installation

L'installation de LAPACK avec le GFORTRAN sous Windows 7 suit une ligne similaire à celle présentée pour Ubuntu.

Les deux fichiers obtenus au terme de la compilation sont les suivants :

  1. libblas.a
  2. liblapack.a
Vous devez les recopier dans le répertoire "C:\Program Files (x86)\gfortran\lib".

Vous trouverez ici les instructions spécifiques à Windows 10.

Utilisation

Si l'installation de LAPACK a été bien faite, vous pouvez compiler votre programme de cette façon :

      gfortran Exemple.f90 -o Exemple.exe -llapack -lblas

Une manière plus triviale de compiler avec LAPACK peut consister à faire

      gfortran Exemple.f90 -o Exemple.exe liblapack.a libblas.a
Les fichiers libblas.a et liblapack.a doivent alors être dans le même répertoire que Exemple.f90.


Exemple de base

      Program Main

      implicit none

      integer,parameter :: r = 4
      real(kind=r),dimension(:,:),allocatable :: A
      real(kind=r),dimension(:),allocatable :: B
      integer,dimension(:),allocatable :: ipiv
      integer :: i, info, n=10

      allocate(A(1:n,1:n),B(1:n))
      allocate(ipiv(1:n))

      A = 0._r                  ! matrice
      do i = 1, n
       A(i,i) = 1._r
      enddo

      do i = 1, n               ! membre de droite
       B(i) = i
      enddo

      call SGESV(n,1,A,n,ipiv,B,n,info)

      print *, "Solution :"     ! solution
      print *, B

      end Program Main


Mise en pratique

Faites fonctionner l'exemple de base donné plus haut.