Fortran : erreur de segmentation.
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

Fortran : erreur de segmentation.



  1. #1
    bengi73

    Fortran : erreur de segmentation.


    ------

    Bonjour à tous,

    Je travaille actuellement sur un code en fortran permettant de résoudre l'équation de diffusion 1D. Plus particulièrement la température, avec un barreau de taille L.

    Le code compile bien mais j'ai apparemment une erreur de segmentation...étant débutant sur fortran j'ai cherché des renseignements sur internet mais je n'arrive pas à trouver mon erreur.

    Voici le code avec les différentes subroutines :

    Code:
    PROGRAM temp_barre
    
    USE caracteristique
                                     MODULE caracteristique
    
                                     IMPLICIT NONE
    
                                     TYPE donnees
    	                                  REAL::a,l,tmax,T0
    	                                  INTEGER::k
                                     END TYPE donnees
    
    
                                     TYPE vect
    	                                INTEGER::n
    	                                REAL, DIMENSION(20)::u
                                     END TYPE vect
     
                                     END MODULE caracteristique
                                            
    
    IMPLICIT NONE
    
    TYPE(vect)::w,v
    TYPE(donnees)::d1
    
    REAL::dt,dx,cl0,cll,R
    INTEGER::j,i,n
    
    CALL prob_physique
    
                                   SUBROUTINE prob_physique(d1)
    
                                   USE caracteristique
    
                                   IMPLICIT NONE
    
                                   TYPE(donnees)::d1
    
                                   PRINT *, 'Veuillez preciser la diffusivite thermique a' 
                                   READ *, d1%a
    
                                   PRINT *, 'Veuillez preciser le nombre de point'
                                   READ *, d1%k
    
                                   PRINT *, 'Veuillez preciser la longueur du domaine'
                                   READ *, d1%l
    
                                   PRINT *, 'Veuillez preciser sur combien de temps le calcul doit se faire'
                                   READ *, d1%tmax
    
                                   PRINT *, 'Température initiale dans la barre'
                                   READ *, d1%T0
    
                                   END SUBROUTINE prob_physique
    
    !Calcul du pas en temps!
    
    dx=(d1%l)/(d1%k)
    dt=(R)*dx**2/(d1%a)
    n=ceiling(d1%tmax/dt)
    
    !Vérification de la stabilité du problème!
    
    dx=(d1%l)/(d1%k)
    dt=(d1%tmax)/(n)
    R=(d1%a*dt)/(dx**2)
    
    IF (0<R) THEN
    	
    	IF (2*R<1) THEN
    	PRINT *, 'Le probleme est stable'
    		
    ELSE
    	PRINT *, 'Attention le probleme est instable !'
    
    END IF
    END IF
    
    !Initialisation!
    
    DO i=1,(d1%k)
       w%u(i)=d1%T0
    END DO	
    
    
    !Boucle en temps + appel de la boucle d'espace!
    
    DO j=2,n
    	CALL etape
    
                                    SUBROUTINE etape(d1,w,v,R)
    
                                   USE caracteristique
    
                                   IMPLICIT NONE
    
                                   INTEGER::j
                                   REAL,INTENT(IN)::R
    
                                   TYPE(vect),INTENT(IN)::w
                                   TYPE(vect),INTENT(OUT)::v
                                   TYPE(donnees),INTENT(IN)::d1
    
    
                                  !Boucle en espace à un temps t données!
    
                                  !Le vecteur v correspond à la température à l'instant t+dt!
                                  !Le vecteur w correspond à la température à l'instant t! 
    
                                  !Conditions aux limites!
    
                                  w%u(1)=cl0(d1%tmax)
                                  w%u(d1%k)=cll(d1%tmax)
    
                                  !Les cl0 et cll sont définies à l'aide d'un sous-programme de type fonction!
                                 
                                 DO j=2,(d1%k)-1
                                 v%u(j)=w%u(j)+(R)*w%u(j-1)+(R)*w%u(j+1)-2*(R)*w%u(j)
                                 END DO 
    
    
                                 END SUBROUTINE etape
    
    	v%u(j+1)=w%u(j)
    END DO
    
    CALL affichage
    
                               SUBROUTINE affichage(d1,v)
    
                               USE caracteristique
    
                               IMPLICIT NONE
    
                               TYPE(donnees), INTENT(IN)::d1
                               TYPE(vect), INTENT(IN)::v
    
                               PRINT *, v%u(d1%k)
    
                               END SUBROUTINE affichage
    
    END PROGRAM temp_barre


    L'erreur semble apparaitre directement après la première question de la subroutine prob_phy...lors de l'exécution du programme, je peux rentrer la valeur de a et l'erreur apparait...

    Merci d'avance pour ceux qui ont le courage de regarder mon problème,

    Benjamin.

    -----
    Dernière modification par bengi73 ; 17/12/2012 à 14h06.

  2. #2
    Chanur

    Re : Fortran : erreur de segmentation.

    Bonjour,
    Tu appelles "prob_physique" sans lui donner d'argument. Je ne vois pas comment elle peut connaître la valeur du paramètre d1

    Par ailleurs, je crois que tu devrait éviter de mélanger ton programme principal avec les définitions de subroutines et éviter de donner le même nom à une variable du programme principal et à l'argument d'une subroutine.

    Sinon, tu pourrais afficher la valeur de d1%a juste après l'avoir lue, pour être sûr que la lecture a fonctionné.

    Cela dit, ça fait au moins 20 ans que je n'ai pas programmé en FORTRAN ...

    Bon courage ...
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

Discussions similaires

  1. Erreur de segmentation (séries de Fourier)
    Par Tinordi24 dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 03/12/2011, 07h47
  2. erreur 'irrésolue' sous fortran
    Par invitea0f03ccc dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 05/01/2009, 16h36
  3. Erreur de segmentation sous fedora
    Par invite70eda27f dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 26/02/2008, 21h02
  4. c++:erreur de segmentation!
    Par invitef666d0fa dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 06/12/2006, 18h36
  5. Erreur compilation Fortran
    Par invite10295c30 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 01/06/2006, 09h38