GrADS格点数据格式

目录

简介

模式运行输出结果为GrADS格点数据格式,包括二进制数据文件和描述文件。

描述文件

data descriptor file, 或者control file,通常以扩展名.ctl结尾,包含对二进制数据的文件位置,及数据信息完整描述,包括网格、时间、经纬度信息、层次、变量等信息。

二进制数据文件

binary data file,通常以扩展名.dat结尾或者没有扩展名。只保存数据值,没有时间等信息。

为了快速掌握GrADS格点数据格式,从实例文件开始学习,研究每条语句的含义。

数据描述文件(ctl文件)

下面是某个ctl文件的样例,来自GRAPES MESO v4.0的模式积分输出:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
dset ^postvar201408110000100
options sequential big_endian
title post output from grapes
undef 9.999E+20
xdef   751  linear    70.0000    0.1000
ydef   501  linear    15.0000    0.1000
zdef   26 levels
	1000.000000
	975.0000000
	950.0000000
	925.0000000
	900.0000000
	850.0000000
	800.0000000
	750.0000000
	700.0000000
	650.0000000
	600.0000000
	550.0000000
	500.0000000
	450.0000000
	400.0000000
	350.0000000
	300.0000000
	250.0000000
	200.0000000
	150.0000000
	100.0000000
	70.00000000
	50.00000000
	30.00000000
	20.00000000
	10.00000000
tdef 1 linear 01z11AUG2014    60mn
vars 30
	u 26 0 u_wind
	v 26 0 v_wind
	t 26 0 temperature
	h 26 0 geopotential height
	Qv 26 0 Q vapor
	Qc 26 0 Q cloud
	Qr 26 0 Q rain
	Qi 26 0 Q ice
	Qs 26 0 Q snow
	Qg 26 0 Q grapaul
	w 26 0 vertical wind
	ps 0 0 surface pressure
	psl 0 0 sea level pressure
	rainc 0 0 precipitation
	rainnc 0 0 precipitation
	ts 0 0 surface temperature
	glw 0 0 surface long wave radiation flux
	gsw 0 0 surface short wave radiation flux
	hfx 0 0 surface heat flux
	qfx 0 0 surface vapour flux
	q2m 0 0 vapour at 2m
	t2m 0 0 t at 2m
	u10m 0 0 u at 10m
	v10m 0 0 v at 10m
	lu 0 0 land use
	zs 0 0 terrain
	tmn 0 0 tmn
	cr 0 0 cr in dbz
	tslb  4 0 tslb
	mslb  4 0 mslb
endvars

数据文件名

1dset ^postvar201408110000100

dest表示描述文件对应的数据文件名,^表示当前数据描述文件所在的目录。

选项

2options sequential big_endian

options用于控制GRADS解释数据文件内容的方式,本示例文件中设置两项:

sequential

数据文件使用 FORTRAN 的 sequential unformatted I/O 方式写入,每个记录的首尾包含 FORTRAN 写入的数据长度,在文件解析中会详细分析此项选项带来的影响。

big_endian

使用大端存储,对应 little_endian,用于数据交换的二进制数据文件一般需要确定字节存储顺序,IBM PowerPC AIX 系统为大端存储,所以模式输出的文件也是大端存储的。

参见我的一篇博文《字节顺序——大端存储和小端存储

描述

3title post output from grapes

title后面给出数据的描述。

缺测值

4undef 9.999E+20

undef:未定义或缺失数据的值,必须指定。

经度

5xdef   751  linear    70.0000    0.1000

xdef定义x轴,即经度。格式如下:

XDEF xnum mapping additional_arguments
  • xnum:个数
  • mapping:两个选项
    • LINEAR:线性映射
    • LEVELS:单独指定经度值

线性映射:指定起始点和增量,示例文件中采用这种方法

xdef   751  linear    70.0000    0.1000

层数:指定层次列表

XDEF 12 LEVELS 0 30 60 90 120 150 180 210 240 270 300 330

纬度

6ydef   501  linear    15.0000    0.1000

