LAPACK est un ensemble de sous-programmes Fortran permettant de résoudre des problèmes d'algèbre linéaire (systèmes denses). LAPACK repose sur les BLAS. LAPACK est le successeur des anciennes bibliothèques LINPACK et EISPACK.
| Compilation et Édition de liens | Mode numérique | Nom des sous-programmes | Mode d'adressage |
|---|---|---|---|
|
$ module load lapack $ xlf_r call_lapack.f |
I4S4 | S... / C... | 32/64 |
| I4D8 | D... / Z... |
| Compilation et édition de liens | Mode numérique | Nom des sous-programmes | Mode d'adressage |
|---|---|---|---|
|
$ module load lapack95 $ xlf_r call_lapack95.f |
I4 | LA_... | 32/64 |
use f95_lapack, only: <le nom du pilote>
Voici l'exemple d'une même résolution avec et sans l'interface LAPACK95. Il s'agit de la résolution d'un système linéaire réel symétrique en double précision.
Sans l'interface LAPACK95 :
$ cat call_dsysv.f
...
integer, parameter:: n = 1000
double precision a(n,n), b(n)
integer ipiv(n), info, lwork
double precision, allocatable:: work(:)
...
! Get the optimal size of the WORK array:
allocate(work(1))
call DSYSV('U', N, 1, A, n, IPIV, B, n, work, -1, INFO)
print *, "info = ", info
if (info /= 0) stop
lwork = WORK(1)
print *, "lwork = ", lwork
deallocate(work)
! Solve the set of equations:
allocate(work(lwork))
call DSYSV('U', N, 1, A, n, IPIV, B, n, WORK, LWORK, INFO)
print *, "info = ", info
if (info /= 0) stop
...
$ module load lapack $ xlf_r -qfree call_dsysv.f
Avec l'interface LAPACK95 :
$ cat call_sysv.f ... use f95_lapack, only: la_sysv ... integer, parameter:: n = 1000 double precision a(n,n), b(n) ... call la_SYSV(A, B) ...
$ module load lapack95 $ xlf_r -qfree call_sysv.f
Remarquez que vous ne gérez pas de tableau de travail avec
LAPACK95. Remarquez aussi que, avec l'interface LAPACK95, nous avons
volontairement omis l'argument facultatif info. Dans ce
cas, le programme s'arrête et affiche info s'il y a un
problème. Cf. Error Handling.