- 积分
- 1952
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-1-17
- 最后登录
- 1970-1-1

|
发表于 2012-5-12 09:10:21
|
显示全部楼层
zhudan0723 发表于 2012-5-11 22:10
我试试!不过设置经纬度,那生成的二进制文件,经纬度起始坐标和间隔怎么知道!?
我看到动力论坛里有 ...
经纬度起始坐标和间隔ctl里就有,我以前提取过,用着很笨的方法,先是用grads把数据转化一下,主要是因为WRF生成的数据有pdef,而且存放顺序为反序,直接用Fortran提取就会出现读入错误(也可能是我的Fortran没编好)。以下是我用的GS:
'reinit'
'open G:\exercise\ss\tc.ctl'
'set gxout fwrite'
'set fwrite G:\exercise\ss\test_16.dat'
tt=1
while(tt<=169)
'set t ' tt
hh=1
while(hh<=19)
'set z 'hh
'd tc'
hh=hh+1
endwhile
tt=tt+1
endwhile
'disable fwrite'
'reinit'
Fortran提取数据:
program Main
implicit none
integer, parameter :: iLon = 179, iLat = 132, iDay = 169,zlev=19
real rHgt(iLon, iLat, zlev,iDay)
integer iRec
integer iX, iY, iT,iz
open (10, file = "test_16.dat", form = "unformatted", access = "direct", recl = iLon * iLat)
iRec = 0
do iT = 1, iDay
do iz=1,zlev
iRec = iRec + 1
read (10, rec = iRec) ((rHgt(iX, iY, iz,iT), iX = 1, iLon), iY = 1, iLat)
end do
end do
close (10)
do iT = 1, iDay
do iz=1,zlev
do iY =1,iLat
do iX =1,iLon
if (rHgt(iX, iY,iz, iT)>100000)then
rHgt(iX, iY, iz,iT)=0
end if
end do
end do
end do
end do
open (20, file = "G:\exercise\ss\tc\tc16.txt")
do iT = 1, iDay
do iz=1,zlev
write (20,'(i3,f10.2)') iz,rHgt(63, 56, iz,iT)
end do
end do
close (20)
rHgt(63, 56, iz,iT)是所选择的网格点上的数据,63,56是在grads里用set x/y和set lat/lon来尝试寻找最接近我选的那个站点的网格点。
我这方法是很笨了。 |
|