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 :

Erreur 'wrong data type for reference to FUNCTION M1 from procedure main'


Sujet :

Fortran

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 19
    Points
    19
    Par défaut Erreur 'wrong data type for reference to FUNCTION M1 from procedure main'
    Bonjour,
    J'ai fait un petit programme qui calcul l'énergie d'une molécule et après compilation j'ai 1 erreur que je n'arrive pas à résoudre.

    L'erreur est la suivante :
    wrong data type for reference to FUNCTION M1 from procedure main
    J'utilise dans mon programme principal : M1(beta,gamma)
    Définie par la suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
          DOUBLE PRECISION FUNCTION M1(beta,gamma)
          IMPLICIT REAL * 8 (A-H,O-Z)
          common/nombr/nlambda,nmu/dist/R/plus/aincl,aincm
          DIMENSION alam(250),amu(250)
          aincl=19./dfloat(nlambda)
          aincm=2./dfloat(nmu)
          vlambda=1.
          DO 4 i=1.,nlambda+1.
          vmu=-1
          DO 5 j=1.,nmu+1.
          amu(j)=DEXP((-R/2.)*(gamma*(vlambda-vmu)
         1+beta*DSQRT((vlambda**2-1.)*(1.-vmu**2)+vlambda**2*vmu**2)))
         1*(vlambda-vmu)
          vmu=vmu+aincm
      5   CONTINUE
          alam(i)= A01AD(amu,1,1,nmu,aincm)
          vlambda=vlambda+aincl
      4   CONTINUE
          M1=A01AD(alam,1,1,nlambda,aincl)
          RETURN
          END
    Je ne comprends pas cette erreur , d'autant plus qu'à l'université (sous Linux), cette erreur n'existe pas et le programme fonctionne.

    P.S. : je suis sous windows xp avec microsoft developer studio
    P.S.2 : je viens de débuter le Fortran

    Merci de votre aide

  2. #2
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    Je vois bien que tu utilise le gamma mais tu ne l as pas declarer son type au debut (real, doubleprecision , ect).
    De plus je te conseil d utiliser le implicit none au debut, comme ca tu sera obliger a declarer tout

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 19
    Points
    19
    Par défaut
    Euh oui, j'avais oublié de dire que j'ai une boucle sur gamma et une sur beta dans le programme principal donc je n'ai pas besoin de les déclarer ici.

    Y a t-il une explication à cette erreur ?

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 19
    Points
    19
    Par défaut
    Comme je vous l'ai dit je suis débutant, ca ne m'étonnerai pas que l'erreur soit bête.

    Si vous voulez des précisions supplémentaires n'hésitez pas à demander.(précisions vitales que j'aurais oublié de donner sur le programme, mais je pense que tout est là)

  5. #5
    Débutant
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Points : 119
    Points
    119
    Par défaut
    Il faut mettre implicit none, et a mon avis il faut tout declarer, meme dans les fonctions, pour cela met le implicit none

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 11
    Points : 19
    Points
    19
    Par défaut
    Salut donc si je te suis bien je rentre implicit none (je ne connait pas), et je redéfinit toutes mes variables. Comment ? Peut-tu m'expliciter ce que je dois rajouter a mon prog ? (sachant que gamma et beta varient)

    Merci

  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
    Le message d'erreur semble référer au programme principal (main), alors que tu nous fournis le source de la fonction.

    As-tu déclaré M1 en real*8 dans le programme principal ? Utilises-tu des arguments real*8 également ?

    La validation que les appels de fonction correspondent aux déclarations de ces dernières est facultative. Certains compilateurs le font, d'autre pas. Il est donc possible que ce soit pourquoi tu n'observe pas l'erreur partout.

    Finalement, je ne peux que seconder la suggestion de feynman (on a fini par le convaincre !!!) d'utiliser implicit none... Comment faire ? Tu remplaces « implicit real * 8 ... » par « implicit none » et ensuite, tu déclares toutes les variables. C'est un peu long si tu modifie un programme existant, mais tu obtiendras un programme beaucoup plus facile d'entretien. Tu peux (doit) répéter l'opération à chaque fonction / subroutine / program.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/05/2010, 21h13
  2. Réponses: 1
    Dernier message: 24/03/2009, 09h04
  3. IB5 : "invalid data type for arithmetic"
    Par ZoRRo75 dans le forum InterBase
    Réponses: 2
    Dernier message: 21/11/2008, 14h33
  4. Erreur Wrong parameter count for opendir()
    Par makohsarah dans le forum Langage
    Réponses: 2
    Dernier message: 29/08/2007, 09h14
  5. [PPC][C#][Sql CE] erreur "no data exists for the row/column"
    Par Jessika dans le forum Windows Forms
    Réponses: 6
    Dernier message: 12/04/2007, 12h13

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