Il semble que vous ouvrez et fermez le fichier pour chaque itération. C'est une méthode rapide et sale si vous avez besoin de déboguer, mais c'est lent.
Si vous voulez faire cela, vous pouvez faire ce que @Jack dit: Inclure un POSITION='APPEND'
à l'instruction OPEN
pour définir la position pour écrire les données à la fin du fichier. En outre, vous devez vous assurer que vous le fermez à chaque fois.
Une meilleure méthode (plus efficace) consisterait à garder le fichier ouvert pendant tout le temps. Je le ferais avec un module:
module temp_writer_module
implicit none
integer :: temp_writer_unit
logical :: is_opened = .FALSE.
private :: temp_writer_unit, is_opened
contains
subroutine temp_writer_open()
integer :: ios
character(len=100) :: iomsg
if (is_opened) then
print*, "Warning: Temperature file already openend"
return
end if
open(newunit=temp_writer_unit, file='W:\temperatureField', &
form='FORMATTED', status='UNKNOWN', action='WRITE', &
iostat=ios, iomsg=iomsg)
if (ios /= 0) then
print*, "Error opening temperature file:"
print*, trim(iomsg)
STOP
end if
is_opened = .TRUE.
end subroutine temp_writer_open
subroutine temp_writer_close()
if (.not. is_opened) return
close(temp_writer_unit)
is_opened = .FALSE.
end subroutine temp_writer_close
subroutine temp_writer(temps)
real, intent(in) :: temps(6)
integer :: ios
character(len=100) :: iomsg
if (.not. is_opened) call temp_writer_open()
write(temp_writer_unit, *, iostat=ios, iomsg=iomsg) temps
if (ios /= 0) then
print*, "Error writing to temperature file:"
print*, trim(iomsg)
end if
end subroutine temp_writer
end module temp_writer_module
Ensuite, vous pouvez l'utiliser dans votre programme comme celui-ci:
subroutine calc_temps(...)
use temp_writer_module
<variable declarations>
<calculations>
call temp_writer(tfield(100, 1:6))
end subroutine calc_temps
Il suffit de ne pas oublier d'appeler la routine temp_writer_close
avant la fin de votre programme.
il ne remplacerait que si vous avez fermé et rouvert le fichier ou un tel. Afficher tout le code pertinent si vous voulez plus d'aide. – agentp
Lorsque je vous ai recommandé d'ouvrir une nouvelle question, je vous ai également demandé de fournir les détails. S'il vous plaît faites-le, c'est vraiment important. –
* "à chaque itération" * ??? Il n'y a pas d'itérations dans le code que vous avez montré. Voir [demander] et [mcve], nous avons besoin de voir plus, nous ne pouvons pas voir votre code dans notre boule de cristal. –