主题:求助FORTRAN 数组调用
liuqc
[专家分:0] 发布于 2010-10-13 16:21:00
求助:
在下编程现在遇到问题 如下:
主程序调用子程序:
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个回复)
沙发
jstzhurj [专家分:4680] 发布于 2010-10-13 16:39:00
gridey(i+1,j+1)里面就是0!就这么简单!
write(*,*) gridey(250,500) 只是看了里面的一个元素!
你全部看一下
write(*,*) gridey
板凳
liuqc [专家分:0] 发布于 2010-10-13 16:59:00
我在程序中加上如下:
do i=1,1000
do j=1,1000
write(*,*)gridey(i,j),gridey(250,200)
enddo
enddo
结果为:
。。。。。。。
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
。。。。。。
这又能说明什么呢?
3 楼
liuqc [专家分:0] 发布于 2010-10-13 17:00:00
我在程序中加上如下:
do i=1,1000
do j=1,1000
write(*,*)gridey(i,j),gridey(250,200)
enddo
enddo
结果为:
。。。。。。。
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
0.0000000000000000 -38365091.468423754
。。。。。。
这又能说明什么呢?
4 楼
jstzhurj [专家分:4680] 发布于 2010-10-13 19:29:00
你只列了很少一部分,我猜你数组里面很多是0!
5 楼
yeg001 [专家分:14390] 发布于 2010-10-13 19:35:00
你最好write出i+1, 和j+1 看看到了什么值了.
6 楼
jstzhurj [专家分:4680] 发布于 2010-10-13 19:46:00
还是把你给这个数组赋值的语句贴出来吧。
7 楼
jstzhurj [专家分:4680] 发布于 2010-10-13 19:49:00
对,5楼的意思
do i=1,1000
do j=1,1000
write(*,*) i,j,gridey(i,j)
enddo
enddo
8 楼
liuqc [专家分:0] 发布于 2010-10-14 18:45:00
对,,确实是,,,500*1000的数组,只有一列(250,j)是有值的,,,,可是我把整个数组输出来怎么会全是0呢
9 楼
jstzhurj [专家分:4680] 发布于 2010-10-14 18:51:00
[quote]
对,,确实是,,,500*1000的数组,只有一列(250,j)是有值的,,,,可是我把整个数组输出来怎么会全是0呢
[/quote]
本来该是什么?就一列有值?!为啥还用二维数组?一维不就够了吗?!!
有没有值,看你赋没赋值,因此叫你把给这个数组赋值的语句贴出来,才能明白为什么![em5]
10 楼
liuqc [专家分:0] 发布于 2010-10-14 18:51:00
赋值语句大概是
子程序 :
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
输出的结果就全为零了
我来回复