- 积分
- 5393
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2015-7-28
- 最后登录
- 1970-1-1
|
发表于 2017-12-13 21:13:43
|
显示全部楼层
本帖最后由 yaotianci 于 2017-12-13 22:40 编辑
版主您好!上次多蒙指点,解决了grb格式数据的GrADS读取问题。再次感谢!这次小白又遇到麻烦了,希望得到你的帮助。
最近在试着用GrADS做点场相关。我有50年序列的年降水量资料(txt格式),但在利用fortran将其转为GrADS可读的二进制文件时遇到了麻烦。我的操作步骤是:1、准备原始数据(rain.txt,见截图1):
389.5905
523.4105
294.9465
392.5855
303.9285
426.7125
393.8455
490.8215
585.627
529.0375
427.611
320.6055
584.7345
438.9
483.217
515.143
486.36
257.277
297.5365
358.668
331.85
368.6955
585.6605
401.6495
289.8045
413.388
369.638
366.239
526.6555
396.358
469.828
464.265
552.7105
494.545
687.006
527.9905
461.004
494.183
707.0415
433.283
381.056
405.57
341.028
340.943
379.105
489.576
347.3445
422.3425
380.692
489.4765
436.3897
2、编写十进制转二进制的fortran程序:没有报错,能转出结果(用的Simply Fortran)。
program txt2Binary
implicit none
integer,parameter:: tn=50
real :: val(tn)
integer i
!tn为年数,时间序列长度
!读源数据
open(1,file ='rain.txt',form='formatted',status='old')
read(1,*) (val(i),i=1,tn)
close(1)
!写数据
open(3,file='Data.dat',status='replace',form='unformatted')
do i=1,tn
write(3) val(i)
enddo
close(3)
end program txt2Binary
3、为data.dat配置描述文件
dset C:\Users\acer\Fortran\Test\Data.dat
undef -999.0
title rian
xdef 1 linear 0 1
ydef 1 linear 0 1
zdef 1 levels 0 1
tdef 50 linear 01JAN1961 1yr
vars 1
rain 0 99 timeseries rain data
endvars
4、在GrADS中验证读取的结果,遇到麻烦:
能正常打开ctl,但set t 1时,d rian的结果不是txt中的第一个值389.5905;
且发现,在grd数据中,每2个rain数据之间多了2个与rain数据无关的值5.60519e-45。见截图2。不知道二进制grd和txt对不上的原因出在哪?可能是个很幼稚的问题,但确实想了许久。请批评指正!期待得到您的指点。
年降水量序列
验证界面
|
|