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 :

[Fortran 90] Erreur dans un common


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut [Fortran 90] Erreur dans un common
    Bonjour, je débute en Fortran, et j'ai une erreur lors de la compilation (je m'excuse par avance, mais la balise CODE ne marche pas sur mon PC...) :

    :\EssaiTSS\ajuste.f90(69) : Error: Conflicting attributes or multiple declaration of name. [VAR_EXPLI]
    common /AJUST/ var_expli, var_a_expli, val_par_ini, compteur
    -----------------^
    D:\EssaiTSS\ajuste.f90(69) : Error: Conflicting attributes or multiple declaration of name. [VAR_A_EXPLI]
    common /AJUST/ var_expli, var_a_expli, val_par_ini, compteur
    ----------------------------^
    D:\EssaiTSS\ajuste.f90(69) : Error: Conflicting attributes or multiple declaration of name. [COMPTEUR]
    common /AJUST/ var_expli, var_a_expli, val_par_ini, compteur

    Voici la déclarations des variables dans ma subroutine ajuste.f90
    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
    22
    23
    24
    25
    26
    27
    28
    29
     
      implicit none 
    ! Declarations  
     
      integer          :: compteur, VLA(3)
      double precision :: var_expli(NbMaxEl), var_a_expli(NbMaxEl)
      double precision :: val_par(6), qualite(4) 
     
      integer          :: i, compteurDFI, ier, nbvar, maxfn, compteurMATYP, err
      double precision :: pente, ordonnee, var_mod(NbMaxEl)
      double precision :: DFI, val_par_ini(4), w(NbMaxEl)
      double precision :: v(8), ec_type(4), a(16)
      double precision :: residu(NbMaxEl), ETR, TED, TEG
      double precision :: EM, ETM, x(NbMaxEl), y(NbMaxEl)
      double precision :: parlin, ERmat, ERlin, energie
     
    ! Declarations des variables appelees par la fonction d'ajustement lmdif.f
      integer, parameter :: nbfct=1   ! nombre de fonctions cout
      integer, parameter :: nbparam=4 ! nombre de parametres a ajuster
      integer               maxfev,mode,nprint,info,nfev
      integer, parameter :: ldfjac=4
      integer               ipvt(nbparam)
      double precision ftol,xtol,gtol,epsfcn,factor
      double precision ci(nbparam) ! estimation initiale des parametres
      double precision fvec(nbfct),diag(nbparam),fjac(ldfjac,nbparam),qtf(nbparam)
      double precision wa1(nbparam),wa2(nbparam),wa3(nbparam),wa4(nbfct)
      external fcout ! fonction cout
     
      common /AJUST/ var_expli, var_a_expli, val_par_ini, compteur
    et voici les déclarations dans ma subroutine fcout.f90 (qui utilise aussi ce common) :
    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
    22
     
     implicit none 
     
     
    ! Declarations
      integer nbfct ! nombre de fonction cout
      integer nbparam ! nombre de parametres a ajuster
      double precision val_param(nbparam)
      double precision fvec(nbfct)
      integer iflag
     
      double precision var_expli(NbMaxEl), var_a_expli(NbMaxEl)
      double precision var_mod, ymod, val_par_ini(4)
      double precision m1, a1, p12, m2, a2, d1, d2, s
      double precision var_mod0
      integer i, compteur
     
    ! var_expli   : La variable explicative : Deformation de Green-Lagrange 
    ! var_a_expli : La variable a expliquer : !ontrainte de Piola-Kirchoff en daN/mm2 mesuree
    ! ymod    : Contrainte de Piola-Kirchoff en daN/mm2 modelisee
    ! compteur    : nombre de points de mesure
      common /AJUST/ var_expli, var_a_expli, val_par_ini, compteur
    Pouvez-vous m'expliquer la cause de mon erreur ?
    Merci d'avance

  2. #2
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Par défaut
    Ou et declare ta variable 'NbMaxEl' ?

    la taille d'un tableau dans un common doit etre connue a la compilation ( pas de tableau automatique). La variable NbMaxEl doit etre declare en tant que 'parameter'

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    aucun pb, elle est déclarée dans un module et avant j'ai bien fait un

    use header (le module contenant NbMaxEl)

    implicit none

  4. #4
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Par défaut
    meme dans ton module, le NbMaxEl doit avoir l'attribut parameter.
    fais attention de bien supprimer le fichier .mod entre deux compile (parfois on oubli de le supprimer dans le Makefile, et celui ci n'est pas recompiler!)

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Salut,
    merci encore de ta patience

    j'ai bien un parameter dans mon module header.f90 et je le recompile bien à chaque fois (make clean)

    ceci dit, j'ai toujours mon erreur dans le common... et je ne vois pas du tout où peut être mon erreur...

    Merci encore

  6. #6
    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
    Par défaut
    Il faudrait que tu nous fournisses le début de ajuste.f90 car le bout fourni ne permet pas de trouver le problème.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Bonjour,
    Voilà le début de ma fonction ajuste.f90

    Voici mon module header.f90 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    module header
     
     
    ! Nombre maximal de points par fichier 
      integer    NbMaxEl
      parameter (NbMaxEl = 1000)
     
     
    end module header
    Voici le début de ma fonction ajuste.f90 :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
      subroutine ajuste_tss(compteur,var_expli,var_a_expli,val_par,qualite,VLA)
     
      use header
     
      implicit none
     
    ! Declarations  
     
      integer          :: compteur, VLA(3)
      double precision, dimension(NbMaxEl) :: var_expli, var_a_expli
      double precision :: val_par(6), qualite(4) 
     
      integer          :: i, compteurDFI, ier, nbvar, maxfn, compteurMATYP, err
      double precision :: pente, ordonnee, var_mod(NbMaxEl)
      double precision :: DFI, val_par_ini(4), w(NbMaxEl)
      double precision :: v(8), ec_type(4)
      double precision :: residu(NbMaxEl), ETR, TED, TEG
      double precision :: EM, ETM, x(NbMaxEl), y(NbMaxEl)
      double precision :: parlin, ERmat, ERlin, energie
     
    ! Declarations des variables appelees par la fonction d'ajustement lmdif.f
      integer, parameter :: nbfct=1   ! nombre de fonctions cout
      integer, parameter :: nbparam=4 ! nombre de parametres a ajuster
      integer               maxfev,mode,nprint,info,nfev
      integer, parameter :: ldfjac=4
      integer               ipvt(nbparam)
      double precision ftol,xtol,gtol,epsfcn,factor
      double precision ci(nbparam) ! estimation initiale des parametres
      double precision fvec(nbfct),diag(nbparam),fjac(ldfjac,nbparam),qtf(nbparam)
      double precision wa1(nbparam),wa2(nbparam),wa3(nbparam),wa4(nbfct)
      external fcout ! fonction cout
     
      common /AJUST/ var_expli, var_a_expli, val_par_ini, compteur
     
    ici je fais tout plein de calcul
    Le common AJUST est utilisé dans la fonction fcout :
    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
    subroutine fcout(nbfct,nbparam,val_param,fvec,iflag)  
     
      use header
     
      implicit none 
     
     
    ! Declarations
      integer nbfct ! nombre de fonction cout
      integer nbparam ! nombre de parametres a ajuster
      double precision val_param(nbparam)
      double precision fvec(nbfct)
      integer iflag
     
      double precision var_expli(NbMaxEl), var_a_expli(NbMaxEl)
      double precision var_mod, ymod, val_par_ini(4)
      double precision m1, a1, p12, m2, a2, d1, d2, s
      double precision var_mod0
      integer i, compteur
      common /AJUST/ var_expli, var_a_expli, val_par_ini, compteur
    Voilà, j'espère que vous pourrez m'aider

    Merci encore de toute votre patience

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

Discussions similaires

  1. erreur dans un code fortran
    Par saida29 dans le forum Fortran
    Réponses: 1
    Dernier message: 08/06/2013, 12h48
  2. Erreur dans un code Fortran
    Par saida29 dans le forum Fortran
    Réponses: 1
    Dernier message: 30/05/2013, 18h31
  3. [Erreur dans la lib...]
    Par Gonath dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/12/2003, 09h02
  4. Erreur dans l'utilisation de SWAP
    Par mire dans le forum Langage
    Réponses: 12
    Dernier message: 15/03/2003, 21h39

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