运行步骤

下载GFS/GDAS全球模式预报资料或使用GRAPES的全球预报模式资料

  • GFS/GDAS原始模式预报
    • 下载地址
      • ftp://ftp.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gdas.ccyymmdd/
      • ftp://ftp.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/gfs.ccyymmdd/
    • 下载文件:
      • gdas.t??z.atmf???.nemsio
      • gfs.t??z.atmf???.nemsio
    • 具体下载那些文件,由分析的 cycle 决定
  • GRAPES模式预报
    • pride 存放地址
      • /g2/nwp/OPER_ARCH_TEST/nwp/GMFS_GRIB2_GRAPES/ORIG
  • 存放地址和文件名(每个 cycle 需要3,6和9hours的预报场)
    • /g5/nwpc_ep8/obsproc/nwprod/com/gfs/prod/gfs.ccyymmdd/gfs.t??z.pgrbf03
    • /g5/nwpc_ep8/obsproc/nwprod/com/gfs/prod/gfs.ccyymmdd/gfs.t??z.pgrbf06
    • /g5/nwpc_ep8/obsproc/nwprod/com/gfs/prod/gfs.ccyymmdd/gfs.t??z.pgrbf09

运行 dumpobsproc

> cd /g5/nwpc_ep8/obsproc/nwprod
> ./batch_run_global_obsproc.py

batch_run_global_obsproc.py 的内容如下:

#!/bin/env python3

import os
from datetime import datetime, timedelta

start_date = datetime(2019, 6, 2, 0)
end_date   = datetime(2019, 8, 15, 0)
end_date   = datetime(2019, 6, 9, 0)
step       = timedelta(hours=6)

curr_time = start_date

while curr_time < end_date:

   print('Processing ', curr_time.strftime("%Y%m%d%H"))

   # Update the date and time
   filename = os.path.join('/g5/nwpc_ep8/obsproc/nwprod', "com", "date",  "t"+curr_time.strftime("%H")+"z")
   f = open(filename,'w')
   f.write('nwprod'+curr_time.strftime("%Y%m%d") )
   f.close()

   # link the GFS
   curr_timem6 = curr_time - timedelta(hours=6)
   gfs_dir=os.path.join('/g5/nwpc_ep8/obsproc/nwprod', 'com', 'gfs', 'prod', 'gfs.'+curr_timem6.strftime("%Y%m%d"))
   if not os.path.exists(gfs_dir):
      os.mkdir(gfs_dir)

   time_marker=curr_timem6.strftime("%Y%m%d%H")
   gfs_filep3=os.path.join('/g2/nwp/OPER_ARCH_TEST/nwp/GMFS_GRIB2_GRAPES/ORIG', \
                           'GRAPES_GFS_ORIG_'+time_marker, \
                           'gmf.gra.'+time_marker+'003.grb2')
   gfs_filep6=os.path.join('/g2/nwp/OPER_ARCH_TEST/nwp/GMFS_GRIB2_GRAPES/ORIG', \
                           'GRAPES_GFS_ORIG_'+time_marker, \
                           'gmf.gra.'+time_marker+'006.grb2')
   gfs_filep9=os.path.join('/g2/nwp/OPER_ARCH_TEST/nwp/GMFS_GRIB2_GRAPES/ORIG', \
                           'GRAPES_GFS_ORIG_'+time_marker, \
                           'gmf.gra.'+time_marker+'009.grb2')

   print(gfs_filep3)
   if os.path.exists(gfs_filep3):
      dst3=os.path.join(gfs_dir, 'gfs.t'+curr_timem6.strftime("%H")+'z.pgrbf03')
      if not os.path.exists(dst3):
         os.symlink(gfs_filep3, dst3)
   if os.path.exists(gfs_filep6):
      dst6=os.path.join(gfs_dir, 'gfs.t'+curr_timem6.strftime("%H")+'z.pgrbf06')
      if not os.path.exists(dst6):
         os.symlink(gfs_filep6, dst6)
   if os.path.exists(gfs_filep9):
      dst9=os.path.join(gfs_dir, 'gfs.t'+curr_timem6.strftime("%H")+'z.pgrbf09')
      if not os.path.exists(dst9):
         os.symlink(gfs_filep9, dst9)


   os.system("./run_global_obsproc.bash " + curr_time.strftime("%H"))

   curr_time += step

batch_run_global_obsproc.py 通过修改 /g5/nwpc_ep8/obsproc/nwprod/com/date/t??z 文件,来指令质控程序对哪个时间的观测资料进行质控;

batch_run_global_obsproc.py 调用 run_global_obsproc.bash, run_global_obsproc.bash 会读取 /g5/nwpc_ep8/obsproc/nwprod/com/date/t??z 的内容, 并且从命令行获取 cyc 来得到时间信息;

run_global_obsproc.bash 会进一步设置各种参数来控制质控,内容如下:

#!/bin/bash -e

export PATH=.:${PATH}

ulimit -s unlimited

