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 :

subroutine ne fonctionne pas si appelée d'un programme principal


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Octobre 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 30
    Par défaut subroutine ne fonctionne pas si appelée d'un programme principal
    Bonjour,
    Ce programme fait appel à une subroutine qui permet d'ouvrir le fichier "Solution_1_iter.txt", de lire les valeurs dans chaque ligne et de les attribuer dans un autre vecteur nommé donnees.
    après, j'attrbue les éléments du vecteur donnees (indices de 1 à 899) au vecteur tab d'indices (allant de 101 à 999)
    Le fichier "Solution_1_iter.txt" est généré par le programme principal. Quand j'implémente ma subroutine dans mon programme principal, le résultat est que le code retourne bien le fichier "Solution_1_iter.txt", par contre il génère un fichier vide "recup_T.data".
    PAr contre, si j'extrais la subroutine à part(code ci bas), le resultat est bon, et le programme y génère bien le fichier "recup_T.data".
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    program y 
    implicit none
     
    integer                                            :: nmin, nmax, nblignes
    double precision , dimension (:) , allocatable     :: tab, donnees
    integer                                            :: kk,jj
    double precision                                   :: valeur ! donnees, lue dans le fichier solution_1_iter.txt
     
    nmin=101
    nmax=999
    nblignes=899 ! nombre de lignes du fichier
    allocate (tab(nmin:nmax)) 
    allocate (donnees(1:nblignes))
    open (unit = 31,file = 'recup_T.data', status='unknown') 
    call lecture (nmin,nmax,nblignes,tab,donnees)
     
    write(31,'(f18.14)') (tab(kk),kk=101,999)
    end program y
     
     
    subroutine lecture (nmin,nmax,nblignes,tab,donnees)
    implicit none
    integer , intent(in)                                       :: nmin,nmax,nblignes
    double precision, intent(out) ,dimension (1:nblignes)      :: donnees
    double precision, intent(out) ,dimension (nmin:nmax)       :: tab
    integer                       :: kk,jj
    double precision              :: valeur ! donnees, lue dans le fichier solution_1_iter.txt
     
     
    open (40,file="Solution_1_iter.txt") ! on ouvre le fichier
       kk=nmin !on commence par Neps+1
       do jj=1,nblignes
       ! on lit une ligne du fichier
       read(40,'(f18.14)') valeur
     
      ! on stocke la donnee lue dans la case correspondante du tableau   
      donnees(jj)=valeur
     
      if (kk.Le.nmax)then
      tab(kk) = donnees(jj)
      end if
      kk=kk+1
      end do
     
     
    end subroutine lecture

    faut-il deallocate mes vecteurs (donnees et tab) après l'allocation? car si je tape (deallocate (tab,donnees): il affiche des erreurs)

    Des idées pour la solution?
    Merci,

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 489
    Par défaut
    Bonjour,
    Citation Envoyé par haydiamet Voir le message
    Bonjour,
    Ce programme fait appel à une subroutine qui permet d'ouvrir le fichier "Solution_1_iter.txt", de lire les valeurs dans chaque ligne et de les attribuer dans un autre vecteur nommé donnees.
    après, j'attrbue les éléments du vecteur donnees (indices de 1 à 899) au vecteur tab d'indices (allant de 101 à 999)
    Le fichier "Solution_1_iter.txt" est généré par le programme principal. Quand j'implémente ma subroutine dans mon programme principal, le résultat est que le code retourne bien le fichier "Solution_1_iter.txt", par contre il génère un fichier vide "recup_T.data".
    PAr contre, si j'extrais la subroutine à part(code ci bas), le resultat est bon, et le programme y génère bien le fichier "recup_T.data".
    Vu que tu ne montres que l'exemple qui marche, on ne peut que faire de vagues suppositions sur ce qui ne marche pas dans ton programme principal. Le plus plausible est que tu ne donnes pas les bons arguments à ta routine, ou que tu n'as pas ouvert ou écrit dans le fichier que tu crois dans ton programme principal...

    Citation Envoyé par haydiamet Voir le message
    faut-il deallocate mes vecteurs (donnees et tab) après l'allocation? car si je tape (deallocate (tab,donnees): il affiche des erreurs)
    Il ne faut désalouer les tableaux qu'à partir du moment où on n'en a plus besoin.

    Citation Envoyé par haydiamet Voir le message
    Des idées pour la solution?
    Le compilateur et ses options de débogage (recherche de dépassement d'indice de tableaux, utilisation de variables non initialisées, etc.) sont tes amis.

    Bon courage.

  3. #3
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Octobre 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 30
    Par défaut
    Merci Ehouarn pour tes propositions,
    Le problème est résolu en déclarant mes tableaux sans allocation (avec leurs dimensions réelles).

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

Discussions similaires

  1. [WD-2003] Mergfield ne fonctionne pas si appelé par INCLUDETEXT
    Par lakjin dans le forum Word
    Réponses: 4
    Dernier message: 22/08/2011, 13h35
  2. l'appel ne fonctionne pas correctement
    Par caloucalou dans le forum Débuter
    Réponses: 3
    Dernier message: 17/05/2009, 08h14
  3. Mes appels vers es fichiers .js ne fonctionnent pas.
    Par jmgodson dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/01/2008, 09h51
  4. [PHP-JS] PHP JAVACRIPT - Appel d'un onclick - Ca ne fonctionne pas !
    Par bilou95 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/07/2007, 15h03
  5. Réponses: 4
    Dernier message: 28/12/2006, 18h42

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