爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4267|回复: 4

[分享资料] 站点转格点数据后stnmap出错

[复制链接]

新浪微博达人勋

发表于 2014-3-19 16:04:43 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
我参照了http://bbs.06climate.com/forum.php?mod=viewthread&tid=13422将站点资料提取出来,之后编写了CTL,但是stnmap的时候总是出错,想请教一下这个怎么解决,谢谢!
我的程序和生成的数据都是按照帖子一步一步来的
QQ图片20140319110843.jpg
dset d:/dm/vis.grd
dtype station
stnmap d:/dm/vis.map
undef -9.99E33
title vis data
tdef 81 linear 23Z30Nov2013 3hr
vars 1
vis 0 99 nengjiandu
endvars


还有FORTRAN程序
integer::n,num
parameter(nt=81)
real,allocatable::lon(:),lat(:),vi(:)        !动态数组分别用来储存站点的经纬度和能见度值
real:: temp(14)
character*8,allocatable::sta(:)               
character*8 ss(69) !69为69个站点,用于储存站点号         
character*12 filename(nt)        !用于储存81个时次的文件名

open(1,file='D:\dm\Stations.txt')  !这个sample.txt里边按行储存站点号。
do i=1,69
  read(1,*) ss(i)
  print*,ss(i)
enddo
close(1)
pause

open(2,file='D:\dm\filename.txt')
do i=1,nt
  read(2,*) filename(i)
  print*,'Filename',filename(i)
  enddo
close(2)        
pause   

open(12,file='D:\dm\vis.grd',form='binary')        !储存81个时次的能见度场
do k=1,nt
  print*,'文件数',k
  open(4,file='d:\dm\'//filename(k))
  read(4,*)
  read(4,*) n,n,n,n,n        !将该时次的站点数赋值于n
  allocate(lat(n))
  allocate(lon(n))
  allocate(vi(n))
  allocate(sta(n))
  print*,n
  close(4)

  open(11,file='d:\dm\'//filename(k))   !获知n后,重新读取。
  read(11,*)
  read(11,*)
   do i=1,n        !只读能见度,风速暂略        此循环为该时次的站点循环
     read(11,*) sta(i),lon(i),lat(i),(temp(j),j=1,14),vi(i)
      if(vi(i)==9999) then !若为缺测站点,直接pass
      continue
      else        !不是缺测站点,接下来判断是否属于地区
      num=0
       do ii=1,69
            if(sta(i)==ss(ii)) then
         num=1
         !print*,k,'   ',sta(i),'    ',ss(ii),'    ',num
        endif
       enddo
       !print*,vi(i)

       if(num==1) then   
        tim=0.0;nlev=1;nflag=1
        write(12)  sta(i),lat(i),lon(i),tim,nlev,nflag,vi(i)
                !print*,sta(i),lat(i),lon(i),tim,nlev,nflag,vi(i)
                !pause
       endif
      endif
     enddo
     nlev=0
     write(12) sta(n),lat(n),lon(n),tim,nlev,nflag
      !print*,sta(n),lat(n),lon(n),tim,nlev,nflag
          !pause
         !一个时次的能见度场输入完毕
                 
        deallocate(lat)
        deallocate(lon)
        deallocate(vi)
        deallocate(sta)
        close(11)
close(12)
  enddo
end

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-19 16:19:39 | 显示全部楼层
看你这个程序真费死劲了,看了半天也没看出来啥,发问之前尽量自己找找原因嘛。报错都说了是EOF,那就看看数据有多大,估计是输出的时候的错误,所以在输出的地方每一步print看看是否正常吧。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-3-19 16:45:16 | 显示全部楼层

我没每输出一个时次都PRINT检查的 好像没有问题 自己看了很久也不知道为什么 所以才发出来问问各位大神们的~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-19 17:45:19 | 显示全部楼层
夏天 发表于 2014-3-19 16:45
我没每输出一个时次都PRINT检查的 好像没有问题 自己看了很久也不知道为什么 所以才发出来问问各位大神们 ...

别好像没问题啊,明明就是有问题,grads刚扫描到第二个时刻就end of file了,那就说明输出的数据有错啊。那就把第二时刻的数据弄出来看看呗,有时候程序很难看出来问题,你要自己去检查的。
ps:你的数据不是有69个站,怎么第一时刻才22个?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-3-21 11:00:01 | 显示全部楼层
lqouc 发表于 2014-3-19 17:45
别好像没问题啊,明明就是有问题,grads刚扫描到第二个时刻就end of file了,那就说明输出的数据有错啊。 ...

已经检查出错误,数组输出时次有误。
69是总共站点,但是有的时次有的站点没有数据的。
谢谢了~
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表