回 帖 发 新 帖 刷新版面

主题:求助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个回复)

沙发


gridey(i+1,j+1)里面就是0!就这么简单!

write(*,*) gridey(250,500) 只是看了里面的一个元素!

你全部看一下

write(*,*) gridey

板凳

我在程序中加上如下:
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 楼

我在程序中加上如下:
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 楼

你只列了很少一部分,我猜你数组里面很多是0!

5 楼

你最好write出i+1, 和j+1 看看到了什么值了.

6 楼


还是把你给这个数组赋值的语句贴出来吧。

7 楼


对,5楼的意思

do i=1,1000
 do j=1,1000
   write(*,*) i,j,gridey(i,j)
 enddo
enddo

8 楼


对,,确实是,,,500*1000的数组,只有一列(250,j)是有值的,,,,可是我把整个数组输出来怎么会全是0呢

9 楼

[quote]
对,,确实是,,,500*1000的数组,只有一列(250,j)是有值的,,,,可是我把整个数组输出来怎么会全是0呢
[/quote]
本来该是什么?就一列有值?!为啥还用二维数组?一维不就够了吗?!!

有没有值,看你赋没赋值,因此叫你把给这个数组赋值的语句贴出来,才能明白为什么![em5]

10 楼


赋值语句大概是
子程序 :
  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
输出的结果就全为零了



我来回复

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