- 积分
- 214
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-3-8
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 F.Lee 于 2014-4-11 17:38 编辑
第一次做micaps多时次单变量资料的批处理,学习了论坛里好多大神的帖子,借鉴了luoziwuhui的帖子,http://bbs.06climate.com/forum.php?mod=viewthread&tid=13648,编写fortran程序读取数据并且转成二进制文件,但是在程序运行的过程中总是遇到如图的问题
我用的是micaps surface文件夹下r6-p文件夹下的文件,下面是数据截图
我用Windows 的CMD命令将要用的17个时次的数据写入了filename.txt,不知道为什么写出来不是像别人一样每行一个文件名,而是每行三个,由于文件数比较少,我就手动改了。
fortran程序如下:
program read_surface_observation
parameter(nt=17)
integer nlev,flag,n1,n
real,allocatable::lon(:),lat(:),rd(:),var(:) !动态数组分别用来储存站点的降水
real tim
character*8,allocatable::sta(:) !动态数组,储存站号,站号必须是8个字符,5个的话会stnmap出不出来
character*12 filename(nt) !用于储存32个时次的文件名
open(1,file='G:\rain\filename.txt')
do i=1,nt
read(1,*) filename(i)
print*,'Filename:',filename(i)
enddo
close(1)
open(2,file='G:\rain\rain6h.grd',status='replace',form='binary') !储存32个时次的降水
do k=1,nt
open(3,file=filename(k))
read(3,*)
read(3,*)
read(3,*)
read(3,*)
read(3,*)
read(3,*)
read(3,*)
read(3,*)
read(3,*)
read(3,*)
read(3,*)
read(3,*)
read(3,*)
read(3,*) n1,n !将该时次的站点数赋值于n
allocate(lat(n)) !分配动态数组
allocate(lon(n))
allocate(var(n))
allocate(rd(n))
allocate(sta(n))
close(3)
open(4,file=filename(k)) !获知n后,重新读取数据。
read(4,*)
read(4,*)
do i=1,n !只读降水,别的要素暂略
read(4,*) sta(i),lon(i),lat(i),var(i),rd(i)
tim=0.0;nlev=1;nflag=1
write(2) sta(i),lat(i),lon(i),tim,nlev,flag,rd(i) !一个时次的降水场输入完毕
enddo
nlev=0
write(2) sta(n),lat(n),lon(n),tim,nlev,flag
!一个时次的降水场输入完毕,告诉Grads 该时次的数据结束。这是一个特殊标记。
deallocate(lat)
deallocate(lon)
deallocate(rd)
deallocate(sta)
!释放动态数组
close(4)
enddo
close(2)
end program read_surface_observation
麻烦学姐学长帮忙看看,哪里出了问题,我已经尽量把问题描述清楚了,可能你们会觉得我的问题过于小白,借鉴人家的都弄不懂,可是我确实很努力了,纠结这个问题好久了,身边的同学也没有会的。我在原帖下面问楼主,可能楼主比较忙,没理我。。。真心希望有人能帮助我一下,可能你的一句话就会让我柳暗花明。学妹在这里先谢过了!
|
|