GrADS 读取NetCDF和HDF的ctl文件 SDF文件的描述文件

LUOPING0 2020-06-03

翻译自http://cola.gmu.edu/grads/gadoc/SDFdescriptorfile.html

使用GrADS阅读NetCDF和HDF文件

NetCDF和HDF格式的文件被称作自描述文件(self-describing file, SDF),因为数据和元数据一块保存在同一个文件中。GrADS可以读取NetCDF和HDF格式的文件,只要数据是存储在一个规范网格。HDF格式是非常通用的;GrADS接口仅适用于5-D的(lon/lat/lev/time/ensemble)网格化数据集。 GrADS处理HDF4科学数据集和部分HDF5文件。为了读取自描述文件SDF,GrADS需要一个特定的源数据为了将,GrADS需要一定数量的元数据,从而将数据放置在内部网格空间中。有三种方式可以做到这些:

  1. 使用sdfopen命令打开文件。这为用户省去了最少的工作-只需提供文件名(或OPeNDAP URL),其余的工作由GrADS完成。如果使用sdfopen命令打开SDF,则GrADS所需的文件中的所有元数据都必须符合COARDS约定。"sdfopen"界面不支持HDF5格式。如果sdfopen不起作用,则...
  2. 使用xdfopen命令打开文件。这需要进行更多的工作-您必须编写一个数据描述文件来补充或替换现有的元数据,以便GrADS能够理解它。xdfopen使用的描述符文件的语法与栅格化二进制数据(gridded binary data)的描述符文件中使用的语法不完全相同-有关更多详细信息,请参见文档页面。xdfopen命令提供对更多SDF文件的访问,包括许多不符合任何已知标准的SDF。"xdfopen"界面不支持HDF5格式。如果xdfopen不起作用,则...
  3. 使用open命令打开文件。这要求用户编写一个完整的GrADS描述符文件,以覆盖文件中的所有元数据。下面给出了为NetCDF,HDF-SDS或HDF5网格数据文件组成完整描述符文件的指南。另请参考数据描述符文件的元素。如果要遇到以下情况,建议使用‘open‘接口:将大量数据文件一起模板化,数据是预投影到非经/纬度网格,文件中的变量具有不同的未定义值,或文件中的变量或者文件中的变量以非标准方式存储。‘open‘接口是读取HDF5文件的唯一方法。

NetCDF和HDF-SDS描述符文件组件

数据描述文件是自由格式,这意味着每个记录record(文本行)的组成部分都是以空格分隔的,并且可以按任何顺序出现。在解析之前,将删除每个记录开头的前导空格。单个记录的长度不能超过255个字符。每条记录均以特定的条目名称开头,后跟多个参数或关键字,具体取决于条目。
用于NetCDF,HDF-SDS和HDF5文件的描述文件条目为:

