|
发表于 2012-10-15 13:32:32
|
显示全部楼层
由于只有你的一个时次的数据,因此我把你的一个文件进行了复制,总共6个时次(当然数据都是一样的),来进行测试,思路如下:
先已经把你数据中的字符串删掉了,你重新生成的时候不要写入字符串了,处理后的数据如下:
0. -367.50 -889.42 67.55 96.24
10. 357.95 776.84 245.26 85.53
20. 21.46 30.93 235.24 3.76
30. 29.86 -13.05 156.39 3.26
40. 10.89 -26.41 112.41 2.86
50. 14.47 -33.27 113.50 3.63
60. 27.57 -27.52 135.05 3.90
70. 29.75 -23.17 142.09 3.77
80. 28.86 -47.56 121.25 5.56
90. 27.77 -52.33 117.96 5.92
100. 24.57 -36.61 123.87 4.41
110. 25.74 -43.51 120.61 5.06
...
然后Fortran对数据文件进行提取和转换,生成GrADS格式的数据(可能你需要先学习一些GrADS的基础知识),只要使用到其中的最后两列,Fortran程序如下:
- program wnd
- !zcount表示一共高度上有多少层,你的数据后面有缺测,因此规定一个数值,保证每个文件读取到的层数为这个值,可自行修改
- !undef为数据中没有这么多层的时候用来填补的缺测值
- !startname和endname分别为数据开始和结束的时间,用来动态生成文件名,可自行修改
- !程序执行后会分别生成theta和v的两个数据文件,每个文件中都有N个时次,注意该程序每次最多只能运行01时到23时,如果要更多时次,请自行修改程序中文件名的动态生成方法。
- integer,parameter::zcount=100,undef=32766,startname=2012081201,endname=2012081206
- real var(5)
- character cname*21
- integer::status=0,iname
- open(2,file='20120812.theta.grd',status='replace',form='binary')
- open(3,file='20120812.v.grd',status='replace',form='binary')
- do iname=startname,endname
- call getCname(iname,cname)
- open(1,file='file\'//cname,status='old')
- do i=1,zcount
- read(1,*,iostat=status)var
- if(status/=0)then
- write(2)undef
- write(3)undef
- else
- write(2)var(4)
- write(3)var(5)
- endif
- enddo
- close(1)
- enddo
- close(2)
- close(3)
- end
- subroutine getCname(iname,cname)
- integer::iname
- character*21 cname
- cname=''
- write(cname,'(i10)')iname
- cname=trim(cname)//'calwswd.dat'
- return
- endsubroutine
生成数据文件之后增加两个ctl描述文件:
- #v.ctl
- dset ^20120812.v.grd
- title outputv
- undef 32766
- XDEF 1 LINEAR 1 1
- YDEF 1 LINEAR 1 1
- ZDEF 100 linear 0 0.02
- TDEF 6 LINEAR 00Z01AUG2012 1hr
- vars 1
- v 100 99 v data
- endvars
- #theta.ctl
- dset ^20120812.theta.grd
- title outputtheta
- undef 32766
- XDEF 1 LINEAR 1 1
- YDEF 1 LINEAR 1 1
- ZDEF 100 linear 0 0.02
- TDEF 6 LINEAR 00Z01AUG2012 1hr
- vars 1
- theta 100 99 theta data
- endvars
最后编写脚本作图:
- 'reinit'
- 'open C:\Users\fangbao\Desktop\test\theta.ctl'
- 'open C:\Users\fangbao\Desktop\test\v.ctl'
- 'set gxout barb'
- 'set t 1 6'
- 'set z 1 100'
- 'd -sin(theta*3.14159/180)*v.2*2.5;-cos(theta*3.14159/180)*v.2*2.5;v.2'
- 'printim C:\Users\fangbao\Desktop\test\test.png'
- ;
有一个要注意的地方,GrADS中时间是00-23,注意和你的数据进行对应,由于仅做一个示例,我没有特别注意这一点
从你的数据可以看出,开始的数据特别大,绘制的图形也体现出来了(图形未做美化):
整个使用的文件打包:
wnd.rar
(29.92 KB, 下载次数: 20)
|
|