Я только начинаю изучать fortran, и я создал простую программу, реализующую метод Эйлера. Я заметил, что время, используемое петлей do
, довольно похоже на, например, ту же программу в Matlab.Запись в файл в Fortran do loop
В моей программе Fortran у меня была запись в файл внутри этого цикла do
. Когда я удалил его, скорость резко улучшилась, как и ожидалось. Затем я добавил второй do
петлю, где поместить запись и измеряли время, необходимое для обеих петель в сочетании:
open(unit=1, file='data.dat')
write(1,*) t(1),' ', y(1)
! Calculating
call cpu_time(start)
do i = 2,n
t(i) = t(i-1) + dt
y(i) = y(i-1) + dt*(t(i-1)*(y(i-1)))
!write(1,*) t(i),' ', y(i)
end do
call cpu_time(finish)
print '("Time = ",f7.5," seconds.")',finish-start
call cpu_time(start)
do i = 2,n
write(1,*) t(i),' ',y(i)
end do
call cpu_time(finish)
print '("Time = ",f7.5," seconds.")',finish-start
время для данного n
бы приблизительно в 10-15 раз больше на последнем цикле do
по сравнению к первому.
Итак, мой вопрос в том, есть ли лучший способ записать мои данные в файл?
Если вы хотите этот формат в своем выходном файле, я бы не боялся. – haraldkl
Спасибо. В каком формате он будет быстрее? – ninjacowgirl
Вы можете написать все t сразу и все y сразу. Однако это все равно будет довольно медленным. Форматирование довольно дорогое. Вы быстрее получаете неформатированный ввод-вывод, но тогда вы больше не можете читать файл в виде текстового файла. – haraldkl