0

我想在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),因此不能选择存储在数组中

4

2 回答 2

1

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

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

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

于 2019-10-01T21:55:42.607 回答
1

我认为您正在寻找的是advance='no'并指定一种格式。
看看Fortran 中的 advance='no' 是什么意思?
就像是:

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

应该做的伎俩。

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

于 2019-10-01T22:08:26.267 回答