爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4047|回复: 7

[分享资料] 求助:grads画站点

[复制链接]

新浪微博达人勋

发表于 2013-8-30 16:35:00 | 显示全部楼层 |阅读模式

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

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

x
最近看了站内的教程,然后找了160站数据来画图,参考站内的程序自己写了一个
program sta2grd
implicit none
integer i,j,k,nlev,flag
integer,parameter::sta=160,year=60,mon=12
real tim,lon(sta),lat(sta)
integer::stid(sta),rain(sta,year,mon),temp(sta,year,mon)
character filename1*10,filename2*10,cmon*2

open(1,file='sta.grd',status='replace',form='binary')
open(2,file='station.txt',status='old')
do i=1,sta
read(2,*)stid(i),lat(i),lon(i)
end do
close(2)

do k=1,mon
if(k<=9)then   
  write(cmon,'(i1)')k   
  cmon="0"//trim(cmon)   
else
    write(cmon,'(i2)')k  
endif
filename1="r16"//trim(cmon)//".txt"
filename2="t16"//trim(cmon)//".txt"
open(2,file=filename1,status='old')
open(3,file=filename2,status='old')
read(2,*)((rain(i,j,k),i=1,sta),j=1,year)
read(3,*)((temp(i,j,k),i=1,sta),j=1,year)
close(2)
close(3)
end do



do j=1,year
do k=1,12
do i=1,sta
tim=0.0
nlev=1
flag=1
write(1)stid(i),lat(i),lon(i),tim,nlev,flag,rain(i,j,k),temp(i,j,k)
end do
nlev=0
write(1)stid(1),lat(1),lon(1),tim,nlev,flag
end do
end do
close(1)

end

降水和温度写一起的,我估计程序最后写入的部分有问题,然后生成map文件出错
这是ctl
DSET D:\160zuotu\sta.dat
DTYPE station
STNMAP D:\160zuotu\sta.map
UNDEF -32766
TITLE 160 Monthly rain temp data
TDEF 720 linear jan1951 1mo
VARS 1
rain 0 99 rain data
temp 0 99 Surface Temperature
ENDVARS
不知道是哪里不对啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-8-30 17:57:27 | 显示全部楼层
看不出哪里错了。楼主说的错误是在哪一步出现的呢?不过提几点建议吧,建议自己读写文件的时候不要使用10以前的文件号,因为10以前的文件号fortran内部使用。另外源代码中
if(k<=9)then   
  write(cmon,'(i1)')k   
  cmon="0"//trim(cmon) 有点多余只需要一个语句就可以完成:write(cmon,'(i2.2)')k。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-8-30 18:04:30 | 显示全部楼层
本帖最后由 Malik 于 2013-8-30 18:13 编辑

这一段是复制的,字符的运算不太熟悉,我又参考了几个帖子,已经把程序和CTL都改了一下,画出来站点上没有数据,都是0,不知道怎么回事
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-8-30 18:27:42 | 显示全部楼层
Malik 发表于 2013-8-30 18:04
这一段是复制的,字符的运算不太熟悉,我又参考了几个帖子,已经把程序和CTL都改了一下,画出来站点上没有 ...

既然有数,说明应该是你的源代码有问题。integer::stid(sta),rain(sta,year,mon),temp(sta,year,mon)
你这一行的声明应该有问题吧,降水和温度应该都是实数吧,还有站点号一般都是5位,应该超出了32767了吧,建议用字符型来表示吧,省得出错。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-8-30 18:37:13 | 显示全部楼层
integer::stid(sta),rain(sta,year,mon),temp(sta,year,mon)这句错了。grads里面stid必须是字符串型,而且必须是8位的。还有就是你这温度和降水咋都是整型呢?建议改成:
character*8 stid(sta)
real rain(sta,year,mon),temp(sta,year,mon)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-8-30 18:49:32 | 显示全部楼层
感谢楼上两位啊!
站号改成了字符
降水和温度改成了实数型
倒数第五行改成了另一个帖子的write(1)stid(i-1),lat(i-1),lon(i-1),tim,nlev,flag
CTL第一行最后应该是.grd
CTL少了一个层次
站点上数据已经画出来了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-11-19 23:44:29 | 显示全部楼层
纠结了一天的问题终于解决了,谢谢5L
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-10-9 21:32:08 | 显示全部楼层
谢谢楼主的分享!
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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