Запись в файл, сохранение изменений и добавление к ним

#fortran #fortran90 #gfortran

#fortran #fortran90 #gfortran

Вопрос:

У меня есть программа, которая создает значения для матрицы u , и это меняется для каждой итерации f , я хочу выписывать значение u(2,2) для каждой итерации f . Так, например u(2,2)=5 f=1 , u(2,2)=9 f=2 , и так далее.

Теперь test(u,n,f) записывается только последнее значение.Когда он соответствует моим критериям, чтобы остановить цикл выполнения. Я не хочу, чтобы моя подпрограмма перезаписывала файл plot.txt каждый раз я хочу, чтобы он сохранялся u(2,2) для каждой итерации. Я хочу, чтобы это выглядело так

 5  1

9  2

10 3
  

но не только записывает

 15 25
  

Как это можно исправить?

 subroutine test(u,n,f)

!input
integer :: n,f,write_unit
real(8) :: u(n 2,n 2)

!lokale
integer :: i,j
real(8) :: vek_x,vek_y


!Skriver vektor verdier til fil som gnuplot skal bruke
open(newunit=write_unit,access='sequential',file='plot.txt',status='unknown')

write(write_unit,*)'# x y vx vy'



vek_x=u(2,2)


!write(write_unit,*) vek_x,f

write(write_unit,*) vek_x,f
write(write_unit,*)''


close(write_unit,status='keep')
  

«Программа», которая создает разные значения для u

 do f=1,1000

do j=2,n 1
  do i=2,n 1

u(i,j)=(u(i 1,j) u(i-1,j) u(i,j 1) u(i,j-1))/4


!u(i,j)=(1-omega)*u(i,j) omega*1/4*(u(i 1,j) u(i-1,j) u(i,j 1) u(i,j-1))


  end do
end do



if (u(2,2) .eq. 15) then
exit
end if

call test(u,n,f)




end do
  

Ответ №1:

Просто откройте файл для добавления

 open(newunit=write_unit,access='sequential',file='plot.txt',position='append',status='old',action='write')
  

если это то, что вы хотели.

В первый раз может потребоваться просто создать его пустым

 open(newunit=write_unit,access='sequential',file='plot.txt',status='replace')
close(write_unit)