爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 11129|回复: 28

[分享资料] GRADS提取数据------维数设定问题方案

[复制链接]

新浪微博达人勋

发表于 2013-3-23 20:15:48 | 显示全部楼层 |阅读模式

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

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

x
grads在提取数据称grd数据时,经常会碰到因维数设定而导致的提取不成功。这里只探讨维数设定输出不了的问题:
        要提取的数据分为这么几类:一个点(这个没必要,直接输出得了)、一维、二维、三维、四维
常出问题的是四维数据和三维数据(用循环都可以解决问题)。
拿下面一段代码说明做个例子
'reinit'
'open c:\data\model.le.ctl'
'set gxout fwrite'
'set fwrite c:\ddd.grd'
'set t 1 3'
'set z 1'
'set x 1 3'
'set y 1'
'd u'
'disable fwrite'
;
分为t(时间)、x(经度)、y(纬度)、z(层次)四个变量,经过试验得出一下结论:
1、数据提取二维以下的数据,没有任何问题;
2、提取三维数据时,只有输出x、y、z这一类三维的数据不能成功,其他组合都没问题,x、y、z三维不成功,那么将z设成循环就没问题了;
3、提取四维数据完全不成功;
4、四维数据提取不成功时,你可以用把其中一个维数设成循环来解决,但是要注意grd数据的结构问题,要遵循从外到里是时间、层次、纬度、经度的顺序,也就说你要正常输出,那么最外层循环要是时间,使用一层循环来输出数据,那么循环内部就是固定了t,刚好是不能成功那一种,此时你可以在时间循环里加一层z的循环,如下面的代码:
'reinit'
'open c:\data\model.le.ctl'
'set gxout fwrite'
'set fwrite c:\ddd.grd'
i=1
while(i<=5)
'set t 'i''
j=1
while(j<=3)
'set z 'j''
'set x 1 3'
'set y 1 5'
'd u'
j=j+1
endwhile
i=i+1
endwhile
'disable fwrite'
;

5、当然解决四维数据的输出最简单的方法是把所有维数都设成循环,什么问题都没有了,如果只想设两层,就是时间(t)、高度(z)两层循环,经纬度直接设定范围、问题解决。


总结:
1、三维数据只有x、y、z这种不成功,z设成外循环解决;
2、四维数据完全不成功,或者全部设成循环外到里是t、z、y、x的顺序,或者只设前t、z两层循环。


评分

参与人数 2金钱 +25 贡献 +6 收起 理由
bright + 10 很给力!
mofangbao + 15 + 6

查看全部评分

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

新浪微博达人勋

发表于 2013-3-23 20:30:22 | 显示全部楼层
好经验,学习了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2013-3-23 23:01:14 | 显示全部楼层
好久不见阿木的帖子啦 一定要来支持个
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-3-23 23:15:17 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-3-23 23:17:53 | 显示全部楼层
做个霸气的木头 发表于 2013-3-23 23:15
最近很忙,抽空发个帖子

版主能不能帮我看看我的问题?{:3_60:}
http://bbs.06climate.com/forum.p ... &extra=page%3D1
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-3-24 00:02:08 | 显示全部楼层
楼主批量提取二进制数据,然后在批量输出需要的变量。但是文件名称还是按照原来的输出到另外的文件夹,应该如何处理呢?有没有例子呢?期待楼主更多更好的帖子。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-3-24 00:13:28 | 显示全部楼层
本帖最后由 做个霸气的木头 于 2013-3-24 00:14 编辑
kongfeng0824 发表于 2013-3-24 00:02
楼主批量提取二进制数据,然后在批量输出需要的变量。但是文件名称还是按照原来的输出到另外的文件夹,应该 ...

批量处理文件,需要文件名有一定规律,想办法把文件名变成变量,加入循环,批量读取与写出就实现了,不同规律的怎么处理看情况的,给你这样个例子:
program ex00
implicit none
integer ss(17745,15),i,j
character(len=5) si(753)                                !必须声明长度,否则字符串无法连接

open(10,file='zhanhao753.txt')                     !10号对应的文件存的是文件名包含的站台号,如54531这样
open(20,file='testrec.txt')

do i=1,753
   read(10,*) si(i)                                     !读取753个台站号码为 字符型,将唯一变化的站号读取到数组si(i)中

   open(15,file="c:\SURF_CLI_CHN_MUL_DAY-"//si(i)//".txt")      !连接字符串,成为文件名,到不同的文件夹的话修改路径就好了
read(15,*) (ss(1,j),j=1,6)                                            ! 尝试读取每个文件的第一行的前6个数值
   
  write(*,*) i
  write(20,*) i                  !输入到测试文件testrec.dat
  write(20,*) (ss(1,j),j=1,6)
   close(15)
enddo
close(10)
close(20)
end
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-3-24 09:36:25 | 显示全部楼层
这个经验非常好 现在想知道的是 原先grd文件或者NC文件数据的存放格式已经确定那么输出的格式也要和原来一样  怎么实现呢?新手很困惑的一个问题就是这个 虽然也明白是按照经度 纬度 层次 时间这样来确定 可是输出时候 如何让让计算机这样输出 ?用很么样的循环实现?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-3-24 12:22:49 | 显示全部楼层
jeffggg 发表于 2013-3-24 09:36
这个经验非常好 现在想知道的是 原先grd文件或者NC文件数据的存放格式已经确定那么输出的格式也要和原来一样 ...

帖子已经讲了例子啊,只是x和经度对应,y和纬度对应,设好范围就行,循环的话像第二个例子中,t=1是开始时间,i<=5就是截止时间,也就是说时间的范围是1-5,对应具体的数据是哪天到哪天,需要自己去判断,你还是需要好好学习grads基础的知识。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-3-24 13:47:18 | 显示全部楼层
做个霸气的木头 发表于 2013-3-24 12:22
帖子已经讲了例子啊,只是x和经度对应,y和纬度对应,设好范围就行,循环的话像第二个例子中,t=1是开始时 ...

谢谢你的回复 我现在对这个数据处理的问题很是头疼 数据到底如何存放的 如何用程序做计算
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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