条目备注
DSET指向文件的条目. 参见reference page
DTYPE该条目应当是‘netcdf‘ 和‘hdfsds‘ 关键字。
(GrADS version 2.0.a7+)对于HDF5,使用‘hdf5_grid‘关键字
TITLE在每个GrADS描述符文件中都包含一个描述性TITLE是一种良好的常规做法
UNDEF此项指定未定义或缺测数据值。第二个参数(可选)是SDF中包含未定义值的属性的名称。当数据文件中的各个变量具有不同的未定义值时,应使用此方法。数据I / O之后,网格中的缺失值将从变量undef转换为整个文件范围的undef(UNDEF记录的第一个参数中的数值)。然后,对GrADS来说,所有变量都具有相同的undef值,即使它们不在SDF中也是如此。属性名称区分大小写,并且假定SDF中所有变量的名称都相同。如果给定的名称与任何属性都不匹配,或者没有给定名称,则将使用文件范围的undef值。
例如: UNDEF -9.99e8 _FillValue
UNPACK该条目用于’打包’的数据变量——即非浮点数据需要通过以下方程转换成浮点数:
y = x *?scale_factor?+?add_offset
仅仅需要scale_factor的属性名。如果你的SDF文件没有一个offset 属性,第二个参数可以被忽略,offset会分配成默认值0.0。属性名区分大小写,并且假定netcdf或hdfsds数据文件中所有变量的名称都相同。如果给定的名称不匹配任何属性,则scale_factor将被分配为1.0,offset将被分配为0.0。打包数据的转换是在应用undef测试之后完成的。 例子:
UNPACK scale_factor add_offset
UNPACK Slope Intercept
OPTIONS合理的关键字有‘yrev‘, ‘zrev‘, ‘template‘, 和 ‘365_day_calendar‘。
CACHESIZE(GrADS version 2.0.a8+) 该条目将覆盖用于读取HDF5或NetCDF4文件的缓存的默认大小。它与其他数据类型无关。除非数据文件具有特别大的块,否则不必显式设置缓存大小。请参阅有关compression的文档。
PDEF(GrADS version 1.9b4+) 该功能用于,SDF包含非经纬度的本地投影上的数据(例如兰伯特共形或极坐标立体网格)时。有关更多信息,请参见PDEF documentation
XDEF这些条目用于描述SDF中的坐标维数。语法与二进制文件相同。有关更多详细信息,请参见reference page。您可以将ncdump的输出与-c选项一起使用,以获取有关SDF中坐标尺寸的信息。
YDEF
ZDEF
TDEF
EDEF
VECTORPAIRS此项用于显式标识向量分量对。仅当数据位于经纬度以外的本地投影上(即您正在使用PDEF)并且风必须从相对网格方向旋转?旋转到相对地球方向时,才需要VECTORPAIRS条目。(GrADS必须同时检索u和v分量才能进行旋转计算。) 参数是U分量和V分量变量名,用逗号分隔,没有空格。可能会列出一对以上的组件;在这种情况下,两对之间应以空格隔开。 例子:
VECTORPAIRS ?u,v ?u10,v10 ?uflx,vflx
VARSSDF描述符文件中的变量声明具有一些特殊功能,如下所述。不必为SDF中的所有变量都包括变量声明,只需为希望使用GrADS读取的变量声明变量即可。 varname字段有以下语法:
throughSDF_name=>grads_name
ENDVARSSDF_name必须与SDF中的数据变量名称完全匹配——它可以包含大写字母和非字母数字字符。grads_name?是SDF_name的别名,并且必须少于16个字符,以字母字符开头,并且不能包含任何大写字母或非字母数字字符。如果SDF_name已经满足上面列出的GrADS变量名的条件,则可以省略变量名的别名(即,"SDF_name=>"不位于grads_name之前)。对于dtype hdf5_grid,SDF_name必须包含数据集所属的所有嵌套组的名称(用”/”分隔)(请参见下面的示例)。 levs字段是一个整数,用于指定变量包含的垂直级别的数量。没有Z维度的变量的levs值应为0。没有Z维度的变量的levs值应等于ZDEF语句中指定的znum值。 units字段是变量大小变化的逗号分隔列表。尺寸用x,y,z,t和e表示,并对应于XDEF,YDEF,ZDEF,TDEF和EDEF定义的五个轴。units字段中列出的维度顺序很重要-它必须描述变量的形状,该变量被写入SDF数据文件。对于NetCDF文件,此信息显示在ncdump的输出中,变量名旁边。对于HDF5文件,此信息作为变量的数据空间出现在h5dump的输出中。 例子:
Height=>hgt?? 17?? t,z,y,x?? Geopotential Height (m)
/HDFEOS/GRIDS/ColumnAmountNO2/Data~Fields/CloudFraction=>cf ?15 ?z,y,x ?Cloud Fraction

使用说明

  1. GrADS当前处理的NetCDF数据类型为short,long和float。处理的HDF-SDS数据类型为8位整数(int8和uint8),短整数(int16和uint16),整数(int32和uint32)和浮点数。I / O完成后,这些都将转换为float类型。
  2. 如果满足以下条件,则 sdfopen/xdfopen接口将自动处理解压缩NetCDF数据:
    a. 打包数据类型为"short"
    b. 用于转换的常量的数据类型是"float"
    c. 属性名称是"scale_factor"或"slope",以及"add_offset"或" intercept"
    如果SDF中的打包数据不符合此描述,则必须将open命令与完整的描述符\文件一起使用,并在UNPACK条目中提供属性名称。在这种情况下,属性数据类型可以为short,long,float或double。
  3. 如果SDF中的数据不是浮点数,并且需要使用UNPACK条目中命名的属性进行转换,则GrADS假定变量undef值对应于文件中出现的数据值,即,在使用scale factor(比例因子)和offset(偏移量)之前。打包数据的缺测值被分配了文件如果您的数据文件包含一个在非世界坐标维度(non-world-coordinate)上变化的变量(例如,直方图间隔,光谱带,集合数),则可以将非负整数放入变化维度的列表中,该列表将成为额外的维度。例如:范围的undef值,并且永不解压。
  4. 如果您的数据文件包含一个在非世界坐标维度上变化的变量(例如,直方图间隔,谱带,集合数),则可以将非负整数放入变化维度的列表中,该列表将成为额外的维度。例如:
    VAR=>hist0 0 0,y,x First historgram interval for VAR
    VAR=>hist1 0 1,y,x Second historgram interval for VAR
    VAR=>hist2 0 2,y,x Third histogram interval for VAR
    此示例中的另一个选项是用直方图间隔填充未使用的Z轴:
    ZDEF 3 linear 1 1
    ...
    VAR=>hist 3 z,y,x VAR Histogram
    在这种情况下,对于GrADS来说,变量"hist"的Z值会发生变化,但是用户必须记住,Z值对应于直方图间隔而不是气压层次。后一种技术可以更轻松地分割数据,但不是最准确的表示形式。而且,如果您没有可用的未使用的世界坐标轴(unsued world-coordinate axis),那么您仍然可以使用一种方法来访问数据变量的所有维度。
  5. 某些SDF的坐标维度远远超过四个,例如,交错的经度轴和纬度轴。在这种情况下,很可能在同一SDF中包含的不同网格上定义了变量。对于每个数据文件,GrADS只能处理一个4D网格-描述文件中列出的所有SDF变量必须共享相同的坐标轴。必须编写多个描述文件来描述在不同网格上定义的变量。

例子

  1. 这是ncdump中包含海洋模型输出的文件的示例输出。该文件包含八个坐标维和九个数据变量,它们在坐标轴的不同组合上定义。需要五个单独的描述符文件来描述所有变量:一个用于速度分量u和v,另一个用于速度分量w,第三个用于位温,第四个用于风应力分量taux和tauy,第五个用于表面变量hflx,sflx和eta
  2. 天气研究和预报(WRF)模型可以在非纬度/经度网格上生成NetCDF输出。GrADS可以使用带有PDEF条目的完整描述符文件以其原始格式读取这些文件。要提取PDEF条目的参数,可以使用描述原始网格参数的全局属性值,以及提供网格点经度/纬度值的数据变量。WRF模型使用交错网格,就像上面示例中的海洋模型一样。为了清楚起见,已对该WRF ncdump输出进行了编辑,以仅显示与示例描述文件中使用的数据变量相关的四个坐标轴。实际输出文件中还有许多其他数据变量和坐标维。首先,这是一个示例描述文件,用于获取本地网格点的经度和纬度值——请注意,不包括PDEF语句,XDEF和YDEF语句不映射至经度和纬度,它们仅用作抽象网格增量。这些网格点中的任何一个都可用作PDEF条目中的参考点,此示例使用值为(-125.898,26.9628)的网格点(1,1)。最后,这是四个数据变量的描述文件。WRF模型是高度可配置的,并且也在积极开发中,因此此示例仅应用作指导。
    wrf示例ctl文件
dset ^wrf_sample.nc
dtype netcdf
undef -888
TITLE WRF Output Grid: Time, bottom_top, south_north, west_east
pdef 249 249 lcc 26.9628 -125.898 1 1 36.2999 36.2999 -116.0 8000 8000
xdef 270 linear -129 0.1
ydef 200 linear   26 0.1
zdef  25 linear 1 1
tdef   2 linear 11jun2002 3hr
vars 4
P=>p      25  t,z,y,x  Pressure
T=>t      25  t,z,y,x  perturbation potential temperature (theta-t0)
HGT=>hgt   0  t,y,x    terrain height
T2=>t2     0  t,y,x    temperature at 2m
endvars

相关推荐