爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 78073|回复: 121

[参考资料] Netcdf文件格式了解及如何创建、读取

  [复制链接]

新浪微博达人勋

发表于 2011-12-6 00:23:18 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 godenflame135 于 2011-12-6 00:52 编辑



转模式或做资料处理,
只要涉及到将资料转换为模式所需要的格式或将模式输出文件进行处理,就会遇到文件格式的读写。而NETCDF格式是WRF所需要的,这里简单介绍下:

1.   一步生成读写源代码。在知道样本netcdf文件的情况,使用
ncdump –h   file1.nc  > file1.cdl  !生成描述文件
ncgen   –f  file1.f  file1.cdl  !生成fortran77源代码

则可以参考 file1.f  修改写出自己需要的代码。

2.     随意读取wrfout文件。WRF-ARW的UserGuide.pdf中在Tool一节介绍read_wrf_nc.f,想到这个文件的名字,相信我不多说,大家就知道里面应该有值得参考的句子。(当然,如果想看简单点的程序,请看netcdf软件自带的man中pdf文件介绍的examples(附件中))。

3.    附上f90方便快捷地创建netcdf文件和gradsnetcdf格式文件的相关文献。

netcdf_mans.zip (1.36 MB, 下载次数: 741)

评分

参与人数 5威望 +2 金钱 +90 贡献 +13 体力 +100 收起 理由
evereen + 10
mofangbao + 20 + 5 + 100
言深深 + 20 + 2
兰溪之水 + 20 + 2
善人/jw + 2 + 20 + 4

查看全部评分

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

新浪微博达人勋

发表于 2012-4-10 09:52:13 | 显示全部楼层
竟然要收费??大家就别下这个了!拒绝收费!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-7-7 00:04:14 | 显示全部楼层

如果是netcdf 4.0 以上,应该是lnercdff哈
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2011-12-6 00:37:28 | 显示全部楼层
先抢个沙发!版主分享了好东西了!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-12-6 00:45:04 | 显示全部楼层
这么好的东西,怎么没有来顶啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 0
发表于 2011-12-6 08:20:55 | 显示全部楼层
帖子很好,值得好好学习一下!
非常感谢@godenflame135的辛苦劳动,深深表示敬意
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-12-6 09:04:21 | 显示全部楼层
好东西!感谢分享!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2011-12-6 09:23:24 | 显示全部楼层
谢谢楼主的奉献  有大家才精彩
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-12-6 12:47:25 | 显示全部楼层
言深深 发表于 2011-12-6 08:20
帖子很好,值得好好学习一下!
非常感谢@godenflame135的辛苦劳动,深深表示敬意

坛主都如此认真负责,我们也来尽一点微薄之力。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2011-12-6 14:23:48 | 显示全部楼层
godenflame135 发表于 2011-12-6 12:47
坛主都如此认真负责,我们也来尽一点微薄之力。

通过ncdump和ncgen生成相应f文件后,pgf90该文件,发现找不到netcdf.inc。。。后来看网上说加上-I$NETCDF/include 语句,我试了却报错出现很多undefined reference。。。。
我netcdf安装好了,而且WRF编译运行也没有问题。
不解。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2011-12-6 14:39:14 | 显示全部楼层
本帖最后由 godenflame135 于 2011-12-6 14:40 编辑
大气杨娃娃 发表于 2011-12-6 14:23
通过ncdump和ncgen生成相应f文件后,pgf90该文件,发现找不到netcdf.inc。。。后来看网上说加上-I$NETCDF ...

只加include是不足的。在环境变量中要设置一下:
export   NETCDF=/home/user/program_path/netcdf
export   NETCDF_INC=${NETCDF}/include
export   NETCDF_LIB=${NETCDF}/lib
export  PATH=${NETCDF}/bin:$PATH
正如大气洋娃娃说的,只加库是不够的,还要把目标文件(包含*.mod,*.o)的位置加上。
如: pgf90   file1.f   -I${NETCDF_INC}  -L${NETCDF_LIB}  -lnetcdf
这样编译就应该可以生成a.out 执行文件,只要你的代码正确无语法错误。


编外:现在fortran 90 的语句也有好多可以实现简捷编写,如数组赋初值可以  a(1:1000)=0.0  这样的语句来描述,风速质量控制where(a>50)a=-9999.0,这样的语句比起77来简便多了,另外netcdf函数fortran90版也比较简洁了,两句话用同一个函数可以写出一个变量,不像77那样还要分变量类型用不同的函数来写,所以修改生成的fortran 77语句时同时把use netcdf和include "netcdf.inc"加上就可以使用fortran90的新特征简捷高效写出自己想要的程序来。




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

新浪微博达人勋

发表于 2011-12-6 15:01:34 | 显示全部楼层
本帖最后由 大气杨娃娃 于 2011-12-6 15:16 编辑
godenflame135 发表于 2011-12-6 14:39
只加include是不足的。在环境变量中要设置一下:
export   NETCDF=/home/user/program_path/netcdf
exp ...

按你说的试了试,出现下列问题。。。
[root@localhost WRF2PBL]# pgf90 readwrf.f90 -I${NETCDF_INC} -L${NETCDF_LIB} -Inetcdf
/tmp/pgf90SZ-ecfAxvHU.o: In function `get_wrf_var_':
readwrf.f90:(.text+0xfecc): undefined reference to `nf_open_'
readwrf.f90:(.text+0xffb2): undefined reference to `nf_inq_dimid_'
readwrf.f90:(.text+0xfff7): undefined reference to `nf_inq_dimlen_'
readwrf.f90:(.text+0x1029c): undefined reference to `nf_inq_varid_'
readwrf.f90:(.text+0x102e1): undefined reference to `nf_inq_varndims_'
readwrf.f90:(.text+0x10479): undefined reference to `nf_inq_vardimid_'
readwrf.f90:(.text+0x10502): undefined reference to `nf_inq_dimlen_'
readwrf.f90:(.text+0x106cf): undefined reference to `nf_get_var_text_'
readwrf.f90:(.text+0x109c6): undefined reference to `nf_get_var_real_'
readwrf.f90:(.text+0x10c8c): undefined reference to `nf_get_var_real_'
readwrf.f90:(.text+0x1103e): undefined reference to `nf_get_var_real_'
readwrf.f90:(.text+0x113f3): undefined reference to `nf_get_var_real_'
readwrf.f90:(.text+0x117a5): undefined reference to `nf_get_var_real_'
/tmp/pgf90SZ-ecfAxvHU.o:readwrf.f90:(.text+0x11d42): more undefined references to `nf_get_var_real_' follow
/tmp/pgf90SZ-ecfAxvHU.o: In function `get_wrf_var_':
readwrf.f90:(.text+0x1ab29): undefined reference to `nf_close_'
/tmp/pgf90SZ-ecfAxvHU.o: In function `get_wrf_var_check':
readwrf.f90:(.text+0x1cb8c): undefined reference to `nf_strerror_'


现在明白了 是-lnetcdf 不是-Inetcdf。。。。。。。。现在没有问题了

点评

很详细  发表于 2013-7-25 14:48
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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