CEMC笔记:CMA-TYM中使用CMA-GFS模式面数据驱动的流程改造

目录

本文介绍对 CMA-TYM 中使用CMA-GFS模式面数据驱动的 ecFlow 流程改造。 在 ecFlow 不支持分支流程的情况下,使用动态生成的标识文件模拟流程分支。

背景

1 月初 NMIC 接收 NCEP 资料发生问题,CMA-TYM 切换背景场数据发现使用 CMA-GFS 等压面做背景场会导致积分无法进行。 经过研发部门同事紧急开发,CMA-TYM 将备份方案从 CMA-GFS 等压面驱动改为模式面驱动,并顺利完成后续的应急演练任务。

业务流程

CMA-TYM 使用 CMA-GFS 等压面和等模式面数据驱动的流程如下图所示。 使用 CMA-GFS 等压面数据时,NCEP 与 CMA 流程相同,仅生成 bcgk 的方法不同。 但使用 CMA-GFS 等模式面数据时,CMA 流程需要跳过部分任务,同时使用不同版本的 psi 和 forecast 可执行程序。

CMA-TYM 使用 NCEP 和 CMA-GFS 背景场的流程示意图。(a) 原有使用 CMA-GFS 等压面驱动的业务流程;(b) 使用 CMA-GFS 模式面驱动的业务流程

构建运行流程

构建运行流程时的直观想法是使用分支结构,不同数据源执行不同分支上的任务。 但 ecFlow 不支持分支结构,使用 complete + trigger 模拟分支失败。

当前 CMA-TYM 业务系统使用标识文件的方式来构建流程,如下图所示。 check_ncep 任务检测 NCEP 背景场是否完整,生成 bckg_set.sh 脚本,包含 user_cmause_ncep 两个标识变量。如果使用 CMA-GFS 数据,则脚本内容为:

export use_cma=".true."
export use_ncep=".false."

后续多个脚本会载入该脚本,并根据标识变量决定执行何种流程。 例如使用 CMA-GFS 数据时跳过任务:

. ${dataproc_dir}/bckg_set.sh
if [ "${use_cma}" = ".true." ];then
  echo "use cma-gfs bckg, skip this task"
  date
  wait                      # wait for background process to stop
  ecflow_client --complete  # Notify ecFlow of a normal end
  trap 0                    # Remove all traps
  exit 0                    # End the shell
fi

例如根据数据源选择可执行程序:

. ${dataproc_dir}/bckg_set.sh

if [ "${use_cma}" = ".true." ];then
  echo "[INFO] use cma-gfs bckg"
  # ...skip...
  srun ${BINDIR}/psi.exe.new_gfs

else
  echo "[INFO] use cma-ncep bckg"
  # ...skip...
  srun ${BINDIR}/psi.exe 
fi

CMA-TYM 使用 NCEP 和 CMA-GFS 模式面数据驱动的 ecFlow 运行流程实现

总结

模式业务系统升级时,一定要对依赖该模式的后续系统进行充分测试,留有足够的对接时间。 否则,依靠发现问题时的及时补救,往往只能找到临时性的解决方案,效果通常不够理想。 这也就是在软件工程项目中强调测试的原因,可以在部署前就发现各类问题。 不过,数值天气预报系统如何进行软件工程意义上的测试仍然缺少最佳实践,需要在工作过程中逐步摸索,寻找合理可行的方案。