当前位置:
文档之家› 二进制文件Fortran读写专题
二进制文件Fortran读写专题
……
4
输出GrADS数据文件的次序
用循环写grads的二进制数据, 从内循环到外循环依次是:
▪ x (lon) → y (lat) → z (lev) → vars (不同变 量) → time
这是GrADS缺省的数据存放次序,读取和调用数 据的效率最高。
2017年9月11日星期一
5
输出GrADS数据文件的次序
17 2017/9/11
Fortran->CTL
2017年9月11日星期一
dset d:/mydata/test.grd title This a GrADS test data undef -9999.0 xdef 144 linear 0 2.5 ydef 73 linear -90 2.5 zdef 17 levels 1000 925 850 700 600 500 400 300 250 200 150 100 70 50 30 20 10 tdef 365 linear 00:00z01jan2000 1dy vars 9 ps 0 99 Sea surface pressure (hPa) ta 17 99 air temperature (degC) qa 8 99 special humidity (kg/kg) ua 17 99 Zonal winds (m/s) va 17 99 Meridional winds (m/s) wa 12 99 vertical winds (pa/s) zg 17 99 geopotential height (gpm) ts 0 99 t2m temperature (degC) P 0 99 precipitation (mm) endvars 18
GrADS binary数据
GrADS最基本,我们最易准备 常用后缀 .dat .grb .bin …… 需要.ctl文件一起使用 是无格式文件 (form=‘unformatted’) 若用Fortran读写 ▪ 存取方式 • 直接存取(access=‘direct’) GrADS读取快速 • 顺序存取(access=‘sequential’) 需在.ctl中说明 ▪ 数据类型real*4,也就是4个字节的实型数
2017年9月11日星期一
11
FORTRAN示例三:同时写入地表变量和气压层变量
PS ta va zg
T1
PS ta va
……
zg
一个 记录
T2
……
va zg
PS
ta
T3
2017年9月11日星期一
……
12
FORTRAN示例三: 同时写入地表变量和 气压层变量
2017年9月11日星期一
13
FORTRAN示例四:气压层不同
GrADS binary数据
GrADS视该数据集为一个五维数组,这五维的变化顺序为:
x(lon) y(lat) z(lev) vars(不同变量) t(time)
这是GrADS缺省的数据存放次序,读取和调用的效率最高。
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 ……
记录序号
2017年9月11日星期一
8
FORTRAN示例二:每次写入一个记录
Var1 Var2 Var3 VarN
T1
Var1 Var2 Var3
……
VarN
一个 记录
T2
……
VarN
Var1
Var2
Var3
T3
2017年9月11日星期一பைடு நூலகம்
……
9
FORTRAN示例二:每次写入一个记录
每次写入一个数据 每次写入一个记录(平面)
PS ta qa zg
T1
PS ta qa
……
zg
一个 记录
T2
……
qa zg
PS
ta
T3
2017年9月11日星期一
……
14
FORTRAN示例四:气压层不同
2017年9月11日星期一
15
FORTRAN示例五:多个变量
2017年9月11日星期一
16
Time 1, Level ? , Variable PS t=1 Time 1, Level 1000, Variable ta then levels 925, 850, 700, 600, 500, 400, 300, 250, 200, 150, 100, 70, 50, 30, 20, 10 根据Fortran程序, Time 1, Level 1000, Variable qa 如何写出ctl文件? then levels 925, 850, 700, 600, 500, 400, 300 t = 2, 3…365 Time 1, Level 1000, Variable ua then levels 925, 850, 700, 600, 500, 400, 300, 250, 200, 150, 100, 70, 50, 30, 20, 10 Time 1, Level 1000, Variable va Time 2, Level ? , Variable Ps then levels 925, 850, 700, 600, 500, 400, …………………… 300, 250, 200, 150, 100, 70, 50, 30, 20, 10 Time 2, Level ? , Variable P Time 1, Level 1000, Variable wa Time 3, Level ? , Variable Ps then levels 925, 850, 700, 600, 500, 400, …………………… 300, 250, 200, 150, 100 Time 3, Level ? , Variable P Time 1, Level 1000, Variable zg Time 4, Level ? , Variable Ps then levels 925, 850, 700, 600, 500, 400, …………………… 300, 250, 200, 150, 100, 70, 50, 30, 20, 10 Time 4, Level ? , Variable P Time 1, Level ? , Variable TS Time 5, Level ? , Variable Ps Time 1, Level ? , Variable P …………………… Time 365, Level ? , Variable P
一个点 (IX,IY)
2017年9月11日星期一
一个 记录
10
recl=:一次写入的数据量,与Fortran编辑单位有 关。
▪ 以字节数为单位:需要*4,recl= 144*73*4(字节) ▪ 以数据个数为单位,不需*4,recl= 144*73
recl与rec有关联 不同维数的循环嵌套顺序 (lon lat lev 不同变量 time ) (x y z 不同变量 t ) (内循环-------------外循环)
2017年9月11日星期一 6
二进制Binary数据文件存储结构
Var1 Var2 Var3 VarN
T1
Var1 Var2 Var3
……
VarN
T2
……
VarN
Var1
Var2
Var3
T3
2017年9月11日星期一
……
7
FORTRAN示例一:每次写入一个数据
无格式存储 直接存储
记录长度 记录序号 TIME循环 变量循环 LEV循环 LAT循环 LON循环
其中任何一(几)维都可省略。例: ▪ DATA ( 144, 73, 17, 6, 365 ) ▪ DATA(144,73,17,365) ▪ DATA(144,73,17) ▪ DATA(6,365) ▪ DATA(365) 在生成原始数据文件时,无论用工作站还是PC机, 无论是用FORTRAN语言还是用C 语言,所生成 的数据的格式都要求是无格式(unformatted)直 接(direct)记录格式,不允许在记录中加入描述 符,如记录开始、记录结束、换行符等。
层次1 (底) 层次2
纬圈1 (南) 纬圈2
西
……
时间n
……
变量n
……
层次n (顶)
……
纬圈n (北)
东
3
二进制Binary数据文件存储结构
Var1 Var2 Var3 VarN
T1
Var1 Var2 Var3
……
VarN
一个 记录
T2
……
VarN
Var1
Var2
Var3
T3
2017年9月11日星期一