爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 14092|回复: 23

[求助] Fortran求三维数组里面的最小值

[复制链接]

新浪微博达人勋

发表于 2013-7-29 10:29:10 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
目前有一个三维数组,求每个层次下(也就是k从1到124),对应的“二维数组”里面的最小值,并输出对应的坐标。
现程序如下:
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
   do j=1,lat
      do i=1,lon
       read(10) p(i,j,k)
      end do
        end do
end do
close(10)

do k=1,time
  write(*,*)k
  do j=1,lat
     do i=1,lon
                write(*,*) minval(p)  !输出p这个三维数组里面的最小值
                write(*,*) minloc(p)  !输出p这个三维数组最小值对应的坐标
        end do
  end do
end do  

stop
end

怎么输出结果不是我想要的呢?怎么样才能让计算机比较每个层次下的最小值,及输出对应的坐标呢?求指教{:soso_e154:}

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-7-29 11:10:50 | 显示全部楼层
你对一个数组函数还用循环????
把内层的空间循环去掉,数组p最好写清楚p(1:lon,1:lat,k)。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-7-29 11:36:10 | 显示全部楼层

谢谢,现程序更改如下:
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能画出来呀

QQ图片20130729113143.jpg
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-7-29 13:54:17 | 显示全部楼层
估计很有可能就是你的grads提取的时候出错了,你用grads可以是什么意思?也是对这个提取出来的grd?
不过建议你如果用binary选项就不要用隐式循环,改成显示循环或者用unformatted 的recl控制。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-7-29 14:04:30 | 显示全部楼层
lqouc 发表于 2013-7-29 13:54
估计很有可能就是你的grads提取的时候出错了,你用grads可以是什么意思?也是对这个提取出来的grd?
不过建 ...

恩,是对提取以后的grd查看,d pressfc后会有图片出来,应该不至于数据是一样的。。觉得数据大方向上面应该没什么错误才是,怎么老是出现错误,是我的提取方法不对吗?三维数组一般都是怎样读出来的呢?{:3_60:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-7-29 14:06:40 | 显示全部楼层
lqouc 发表于 2013-7-29 13:54
估计很有可能就是你的grads提取的时候出错了,你用grads可以是什么意思?也是对这个提取出来的grd?
不过建 ...

改成显示循环后还是出现同样的错误。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-7-29 14:11:47 | 显示全部楼层
你的ctl数据描述部分帖上来看看
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-7-29 14:27:44 | 显示全部楼层
lqouc 发表于 2013-7-29 14:11
你的ctl数据描述部分帖上来看看

dset F:\2013722\fnl\2004080131typhoon.grd
undef 1e+15
title Sample GRID Data
xdef 360 linear 0 1
ydef 181 linear -90  1
tdef 124 linear 00Z01aug2004 360mn
zdef 26 levels 1000 975 950 925 900 850 800 750 700 650 600 550 500 450 400 350 300 250 200 150 100 70 50 30 20 10
vars 1  
pressfc     0 0 surface pressure.
endvars
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-7-29 14:55:57 | 显示全部楼层
抹茶里 发表于 2013-7-29 14:27
dset F:\2013722\fnl\2004080131typhoon.grd
undef 1e+15
title Sample GRID Data

呼叫版主{:3_60:}{:3_60:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-7-29 15:01:44 | 显示全部楼层

应该没什么问题,话说你那个zdef看着真别扭,明明只有一层。
gs你怎么写的啊?你确定grads画图是对的?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表