IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

Transformer un pointeur C en tableau 2D


Sujet :

Fortran

  1. #1
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut Transformer un pointeur C en tableau 2D
    Bonjour,

    Ma question est aussi simple que ça : comment transformer un pointeur récupéré par un appel extérieur comme un tableau à 2 dimensions en Fortran 90. Aussi simple que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    real, intent(in)    :: tab(dim1,dim2)
    ?

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Solution #1 - Cray Pointer (non standard mais assez disponible)

    Je l'utilise pour récupérer le data sous forme de tableau 1D. Je n'ai jamais essayé avec un tableau 2D.

    Par exemple : real rData(*); pointer(pData, rData)

    --> Cherche le web pour "Cray Pointer Fortran"

    Solution #2 - Cascade en Fortran 77

    Il faut passer le pointeur en "value" à un sous-programme qui s'attend à recevoir un tableau Fortran (il s'attend en fait à recevoir un pointeur sur l'origine du tableau). Pour que ça fonctionne, il ne faut évidemment pas que l'appelant voit l'interface du sous-programme; on est donc en Fortran 77...

    Solution #3 - Fortran 2003 - Interface to C

    Une solution très standard existe très certainement, ton besoin est trop commun. Je ne sais malheureusement pas comment !

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Ajout à la solution #3

    Vas voir le document ftp://ftp-developpez.com/fortran/cours/Fortran-2003.pdf, page 21, premier point en haut.

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Merci, je vais regarder tout ça !
    La solution 1, j'évite maintenant car on a eu pas mal de soucis avec les pointeurs Cray, et notamment tout la partie check bound qui ne fonctionne pas dans ce cas.
    Mon gros problème, c'est que le code d'interface est en Fortran 90 (mais sans module). Je sais que c'est très courant et un des gars avec qui je travaille est halluciné que ce n'est plus vraiment possible en Fortran 90 simplement. Avant, il y avait la possibilité de changer le type avec je ne sais plus quelle instruction, mais elle est dépréciée, et dans les bouquins de Fortran, je ne trouve plus rien !

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Mon gros problème, c'est que le code d'interface est en Fortran 90 (mais sans module). Je sais que c'est très courant et un des gars avec qui je travaille est halluciné que ce n'est plus vraiment possible en Fortran 90 simplement.
    Qu'est-ce qui n'est plus vraiment possible ?
    Citation Envoyé par Matthieu Brucher Voir le message
    Avant, il y avait la possibilité de changer le type avec je ne sais plus quelle instruction, mais elle est dépréciée, et dans les bouquins de Fortran, je ne trouve plus rien !
    Equivalence ?

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Faire simplement des changements de types, genre tu alloues un gros tableau de flottants de travail, puis tu utilises un morceaux pour en faire des complexes, un autre pour des entiers finalement...
    On peut faire ça ?

    Oui, c'était equivalence.

    J'ai finalement utilisé ISO_C_BINDING, le C_F_POINTER devrait faire plus que l'affaire, d'autant que j'ai vu qu'on pouvait exporter la fonction en C de manière transparente, c'est vraiment bien (OK, c'est vieux, mais tout de même !)

    En tout cas, encore merci pour tes pistes, elles ont été précieuses.

  7. #7
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Faire simplement des changements de types, genre tu alloues un gros tableau de flottants de travail, puis tu utilises un morceaux pour en faire des complexes, un autre pour des entiers finalement...
    On peut faire ça ?
    Traditionnellement, on faisait ça par des allocations statiques et des equivalences. Je ne pense pas qu'on puisse le faire avec des allocations dynamiques de façon propre.

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Bien ce que je me disais

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 31/05/2007, 15h10
  2. Réponses: 4
    Dernier message: 28/10/2005, 13h32
  3. pointeur pour un tableau 2d
    Par olive14 dans le forum C
    Réponses: 6
    Dernier message: 07/05/2005, 15h02
  4. Références et pointeurs sur un tableau
    Par smag dans le forum C++
    Réponses: 2
    Dernier message: 01/03/2005, 20h29
  5. Pointeur vers un tableau
    Par Nikos dans le forum C
    Réponses: 3
    Dernier message: 09/12/2002, 00h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo