爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 88742|回复: 98

[经验总结] Fortran 究竟如何读取nc(netcdf)数据

  [复制链接]

新浪微博达人勋

发表于 2012-12-21 10:55:45 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 游子 于 2012-12-21 16:57 编辑

    本来是很早就想写这个帖子了,网上关于这方面的讨论都是链接引链接。也没有一个详细的说明。读取nc数据一般谁也不想那么麻烦,一定非得使用Fortran来读取,使用grads和ncl读取是很方便的。或许也是处于好奇的原因,我一定要把这个问题搞清楚了,不然浑身不自在。你是不是也是这样呢?技术问题虽然是死东西,但若感兴趣,也是很有意思的,不是么?
    Ok,废话少说,言归正传。
    首先,确保您的服务器装有mpiifort编译器,使用which mpiifort或者whereis mpiifort查找其安装的路径,如果没有找到,看看是不是路径没有引用到安装的位置。如果没有查找到ifort编译器,f77勉强也行。
    其次,查看你的netcdf是否安装,which ncdump查找到安装ncdump的安装路径后,后退两个目录,便是了。
在netcdf的安装路径中(your root/include)的有一个netcdf.inc(netcdfcpp.h)文件,这个文件供fortran(C/C++)作为头文件添加程序中,这样就可以大量的库函数一一声明了。声明过后的函数或者子程序就可以随意调用了。这些函数和子程序是相当丰富的,有nc数据的建立函数、数据的读取函数、nc数据维度说明函数、nc文件说明、nc文件打开以及关闭等诸多函数和子程序。
Snip20121221_2.png
典型的fortran90风格

Snip20121221_3.png
典型的c++风格


当然,这里只是函数或者程序说明,并没有详细的函数或者子程序代码。要不怎么叫做库(library,缩写lib)函数呢?我们也无需关注这些函数到底是怎么写的。这些函数和子程序事实上已经编译成二进制代码存放起来了,放在你安装目录下 your root/lib/ 中了,两种语言编译的-——Fortran和C++。所以c语言和fotran读取nc数据的方法是一样的,只不过维度是反过来便是了,fortan是列存放的,而c语言是行存放的。只要你有二级计算机的水平,这都是小问题。这些函数编译成两个文件,一个是libnetcdf.a这个是由fortran语言调用的,另一个是libnetcdf_c++.供c语言调用。在下面你就会看到的。
    安装路径下这么多东西,闲置着也挺可惜的,学会使用也不错。常人都爱偷懒,才不会用呢,主要是在跑实验时多会应到这些鬼东西。
    由于子函数太多,无需记忆,这里有个网站介绍的还算可以:
http://pc510.ev.ncku.edu.tw/models3/netcdf/netcdf.html#fortran_to_Netcdf
    举个读取的例子吧。
    eg. read.f

Snip20121221_4.png
OK ,开始编译了
step one  
mpiifort -c /snfs01/raojian/soft/netcdf-3.6.0-x64/include read.f
通过上面的编译以后,会生成一个 read.o的文件,反馈信息:
ifort: warning #10147: no action performed for specified file(s)
没关系的,只有warning,不是错误,这样就会生成一个.o的文件了
这一部主要是想把netcdf的信息告之fortran程序

step two
mpiifort -shared-intel -o a.out read.o -L/snfs01/raojian/soft/netcdf-3.6.0-x64/lib -lnetcdf
这一步就会生成一个传统的a.out 的文件,当然了,你可以更换生成文件名字。

然后在./a.out 就大功告成了。

f77运行类似了,没用什么大不了的。

Good luck. 每一个run model的孩子都要努力成为技术男。
上一篇:IDL/NCL/GRADS/MATLAB 绘图命令对应关系一览表
http://bbs.06climate.com/forum.php?mod=viewthread&tid=11453&page=1&extra=#pid11959

评分

参与人数 4威望 +3 金钱 +52 贡献 +13 体力 +160 收起 理由
十月的天空 + 1 赞一个!
mofangbao + 15 + 5
Aires + 1 + 18 + 4 + 80
言深深 + 2 + 18 + 4 + 80

查看全部评分

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

新浪微博达人勋

发表于 2012-12-21 13:30:31 | 显示全部楼层
精神可嘉,我也一直有心学,但遇到问题也都用画图软件绕过去了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-21 15:16:33 | 显示全部楼层
向技术迈进
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-21 16:32:32 | 显示全部楼层
学长威武!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-21 19:52:26 | 显示全部楼层
又一个程序猿出现了@言深深
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-22 09:29:32 | 显示全部楼层
看看                                    
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-24 10:49:25 | 显示全部楼层
如果是IVF呢,不在linux下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-12-24 12:32:57 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-24 23:26:37 | 显示全部楼层
知其然不知其所以然,我还差太远啦!~ 向大神学习!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-27 11:50:03 | 显示全部楼层
学习了。。。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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