ydef定义y轴,即纬度。格式与xdef相同,不过映射选项多了几个:

  • LINEAR Linear mapping
  • LEVELS Latitudes specified individually
  • GAUST62 Gaussian T62 latitudes
  • GAUSR15 Gaussian R15 latitudes
  • GAUSR20 Gaussian R20 latitudes
  • GAUSR30 Gaussian R30 latitudes
  • GAUSR40 Gaussian R40 latitudes

样例文件中使用线性映射关系,其它选项暂不考虑。

层次

7zdef   26 levels
8	1000.000000
9...
10	10.00000000

zdef定义垂直层次。格式与xdef相同。样例文件中指定层次列表。

时间

34tdef 1 linear 01z11AUG2014    60mn

tdef定义时间范围,格式如下:

TDEF tnum LINEAR start increment

start:起始时间,使用GrADS绝对时间格式,hh:mmZddmmmyyyy

其中

  • hh:小时(两位数字)
  • mm:分钟(两位数字)
  • dd:天(一位或两位数字)
  • mmm:月份,三字符
  • yyyy:年(两位或四位数字,两位数字年份在1950和2049之间)
  • increment:时间增量,格式vvkk,其中:
    • vv:整数,1或2位
    • kk:mn、hr、dy、mo、yr

变量记录

35vars
36	u 26 0 u_wind
37...
38	mslb  4 0 mslb
39endvars

varsendvars之间是变量记录,每条记录格式如下:

GrADS v2.0.1及以前版本

varname levs units description

GrADS v2.0.2及以后版本

varname levs <additional_codes> units description

当前模式输出使用的应该是v2.0.1的格式,没有加入附加说明。

  • varname:变量名,15个字符以内的字母或数字,以字母开头
  • levs:包含垂直层次的个数,如果为0,表示不对应任何垂直层次
  • units:对于目前这种4字节浮点数的二进制文件,忽略该变量但必须指定,可以设置为99。
  • description:描述,最多140字符

二进制数据文件

文件结构

由不同块组合到一起,每块是XY水平网格数据:第一维(X)默认从西到东,第二位(Y)默认从南到北。每块代表特定层次、特定时间的一个特定变量,每个GRADS文件中的水平网格必须一样。
块按顺序排列。维数变化顺序,从变化最快的维(一般是x轴,即经度)开始:

  • 经度(lon,x)
  • 纬度(lat,Y)
  • 垂直层次(Z)
  • 变量(VAR)
  • 时间(T)
  • 集合(ensemble,E)

可以省略没有的维度。

示例

4维网格:

Time 1, Variable 1, Each vertical level from bottom to top
Time 1, Variable 2, Each vertical level from bottom to top
Time 1, Variable 3, Each vertical level from bottom to top
Time 1, Variable 4, Each vertical level from bottom to top  
Time 2, Variable 1, Each vertical level from bottom to top
Time 2, Variable 2, Each vertical level from bottom to top
Time 2, Variable 3, Each vertical level from bottom to top
Time 2, Variable 4, Each vertical level from bottom to top
etc.

业务中postvar只有3维网格,有些变量只有2维网格。

Variable 1, Each vertical level from bottom to top
Variable 2, Each vertical level from bottom to top
Variable 3, Each vertical level from bottom to top
Variable 4, Each vertical level from bottom to top

二进制格式

与FORTRAN写入方式有关。FORTRAN写入方式包括

sequential:包含FORTRAN记录长度头,首尾各一个,每次写操作都会记录长度。当前模式输出中,每个要素层次写一次,也就是vars中每个变量记录写一次。

dircet accessstream:没有内置的记录长度信息。

options中设置sequential时,文件包含FORTRAN记录长度头信息,读取时需要注意。

样例说明

样例文件是上面ctl文件对应的数据文件。

开始的头四个字节(0x00)是长度头,0x0FD200

接下来是数据,每四字节为一个浮点数

最后四个字节( 0x04 + 0x0FD200 = 0xFD204 )是长度头,0x0FD200,与开头四字节相同

之后又是下一个记录。

文件解析

首先解析ctl文件,得到数据文件中的所有记录条目,在从数据文件中依次读取每个记录。

详细内容参见《GrADS格点数据文件解析》。

参考

About GrADS Gridded Data Sets