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 95] Incident segmentation


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [Fortran 95] Incident segmentation
    bonjour,

    J'ai un petit probleme avec mon programme Fortran. Il s'agit d'un incident de segmentation apparemment. Voici ce que me donne l'execution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    makino{foti}91: ifort -o pollin3 pollin3.f90 trimod
    makino{foti}92: pollin3
    Incident de segmentation
    Ca ne donne pas beaucoup de details concernant l'origine de l'incident! (notez qu'il n'y a pas de probleme a la compilation)

    Ce programme traite deux fichiers ASCII de 6 colonnes chacun. Les premieres colonnes de ces fichiers sont des longueurs d'onde (lambda) qui servent d'abscisse. Seulement, l'echantillonage n'est pas le meme sur les lambdas des deux fichiers (ce que j'appelle lambda1 et lambda2 dans mon programme). Mon fichier sortie devrait avoir une seule abscisse lambda qui serait la combinaison des lambda1 et lambda2.
    Pour cela, je voudrais concatener lambda1 et lambda2 et les trier dans l'ordre croissant pour former un lambda (dont le nombre d'elements est la somme de ceux de lambda1 et lambda2. De plus, je voulais creer des vecteurs lambda1x et lambda2x qui sont comme lambda1 et lambda2 mais avec le nombre d'elements de lambda.

    En bref, j'ai ceci dans mon code:

    lambda(:,1) =(/lambda1(:,1), lambda2(:,1)/)
    lambda(:,2) =(/lambda1(:,2), lambda2(:,2)/)

    lambda1x(:,1)=(/lambda1(:,1), lambda1(:,1)/)
    lambda1x(:,2)=(/lambda1(:,2), lambda1(:,2)/)

    lambda2x(:,1)=(/lambda2(:,1), lambda2(:,1)/)
    lambda2x(:,2)=(/lambda2(:,2), lambda2(:,2)/)

    j'ai oublie de mentionner que mes vecteurs lambda sont en fait des tableaux a deux lignes. Pour lambda1, la deuxieme ligne ne contient que des 1 et pour lambda2, elle ne contient que des 2. Ceci afin que chaque valeur que j'aurais dans mon lambda final conserve une trace de son origine.

    Donc, le probleme a l'execution survient a la 3eme ligne du groupe que j'ai ecrit ci-dessus, c'est-a-dire lambda1x(:,2)=(/lambda1(:,2), lambda1(:,2)/)

    Je ne comprends pas pourquoi il voit un probleme de segmentation la! Quelqu'un aurait-il une idee?

    Je vous laisse le code complet ci-dessous:

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    program polarisation
     
    use trimod
     
    integer                    :: n,o,r
    real                       :: inf,sup, num
    real, parameter            :: pi=3.14159265
    real, dimension (210000,2)   :: lambda1,I1,Q1,lambda2,I2,U2
    real, dimension (6,420000) :: pollin
    real, dimension (420000,2)   :: lambda, lambda1x, lambda2x, I,Q,U
     character(99)             :: inputfile1, inputfile2, outputfile
    double precision           :: c=299792.458,lambda0
     
    type *,'longueur d'' onde du laboratoire: '
    read (*,'(f8.3)') lambda0
     
    !---------------------------------------------------------------------------------------------------------------------------------------
     
    !Choix du domaine spectral:
     
    type *,"Choisissez votre domaine spectral (en nm, a 10^-2 pres): "
    read (*,'(f5.2)') inf
    read (*,'(f5.2)') sup
     
    !Fichiers texte : 6 colonnes
    !
    !*****************************************************************************************************************
    !*     Lambda(nm)       *     Stokes I     *     Stokes Q,U,V     *     N1     *     N2     *     erreur/bin     *
    !*****************************************************************************************************************
    !
    !
    !lecture du premier fichier texte
    !********************************
    type *,'inputfile 1 :'
    read (*,'(a30)') inputfile1
     
    OPEN  (UNIT =1,FILE =inputfile1,form='formatted',status="old",action='read')
     
    n=1
    o=1
    do        
    	read (1,'(f10.4)',end=100) lambda1(n,1)
    	if (lambda1(n,1)>inf) then
    		if (lambda1(n,1)<sup) then
    			read (1,'(f10.4,2e12.8)') lambda1(o,1),I1(o,1),Q1(o,1)
    			lambda1(o,2)=1
    			o=o+1
    		else 
    			exit
    		endif
    	endif
    	n=n+1
    enddo
     
    100 continue
     
    !--------------------------------------------
    !lecture du second fichier texte
    !*******************************
    type *,'inputfile 2 :'
    read (*,'(a30)') inputfile2
     
    OPEN  (UNIT =2,FILE =inputfile2,form='formatted',status="old",action='read')
     
    !------------------------------------------
     
    n=1
    o=1
    do        
    	read (2,'(f10.4)',end=200) lambda2(n,1)
    	if (lambda2(n,1)>inf) then
    		if (lambda2(n,1)<sup) then
    			read (2,'(f10.4,2e12.8)') lambda2(o,1),I2(o,1),U2(o,1)
    			lambda2(o,2)=2
    			o=o+1
    		else
    			exit
    		endif
    	endif
    	n=n+1
    enddo
     
    200 continue
    !------------------------------------------
     
    !calcul polarisation lineaire pl=sqrt(Q**2+U**2) avec Q et U fraction de Ic
    !tableau de sortie : pollin, 6 colonnes
    !*************************************************************************
     
    !********************************************************************************
    !*     Lambda (nm)     *  I  *  Q  *  U  *    polarisation lineaire     * theta *
    !********************************************************************************
     
    print *,'***************************'
    print *,shape(lambda1), shape(lambda2)
    print *,'***************************'
     
     
     
     
    lambda(:,1)  =(/lambda1(:,1), lambda2(:,1)/)
    lambda(:,2)  =(/lambda1(:,2), lambda2(:,2)/)
     
    print *,'***************************'
    print *,shape(lambda)
    print *,'***************************'
     
    lambda1x(:,1)=(/lambda1(:,1), lambda1(:,1)/)
    lambda1x(:,2)=1.
     
    lambda2x(:,1)=(/lambda2(:,1), lambda2(:,1)/)
    !lambda2x(:,2)=2.
     
    ! call tri( size(lambda),lambda  )
    ! call tri( size(lambda1x),lambda1x  )
    ! call tri( size(lambda2x),lambda2x  )
     
    end program polarisation

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    je viens de trouver une maniere contournee de resoudre mon probleme. Le programme que je vous ai presente etait beaucoup trop complique. Ne vous embetez donc pas a essayer de repondre a ma precedente question.

    Merci et bonne journee !!

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

Discussions similaires

  1. [interfaçage C/Fortran] erreur de segmentation
    Par tiresias54 dans le forum Débuter
    Réponses: 15
    Dernier message: 26/02/2014, 13h33
  2. Erreur de segmentation avec fortran: c'est quoi?
    Par VauRDeC dans le forum Fortran
    Réponses: 2
    Dernier message: 29/09/2010, 09h06
  3. [Fortran 90] Segmentation fault étrange
    Par nikosnikov dans le forum Fortran
    Réponses: 2
    Dernier message: 09/06/2006, 11h45
  4. [Fortran 77] Segmentation fault
    Par vinche dans le forum Fortran
    Réponses: 1
    Dernier message: 29/06/2005, 11h03

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