在一行中写入数据
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
上播放应该允许您处理输出之间的空格。
我想在 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
上播放应该允许您处理输出之间的空格。