
Fortran如何求三维数组中,每层次中的最小值?
代码如下:programmainimplicitnoneinteger::lon,lat,time,i,j,kparameter(lon=360,lat=181,time...
代码如下:
program main
implicit none
integer::lon,lat,time,i,j,k
parameter(lon=360,lat=181,time=124)
real::p(lon,lat,time)
real::w
open(10,file='f:\2013722\fnl\2004080131typhoon.grd',form='binary')
do k=1,time
read(10) (p(1:lon,1:lat,k))
end do
do k=1,time
write(*,*)k
write(*,*) minval(p(100:180,1:50,k))
write(*,*) minloc(p(100:180,1:50,k))
end do
stop
end
运行结果出现如下图的情况:
难道我grd文件有问题?放入Grads中是可以显示出来的呀,急,求大神指导! 展开
program main
implicit none
integer::lon,lat,time,i,j,k
parameter(lon=360,lat=181,time=124)
real::p(lon,lat,time)
real::w
open(10,file='f:\2013722\fnl\2004080131typhoon.grd',form='binary')
do k=1,time
read(10) (p(1:lon,1:lat,k))
end do
do k=1,time
write(*,*)k
write(*,*) minval(p(100:180,1:50,k))
write(*,*) minloc(p(100:180,1:50,k))
end do
stop
end
运行结果出现如下图的情况:
难道我grd文件有问题?放入Grads中是可以显示出来的呀,急,求大神指导! 展开
2个回答
展开全部
你的标题是,如何求取最小值。你的 minval 和 minloc 正是做这个工作的,使用上没有什么问题。
实际上,你的标题应该是,二进制文件如何读取?
我不知道你的 grd 是什么格式的,你确定是顺序读取的么?是否应该是直接读取的?
尝试一下 open(10,file='f:\2013722\fnl\2004080131typhoon.grd',form='binary',access='direct')
我建议你用无格式直接读取方式读取。当然,你同时需要为它设置 RecL。
关于二进制文件读写,我专门写过一篇日志,请您参考:
http://hi.baidu.com/olid_stone/item/ad1a4cc822b1241051505880
实际上,你的标题应该是,二进制文件如何读取?
我不知道你的 grd 是什么格式的,你确定是顺序读取的么?是否应该是直接读取的?
尝试一下 open(10,file='f:\2013722\fnl\2004080131typhoon.grd',form='binary',access='direct')
我建议你用无格式直接读取方式读取。当然,你同时需要为它设置 RecL。
关于二进制文件读写,我专门写过一篇日志,请您参考:
http://hi.baidu.com/olid_stone/item/ad1a4cc822b1241051505880
更多追问追答
追答
我不知道什么是 fnl,什么是 grads,这是您专业的软件。所以我也不确定您的数据是什么样的格式。
你可以按照 360*180*124*4 计算出理论的文件大小,看您的 grd 文件大小是否正好是这个数据?如果不是,则文件中有其他东西存在。(你需要详细的了解您的数据文件)
直接文件读取方式,需要设置 RecL,并且每次按照 Rec 的记录数进行阅读,并不是只修改 Open 语句既可实现的。
请阅读我给你的参考日志。会对你有帮助的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询