Babel : appel des fonctions Fortran à partir de C


Quelques recommandations utiles :
  1. 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.
  2. Il est recommandé de faire l'édition de liens avec mpixlf90_r.
  3. 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