Запись данных в строку - PullRequest
       13

Запись данных в строку

0 голосов
/ 02 октября 2019

Я пытаюсь записать переменную z в ​​строке на фортране. Как видите, z - произведение g * h. У меня проблема в том, что я хотел бы напечатать в строке z11, z12, z13, ... zn1, x. Первое число - это значение i, а второе - значение j. Вот что я пробовал:

do i=1,ny
  do j=1,nx
     s=xmin + alongintx * (dfloat(j)-1.d0)
     t=ymin + alonginty * (dfloat(i)-1.d0)
     g=(1.d0/(desvestx*dsqrt(2.d0*pi)))*dexp(-(s-amedx)**2/
     $           (2.d0*desvestx**2))
     h=(1.d0/(desvesty*dsqrt(2.d0*pi)))*dexp(-(t-amedy)**2/
     $           (2.d0*desvesty**2))
     z=g*h
     write(45,*)(z,m=1,nx)
   end do
end do

Проблема в том, что он печатает одно и то же значение в строке nx раз. Как я могу решить это без сохранения данных в массивах? Мне было бы интересно обрабатывать большие объемы данных (nx и ny> 10000), поэтому сохранение в массиве не вариант

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Я думаю, что вы ищете advance='no' и указание формата.
Взгляните на Что означает "=" в Фортране?
Что-то вроде:

write(45,'f13.27',advance='no') z

должно сработать.

Игра на f13.27 должна позволить вам разобраться с пробелами между выходом.

0 голосов
/ 02 октября 2019

Если предположить, что z - это массив с nx элементами (вы забыли показать объявления), тогда ваш оператор write должен быть

write(45,*) (z(m), m = 1, nx)

PS: не используйте конкретные внутренние имена,Используйте sqrt вместо dsqrt. Используйте exp вместо dexp. Не используйте dfloat, так как он не нужен.

...