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 exécution programme de résolution de l'équation de la chaleur


Sujet :

Fortran

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Erreur exécution programme de résolution de l'équation de la chaleur
    Bonjour,

    Je m'appelle Nicolas et suis étudiant en génie civil. Pour commencer, je vous joins deux fichiers: le premier est le code en .f90, l'autre est un screenshot représentant le terminal affichant l'erreur dont on convoite la correction (ce sont des liens One Drive):

    - http://1drv.ms/1DL320d
    - http://1drv.ms/1a0ZY3X

    Et enfin un dernier lien vous proposant de consulter le sujet du projet (une feuille recto-verso):

    - http://1drv.ms/1C2eEY9

    Il s'agit de résoudre l'équation de la chaleur via différentes méthodes de résolution numérique. Jusque là aucun problème. De plus, j'ai déjà quelques (petites) notions en programmation et comprends donc assez bien le fortran. Mon fichier se compile sans erreur, parfait. Mais lors de l'exécution, une erreur apparaît à un moment du programme et je n'ai aucune idée de ce que cela signifie. Et je viens donc à vous pour que, je l'espère, vous puissiez m'éclairer sur ce souci. Je suis quasiment sûr de la justesse de mon programme, et je bloque littéralement. Tenez compte tout de même que je peux être considéré comme novice, donc je serai pas nécessairement à mesure de comprendre à 100% ce que vous direz.

    J'attends avec grande impatience vos réponses ! Merci d'avance pour votre attention.

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut et bienvenu.
    Le déboguage est une part importante du travail de développeur. D'où l'importance d'activer les options de déboguage du compilateur pendant de la mise au point d'un programme.
    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
    $ gfortran -C -Wall -fcheck=all -ffpe-trap=invalid,zero,overflow prj_eqchal.f90 
    prj_eqchal.f90:130.9:
     
        T1 = (160*(-1)**k)/((pi**2)*(2*k+1)**2)
             1
    Warning: Possible change of value in conversion from REAL(8) to REAL(4) at (1)
    prj_eqchal.f90:131.9:
     
        T2 = sin(((2*k+1)*pi*X(i))/0.2)
             1
    Warning: Possible change of value in conversion from REAL(8) to REAL(4) at (1)
    prj_eqchal.f90:132.9:
     
        T3 = exp(((-a)*((2*k+1)**2)*(pi**2)*j*dt)/0.04)
             1
    Warning: Possible change of value in conversion from REAL(8) to REAL(4) at (1)
    $ ./a.out 
     Nombre de noeuds de discrétisation de la paroi ?
    7
     Durée de la simulation ?
    500
     Nombre de pas de temps
    6
     sspgrm1
    At line 101 of file prj_eqchal.f90
    Fortran runtime error: Index '0' of dimension 1 of array 'x' below lower bound of 1
    $

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Avant tout merci pour votre réponse.
    Comment activer ce débuggage ?
    En revanche, je lis les warning et erreurs dans votre message, et je ne comprends pas absolument ces dernières... Faut savoir que la progra n'est pas, mais alors pas du tout notre domaine de prédilection. Pire, on programme en Fortran des méthodes numériques (qui notre matière en l’occurrence, rien à voir initialement avec Fortran). Mais c'est en TP qu'on s'est retrouvé à programmer, sans aucun cours préparatoire (j'imagine même pas à quel point étaient perdus ceux n'ayant jamais eu un minimum d'expérience en progra). Donc certaines erreurs me parlent, mais d'autres sont d'une autre langue pour moi...

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Je trouve le programme très correct pour un débutant. Je pensais que tu pouvais régler le problème seul à partir des messages.
    Comme tu travailles sur Ubuntu, je pense que tu utilises Gfortran. Les options de déboguage que j'ai utilisées sont : -Wall -fcheck=all -ffpe-trap=invalid,zero,overflow

    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
    $ gfortran -C -Wall -fcheck=all -ffpe-trap=invalid,zero,overflow prj_eqchal.f90 
    prj_eqchal.f90:130.9:
     
        T1 = (160*(-1)**k)/((pi**2)*(2*k+1)**2)
             1
    Warning: Possible change of value in conversion from REAL(8) to REAL(4) at (1)
    prj_eqchal.f90:131.9:
     
        T2 = sin(((2*k+1)*pi*X(i))/0.2)
             1
    Warning: Possible change of value in conversion from REAL(8) to REAL(4) at (1)
    prj_eqchal.f90:132.9:
     
        T3 = exp(((-a)*((2*k+1)**2)*(pi**2)*j*dt)/0.04)
             1
    Warning: Possible change of value in conversion from REAL(8) to REAL(4) at (1)
    Pas d'erreur à la compilation. Des soucis de conversion de type double en simple précision. A corriger mais ça n'est pas le problème.

    A l'exécution, on obtient donc le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    At line 101 of file prj_eqchal.f90
    Fortran runtime error: Index '0' of dimension 1 of array 'x' below lower bound of 1
    qui renvoie à la ligne 101 du programme :
    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
    SUBROUTINE Sspgrm1(n,pas,t,dt,dx,X)
    implicit none
    INTEGER :: i,pas,n,t
    REAL :: dt,dx
    REAL,DIMENSION(:), ALLOCATABLE :: X
     
     
    dt = t/pas ! pas est un NOMBRE d'intervalle
    dx = 0.2/(n-1)
     
    DO i=0,n
      X(i) = i*dx
      PRINT*,X(i)
    ENDDO
     
    END SUBROUTINE Sspgrm1
    Il faut vérifier que X est bien alloué. L'erreur vient du fait que l'indexation des tableaux commence par défaut à 1 et pas à 0.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Vous avez tout juste (Gfortran).

    Donc, cela signifie que le tableau par défaut ne commence qu'à X(1), et non X(0) ? La notion d'indexation m'échappe. Et pourtant, je suis sûr que l'erreur du programme n'a rien d'insurmontable.

    EDIT: Car je viens de tester en modifiant l'ALLOCATE en X(0:n+1) pour bien dire de commencer à 0... Mais l'erreur au final reste la même.

    EDIT2: D'ailleurs pour les Allocate, je comprends totalement le principe mais quand il s'agit de tableaux présents dans et hors programme, je suis un peu perdu sur la façon de déclarer les ALLOCATE (que dans le main ? Dans le main ET dans les subroutines ? Faut-il DEALLOCATE et où ?)

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    EDIT: Car je viens de tester en modifiant l'ALLOCATE en X(0:n+1) pour bien dire de commencer à 0... Mais l'erreur au final reste la même.

    EDIT2: D'ailleurs pour les Allocate, je comprends totalement le principe mais quand il s'agit de tableaux présents dans et hors programme, je suis un peu perdu sur la façon de déclarer les ALLOCATE (que dans le main ? Dans le main ET dans les subroutines ? Faut-il DEALLOCATE et où ?)
    Il faut corriger toutes les allocations mémoires. Par exemple, ALLOCATE(X(n)) définit n emplacements, repérés par les indices allant de 1 à n.
    Une bonne pratique consiste à réaliser l'allocation dans le programme principal. La dé-allocation s'y fait aussi en fin. Comme ça pas d'allocation dans les SUBROUTINE, il suffit de déclarer les tableaux tansmis comme ALLOCATABLE.

    Tout ça est expliqué dans un des cours.

  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 R4ptouz Voir le message
    (...) je viens de tester en modifiant l'ALLOCATE en X(0:n+1) pour bien dire de commencer à 0... Mais l'erreur au final reste la même (...)
    Je n'ai pas de compilateur sous la main pour tester, mais de mémoire, quand tu passes un tableau, la variable dummy locale a par défaut une origine de 1, indépendamment de l'origine de la variable réelle. Pour avoir une origine autre, il faut le dire. La syntaxe, de mémoire encore, est REAL,DIMENSION(0:), ALLOCATABLE :: X

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour vos réponses. J'ai été très pressé hier, j'ai pas pu prendre le temps de répondre. Le programme fonctionne enfin (peut-être deux-trois choses mathématiques à vérifier mais niveau programmation, ça roule). Voici donc le nouveau fichier, si quelqu'un souhaite y jeter un œil un jour:
    - http://1drv.ms/1HKgH6U

    Ces ALLOCATE m'en auront fait perdre du temps...

Discussions similaires

  1. Erreur exécution programme Java
    Par jeremzzz dans le forum Débuter
    Réponses: 7
    Dernier message: 23/09/2014, 09h29
  2. Programme de résolution d'une équation
    Par karisweb dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 25/04/2013, 09h23
  3. Erreur 5 pour la résolution d'une équation du 3ème ordre
    Par Marsgui dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 23/03/2010, 13h28
  4. [Virtual Pascal] Exception lors de l'exécution programme équation 2nd degré
    Par Sexyjulo dans le forum Autres IDE
    Réponses: 8
    Dernier message: 11/11/2008, 20h40
  5. Programme de résolution d'équation par brute force
    Par black_hole dans le forum x86 32-bits / 64-bits
    Réponses: 0
    Dernier message: 21/08/2008, 18h55

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