软件程序代码说明¶
EFSO由以下功能模块构成:
集合预报处理模块:¶
对集合预报进行格式以及必要的变量转换。
可执行文件名:¶
refs_prep_v8
功能¶
为EFSO准备需要格式的集合预报文件
内容¶
- 集合预报文件预处理,实现模式预报场到EFSO需要格式文件转换
- 实现对GRAPES预报文件的格式转换,把一个时刻的预报文件转成EFSO所需要的文件格式。
- 此程序需要的GRAPES预报输入文件格式为:GrADS软件可以处理的,直接存储的二进制格式。一个预报文件包含若干个等压面上的若干个三维及二维变量场。经过此程序格式转换,一个GrADS格式的预报文件,输出为多个 顺序存储 二进制文件。每个二进制文件仅存储 一个变量 在 一个等压面 上的水平 二维数据。
观测资料处理模块¶
对观测进行格式转化及计算O-B等。
可执行文件名:¶
romb_prep_v8
功能¶
为EFSO准备需要格式的
OMB文件
内容¶
OMB文件预处理, 实现同化系统输出的OMB到EFSO需要的OMB文件格式转换。包括:
- 常规资料
- 雷达VAD风场
- 雷达RV经向风场
这个程序的的主要功能是实现
OMB文件格式转换,把GRAPES的OMB文本文件转成EFSO需要格式的文件。同时增加其他EFSO需要的观测误差等信息,实现诸如雷达高度场到气压场的转换等。、GRAPES
OMB输入文件格式为ASCII文本格式。我们拿到的OMB文件,在一个同化时次,每种观测为一个单独文件。经过此程序处理,输出文件仍然为ASCII文本格式。每种观测的记录 增加了 观测误差,用户需要根据调整自己的同化系统输出观测误差,更改此程序读入并写出即可;另外,对于雷达资料要有高度与气压坐标的转换等。可以处理的观测种类,包括:
常规观测:
tempsatobairepshipssynop雷达观测:
vadrv
观测影响评估模块¶
EFSO核心模块,计算观测对预报的影响。
可执行文件名:¶
refso_v8
功能¶
实现基于区域集合的预报对观测的敏感性与观测影响计算
内容¶
读入预处理集合预报文件、
OMB文件预处理,实现EFSO。运行包括两个主要部分:
- 运行EFSO
- 画图等后处理
EFSO 系统参数列表与程序说明¶
namelist
参数 变量类型 说明 备注 cdate_start character 集合预报的初始时间 格式如下:
- YYYYMMDDHHMMSS
- 20200308000000
cdate_end character 目前不用;设置与 cdate_start 相同 预留将来使用 lagged ensemble 参数 cdmina character 目前不用;cdate_start 与 cdate_end 时间间隔 格式如下:
- 0d12h0m0s
cdate_pre character 前一个预报循环的起始时间 cdate_tg character 当前预报循环的起始时间 cdate_tv character 预报验证时间 niens integer 集合预报的成员数 ntens integer 目前不用,设置与 niens 相同 ndimx integer 集合预报 x 方向网格点数 ndimy integer 集合预报 y 方向网格点数 cvar character array 集合预报的变量名 请注意大小写;与预处理后集合文件中的变量名一致 cvar_ref character array 用于验证分析的变量名 请注意大小写;
- 与 cvar 变量名称可以不一样
- 但实际文件中必须是相同变量;依顺序列出与 cvar 对应的变量
cobstype character array 观测类型 目前支持:
- satob , airep , temp , vad , radar_rv
cvar_obs character array 所有观测类型(雷达RV除外)的观测变量 目前支持: U , V , TMP , RH 。
- 系统会自动在每种观测类型OMB目录下寻找是否有包含以上变量名的 OMB 文件存在
- 如果存在则计算观测贡献
- 如果观测变量与集合变量一致,比如都是 U 风场,请与 cvar 变量名一致
- 对于 radar_rv ,efso 程序默认读取 radar_rv 目录下的
omb.RV.dat(详见main.f90)- 如果观测类型在 cvar 中不存在,则需要修改程序
iprsvar[1-5]t0 integer array 模式变量的等压面气压 可以为负值,其表示不应用此气压层。最高气压层为 10hPa iprsvar[1-5]t1 integer array 预报验证时刻的等压面气压 与 iprsvar[1-5]t0 相同 sclstdprsvar[1-5]t1 real array 定义预报误差计算时的函数 所提供样本参数为湿能量模
- 如果这里更改为误差,请用均方差;
- 程序中用这里的值的倒数
dir_ens character array 预处理后的集合预报目录 dir_ref character array 预处理后的用于验证的分析的目录 与预处理后的集合预报目录结构一致,验证分析文件存储在集合数00的目录中 dir_omb character array 预处理后的OMB目录 lin_fcst4vrf logical 是否读入预报计算预报误差;
- .false. 集合预报的平均来计算预报误差
llocalz logical 是否局地化localization ilclz integer 如果llocalz=.true.
- 分区计算,计算矩形区域由 ndix ,ndjy 决定
- 分区计算,计算矩形区域由 ndix ,ndjy 决定;实际计算区域扩展为3倍( ndix ,ndjy )
ndix integer 定义矩形区域x方向网格点数 ndiy integer 定义矩形区域y方向网格点数 nadvix integer 定义矩形区域影响下游x方向网格点数 llocalz=.true. 且 ilclz 为1或2 nadvjy integer 定义矩形区域影响下游y方向网格点数 llocalz=.true. 且 ilclz 为1或2 lrbias logical .true. 输入集合为全值,减掉集合平均 loensavestd logical 是否输出集合平均与均方差等诊断量
程序说明¶
main.f90主程序,主要实现如下公式的计算。计算顺序为从右到左:
\[\bigtriangleup e^2 \approx \frac{1}{K-1} \delta y_0^\intercal \mathrm{R}^{-1} \mathrm{Y}_0^a \mathrm{X}_{t|0}^ {f^\intercal} \mathrm{C} (e_{t|0} + e_{t|-6})\]其中:\(\mathrm{Y}_0^a = \mathrm{H} \mathrm{X}_0^a\)
由于用户没有提供 \(\mathrm{Y}_0^a\) ,这里用 \(\mathrm{H} \mathrm{X}_0^a\) 进行计算。如果观测为模式变量,则 \(H\) 为空间 插值函数;如果观测为间接变量,则需要增加(简化)线性观测算子,比如 RH ,雷达 RV 观测。目前efso程序没有读入地面有关变量的集合预报,地面 观测风场与温度变量由三维等压面上的要素插值得到。
为了实现以上公式的计算,程序也包含读入集合预报,OMB 等计算观测贡献并输出结果等过程。
cal_coefsi.f90计算预报误差贡献项与验证时刻集合扰动的协方差,同时应用计算预报误差的权重 \(\mathrm{C}\) , 按照如下公式计算:
\[\mathrm{X}_{t|0}^{f^\intercal} \mathrm{C} (e_{t|0} + e_{t|-6})\]
module_para.f90
定义模式区域与分辨率
real,parameter :: mlat_s=15.0 !model lat south to north real,parameter :: mlat_n=65.1 !model lat real,parameter :: mlon_w=70.0 !model lon west to east real,parameter :: mlon_e=145.1 real,parameter :: mres_dll=0.1定义观测种类,模式变量、层数的最大维数等
INTEGER,PARAMETER :: ntobstype=10 INTEGER,PARAMETER :: ntvars=20 INTEGER,PARAMETER :: ntlevs=20
util.f90
- 读取二进制集合预报文件,移除集合平均
- 二维、三维数组间转换
- 水平及垂直插值函数等
util2.f90
- 写出GrADS格式文件
- 计算地球球面上两点给定经纬度时的球面距离(Km).
增加观测类型¶
- 如果观测变量为现有支持变量,如 U , V , TMP , RH ,一般来说,则需要在参数 cobstype 中列出新的观测类型,同时把 OMB 文件系统要求的目录结构中即可。如果不能成功运行,请根据实际程序运行情况作出调整、修改。
- 如果观测变量不是模式变量,则请参考
main.f90中雷达 RV 观测部分程序,做类似处理。主要工作为提取有关模式变量,增加实现应用线性观测算子。请根据实际程序运行情况作出调整、修改。