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中是可以显示出来的呀,急,求大神指导!
展开
 我来答
天河流纹石
2013-07-29 · TA获得超过1.3万个赞
知道大有可为答主
回答量:7624
采纳率:76%
帮助的人:4316万
展开全部
你的标题是,如何求取最小值。你的 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是fnl数据,是通过grads提取后的二进制文件,根据您的建议尝试了一下,结果问题变成如下:

追答
我不知道什么是 fnl,什么是 grads,这是您专业的软件。所以我也不确定您的数据是什么样的格式。
你可以按照 360*180*124*4 计算出理论的文件大小,看您的 grd 文件大小是否正好是这个数据?如果不是,则文件中有其他东西存在。(你需要详细的了解您的数据文件)

直接文件读取方式,需要设置 RecL,并且每次按照 Rec 的记录数进行阅读,并不是只修改 Open 语句既可实现的。
请阅读我给你的参考日志。会对你有帮助的。
sun371421
2013-07-29 · TA获得超过183个赞
知道答主
回答量:248
采纳率:0%
帮助的人:121万
展开全部
可能是数组大小不对,建议你动态分配数组 allocate
追问
本人fortran新手,请问动态分配数值具体怎么个分配法呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式