Babel : appel des fonctions Fortran à partir de C
Quelques recommandations utiles :
- Le passage des paramètres en Fortran s'effectue par adresse, tandis qu'en
C il s'effectue par valeur. Lors d'un appel Fortran dans un code C, tout
argument doit donc être un pointeur.
- Il est recommandé de faire l'édition de liens avec mpixlf90_r.
- mpixlf90_r convertit tous les noms externes en minuscules.
Vous devez donc appeler la fonction Fortran en minuscules.
Babel : cat appelf.c
#include <stdio.h>
void main () {
int lg_chaine = 0;
float reel = 0.0;
char chaine[] = "chaine_C ";
lg_chaine = strlen(chaine);
fonction( &lg_chaine, &reel, chaine);
printf("chaine finale = %s\n", chaine);
printf("longueur de la chaine finale = %d\n", lg_chaine);
printf("réel passé par adresse = %f\n", reel);
}
Babel : cat fonction.f
SUBROUTINE fonction( lg_chaine, reel, chaine)
INTEGER, INTENT(INOUT) :: lg_chaine
REAL, INTENT(INOUT) :: reel
CHARACTER(LEN=lg_chaine), INTENT(INOUT) :: chaine
chaine = TRIM(chaine) // ' et chaine_Fortran'
lg_chaine = LEN_TRIM(chaine)
reel = 100.0
END SUBROUTINE fonction
Babel : mpixlc_r -c appelf.c
Babel : mpixlf90_r -c fonction.f
Babel : mpixlf90_r appelf.o fonction.o
Babel : bgrun -np 1 -exe ./a.out
chaine finale = chaine_C et chaine_Fortran
longueur de la chaine finale = 26
réel passé par adresse = 100.000000
© CNRS - IDRIS, 23/04/2012