if [[ $# -eq 0 ]]; then
  echo "No cycle is given"
  echo "Usage:: run_rap_obsproc.bash 00"
  exit
fi

# Common setting
export ROOT_DIR=/g5/nwpc_ep8/obsproc/nwprod
export NWROOT=${ROOT_DIR}
export DATAROOT=${ROOT_DIR}/tmpprod
export COMIN_ROOT=${ROOT_DIR}/com
export COMROOT=${ROOT_DIR}/com

# default root directory path to $TANK, $EPRM and $QPRM
export DCOMROOT=${ROOT_DIR}/dcom

# Where is the utility scripts
export UTILROOT=${ROOT_DIR}/util
export utilscript=${ROOT_DIR}/util/ush

export NDATE=${UTILROOT}/exec/ndate
export NHOUR=${UTILROOT}/exec/nhour

export grib_util_ver=1.0.5

# Run locally and background threads
export sys_tp="local"
export launcher="threads"

# root directory tree for the path to temporary work files
export TMPDIR=/tmp

# Geographical filtering of the data
export LALO=0

#
export RUN_ENVIR="nco"
export envir="prod"

export KEEPDATA="YES"
export LOUD="off"

############################################
# SENDCOM  - Copy files to $COMOUT directory
# SENDECF  - Flag Events on ECFLOW
# SENDDBN  - Alert output file to TOC
############################################
export SENDCOM=YES
export SENDECF=NO
export SENDDBN=NO

export PROCESS_GRIBFLDS="NO"
export PROCESS_REMOREST="NO"

# Only conventional data being processed
export JOB_NUMBER=1

# Which group will be processed
export DUMP_group2="YES"
export DUMP_group3="YES"
export DUMP_group4="YES"
export DUMP_group8="YES"

export MPMD=NO
export CHGRP_RSTPROD=NO

export POE="NO"
export BACK="NO"

export NET="gfs"
export cyc=$1
export job=${NET}_dump_${cyc}

. ${ROOT_DIR}/versions/obsproc_global.ver

export HOMEgfs=${ROOT_DIR}/obsproc_global.${obsproc_global_ver}

${ROOT_DIR}/obsproc_global.v3.1.2/jobs/JGFS_DUMP
${ROOT_DIR}/obsproc_global.v3.1.2/jobs/JGFS_DUMP_POST

export GETGUESS="YES"
export NEMSIO_IN=.false
export job=${NET}_obsproc_${cyc}
export GESROOT=${ROOT_DIR}/com/gfs
${ROOT_DIR}/obsproc_global.v3.1.2/jobs/JGFS_PREP
${ROOT_DIR}/obsproc_global.v3.1.2/jobs/JGFS_PREP_POST
exit

检查运行结果

[nwpc_ep8@login_a05 nwprod]$ find /g5/nwpc_ep8/obsproc/nwprod/com/gfs -name gfs.t??z.prepbufr -exec ls -la {} \;
-rw-rw-r-- 1 nwpc_ep8 nwpep 1986312 10月 28 09:24 /g5/nwpc_ep8/obsproc/nwprod/com/gfs/prod/gfs.20190601/gfs.t00z.prepbufr
-rw-rw-r-- 1 nwpc_ep8 nwpep 47840008 10月 28 09:58 /g5/nwpc_ep8/obsproc/nwprod/com/gfs/prod/gfs.20190601/gfs.t12z.prepbufr
-rw-rw-r-- 1 nwpc_ep8 nwpep 56930888 10月 28 10:22 /g5/nwpc_ep8/obsproc/nwprod/com/gfs/prod/gfs.20190601/gfs.t18z.prepbufr
-rw-rw-r-- 1 nwpc_ep8 nwpep 37600968 10月 28 09:39 /g5/nwpc_ep8/obsproc/nwprod/com/gfs/prod/gfs.20190601/gfs.t06z.prepbufr
-rw-rw-r-- 1 nwpc_ep8 nwpep 53104576 10月 28 16:00 /g5/nwpc_ep8/obsproc/nwprod/com/gfs/prod/gfs.20190602/gfs.t00z.prepbufr
-rw-rw-r-- 1 nwpc_ep8 nwpep 46818304 10月 28 16:29 /g5/nwpc_ep8/obsproc/nwprod/com/gfs/prod/gfs.20190602/gfs.t12z.prepbufr
-rw-rw-r-- 1 nwpc_ep8 nwpep 59199992 10月 28 16:56 /g5/nwpc_ep8/obsproc/nwprod/com/gfs/prod/gfs.20190602/gfs.t18z.prepbufr
-rw-rw-r-- 1 nwpc_ep8 nwpep 33879280 10月 28 16:12 /g5/nwpc_ep8/obsproc/nwprod/com/gfs/prod/gfs.20190602/gfs.t06z.prepbufr
-rw-rw-r-- 1 nwpc_ep8 nwpep 57441072 10月 28 17:19 /g5/nwpc_ep8/obsproc/nwprod/com/gfs/prod/gfs.20190603/gfs.t00z.prepbufr
-rw-rw-r-- 1 nwpc_ep8 nwpep 38958944 10月 28 17:33 /g5/nwpc_ep8/obsproc/nwprod/com/gfs/prod/gfs.20190603/gfs.t06z.prepbufr
...
...

观测资料的分布

利用 MET 的绘图功能,可以绘制各种观测的分布, 例如:

探空观测的分布(2019060112 +/- 3.0 hour)

探空观测的分布 58113 observations at 1289 locations(2019060112 +/- 3.0 hour)

地面观测的分布 225196 observations at 126022 locations(2019060112 +/- 3.0 hour)

地面观测的分布(2019060112 +/- 3.0 hour)

飞机观测的分布(2019060112 +/- 3.0 hour)

飞机观测的分布 690803observations at 280999 locations(2019060112 +/- 3.0 hour)

卫星风观测的分布(2019060112 +/- 3.0 hour)

卫星风观测的分布 411301 observations at 138783 locations(2019060112 +/- 3.0 hour)