J'ai encapsulé un sous programme fortran dans un programme C. Le problème subsistant est le passage de tableaux multidimensionnels en C à des tableaux fortran.
J'ai encapsulé un sous programme fortran dans un programme C. Le problème subsistant est le passage de tableaux multidimensionnels en C à des tableaux fortran.
C'est penible a faire. Les tableaux multi-dimensionnels ne sont pas classes de la meme facon en memoire en Fortran et en C.
Les tableaux Fortran sont en column-major, i.e. la premiere dimension varie la plus rapidement. Les tableaux C sont en row-major, i.e. la dimension la plus a droite varie le plus rapidement.
Le plus simple est certainement de considerer les tableaux comme ayant une seule dimension (linearisation) et d'utiliser les formules suivantes pour acceder aux elements (exemple en deux dimensions):
En Fortran:
ou les indices vont de 1 a Nrow*Ncol.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 index = (( col - 1) * Nrow ) + row
En C:
ou les indices vont de 0 a Nrow*Ncol - 1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 index = ( row * Ncol ) + col
Ben, il est assez simple de generaliser les formules ci-dessus.
Par exemple, pour un tableau a trois dimensions N1, N2, N3, pour acceder a l'element i,j,k, on fait en Fortran:
avec 1 <= i <= N1, 1 <= j <= N2, 1 <= k <= N3.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 index = ((k-1) * N2 + j - 1) * N1 + i
en C:
avec 0 <= i < N1, 0<= j < N2, 0 <= k < N3.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 index = (i * N2 + j)*N3 + k;
Mais le plus simple est tout de meme de ne jamais utiliser de tableaux de plus de 1 dimension entre C et Fortran, et d'utiliser une formule commune pour 'simuler' un tableau multi-dimensionnel dans les deux langages (en faisant attention au decalage de 1 dans les indices).
Il me semble plus simple de passer d'un tableau fortran à un tableau C simplement en inversant les indices non?
J'ai testé en dimension 3...
Faire des tests est effectivement necessaire. Apres, cela depend de qui appelle qui. En effet, tu peux imposer au C de suivre une organisation 'a la Fortran'.
Mais personnellement, je ne m'embete pas et je travaille uniquement avec des tableaux a une dimension. Les tableaux multi-dimensionnels sont linearises en jouant avec les indices.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager