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,