爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7314|回复: 14

[分享资料] 关于nc文件转换成二进制的问题

[复制链接]
发表于 2012-6-5 23:35:38 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 dageredapple 于 2012-6-5 23:36 编辑

使用到的数据是nc文件的降水资料
nc自带的ctl:
dset GPCC Monthly Total of precipitation: 1degree version 4
undef -9.96921e+36
xdef 360 linear 0.5 1
ydef 180 linear -89.5 1
zdef 1 linear 0 0
tdef 1329 linear 00Z01JAN1901 1mo
vars 1
precip 0 -999  GPCC Monthly Total of precipitation: 1degree version 4

生成二进制文件用的gs:
'reinit'
'sdfopen g:/precip/precip.nc'
'set gxout fwrite'
'set fwrite g:/precip/precip.bin'
'set lon 0 360'
'set lat -89.5 89.5'
'set z 0'
'set t 1 1329'
'd precip'
'disable fwrite'

生成以后使用fortran对数据进行操作的时候读取文件老是出错
能否告知转换过去的二进制文件的数据是如何存放的
xiexie

密码修改失败请联系微信:mofangbao
发表于 2012-6-6 01:00:11 | 显示全部楼层
二级制格式应该是dat或者grd
密码修改失败请联系微信:mofangbao
发表于 2012-6-6 09:44:12 来自手机 | 显示全部楼层
这个说明你不了解grads的存放顺序!你的数据输出共三维:数组定义三维,维数从内到外为x y t,格点数要定义对了,x是从左到右,y是从下到上,t是从开始到最后,比如:ss(2,3,3)指的是第三个时间点,纬度上从南往北数第3个点,经度上从左往右第2个点!
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2012-6-6 14:16:18 | 显示全部楼层

我也是这样写的fortran程序
但是总是只能读到t=6的时候就报错了
fortran是一个简单的检测程序:
program shujutiqu
        open(1,file='g:/precip/precip.grd',status='old',form='unformatted')
        do k=1,1329
      read(1)
        print *,k
        enddo
        close(1)
        end
运行后只能输出到6程序就中断了
现在不知道是哪个方面的问题了
密码修改失败请联系微信:mofangbao
发表于 2012-6-6 14:33:21 | 显示全部楼层
你数组应该放进去的:你的循环不对吗,没有对应好数据的存放顺序~
应该是这样的
do k=1,it
    do  j=1,iy
       read(1) (ss(i,j,k),i=1,ix)
    enddo
enddo
ix iy it分别为x,y,t的格点数
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2012-6-6 15:18:08 | 显示全部楼层
做个霸气的木头 发表于 2012-6-6 14:33
你数组应该放进去的:你的循环不对吗,没有对应好数据的存放顺序~
应该是这样的
do k=1,it

还是读不了  我觉得是二进制转化时候的问题
密码修改失败请联系微信:mofangbao
发表于 2012-6-6 15:28:51 | 显示全部楼层
你试试看,写出数据的时候,将时间做成循环来做~
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2012-6-6 16:10:22 | 显示全部楼层
做个霸气的木头 发表于 2012-6-6 15:28
你试试看,写出数据的时候,将时间做成循环来做~

gs已经修改过:
'reinit'
'sdfopen g:/precip/precip.nc'
'set gxout fwrite'
'set fwrite g:/precip/precip.grd'
'set x 0.5 359.5'
'set y -89.5 89.5'
num=1
while(num<=1329)
'set t ' num
'd precip'
num=num+1
endwhile
仍然读不了
密码修改失败请联系微信:mofangbao
发表于 2012-6-6 16:13:48 | 显示全部楼层
fortran程序贴上来看看~
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2012-6-6 16:28:09 | 显示全部楼层
program shujutiqu
        real ss(360)
        open(1,file='g:/precip/precip.grd',status='old',form='unformatted'
     $)
        do i=1,2
        do j=1,180
      read(1)(ss(k),k=1,360)
        enddo
        print *,i
        enddo
        close(1)
        end
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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