Fortran Coder

标题: 一个比较low的问题讨论,小白初学,真心求教。 [打印本页]

作者: woaichimian666    时间: 2015-4-28 18:10
标题: 一个比较low的问题讨论,小白初学,真心求教。
在Fortran读取数据过程中,open一个文件。假设文件中变量为三维。



open(11,file='1.dat', action='read', access='direct', form='unformatted', recl=xx*yy*4)

do t=1, tt
read(11, rec=t)((a(i, j), i=1, xx), j=1, yy)

end do

这个是一个数据读取方法,在我的理解中,如果要对数据进行计算,在end 都之外的话,只对最后一个时次的数据进行了计算。但是最近看其他人做的计算,有的在end 都外面做的,
请问这样不是会导致只计算了一维么。
例如,下面这段。这里面读完以后就end 了。想问这些数据都读出来了么?
DO IZ=1,NZ        ! level
      DO IT=1,NT        ! time
      OPEN(15,file='f:/lj/2010/data/'//timefile(it)//'.'//p(iz)//'q',status='old',form='formatted')
      read(15,*)
      do  j=1,NY
        read(15,100)(q(i,j,iz,it),i=1,NX)           
        enddo
          CLOSE(15)
      ENDDO
      ENDDO



作者: 楚香饭    时间: 2015-4-28 18:18
这是一个四维数组,每个文件里是二维数组(NX*NY个数据)。一共打开了 NZ*NT 个文件。

所以一共是 NX*NY*NZ*NT,四维数组。完全没问题
作者: woaichimian666    时间: 2015-4-28 18:22
楚香饭 发表于 2015-4-28 18:18
这是一个四维数组,每个文件里是二维数组(NX*NY个数据)。一共打开了 NZ*NT 个文件。

所以一共是 NX*NY*N ...

那我上面的例子中,在end do外面 是不是也没问题?
作者: kif117    时间: 2015-4-28 18:30
如果不确定,可以随时用print*, (你要查看的数据) 或者write (6,*) (你要查看的数据) 运行一下来看。
作者: 楚香饭    时间: 2015-4-28 22:38
你的文件里是三维的“内容”,但是变量是二维的,虽然读了很多次,但前面的都被刷新掉了,实际只存有最后一次的内容。

那么你的“计算”部分,也只能让最后一次“二维”的部分参与计算。




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2