1. Préambule et prérequis
La librairie MPFUN90 (Multi Precision FUN -ou FUNction?-,
écrite en Fortran90)
est une librairie permettant de réaliser des opérations avec
une précision numérique arbitraire (choisie par
l'utilisateur).
L'idée est que l'utilisateur puisse facilement adapter un de ses
codes maison pour l'exécuter à la précision
numérique voulue.
2. Télécharger la librairie MPFUN90
On peut récupérer la librairie MPFUN90 sur le site
de D.H. Bailey (un de ses concepteurs)
http://crd.lbl.gov/~dhbailey/mpdist.
A ce jour, la version mise à disposition est datée du
18 janvier 2010.
A noter que les auteurs préconisent de ne pas utiliser MPFUN90,
mais la librairie ARPREC (ARbitrary PREcision, qu'ils ont
également développé
et que l'on peut télé:charger depuis la même page),
écrite en C++ mais interfaçable avec des codes en Fortran90
(je n'ai pas testé).
3. Procédure d'installation
Une fois le fichier mpfun90.tar.gz récupéré, extraire son
contenu dans un répertoire approprié (par exemple,
et pour la suite "/chemin/vers/librairies"):
tar xzf mpfun90.tar.gz
Tout est dans le répertoire "mpfun90" ainsi restauré.
Ce dernier contient un fichier "README" (à consulter!!!) et deux
sous-répertoires "f90" et "toolkit". "toolkit" contient des
programmes à dit du "Experimental Mathematician Toolkit" prêts
à être compilés et utilisés (outils
non traités ici). Le répertoire "f90" contient les fichiers
à compiler (ainsi que quelques programmes illustratifs) pour
générer la librairie MPFUN90.
Il y a bien un "Makefile" pour tout construire automatiquement; cependant
ce dernier est calibré pour utiliser la compilateur IBM "xlf90".
Pour l'adapter à "gfortran" il faut changer les lignes suivantes:
F90 = xlf90
F90FLAGS = -O3 -qnoescape -qstrict
LD = xlf90
en
F90 = gfortran
F90FLAGS = -O3 -fbackslash -ffree-form
LD = gfortran
De plus, une des fonctions de la distribution , "second.f" ,
utilise un appel non standard et
doit être adapté:
Il faut donc simplement remplacer
FUNCTION SECOND ()
DOUBLE PRECISION SECOND, T
! Set ETIME to either ETIME or ETIME_ .
SECOND = ETIME_(T)
RETURN
END
par
FUNCTION SECOND ()
DOUBLE PRECISION SECOND
REAL T(2)
! Set ETIME to either ETIME or ETIME_ .
SECOND = ETIME(T)
RETURN
END
On peut alors lancer la compilation, via le makefile:
make all > make_all.log 2>&1
(la redirection des sorties et erreurs "> make_all.log 2>&1" n'est qu'une
préférence personnelle; je préfère conserver
des traces). Cette étape prend un certain temps (environ 10mn dans mon
cas).
Pour s'assurer que tout fonctionne comme prévu, on dispose d'abord
du programme "tmpmod90.exe" (généré lors du "make all")
qu'on peut exécuter tel quel et vérifier que les
résultats sont identiques au contenu du fichier "tmpmod.out".
D'autre part on peut lancer une batterie de tests via le programme
"testmp90.exe" (également généré lors du
"make all"). Ce dernier affiche simplement des messages au fur et à
mesure de ces tests; si tout se passe bien il ne devrait y avoir que
des "Completed Test" (suivi du numéro du test) qui s'affichent.
Du point de vue de la distribution de la librairie, les
choses s'arrêtent là Ce qu'il manque (à mon goût)
est l'étape de génération d'une librairie
proprement dite. J'ajoute donc les étapes suivante:
Depuis le répertoire "/chemin/vers/librairies/mpfun90"
mkdir lib ; cd lib
ar r libmpfun90.a ../f90/mpfun90.o
ar r libmpfun90.a ../f90/mpmod90.o
ar r libmpfun90.a ../f90/mpmodm90.o
ar r libmpfun90.a ../f90/mpmodx90.o
Et de même, autant regrouper les modules:
Depuis le répertoire "/chemin/vers/librairies/mpfun90"
mkdir inc ; cd inc
cp ../f90/*mod .
Comme cela, quelquesoit l'endroit, pour compiler un programme utilisant la
librairie MPFUN90 il suffira d'une commande de compilation du type:
gfortran -ffree-form monprog.f -L/chemin/vers/librairies/mpfun90/lib -lmpfun90 -I/chemin/vers/librairies/mpfun90/inc
4. Documentation et exemples d'utilisation
Le fichier "README" est assez complêt et à lire attentivement
pour bien comprendre comment utiliser la librairie.
Le répertoire "f90" contient de plus des exemples, les fichiers "t*.f"
qu'il est plus que conseillé de consulter avant de se lancer.