软件程序代码说明

EFSO由以下功能模块构成:

集合预报处理模块:

对集合预报进行格式以及必要的变量转换。

可执行文件名:

refs_prep_v8

功能

为EFSO准备需要格式的集合预报文件

内容

  • 集合预报文件预处理,实现模式预报场到EFSO需要格式文件转换
  • 实现对GRAPES预报文件的格式转换,把一个时刻的预报文件转成EFSO所需要的文件格式。
  • 此程序需要的GRAPES预报输入文件格式为:GrADS软件可以处理的,直接存储的二进制格式。一个预报文件包含若干个等压面上的若干个三维及二维变量场。经过此程序格式转换,一个GrADS格式的预报文件,输出为多个 顺序存储 二进制文件。每个二进制文件仅存储 一个变量一个等压面 上的水平 二维数据

观测资料处理模块

对观测进行格式转化及计算O-B等。

可执行文件名:

romb_prep_v8

功能

为EFSO准备需要格式的 OMB 文件

内容

  • OMB 文件预处理, 实现同化系统输出的 OMB 到EFSO需要的 OMB 文件格式转换。包括:

    1. 常规资料
    2. 雷达VAD风场
    3. 雷达RV经向风场
  • 这个程序的的主要功能是实现 OMB 文件格式转换,把GRAPES的 OMB 文本文件转成EFSO需要格式的文件。同时增加其他EFSO需要的观测误差等信息,实现诸如雷达高度场到气压场的转换等。

  • 、GRAPES OMB 输入文件格式为ASCII文本格式。我们拿到的 OMB 文件,在一个同化时次,每种观测为一个单独文件。经过此程序处理,输出文件仍然为ASCII文本格式。每种观测的记录 增加了 观测误差,用户需要根据调整自己的同化系统输出观测误差,更改此程序读入并写出即可;另外,对于雷达资料要有高度与气压坐标的转换等。

  • 可以处理的观测种类,包括:

    1. 常规观测:

      • temp
      • satob
      • airep
      • ships
      • synop
    2. 雷达观测:

      • vad
      • rv

观测影响评估模块

EFSO核心模块,计算观测对预报的影响。

可执行文件名:

refso_v8

功能

实现基于区域集合的预报对观测的敏感性与观测影响计算

内容

读入预处理集合预报文件、OMB 文件预处理,实现EFSO。运行包括两个主要部分:

  • 运行EFSO
  • 画图等后处理

EFSO 系统参数列表与程序说明

namelist

参数 变量类型 说明 备注
cdate_start character 集合预报的初始时间

格式如下:

  • YYYYMMDDHHMMSS
  • 20200308000000
cdate_end character 目前不用;设置与 cdate_start 相同 预留将来使用 lagged ensemble 参数
cdmina character 目前不用;cdate_startcdate_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_rvefso 程序默认读取 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.

  1. 分区计算,计算矩形区域由 ndixndjy 决定
  2. 分区计算,计算矩形区域由 ndixndjy 决定;实际计算区域扩展为3倍( ndixndjy
 
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 是否输出集合平均与均方差等诊断量  

程序说明

  1. 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 等计算观测贡献并输出结果等过程。

    1. cal_coefsi.f90

    计算预报误差贡献项与验证时刻集合扰动的协方差,同时应用计算预报误差的权重 \(\mathrm{C}\) , 按照如下公式计算:

    \[\mathrm{X}_{t|0}^{f^\intercal} \mathrm{C} (e_{t|0} + e_{t|-6})\]
  2. 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
      
  3. util.f90

    • 读取二进制集合预报文件,移除集合平均
    • 二维、三维数组间转换
    • 水平及垂直插值函数等
  4. util2.f90

    • 写出GrADS格式文件
    • 计算地球球面上两点给定经纬度时的球面距离(Km).

增加观测类型

  • 如果观测变量为现有支持变量,如 U , V , TMP , RH ,一般来说,则需要在参数 cobstype 中列出新的观测类型,同时把 OMB 文件系统要求的目录结构中即可。如果不能成功运行,请根据实际程序运行情况作出调整、修改。
  • 如果观测变量不是模式变量,则请参考 main.f90 中雷达 RV 观测部分程序,做类似处理。主要工作为提取有关模式变量,增加实现应用线性观测算子。请根据实际程序运行情况作出调整、修改。