|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
(谢谢射月楼主的提醒,该程序仅适用于类似EC的风场预报的格点数据)
虽然我不常用这个,不过既然昨天看到群里有人需要,于是写出来供需要的参考一下。
代码很容易,新手可以自己试着转一下,代码中发现什么错误一定要指出来哦,嘿嘿
=====================================================
先贴出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)
|
|