Installer la librairie MPFUN90 avec gfortran

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.

Dernière mise à jour: 10/05/10
  Page: Cygwin > Installation de la librairie MPFUN90 avec gfortran