在一行中写入数据

Writing data in a line

我想在 fortran 的一行中写一个变量 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),所以存储在数组中不是一个选项

假设 z 是一个包含 nx 个元素的数组(您忘记显示声明),那么您的 write 语句应该是

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

PS:不要使用特定的内在名称。使用 sqrt 而不是 dsqrt。使用 exp 而不是 dexp。不要使用 dfloat,因为它不需要。

我认为您正在寻找的是 advance='no' 并指定格式。
看看 What does advance='no' mean in Fortran?
类似于:

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

应该可以解决问题。

f13.27 上播放应该允许您处理输出之间的空格。