- 积分
- 624
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2013-3-18
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2013-4-6 18:11:23
|
显示全部楼层
本帖最后由 银酱赛高 于 2013-4-6 18:16 编辑
mofangbao 发表于 2013-4-6 12:18
把ctl也贴出来吧,这些其实你一开始发帖子就应该贴出来了。
你这个gs有不少问题,aa你定义的是一个脚本变量 ...
没有考虑到变量不同的问题我的思路是循环8个时次,若降水率pcp>aa就把pcp值赋给aa,并输出此时的时次t,循环最后得出最大降水率及其所在时次,并换算成北京时,但不知道在Grads应该怎么实现~~ grd资料的ctl如下:
dset d:\paper\grd\%h2.grd
options template
undef -9999.9
xdef 45 linear 109 0.25
ydef 25 linear 20 0.25
zdef 1 linear 0 1
tdef 8 linear 00Z01JUN1998 3hr
vars 1
pcp 0 t,y,x precipitation
endvars
我用Fortran尝试了一下,把最大降水率所在时间输出为grd文件,pcp(i,j,t)是降水率,最后求出a(i,j)是最大降水率,t(i,j)是最大降水率所在的时间,最后换算成北京时,Fortran程序如下:- program max_time
- implicit none
- integer,parameter::M=45
- integer,parameter::N=25
- integer,parameter::P=8
- integer::i,j,k,t(M,N)
- integer,parameter::undef=-9999.9
- real::pcp(M,N,P),a(M,N)
- open(21,file='d:\paper\grd\00.grd',form='binary')
- do j=1,25
- do i=1,45
- read(21) pcp(i,j,1)
- end do
- end do
- close(21)
- open(22,file='d:\paper\grd\03.grd',form='binary')
- do j=1,25
- do i=1,45
- read(22) pcp(i,j,2)
- end do
- end do
- close(22)
- open(23,file='d:\paper\grd\06.grd',form='binary')
- do j=1,25
- do i=1,45
- read(23) pcp(i,j,3)
- end do
- end do
- close(23)
- open(24,file='d:\paper\grd\09.grd',form='binary')
- do j=1,25
- do i=1,45
- read(24) pcp(i,j,4)
- end do
- end do
- close(24)
- open(25,file='d:\paper\grd\12.grd',form='binary')
- do j=1,25
- do i=1,45
- read(25) pcp(i,j,5)
- end do
- end do
- close(25)
- open(26,file='d:\paper\grd\15.grd',form='binary')
- do j=1,25
- do i=1,45
- read(26) pcp(i,j,6)
- end do
- end do
- close(26)
- open(27,file='d:\paper\grd\18.grd',form='binary')
- do j=1,25
- do i=1,45
- read(27) pcp(i,j,7)
- end do
- end do
- close(27)
- open(28,file='d:\paper\grd\21.grd',form='binary')
- do j=1,25
- do i=1,45
- read(28) pcp(i,j,8)
- end do
- end do
- close(28)
- do j=1,25
- do i=1,45
- a(i,j)=0.
- end do
- end do
- do j=1,25
- do i=1,45
- t(i,j)=0
- end do
- end do
- do k=1,8
- do j=1,25
- do i=1,45
- if(pcp(i,j,k)>a(i,j)) then
- a(i,j)=pcp(i,j,k)
- t(i,j)=k
- end if
- end do
- end do
- end do
- open(30,file='d:\paper\grd\weixiang.grd',form='binary')
- do j=1,25
- do i=1,45
- if(t(i,j)<7) then
- t(i,j)=(t(i,j)-1)*3+8
- else
- t(i,j)=(t(i,j)-1)*3-16
- end if
- write(30) t(i,j)
- end do
- end do
- end
复制代码 成功输出后,再对输出文件编写ctl如下:
dset d:\paper\grd\weixiang.grd
undef -9999.9
xdef 45 linear 109 0.25
ydef 25 linear 20 0.25
zdef 1 linear 0 1
tdef 1 linear 00Z01JUN1998 1hr
vars 1
a 0 99 shici
endvars
但Grads一直提示constant field.value=1.4013e-45
然后我就把t(i,j)改成dat输出,都是北京时数据,而且大部分是白天,应该挺正常的;
再输出程序里面的a(i,j),pcp(i,j,k)数组,用Grads画图也是正常的;
在Fortran里面找debug也找不着,实在不知道问题出在哪儿了~
|
|