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 de segmentation?


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Par défaut erreur de segmentation?
    Bonjour,
    J'ai déjà ouvert une discution sur mon problème concernant l'équation de la chaleur mais je n'ai pas eu de réponse à mon dernier post donc je me permets de relancer.
    Voilà, j'ai codé la méthode d'Euler implicite, celle-ci ne doit pas vérifié une condition de CFL. Dans certains cas, la méthode marche, j'ai de bons résultats. Mais dans d'autres, malgré la compilation, lors de l'éxecution j'obtiens ce message :
    *** Error in `./test2': free(): invalid next size (normal): 0x0000000000f1cf10 ***
    ======= Backtrace: =========
    /lib64/libc.so.6(+0x75a4f)[0x7f2d6988fa4f]
    /lib64/libc.so.6(+0x7cd78)[0x7f2d69896d78]
    ./test2[0x4014aa]
    ./test2[0x4048d4]
    ./test2[0x40536b]
    /lib64/libc.so.6(__libc_start_main+0xf5)[0x7f2d6983bd65]
    ./test2[0x400a59]
    ======= Memory map: ========
    00400000-00407000 r-xp 00000000 00:28 3759416062 /net/malt/m/bgiralda/TER/Programmes/programmes2/test2
    00606000-00607000 r--p 00006000 00:28 3759416062 /net/malt/m/bgiralda/TER/Programmes/programmes2/test2
    00607000-00608000 rw-p 00007000 00:28 3759416062 /net/malt/m/bgiralda/TER/Programmes/programmes2/test2
    00f14000-00f35000 rw-p 00000000 00:00 0 [heap]
    7f2d6981a000-7f2d699ce000 r-xp 00000000 08:02 1442501 /usr/lib64/libc-2.18.so
    7f2d699ce000-7f2d69bcd000 ---p 001b4000 08:02 1442501 /usr/lib64/libc-2.18.so
    7f2d69bcd000-7f2d69bd1000 r--p 001b3000 08:02 1442501 /usr/lib64/libc-2.18.so
    7f2d69bd1000-7f2d69bd3000 rw-p 001b7000 08:02 1442501 /usr/lib64/libc-2.18.so
    7f2d69bd3000-7f2d69bd8000 rw-p 00000000 00:00 0
    7f2d69bd8000-7f2d69c13000 r-xp 00000000 08:02 1443401 /usr/lib64/libquadmath.so.0.0.0
    7f2d69c13000-7f2d69e12000 ---p 0003b000 08:02 1443401 /usr/lib64/libquadmath.so.0.0.0
    7f2d69e12000-7f2d69e13000 r--p 0003a000 08:02 1443401 /usr/lib64/libquadmath.so.0.0.0
    7f2d69e13000-7f2d69e14000 rw-p 0003b000 08:02 1443401 /usr/lib64/libquadmath.so.0.0.0
    7f2d69e14000-7f2d69e29000 r-xp 00000000 08:02 1441807 /usr/lib64/libgcc_s-4.8.3-20140911.so.1
    7f2d69e29000-7f2d6a028000 ---p 00015000 08:02 1441807 /usr/lib64/libgcc_s-4.8.3-20140911.so.1
    7f2d6a028000-7f2d6a029000 r--p 00014000 08:02 1441807 /usr/lib64/libgcc_s-4.8.3-20140911.so.1
    7f2d6a029000-7f2d6a02a000 rw-p 00015000 08:02 1441807 /usr/lib64/libgcc_s-4.8.3-20140911.so.1
    7f2d6a02a000-7f2d6a12f000 r-xp 00000000 08:02 1442509 /usr/lib64/libm-2.18.so
    7f2d6a12f000-7f2d6a32f000 ---p 00105000 08:02 1442509 /usr/lib64/libm-2.18.so
    7f2d6a32f000-7f2d6a330000 r--p 00105000 08:02 1442509 /usr/lib64/libm-2.18.so
    7f2d6a330000-7f2d6a331000 rw-p 00106000 08:02 1442509 /usr/lib64/libm-2.18.so
    7f2d6a331000-7f2d6a450000 r-xp 00000000 08:02 1443404 /usr/lib64/libgfortran.so.3.0.0
    7f2d6a450000-7f2d6a650000 ---p 0011f000 08:02 1443404 /usr/lib64/libgfortran.so.3.0.0
    7f2d6a650000-7f2d6a651000 r--p 0011f000 08:02 1443404 /usr/lib64/libgfortran.so.3.0.0
    7f2d6a651000-7f2d6a653000 rw-p 00120000 08:02 1443404 /usr/lib64/libgfortran.so.3.0.0
    7f2d6a653000-7f2d6a673000 r-xp 00000000 08:02 1442918 /usr/lib64/ld-2.18.so
    7f2d6a843000-7f2d6a847000 rw-p 00000000 00:00 0
    7f2d6a870000-7f2d6a872000 rw-p 00000000 00:00 0
    7f2d6a872000-7f2d6a873000 r--p 0001f000 08:02 1442918 /usr/lib64/ld-2.18.so
    7f2d6a873000-7f2d6a874000 rw-p 00020000 08:02 1442918 /usr/lib64/ld-2.18.so
    7f2d6a874000-7f2d6a875000 rw-p 00000000 00:00 0
    7ffff37ad000-7ffff37ce000 rw-p 00000000 00:00 0 [stack]
    7ffff37e3000-7ffff37e5000 r--p 00000000 00:00 0 [vvar]
    7ffff37e5000-7ffff37e7000 r-xp 00000000 00:00 0 [vdso]
    ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]

    Program received signal SIGABRT: Process abort signal.

    Backtrace for this error:
    #0 0x7F2D6A34A497
    #1 0x7F2D6A34AADE
    #2 0x7F2D6984F8EF
    #3 0x7F2D6984F877
    #4 0x7F2D69850F67
    #5 0x7F2D6988FA53
    #6 0x7F2D69896D77
    #7 0x4014A9 in __fonctions_MOD_resolution at neweulerimp.f90:112
    #8 0x4048D3 in eulerimplicit at neweulerimp.f90:192
    Abandon (core dumped)




    A quoi est-ce dû? Je ne comprends pas pourquoi ce message ne s'affiche que dans certains cas.
    Je vous joins le code.
    Merci d'avance.
    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
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    module fonctions
     
      !module principal contenant les subroutines
      implicit none
     
    contains
     
    !**************************************************************************
    !Résolution d'un système linéaire triangulaire supérieur
     
    subroutine Resol_Triang_Sup(n,A,B,X)
     
      implicit none
     
      integer, intent(in) :: n
      real*8, dimension(n,n),intent(in) :: A
      real*8, dimension(n), intent(in) :: B
      real*8, dimension(n), intent(out) :: X
      integer :: i, j
      real*8 :: somme
     
     
      !initialisation de X et somme
      X = 0
      somme = 0
     
      !algorithme de résolution
      X(n) = B(n)/A(n,n)
     
      Do i = n-1,1,-1
         somme = B(i)
         Do j = n, i, -1 
            somme = somme - A(i,j)*X(j)
         End Do
         X(i) = somme/A(i,i)
      End Do
     
    end subroutine Resol_Triang_Sup
     
    !*****************************************************************************
    !Résolution d'un système linéaire triangulaire inférieur
     
    subroutine Resol_Triang_Inf(n,A,B,X)
     
      implicit none
     
      integer, intent(in) :: n
      real*8, dimension(n,n),intent(in) :: A
      real*8, dimension(n), intent(in) :: B
      real*8, dimension(n), intent(out) :: X
      integer :: i, j
      real*8 :: somme
     
     
      !initialisation de X et somme
      X = 0
      somme = 0
     
      !algorithme de résolution
      X(1) = B(1)/A(1,1)
     
      Do i = 2, n
         somme = B(i)
         Do j = 1, i-1
            somme = somme - A(i,j)*X(j)
         End Do
         X(i) = somme/A(i,i)
      End Do
     
    end subroutine Resol_Triang_Inf
    !**************************************************************************
     
    !Factorisation LU
     
    subroutine LU(n,A,L,U)
     
      implicit none
     
      integer, intent(in) :: n
      real*8, dimension(n,n), intent(in) :: A
      real*8, dimension(n,n), intent(out) :: L, U
      integer :: i, j, k
     
      U = A
      L = 0
     
      Do i = 1, n
         L(i,i) = 1
      End Do
     
      Do i = 1, n
         Do j = i+1, n
            L(j,i) = U(j,i)/U(i,i)
            U(j,i) = 0
            Do k = i+1, n
               U(j,k) = U(j,k) - L(j,i)*U(i,k)
            End Do
         End Do
      End Do
     
    end subroutine LU
    !***************************************************************************
    !Resolution LU
    subroutine Resolution(n,L,U,B,X)
     
      implicit none
     
      integer, intent(in) :: n
      real*8, dimension(n,n), intent(in) :: L, U
      real*8, dimension(n), intent(in) :: B
      real*8, dimension(n), intent(out) :: X
      real*8, dimension(n) :: Y
      integer :: i, j
     
      call Resol_Triang_Inf(n,L,B,Y)
      call Resol_Triang_Sup(n,U,Y,X)
     
     
    end subroutine Resolution
     
    !***************************************************************
     
    !ecriture dans un fichier
     
    subroutine WriteGnuPlot(nom_fichier, v)
        implicit none
        character(len=*) :: nom_fichier
        real*8, dimension(:,:) :: v
        integer :: i,j
        open(unit = 11, file = nom_fichier, form = 'formatted', &
             status = 'unknown', action = 'write')
        do i = 1, size(v,1)
           do j=1,size(v,2)
              write(11, * )i, j, v(i,j)
           end do
           write(11, *)
        end do
        close(11)
      end subroutine WriteGnuPlot
     
    end module fonctions
     
     
    !programme principal
    program eulerimplicit
      use fonctions
      implicit none  
      real*8,dimension(:,:),allocatable::A,L,U,mat
      real*8,dimension(:),allocatable::Un,Un1,y
      real*8::Beta1,alpha,dt,dx,tf,D
      integer::i,j,nx,nt
      D=0.01
      !D=0.001
      tf=5.0D0
      dt=0.1d0
      dx=0.01d0
     
      nx=floor(1./dx)
      nt=floor(tf/dt)
     
      allocate(A(nx,nx))
      allocate(L(nx,nx))
      allocate(U(nx,nx))
      allocate(y(nx))
      allocate(Un(nx))
      allocate(Un1(nx))
      allocate(mat(nx,nt))
     
      Beta1=(1+2*D*(dt/(dx**2)))
      alpha=D*dt/(dx**2)
      A=0.0D0
      A(1,1)=1.d0
      A(nx,nx)=1.d0
      Un(1)=0.d0
      Un(nx)=0.d0
      Un(50)=5.d0
      do i=2,nx-1
         A(i,i)=Beta1
         A(i,i+1)=-alpha
         A(i,i-1)=-alpha
      end do
     
    !!$  do j=2,nx-1
    !!$     Un(j)=0.d0
    !!$  end do
     
      open(unit=24,file='resultatsimplicistp')
      !print*,A
     
     do i=1,nt
         call LU(nt,A,L,U)
         call Resolution(nt,L,U,Un,Un1)
         mat(:,i) = Un1
         Un=Un1
         ! print*,'la matrice L est :',L
         ! print*,'la matrice U est :',U
         print*,Un1
      end do
      !call writegnuplot('implicit.dat',mat)
      call writegnuplot('implicit2.dat',mat)
      close(24)
     
      deallocate(A)
      deallocate(L)
      deallocate(U)
      deallocate(y)
      deallocate(Un)
      deallocate(Un1)
     
    end program eulerimplicit

  2. #2
    Membre expérimenté
    Homme Profil pro
    [SciComp]
    Inscrit en
    Août 2013
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : [SciComp]

    Informations forums :
    Inscription : Août 2013
    Messages : 134
    Par défaut
    Bonjour,

    Il y a apparemment une erreur ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         call LU(nt,A,L,U)
         call Resolution(nt,L,U,Un,Un1)
    ce serait nx et non nt qu'il faudrait mettre.

    Si je vise juste, ça doit créer des problèmes dans les routines LU et de substitution, et dans ce cas précis, le problème semble être détecté à l'exécution sur la variable Y, mais ce comportement doit être erratique et différer selon les valeurs de nx et nt.
    Par ailleurs, je doute que vous ayez de bons résultats toutes les fois où nx diffère de nt.

    Cordialement,
    xflr6

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 6
    Par défaut
    En effet c'était ça. Merci

Discussions similaires

  1. Erreurs de segmentation !
    Par anti-conformiste dans le forum Applications et environnements graphiques
    Réponses: 16
    Dernier message: 18/10/2005, 11h11
  2. Erreur de segmentation
    Par Trunks dans le forum C
    Réponses: 3
    Dernier message: 06/10/2005, 18h28
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 13h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 14h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 11h18

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