爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5227|回复: 3

【求助】关于Fortran读取站点资料为grads识别格式

[复制链接]

新浪微博达人勋

发表于 2020-3-24 11:15:13 | 显示全部楼层 |阅读模式
GrADS
系统平台:
问题截图: -
问题概况: 我将62个站点38年的月降水量整理到txt文件中,但是用Fortran读取为二进制格式后,用grads生成.map文件出现问题,一直找不到解决方案,恳请论坛大佬帮我解答一下!
我看过提问的智慧: 看过
自己思考时长(天): 3

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

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

x
我将62个站点38年的月降水量整理到txt文件中,但是用Fortran读取为二进制格式后,用grads生成.map文件出现问题,一直找不到解决方案,恳请论坛大佬帮我解答一下! 错误2.PNG
ctl文件如下:
dset D:\data\rain\1979-2016.dat
dtype station
stnmap D:\data\rain\1979-2016.map
undef -999.0
title monthly rainfall
tdef 456 linear JAN1979 1mo
vars 1
rain 0 99 rainfall data
endvars


站点数据格式:

                               
登录/注册后可看大图


Fortran读取为.dat二进制格式:
Program sta2grd
    Implicit none
    Character(len=8) ::  stid
    real lat,lon,rain
    integer year,month
    integer nlev,flag,yrold,mnold

    flag=1
    yrold=1979
    mnold=1
    Open(11,file='D:\data\rain\1979-2016.txt',status='old')
    Open(12,file='D:\data\rain\1979-2016.dat',status='replace',form='binary')
10  Read(11,*) year,month,stid,lat,lon,rain
    if(yrold.NE.year.OR.mnold.NE.month) then
       nlev=0
       write(12) stid,lat,lon,nlev,flag
    end if
    nlev=1
    write(12) stid,lat,lon,nlev,flag,rain
    yrold=year
    mnold=month
    goto 10   
    close(11)
    close(12)
    End program


Fortran运行过程也出现了问题:

                               
登录/注册后可看大图













错误.PNG
错误3.PNG
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-3-24 11:37:42 | 显示全部楼层
写成站点数据的时候头信息写错了,漏了一个相对时刻。
write(12) stid,lat,lon,nlev,flag应该改为write(12) stid,lat,lon,t,nlev,flag

(不会贴图,楼主自己找一下Grads站点数据的文件格式吧,GrADS使用手册里就有)
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-3-24 12:08:34 | 显示全部楼层
安达充 发表于 2020-3-24 11:37
写成站点数据的时候头信息写错了,漏了一个相对时刻。
write(12) stid,lat,lon,nlev,flag应该改为write(12 ...

非常感谢您的回复!我按您的意见修改了一下Fortran代码,也把goto换成了do循环就不会出现运行时错误了。但是在用grads生成.map文件时出现了错误。修改后代码:Program sta2grd
    Implicit none
    integer,parameter :: num=28262
    Character(len=8) ::  stid
    real lat,lon,rain,t
    integer year,month
    integer nlev,flag,yrold,mnold,i

    flag=1
    yrold=1979
    mnold=1
    Open(11,file='D:\data\rain\1979-2016.txt',status='old')
    Open(12,file='D:\data\rain\1979-2016.dat',status='replace',form='binary')
    do i=1,num
    Read(11,*) year,month,stid,lat,lon,rain
    if(yrold.NE.year.OR.mnold.NE.month) then
       nlev=0
       write(12) stid,lat,lon,nlev,flag
    end if
    t=0.0
    nlev=1
    flag=1
    write(12) stid,lat,lon,t,nlev,flag,rain
    yrold=year
    mnold=month  
    end do
    close(11)
    close(12)
    End program



grads生成.map错误提示

grads生成.map错误提示
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-3-24 13:44:40 | 显示全部楼层
cjj 发表于 2020-3-24 12:08
非常感谢您的回复!我按您的意见修改了一下Fortran代码,也把goto换成了do循环就不会出现运行时错误了。 ...

你有两个地方都有输出,都是要有t的,你看GrADS里的报错信息就知道你写入的数据和GrADS要求的是不一致的。

评分

参与人数 1金钱 +6 收起 理由
lqouc + 6

查看全部评分

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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