NetCDF数据的编程式访问
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
N etCDF 数据的编程式访问
查石祥
(总参气象中心,北京100081)
作者简介:查石祥,男,1965年生,硕士,高级工程师,从事数值预报模式与高性能计算研究,Email :sxzha @ 收稿日期:2004年6月12日;定稿日期:2004年9月1日
摘要 NetCDF 是一种面向数组型数据的描述和编码标准,目前广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作NetCDF 数据集。
文章介绍NetCDF 数据的编程式访问方法。该方法主要应用于数值预报模式,它涉及软件创建、参数配置、NetCDF 文件结构、NetCDF 接口函数库等。重点探讨了编程者在使用该方法时经常遇到的一些问题,并且给出了一个读取NCEP 再分析文件的编程实例。关键词 NetCDF 编程环境 文件结构 接口函数库
引言
NetCDF 是一种面向数组型数据的描述和编码
标准,已被国内外许多行业和组织采用,目前广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。例如,NCEP (美国国家环境预报中心)发布的再分析资料,NOAA CDC (气候数据中心)发布的海洋与大气综合数据集(COADS )均采用NetCDF 作为标准。
本文介绍NetCDF 数据的编程式访问———通过调用NetCDF 软件包提供的库函数,以编程方式实现对NetCDF 数据的直接读写。这种方式更多地应用于数值预报模式中,作为模式I/O 模块的一部分,实现对NetCDF 数据的直接读写,例如,目前在气象和海洋领域应用较广泛的WRF 模式[1]、POM 模式、LASG 的气候模式等都包含这样的功能选项。
由于NetCDF 软件秉承OSF (Open Software Foun 2dation )理念,在采用编程方式访问NetCDF 数据时,
涉及编程环境的创建、NetCDF 文件结构、NetCDF 接口函数库等。笔者以自己的开发经验,在综合大
量相关网络资源的基础之上,除了简要介绍NetCDF 之外,有针对性地探讨了编程者在使用该
方法时常会遇到的一些问题,并且给出了一个读取NCEP 再分析文件的编程实例,希望对同行有所
助益。1 N etCDF 简介
NetCDF (Network Common Data Form 通用的
网络数据格式)是由美国大学大气研究协会(U 2CAR )下的Unidata 项目科学家针对科学数据的特点,提出的一种面向数组型数据、适于网络共享的数据描述和编码标准。其软件实现形式是一个免费的NetCDF 软件包,内含可访问NetCDF 数据的工具程序和多种语言的接口函数库。
NetCDF 特性:①自描述特性,即NetCDF 数据
文件包含自身的描述信息,这也是网络时代数据的趋势性特征。②平台无关性,即支持在异构的网络平台间进行数据传输和数据共享。③易用性,表示存在多种方便的途径来管理和操作NetCDF 数据。最常见的3种方式包括:使用随NetCDF 软件包提供的工具程序(Ncdump 和Ncgen );使用支持NetCDF 标准的第3方软件(Grads 、AVS 、IDL 和Mathlab );编程式访问。④高可用性,表示其较高的
数据压缩比,以及基于数组下标的线性存储导致的高效存取。
2 N etCDF 文件结构及接口函数库211 N etCDF 文件结构
NetCDF 数据的自描述特性表示,其中包含描
述自身结构的信息。为了便于说明,下面给出一个
第32卷,增刊2004年12月 气 象 科 技M ETEOROLO GICAL SCIENCE AND TECHNOLO GY
Vol.32,Suppl.
Dec.,2004
N ECP再分析数据文件的头信息(使用命令ncdump -h uwnd.sig995.1998),如下所示:netcdf uwnd. sig995.1998{
dimensions:
lon=144;
lat=73;
time=UNL IM ITED;//(1460currently) variables:
float lat(lat);
lat:units=“degrees north”;
lat:actual range=90.f,-90.f;
lat:long name=“Latitude”;
…
short uwnd(time,lat,lon);
uwnd:long name=“4xDaily u2wind at sigma
level995”;
uwnd:valid range=-10212f,10212f;
uwnd:actual range=-3219f,3518f;
uwnd:units=“m/s”;
uwnd:add offset=225145f;
uwnd:scale factor=0.01f;
uwnd:missing value=32766s;
…
//global attributes:
:Conventions=“COARDS”;
:title=“4x daily NMC reanalysis(1998)”;
:base date=1998s,1s,1s;
:history=“created98/02/12by Hoop
(netcdf2.3)”;
:description=“Data is from NMC initialized
reanalysis/n”,
“(4x/day).These are the0.9950sigma level values.”;
:platform=“Model”;
}
其中,为节省篇幅,略去了许多类似的描述行。不难看出,每个NetCDF文件具备如下所示的结构,其中包含维数、变量、属性和数据4个子域,其中属性又分为适用于整个文件的全局属性和适用于特定变量的局地属性:
netcdf name{
dimensions:... //定义维数
variables:... //定义变量
attributes://属性
data:...//数据
}
NetCDF数据的编程访问就是要通过调用NetCDF接口库函数,设定(写文件)或检索(读文件)上述文件名、维数、变量、属性和数据等信息,达到读写NetCDF文件的目的。
212 N etCDF接口函数库
NetCDF接口函数库是提供给用户以编程方式访问NetCDF数据的工具。NetCDF数据的接口函数库有支持诸如C、C++和Fortran等语言的不同版本,本文只介绍Fortran版本的接口函数库。对于Fortran语言,Unidata又提供分别支持F77和F90标准的接口函数库,后者是在前者基础上的进一步封装,其包含的库函数更少,更便于编程;目前主流的Fortran编译器都支持F90标准。因此,本文只介绍支持Fortran90版本的接口函数库[2]。
Fortran90版本的接口函数库只包含26个库函数,对应于NetCDF文件结构,可分为以下4类:①文件处理函数,实现以写或创建的形式打开文件,关闭文件等。②变量处理函数,实现变量的定义或检索,包括定义或检索变量名、变量ID。③维数处理函数,实现维数的定义或检索,包括定义或检索维数名称、维数ID。④属性处理函数,实现属性的定义或检索。
3 N etCDF编程环境的创建
为了实现其平台无关性,Unidata提供适于不同平台的NetCDF软件包。在Unix平台上,远非PC 平台的Win2Intel一统天下格局,硬件来自众多不同制造商,操作系统则有多种Unix变种,编译器(如CC,F77,F90)更是百花齐放。尽管Unidata提供已编译好的二进制版本的NetCDF软件包,但是,为避免兼容性问题,笔者建议下载源代码形式的NetCDF软件包,然后针对各自的特定平台环境,创建(即配置、编译、测试和安装)NetCDF软件环境。
本文基于特定平台(CPU:400MHz M IPS R12000(IP27)Processor;OS:IRIX64release6.5),详细介绍NetCDF软件包的创建与安装过程。
(1)软件下载。从ftp:/// pub/netcdf/处下载源代码形式的NetCDF软件包
14
增刊 查石祥:NetCDF数据的编程式访问