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( &amp;lg_chaine, &amp;reel, chaine);

  printf(''chaine finale                = %sn'', chaine);
  printf(''longueur de la chaine finale = %dn'', lg_chaine);
  printf(''réel passé par adresse       = %fn'', 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