回 帖 发 新 帖 刷新版面

主题:求助FORTRAN 数组调用

求助:
        在下编程现在遇到问题 如下:


主程序调用子程序: 
subroutine gridtopart(i,j,a,b,c,d,ex)
implicit none
include 'common_pic.h'
integer i,j
real(kind=8) a,b,c,d,ex,ey,bz,h
write(*,*)gridey(250,500)
write(*,*)gridey(i+1,j+1)
ex=(gridex(i+1,j+1)*c*d+gridex(i+1,j+2)*a*d+gridex(i+2,j+2)*a*b+gridex(i+2,j+1)*b*c)/s
return
end subroutine

其中参数都已知,gridey是全局变量中的一个多维数组,计算ex返回,,,问题是 我输出write(*,*)gridey(250,500)有值,但write(*,*)gridey(i+1,j+1)输出全是0,这是怎么回事阿   谢谢

回复列表 (共16个回复)

11 楼

[quote]
赋值语句大概是
子程序 :
  do i=1,1000
 gridey(250,i)=gridey(250,i)-sin(........常规的一个计算。。。。。)
  end do

应该没问题啊
我在语句中改成
  do i=1,1000
 gridex(250,i)=gridex(250,i)-sin(........常规的一个计算。。。。。)
write(*,*) gridex(250,i)
end do
输出的结果是正确的



可是我在主程序里调用完上面这个子程序后再加上:
do i=1,500
do j=1,1000
write(*,*)gridex(i,j),gridex(250,200)
enddo
enddo
输出的结果就全为零了



[/quote]

当然!程序运行就是按照你写的语句来的,你除了给gridex(250,1:1000)这1000个元素赋值之外,其他499*1000个元素当然为0!早就说数组里面大部分是0了(99.8%)!明白???

12 楼


赋值的语句刚贴上了,,,,这只是计算的第一步所以只有一列数有值

13 楼

[quote]
赋值的语句刚贴上了,,,,这只是计算的第一步所以只有一列数有值
[/quote]
既然只有一列数值,怎么期望其他列不为零呢??!![em18][em18]

14 楼

十分感谢您的回答!
我的意思是全是0000000000000000000,真的没找到一个不是零的,,,,,而且程序下面也用到这个数组里的值 也检验过,,,,

您的意思是有关全局变量的赋值调用时在方法上是肯定不会有问题的?

15 楼


我再自己写个小程序验证下吧,,实在不行我就把代码贴上,让您帮看看 ?

16 楼

[quote]十分感谢您的回答!
我的意思是全是0000000000000000000,真的没找到一个不是零的,,,,,而且程序下面也用到这个数组里的值 也检验过,,,,

您的意思是有关全局变量的赋值调用时在方法上是肯定不会有问题的?[/quote]

write(*,*) gridey(250,:) 就不全是零啊!除此之外,
write(*,*) gridey(1:249,:) 
write(*,*) gridey(251:500,:) 都是是0啊 !
不明白既然就用一列,为啥还要用二维数组,不能说一下用二维数组的真实意图么?我想是你写的语句根本没实现你的想法。

我来回复

您尚未登录,请登录后再回复。点此登录或注册