|  | 
 
| 
(谢谢射月楼主的提醒,该程序仅适用于类似EC的风场预报的格点数据)
x
登录后查看更多精彩内容~您需要 登录 才可以下载或查看,没有帐号?立即注册 
  虽然我不常用这个,不过既然昨天看到群里有人需要,于是写出来供需要的参考一下。
 代码很容易,新手可以自己试着转一下,代码中发现什么错误一定要指出来哦,嘿嘿
 =====================================================
 先贴出fortran程序吧:
 
 program main
 integer,parameter::xnum=144,ynum=37
 character*20 name
 integer id,class
 real lon,lat,hgt,pre,temp,dew_t,u(ynum,xnum),v(ynum,xnum)
 !*****************变量说明*********************
 ! xnum:x格点数 ynum:y格点数                                        *
 ! name:存放读取以及生成新的文件的文件名                     *
 ! id,class,lon,lat,hgt,pre,temp.dew_t                                  *
 ! u(ynum,xnum),v(ynum,xnum)                                      *
 ! Micaps的风场的是以风速和风向来表示的,开始我以为 *
 ! 是像GrADS一样用u,v表示的,后来也没改变量名,       *
 !介意的自己改下                                                             *
 !**********************************************
 !************读取需要转换的文件名(循环读取,每读取一次转换完再读第二个)*******************
 open(1,file='name.txt',status='old',err=100)
 do while(1)
 read(1,*,end=200)name    !文件读完后跳出
 open(2,file=''//trim(name)//'',status='old',err=101)    !cvf为trim(name)即可/打开错误跳出
 name='b'//trim(name)
 print*,"正在转换-",trim(name),"-"
 open(10,file=''//trim(name)//'',status='replace',form='binary')    !建立新的二进制文件
 read(2,*)              !忽略文件头(两行)
 read(2,*)
 do i=1,ynum
 do j=1,xnum
 read(2,*)id,lon,lat,hgt,class,pre,temp,dew_t,u(i,j),v(i,j)   !循环读数,只有最后两个需要存储
 enddo
 enddo
 201 close(2)
 do i=ynum,1,-1    !micaps文件存放顺序有点bt,和grads不一样,纬度从90到0的
 do j=1,xnum    !因此这里从最后一次写到第一组,便于grads处理
 write(10)u(i,j)    !写入风向
 enddo
 enddo
 do i=ynum,1,-1    !写入风速
 do j=1,xnum
 write(10)v(i,j)
 enddo
 enddo
 close(10)
 enddo
 goto 200
 !到这里是因为读取出错了,给出提示并关闭文件、停止执行
 100 print*, "文件name.txt读取错误!"
 close(1)
 stop
 101 print*, "文件"//trim(name)//"读取错误!"
 close(1)
 close(2)
 stop
 200 pause "转换结束,按回车退出!"
 close(1) !程序结束
 end
 =====================================================
 写这个fortran并不是一帆风顺的,主要是由于我对micaps何grads中风场的差别不太熟悉,后来弄清楚后,竟然发现
  ,不说了,伤心啊... 还是从百度百科找到了三角函数的相关公式才算法转换关系弄出来,结果发现原来是如此简单,转换可以在fortran中进行,也可以在grads中进行,我选择了在grads中进行,主要因为是不想再改这个程序了{:soso_e113:}
 ============================================================
 由于本身就是格点数据,因此直接写了一个简单的测试ctl和gs文件,需要画图的朋友可能还要对图形进行一些美化,ctl文件如下:
 dset E:\program\m2g\b11070720.000
 title 850hpawind data
 undef 9999
 xdef 144 linear 0 2.5
 ydef 37 linear 0 2.5
 zdef 1 linear 1 1
 tdef 1 linear jun2011 1dy
 vars 2
 u 0 99 u data
 v 0 99 v data
 endvars
 =====ps:有兴趣的可以用批量描述试试
 gs文件如下:
 'reinit'
 'open e:\program\m2g\m2g.ctl'
 'set lon 60 160'
 'set lat 0 70'
 'set gxout barb'
 *'d skip(-sin(u*3.14159/180)*v*2.5,2);skip(-cos(u*3.14159/180)*v*2.5,2);v'
 *转换风速风向为U、V风场
 'd -sin(u*3.14159/180)*v*2.5;-cos(u*3.14159/180)*v*2.5;v'
 'draw title 11070720_000'
 'printim e:\program\m2g\11070720_000.png white'
 ;
 ========================代码结束
 好啦,给两张我测试的对比图,图形简陋,多多包涵啦
 (这电脑装的是老古董-Micaps1,将就着点吧{:soso_e113:})
 
 
 11070720_024g   11070720_024m   
 ==============================================
 
 11070720_000g   11070720_000m   
 
 
 
  diamond2tograds.rar
(863.17 KB, 下载次数: 420) | 
 |